We sent eight enquiries through a test quote form and counted each one five ways. Our server stored 4 leads. A tag on the Send button counted 7. A tag on the form’s submit event counted 7. A tag on the thank-you page counted 5. An event that waited for the server to confirm the lead counted 3. It did not count one visitor, who had declined cookies, as a consent-aware event should. That enquiry reached us anyway.
If your primary conversion is a button click or a thank-you page view, your bidding is learning from a number that includes failed attempts and repeats.
What your ad budget learns from
An ad platform has no idea what a lead is worth to you. It learns from whatever you tell it is a conversion. Google Ads lets you count a click as one; its help page on click conversions says the setting “tells Google Ads to record a conversion only when a customer clicks on the link or button.”[1]
Which conversions steer the spend is a separate setting. Primary actions are the ones “reported in the ‘Conversions’ column in your reports and used for bidding”, provided their goal is set for bidding. For Google’s automated bidding, the help page warns that “Misconfiguring these settings can prevent Smart Bidding from optimizing effectively”.[2] If the primary action is a click on Send, automated bidding goes looking for more people who click Send. Some of them become customers. Some of them leave an email field empty and give up.
Four ways a lead gets miscounted
1. A failed attempt counts as a lead
A click on Send is an attempt. So is a submit event. Google Tag Manager’s form trigger has a Check Validation option, and its help page is plain about what happens without it: “If unselected, the trigger will fire whenever a user attempts to submit the form.”[3] Even with it on, the browser can only check the form itself. It cannot know whether your server stored the enquiry. GA4’s automatic form tracking has the same limit: it records form_submit “when the user submits a form”.[4]
2. One lead counts twice
People double-click buttons and reload pages. A thank-you page tag counts every view, so a visitor who refreshes it, or comes back to it from their history, adds a conversion each time. Google Ads counts conversions one of two ways, One or Every. Its own advice points the same way: for leads, “usually only one, unique lead per ad click likely adds value for your business”. That is the One setting.[5]
3. The browser never sees it
Google’s EU user consent policy sets consent and disclosure duties for anyone whose Google agreement or Google product incorporates it, covering “end users in the European Economic Area, the UK and Switzerland”.[6] When a visitor declines, the tags that wait for consent do not fire, and the lead exists only in your inbox or CRM. Google can model some of the missing conversions when an account meets its eligibility conditions, which include a click threshold: “You have a daily ad click threshold of 700 ad clicks over a 7 day period, per country and domain grouping.”[7] A small account can sit below it. Google also says that “Consented users are typically 2-5x more likely to convert than unconsented users”, and adds that this varies widely.[7]
Browsers trim what tags can see as well. When Safari’s tracking prevention detects click IDs added to a link, it “caps the expiry of cookies created in JavaScript on the landing webpage to 24 hours.”[8] A visitor who reads your page on Monday and sends the form on Wednesday may arrive as a stranger.
4. It counts on a different day
Your CRM files a lead on the day it arrived. “Google Ads reports conversions from the date and time of the click that led to the successful action”.[9] A click on 28 March that becomes an enquiry on 2 April is, by default, a March conversion in Google Ads and an April lead in your CRM. Conversions are counted inside a window after the click, and “the default window is 30 days.”[10] Monthly totals from the two systems can differ even when both are right.
What our test form counted
To see these effects side by side, our engineers built a sample quote form with name, email and message fields and a hidden field that only bots fill in. A server stores each enquiry once. Four browser rules, each waiting for the visitor’s consent as a consent-aware tag does, watched the attempts: a tag on the Send button, a tag on the form’s submit event, a tag on the thank-you page, and an event that fires once per lead ID after the server confirms it. On 10 November 2026 we scripted eight enquiries through it in headless Chrome, a browser driven by code.
| Enquiry | Send button clicked | Form submitted | Thank-you page viewed | Server confirmed | Lead in your records |
|---|---|---|---|---|---|
| Valid enquiry | 1 | 1 | 1 | 1 | 1 |
| Required field left empty | 1 | 0 | 0 | 0 | 0 |
| Message too short | 1 | 1 | 0 | 0 | 0 |
| Double click on Send | 2 | 2 | 1 | 1 | 1 |
| Server error | 1 | 1 | 0 | 0 | 0 |
| Thank-you page reloaded twice | 1 | 1 | 3 | 1 | 1 |
| Cookies declined | 0 | 0 | 0 | 0 | 1 |
| Bot fills the hidden field | 0 | 1 | 0 | 0 | 0 |
| Total | 7 | 7 | 5 | 3 | 4 |
The button tag counted three enquiries that never became leads: an empty email field, a message too short for the form’s own check, and a server error. It counted the double click twice. It missed the visitor who declined cookies. The submit tag skipped the empty field but still counted the short message, the server error, the bot and both clicks of the double click. The thank-you page tag counted one reloaded page as three leads. The confirmed event matched the stored leads in every case the browser could see.
- Send button clickedA tag on the button's click0
- Form submittedA tag on the form's submit event0
- Thank-you page viewedA tag on the thank-you page0
- Server confirmedAn event fired once per lead ID, after the server said yes0
- Lead in your recordsWhat the server stored0baseline
Pick an enquiry to send it through the form.
A 30-minute audit
Run the first pass yourself. You need your ad account and your inbox.
- List your primary conversions. In Google Ads, open the conversion actions and note each primary action and what triggers it: a click, a page view, a form event or an import.
- Send a broken enquiry. Leave the email field empty and press Send. If a conversion appears, your tag counts attempts.
- Send a good one, then misbehave. Double-click Send, then reload the thank-you page twice. Count the conversions that appear for one lead.
- Check the counting setting. Lead actions should usually count One per click.
- Compare 30 days. Put the ad platform’s lead count next to the leads in your CRM or inbox for the same period, and expect some gap from dates and consent. Its size depends on how many visitors decline cookies. A gap of several times is a sign the tracking needs a closer look.
Count the lead when the server says yes
Report a lead at the moment your server has stored it. Only the server knows it exists. GA4’s recommended event for this is generate_lead, which “measures when a lead has been generated (for example, through a form).”[11] Fire it after a successful response, once per lead, with the lead’s ID attached.
// Browser: send the enquiry, and report a lead only after the server has stored it.
form.addEventListener("submit", async (event) => {
event.preventDefault();
const res = await fetch("/api/enquiry", { method: "POST", body: new FormData(form) });
if (!res.ok) return showError(); // nothing stored, nothing counted
const { leadId } = await res.json(); // a random ID your CRM also keeps, not a record number
// Your tag manager fires ad tags on this event only when the visitor's consent allows it.
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "generate_lead",
lead_id: leadId, // reuse as the Meta and LinkedIn event ID
});
location.assign("/thanks");
});
// Server: store the enquiry once, even if the button was pressed twice.
// The form carries a one-time key; the same key returns the same lead.
async function saveEnquiry(fields, key, clickIds) {
const existing = await db.leads.findByKey(key);
if (existing) return existing.id;
// Keep the click ID only where consent and your privacy notice allow it.
return db.leads.insert({ ...fields, key, gclid: clickIds.gclid, status: "new" });
}The ID matters once you send the same lead from the browser and from your server, which is how Meta’s and LinkedIn’s server-to-server conversion APIs work. Meta drops a repeat when the events share an ID and name “sent to the same Pixel ID within 48 hours”.[12] LinkedIn, given the same eventId from both, says “we discard the Conversions API event and count only the Insight Tag event”.[13]
Teach the platform what a good lead is
Counting leads correctly removes one source of noise from what the budget learns. Telling the platform which leads turned into customers lets it learn from your sales. Google has goal types for this, and describes their purpose this way: “Automated systems can optimize for specific, high-value business outcomes rather than just maximizing lead volume.”[14]
- Enhanced conversions for leads use details from your form to connect a later outcome to the ad. Google lists the benefit as “Improves measurement of offline transactions that came from a website lead or visitor.”[15]
- Offline conversion imports send closed or qualified leads back with their click IDs. Google reports that advertisers who added first-party data to their click-ID imports “saw a median 10% increase in conversions compared to those using standard offline conversion imports”. That is Google’s own figure about its own product.[16]
- Conversion adjustments correct the record when a lead turns out to be spam or a duplicate: “Retract: Allows you to permanently remove a conversion and change the conversion value to 0.00”.[17]
The first two send data about a person to the ad platform, so they sit under your consent setup and your privacy notice. Enhanced conversions send details such as an email address or phone number to Google in hashed form.[15] Treat a hashed email as personal data. Send a lead back only when its visitor’s consent and your privacy notice allow it.
When server-side tagging is worth it
Server-side tagging pays off when you run several ad platforms or need to control what leaves your site. For many small and mid-sized accounts, four steps come first: count confirmed leads, set lead actions to One, store click IDs, then send qualified outcomes back.
Server-side tagging moves part of the work from the visitor’s browser to a server you control. You decide what is sent and can strip fields before they leave. Moving a call to the server does not change what the visitor agreed to. For Google’s own tags, Google’s documentation says: “Because of this architecture, you only need to set up consent mode in the web container.”[18] Tags and API calls for other platforms, including Meta and LinkedIn, follow the visitor’s choice only if you build that check in. Store the consent state with the enquiry, and send nothing the visitor’s choice does not allow.
On our bench, the declined-cookies enquiry was stored like any other lead. Passing it to an ad platform is a separate step, and depends on the consent the visitor gave and your privacy notice. Settle that before you build the upload.
What the bench shows
The bench is one sample form, scripted in headless Chrome on 10 November 2026. Its four counting rules model the documented behaviour of common setups. The counts show how each rule behaves in each case. How often those cases occur on your site depends on your visitors, your form and your consent banner. The 30-minute audit measures that.
Verne’s growth engineers can run this audit with you inside your own stack, then wire the confirmed-lead event into your form and CRM. The code and documentation are handed over at full delivery. Fix the counting first, then decide what to spend.
Frequently asked questions
Why does Google Ads show more leads than my CRM?
Three causes are common. The conversion fires on a click or a page view instead of a confirmed lead. The counting setting records every conversion per click instead of one. And the dates differ: Google Ads reports a conversion, by default, on the date of the ad click, while a CRM records the date the lead arrived.
Should lead conversions count one or every?
One, for most lead forms. Google's guidance is that for leads, usually only one unique lead per ad click likely adds value. Every suits purchases, where each sale has value.
What event should I use for a lead form?
An event that fires once, after your server has accepted and stored the enquiry, carrying the lead's ID. GA4's recommended event for this is generate_lead.
Does server-side tagging recover conversions lost to cookie consent?
No. Google's documentation says that with server-side tagging, consent mode is set up in the web container, so a visitor's consent choice still applies to Google's tags. Tags and server calls for other platforms need the same check built in.
Sources
- Track clicks on your website as conversions (opens in a new tab) A link or button click can be recorded as a conversion.
- About primary and secondary conversion actions (opens in a new tab) Primary actions are reported as conversions and used for bidding.
- Form submission trigger (opens in a new tab) Check Validation and when the trigger fires.
- Enhanced measurement events (opens in a new tab) form_submit fires when the user submits a form.
- About conversion counting options (opens in a new tab) One per click for leads.
- EU user consent policy (opens in a new tab) Covers the EEA, the UK and Switzerland.
- About consent mode modeling (opens in a new tab) Eligibility threshold and Google's consented-user figure.
- Tracking Prevention in WebKit (opens in a new tab) Cookie caps after link decoration.
- Create conversions from Google Analytics events in Google Ads (opens in a new tab) Why Ads and Analytics dates differ.
- About conversion windows (opens in a new tab) Default click-through window.
- Recommended events: generate_lead (opens in a new tab) The recommended lead event.
- Deduplicate Pixel and server events (opens in a new tab) Event ID and name, 48 hours.
- Conversions API deduplication (opens in a new tab) Same eventId keeps the Insight Tag event.
- About qualified leads and converted leads (opens in a new tab) Lead goals beyond volume.
- About enhanced conversions for leads (opens in a new tab) Offline outcomes from website leads.
- About offline conversion imports (opens in a new tab) Google's median 10% figure, Google's own.
- About conversion adjustments (opens in a new tab) Retracting a conversion.
- Consent mode in server-side tagging (opens in a new tab) Consent is set in the web container.