Validate your GA4 ecommerce payload
Paste a real purchase event and this checks the fields whose absence causes a specific known failure: transaction_id, without which a refreshed confirmation page counts twice; currency, without which GA4 silently assumes your property default and mixes amounts; a numeric value; and an items array whose totals roughly agree with the event value. It parses leniently, so you can paste straight from a browser console.
Free30 minutesNo obligation
Validate a GA4 ecommerce payload
Paste a real purchase event and this checks it against what GA4 actually needs: transaction_id for deduplication, currency so multi-currency revenue isn't silently mixed, a numeric value, and an items array whose totals roughly agree with it.
Paste a payload and press Check. Everything happens in your browser. Nothing is sent anywhere.
GA4 validator · what breaks
What this tool is for — GA4 validator
- 01
Your GA4 revenue doesn't match your store
And you want to know whether the payload is the reason.
- 02
You've just implemented ecommerce tracking
And want it checked before you trust it.
- 03
A refresh seems to double-count
Which is nearly always a missing transaction_id.
GA4 validator · the fix
What you get out of it — GA4 validator
Field-by-field findings
Ordered problems first, then warnings, then what's fine.
The specific consequence of each gap
Not a generic 'recommended' label.
An item-total sanity check
Comparing the items array against the event value.
GA4 validator · architecture
Why the purchase payload is the one to check first — GA4 validator
Every other ecommerce event exists to give context to this one. If purchase is wrong, nothing above it matters.
- 1
A missing transaction_id makes refreshes count
The confirmation page is a normal URL. Refreshable, bookmarkable, shareable — and without an ID, each visit is a new purchase.
- 2
Currency defaults silently
GA4 falls back to the property default. Totals still look plausible, which is why multi-currency stores can carry this for years.
- 3
A string value is a type inconsistency waiting to happen
It usually works, and it's how one page type ends up sending numbers and another strings.
- 4
Item totals reveal convention drift
A gap between items and value is often legitimate. It's a problem when begin_checkout and purchase disagree about which convention they follow.
GA4 validator · diagnose
What this tool cannot tell you — GA4 validator
Stated up front, because a tool that implies more confidence than it has is worse than no tool. These are checks you have to run yourself.
- 01
Whether transaction_id matches your store's order ID
It can see the field is present. It can't see your store, and a generated ID that isn't the order number is a real and invisible fault.
- 02
Whether the event fires at all on some payment methods
Wallet payments that skip the confirmation page send nothing, and nothing is exactly what this tool can't inspect.
- 03
Whether a second system is also sending purchase
Duplication across integrations is invisible from one payload.
- 04
Whether the values are the right values
It checks shape, not truth.
GA4 validator · prove
How to confirm the result — GA4 validator
Against your own records, not against the tool's output.
Source of truth
your store's order records, matched on transaction_id
- A live purchase payload captured and read field by field.
- transaction_id confirmed matching the store's order ID.
- A test order placed in a second currency.
- A wallet payment tested specifically.
- Reconciled over a fully closed window, matched per record rather than on totals.
- Re-checked after your next site release, which is when most breaks happen.
GA4 validator · free audit
What we check in the free audit
- Whether transaction_id matches your store's order ID
- Whether the event fires at all on some payment methods
- Whether a second system is also sending purchase
- Whether the values are the right values
Checked against
your store's order records, matched on transaction_id
Free30 minutesNo obligation
GA4 validator · when not to buy
Why this isn't gated — GA4 validator
There's no email form in front of it, and that's deliberate.
- A tool you have to pay for with your contact details is a lead form wearing a costume. If this is useful, it should be useful without a transaction.
- Everything it does runs in your browser. There is no endpoint, so there is nothing for us to collect even if we wanted to — open your network tab and check.
- It will tell you when you don't have a problem. That outcome costs us a sale and happens regularly, which is the point of publishing it rather than putting it behind a call.
- If it does find something and you'd rather fix it yourself, the reference pages on this site cover the how. Hiring us is one option, not the conclusion.
GA4 validator · what we deliver
What it checks — GA4 validator
transaction_id
Present, and flagged hard when absent — it's what GA4 deduplicates on.
value and currency
Numeric value, ISO 4217 currency, and a warning when value arrives as a string.
Event name casing
GA4's recommended events are lowercase; a differently-cased name is a different event and loses the standard reports.
The items array
item_id and item_name present, and whether item totals roughly match the event value.
Pricing
Pick the package that fits your ad spend
Browser-side starter
$400One-time fee · lifetime ownership
If the tool found something and you'd rather not fix it yourself: we repair the root cause in your existing setup and verify it on a live conversion.
- Root cause fixed, not worked around
- Verified on a live conversion
- Reconciled against your own records
- Written handover
1st-party server-side
Recommended$800One-time fee · most popular
Removes the class of failure rather than the instance. Money events from your own records through a first-party container on your subdomain.
- First-party server container on your own subdomain
- Events from your records, not the browser
- Deduplicated on a shared event ID at every destination
- First-party cookies beyond Safari's 7-day cap
- 95%+ accuracy and 8+ Meta EMQ, guaranteed in writing
Full 1st-party stack
$1,800One-time fee · lifetime ownership
Every paid channel server-side plus the offline loop, with monitoring so the next break surfaces in days rather than at quarter end.
- Everything in 1st-party server-side
- Pinterest, Snapchat, Reddit and LinkedIn CAPI
- CRM and offline conversion loop
- Refunds and cancellations corrected wherever each platform allows it
- Monitoring on every destination
FAQ
GA4 validator questions, answered
Yes. It also tolerates single quotes and unquoted keys, so you can paste straight out of a browser console.
No. Everything runs in your browser and there is no endpoint. Open your network tab while you use it and you'll see nothing leave.
Because a large gap between the items array and the event value is worth confirming as deliberate — tax, shipping and discounts all cause it legitimately.
Then the payload's shape is right. Next, confirm transaction_id matches your order ID and test a wallet payment — neither is visible from a payload.
Free · 30 min
Get the whole funnel checked, not one payload
Free30 minutesNo obligation
