Contents
In short. Before launch, write down which actions count as a lead (a submitted form, a call, a chat message, a payment) and run a test lead for each while watching GA4 DebugView, Tag Assistant and Meta Test Events. A conversion is accepted when one real submission fires it exactly once, an invalid form and a reloaded thank-you page fire nothing, it reaches the ad account under the right action, and the CRM record carries a click or visitor ID. Until then, bidding learns from an unverified signal and the cost-per-lead report is not fit for decisions.
Decide what a lead is before anyone configures tags
If the conversion counts the wrong action, the campaign will look for people who perform that wrong action.
A conversion (GA4 calls it a key event) is a visitor action the business treats as a result, and ad platforms train automated bidding on it. If the conversion counts the wrong action, the campaign will look for people who perform that wrong action. So the owner and the sales team first agree on what a lead is.
A primary action means the person handed over contact details or money: the server accepted the form, the call connected, the chat message arrived, the payment cleared. A supporting action shows interest: started the form, tapped the number, opened a chat link. A purchase event must carry value and currency, which the Meta Pixel reference marks as required for Purchase.
Scroll right to see all columns
| Action | What counts as a lead | Supporting event | Where it is confirmed |
|---|---|---|---|
| Website form | The server accepted the lead and showed a confirmation | Form start, button click | CRM record or lead inbox |
| Phone call | A connected call from the number in the ad or on the site | Tap on the number | Call log or call tracking |
| Chat app | The first message arrived in the business chat | Tap on the chat link | Chat inbox or connected CRM |
| Payment | A confirmed payment with amount and currency | Start of checkout | Payment provider or billing |
Acceptance runs in order: each step rests on the one before
There is no point checking the Google Ads import while the event is missing from GA4 debugging, or the CRM before you know which IDs the form should pass.
- Write the conversion list: event, condition, primary or supporting, destinations.
- Confirm the tag loads on every page, including the thank-you page, with the same IDs.
- Run test leads on desktop and mobile, with consent accepted and declined, then negative tests.
- Confirm delivery to Google Ads and Meta.
- Follow the ad link to the final page: UTM values and click IDs are intact.
- Find the test lead in the CRM with source, IDs and a test label.
- Set the bidding conversion and counting method, sign off and book a post-launch review.
The test lead: one real submission, one hit, nothing else
A test lead is a real submission, call or message. Watch it in debugging tools: standard reports lag and mix your test with other visitors.
GA4. DebugView shows events from a device in debug mode, enabled through Tag Assistant or the debug_mode parameter. The middle column shows the last 60 seconds; the key event should appear once, with the expected parameters. A developer traffic filter can exclude debug-mode activity, but filters apply only from the day they are created.
Tag Assistant. Google Tag Manager preview mode shows which tags fired and why; regular visitors do not see it. Here you catch a button-click tag that fires even when validation rejected the form. If you also advertise in Yandex Direct, use the Yandex Metrica debugger, enabled with _ym_debug=2 in the page address.
For planning only: four actions, two devices and two consent states give 16 positive test runs, plus negative tests per form. A memory aid, not a standard.
- Submit an empty form.
- Submit a form with an invalid phone number.
- Reload the thank-you page and return to it with the back button.
- Confirm the primary conversion fired in none of these cases.
In every ad account, one lead means one primary conversion
Google Ads. To import a GA4 event, mark it as a key event; you need at least the Marketer role in Analytics, admin access to Google Ads and linked accounts. Data can take up to 24 hours to appear, and history before the import is not included. Actions created from Analytics are secondary by default, so for bidding you change their setting in Google Ads.
Google recommends the One counting option for leads and Every for purchases; in GA4, once per event is the recommended method. Record your choices.
Meta. Website leads use standard events: Lead, Contact, Schedule and Purchase. Check Conversions API events in Test Events with a test_event_code you later remove; they show within 20 minutes. Meta merges pixel and server copies with matching event name and event_id that arrive within 48 hours, and the Event Deduplication tab shows the share merged.
Where duplicates and spam come from
A duplicate is one action counted more than once: a reloaded thank-you page, hard-coded tags plus the same tag in Google Tag Manager, pixel and Conversions API without a shared event_id, a click trigger firing on a form error.
Spam means bots, accidental sends and staff tests. Field validation and bot protection help on the form; in the CRM, test and spam leads get a status instead of being deleted. Reconciling counts between systems has its own article here.
Duplicates make leads cheaper only on paper
The report looks 37.5% cheaper than reality
Worked example, all numbers illustrative. Monthly budget $15,000, 50 real leads, cost per lead $300. The conversion fires on every thank-you page view, 30 people reload it, and the ad account reports 80 conversions at $187.50.
The report looks 37.5% cheaper than reality, and bidding rewards impressions after which people merely refreshed a page. Only a comparison with unique CRM leads reveals it.
Cookie consent: test both answers
Google consent mode passes four settings to tags: ad_storage, analytics_storage, ad_user_data and ad_personalization. In basic mode, tags wait for the banner answer. In advanced mode, they load with consent denied by default and send cookieless measurements that Google uses to model the gaps.
The check below follows Google's consent debugging guide; with regional defaults, also simulate locations. Failure: ad tags fire before the answer against your policy, or values never update. The site owner is responsible for obtaining consent; what the law requires is a question for your lawyer.
- Open the site through Tag Assistant.
- In the Consent tab, check default values in the earliest consent event.
- Accept the banner: all four values update, tags fire or are blocked as chosen.
- Repeat with the banner declined.
UTM parameters and click IDs must reach the final page
UTM parameters tell analytics the source, medium and campaign. GA4 help says to always use utm_source, utm_medium and utm_campaign; missing values show up as (not set).
Google Ads auto-tagging appends GCLID, which Google calls required for conversion tracking and enables by default for new accounts. It must survive redirects, or the conversion cannot be tied to the click. Click your ad or its preview, follow every redirect and read the final address. If anything is missing, fix the redirect before launch.
Without an ID in the CRM, a deal never finds its way back to the ad
If an ID is not stored at the moment of the lead, you cannot recover it later.
Analytics does not know whether the person became a customer. To send closed deals back to ad platforms later (offline conversions), the form must write IDs into the lead record now. Google Ads help says to save the GCLID with the lead information; enhanced conversions for leads add hashed contact data such as email.
Meta accepts server events up to 7 days old, rejects the whole request if any event is older, and recommends sending within an hour. If an ID is not stored at the moment of the lead, you cannot recover it later.
What to sign before launch
Hand the table to your implementer as an acceptance brief, with evidence for each row. The sign-off document lists conversions and counting methods, the primary conversion per campaign, account links, the UTM dictionary, CRM fields, test and spam labels, test results and who owns site changes. Any form change after acceptance means a new test lead.
Limits. A test proves tracking only in the combinations you tried; ad blockers and declined cookies always leave some leads without a source. The publisher of this journal is affiliated with WEBNOSTRA, which sells analytics setup services; the routine can be run in-house or with any provider.
Scroll right to see all columns
| What to check | How | Sign of an error |
|---|---|---|
| Tag on every page | Tag Assistant on the form and thank-you pages | Missing on some pages or a different ID |
| Form conversion | Test lead, GA4 DebugView | Missing or arriving twice |
| False fires | Empty form, invalid phone, reloaded page | Fires without a real lead |
| Calls and chat | Test call and message | Only taps are counted |
| Google Ads import | Action status a day after the test | Two primary conversions, or no data |
| Meta Pixel and Conversions API | Test Events, Event Deduplication | Two events without a shared event_id |
| Cookie consent | Consent tab, accept and decline | Tags ignore the choice |
| UTM and click IDs | Follow the ad link to the final page | Dropped by a redirect |
| CRM | The test lead record | No source, UTM values or IDs |
Key decisions
- decide what counts as a lead before anyone configures tags, and keep the primary action for bidding separate from supporting signals
- accept each conversion only after a test lead: one real submission gives one hit, a form error or a reloaded thank-you page gives none
- release budget only once the test lead is visible in analytics, in the ad account and in the CRM with a click or visitor ID
What to discuss with your team
- The conversion list is approved: condition, primary or supporting role, destinations
- Every primary conversion passed a test lead and negative tests on desktop and mobile
- Each ad account has one primary conversion per real action, with the counting method recorded
- The site follows your consent policy whether the banner is accepted or declined
- UTM values and click IDs reach the final page and the CRM record
- The acceptance document is signed, and any form change triggers a new test
Terms in plain language
- Conversion, key event
- A visitor action the business treats as a result; GA4 calls it a key event, ad platforms call it a conversion
- Test lead
- A real form submission, call or message made for verification, watched in debugging tools and marked as a test in the CRM
- Deduplication
- Merging two records of one action, such as a pixel event and a Conversions API event with the same event_id
- GCLID
- The Google Click Identifier added to landing-page URLs by Google Ads auto-tagging; it ties a CRM deal back to the ad click
- Consent mode
- A Google tag setting that changes tag behavior depending on the visitor's answer to the cookie banner
Sources
- Google Analytics: Monitor events in DebugViewsupport.google.com · checked 31/10/2026
- Google Analytics: About key eventssupport.google.com · checked 31/10/2026
- Google Analytics: Change the counting method of key eventssupport.google.com · checked 31/10/2026
- Google Analytics: Data filterssupport.google.com · checked 31/10/2026
- Google Analytics: URL builders and UTM parameterssupport.google.com · checked 31/10/2026
- Google Tag Manager: Preview and debug containerssupport.google.com · checked 31/10/2026
- Google Tag Platform: Consent mode overview (last updated 2026-07-30)developers.google.com · checked 31/10/2026
- Google Tag Platform: Debug consent mode with Tag Assistant (last updated 2026-10-13)developers.google.com · checked 31/10/2026
- Google Ads: Create conversions from Google Analytics eventssupport.google.com · checked 31/10/2026
- Google Ads: About conversion counting optionssupport.google.com · checked 31/10/2026
- Google Ads: About auto-taggingsupport.google.com · checked 31/10/2026
- Google Ads: About offline conversion importssupport.google.com · checked 31/10/2026
- Yandex Metrica: Goals (in Russian)yandex.ru · checked 31/10/2026
- Yandex Metrica: Tag debugger (in Russian)yandex.ru · checked 31/10/2026
- Yandex Metrica: Troubleshooting goals (in Russian)yandex.ru · checked 31/10/2026
- Yandex Metrica: Importing offline data (in Russian)yandex.ru · checked 31/10/2026
- Yandex Direct: Using Yandex Metrica (in Russian)yandex.ru · checked 31/10/2026
- Yandex Direct: Troubleshooting low conversions (in Russian)yandex.ru · checked 31/10/2026
- Yandex Direct: UTM tags and dynamic parameters (in Russian)yandex.ru · checked 31/10/2026
- Meta: Conversions API, using the API and Test Eventsdevelopers.facebook.com · checked 31/10/2026
- Meta: Deduplicate Pixel and server eventsdevelopers.facebook.com · checked 31/10/2026
- Meta: Verifying your Conversions API setupdevelopers.facebook.com · checked 31/10/2026
- Meta Pixel: Standard events referencedevelopers.facebook.com · checked 31/10/2026