On an eCom project, we tracked promo codes using a custom parameter promo_code. It felt cleaner than default tags. At first — all good. Purchase events fired, promo codes passed, GA4 showed what was used and when.

Two weeks later, the client asked: “Half the orders have no promo code. Is this a bug — or are people not entering it?”

We investigated — and saw 40% of orders were missing promo code data. Which was weird.

Turns out: GA4 + custom parameters can silently fail. If you don’t follow the chain — register → configure → wait — GA4 just drops the data.

Other pitfalls:

• Parameters over 100 characters get trimmed
• There’s a cap on parameters per event
• Events may fire before GA4 “knows” the parameter
• Seeing it in DebugView ≠ seeing it in reports

No errors. Just blank fields.

Because of this:

• The client couldn’t track partner promo performance
• A working code looked like a failure
• Partners argued over attribution
• Leadership paused the campaign — losing revenue

And all because no one double-checked how the parameter flowed from site to report. It all “looked set up.”

Now I always validate custom parameters before using them:

• Manually test from site to GA4
• Check both DebugView and BigQuery
• Watch for trimming issues
• Track how many sessions have the parameter vs. don’t
• Wait before using new parameters in reports — GA4 needs time to process them

If you think custom parameters are “set and forget” — your data may already be lying.

GA4 won’t warn you. But the business will eventually ask: “Who are all the people we gave those promo codes to?”

Want to get all my top Linkedin content? I regularly upload it to one Notion doc.

Go here to download it for FREE.