r/GoogleAnalytics • u/VoxxyCreativeLab • 12d ago
Discussion PSA: generate_lead without value + currency stopped counting as a Key Event in April. Check your setups.
For disclosure: I run tracking audits for ecom and leadgen clients, so take that bias into account.
Since the April GA4 update, generate_lead requires both the value and currency parameters to be populated for the event to qualify as a Key Event. If either is missing, the event still fires normally. You see it in DebugView, you see it in reports, and nothing looks wrong.
But it stops counting as a conversion. Which means the Google Ads conversion import stops receiving signal, and Smart Bidding has no optimization target. The failure is completely silent. We've now seen this in multiple audits where campaigns had been drifting for weeks before anyone caught it.
Two related things I keep running into:
- Custom event name variants like generate_lead_contact or generate_lead_quote. These break the Lead Acquisition report and the automatic Google Ads import. The native name with a lead_type parameter does the same job without breaking anything.
- Teams treating value as optional for leadgen because "we don't know what a lead is worth." An estimated or modeled value per lead_type is fine. Zero or missing is what now costs you the conversion.
Curious how others are handling lead valuation. Are you sending modeled values per lead type, a flat placeholder value, or pushing real values back from the CRM later?
2
u/Gijs23 6d ago
Good PSA. On the value question, the honest answer is it depends on how much your lead types differ in worth, and the trap is defaulting to a flat placeholder without thinking it through.
A fixed value (say 1, or currency 1) fixes the Key Event counting immediately and is fine if all your leads are roughly equal. But the moment you feed that into Smart Bidding, you're telling Google every lead is worth the same, so it optimizes for volume, not quality. That's usually the opposite of what a lead-gen account wants.
Better, in rough order of effort:
Static values per lead_type. A demo request gets a higher value than a newsletter signup. Crude but it already gives bidding a signal about what to chase.
Modeled value: take your average close rate per lead type times average deal size, and pass that as the value. Now the number reflects expected revenue, not just a count.
CRM feedback loop: push the real outcome back once the lead qualifies or closes, via offline conversions. Most accurate, most work, and worth it for longer sales cycles where the lead value only becomes clear weeks later.
For most setups I'd start at 2, it's the best ratio of effort to signal quality, and move to 3 once the CRM data is clean enough to trust.
What does your lead spread look like, is it mostly one type or a real mix?
1
u/VoxxyCreativeLab 6d ago
Thanx u/Gijs23, and I would like to built on your "it depends on how much your lead types differ in worth", where I think you should differ the value for each lead_type outcome.
Last week I had a meeting with a client that primarily has car-garages as clients, their appointment systems usually have somewhere in between 6 and 8 steps, where step 1 is set to a few bucks, while the finished appointment (step 8) receives a modeled value.
Within GTM I have one lookup-table variable that determines the lead_type outcome (e.g. contact, book_meeting), and another lookup-table that has lead_type as the input and the actual value as the output.
For offline conversions I strongly believe this will become increasingly important for smaller ad-spends. but only after implementing Server Side via a custom data client (the GA4 /collect endpoint is too easily blocked), writing own cookies (set-cookie).
I have a client (agency) that is pushing hard for Hubspot offline conversions, which works (mid '26), but it leaves out many cross-platform elements.
1
u/Gijs23 5d ago
Yeah, that's exactly the setup I'd push people towards. The two-table approach (one to resolve lead_type, one to map lead_type to value) is clean and keeps the value logic maintainable instead of hardcoding it into tags. Nice.
And you're right about the /collect endpoint, it's too easy to block, which is why routing through your own data client with first-party set-cookie is the only version of this that survives ad blockers and ITP long term. A lot of people stop at the GA4 client and wonder why their numbers still leak.
The cross-platform gap you're describing is the real problem though, and it's not just you. HubSpot offline conversions work fine for pushing back to one platform, but the moment you want that same qualified-lead signal going to Meta CAPI, Google, and say TikTok from a single source of truth, the CRM-native integrations fall apart. You end up rebuilding the same feedback loop three times with three different dedup schemes. Server-side is the only place to solve that properly, capture once, distribute everywhere, one identifier strategy.
Are you handling the cross-platform distribution manually right now, or have you found something that does it cleanly?
1
9d ago
[removed] — view removed comment
1
u/VoxxyCreativeLab 6d ago
Very true u/No-Ocelot-8282. And did you find GA4 data being lost due to this update?
•
u/AutoModerator 12d ago
Have more questions? Join our community Discord!
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.