GA4 source-of-truth reconciliation
GA4 is not a source of truth and was never meant to be — it's a measurement system with its own attribution, its own modelling and its own sampling behaviour. Reconciling it means comparing it against the system that actually holds the records, per record, over a fully closed window. Some of the gap is expected and should be named rather than fixed; the rest is a fault. Keeping those two categories separate is the entire discipline.
Free30 minutesNo obligation
GA4 reconciliation · what breaks
Where teams get this wrong — GA4 reconciliation
- 01
Treating GA4 as the source of truth
It's a claim about your business, not the record of it.
- 02
Expecting a zero gap
Consent denial, blockers and modelling all produce legitimate differences.
- 03
Comparing totals
Equal and opposite errors cancel and a broken setup looks perfect.
GA4 reconciliation · the fix
What a correct implementation looks like — GA4 reconciliation
Matched per record on transaction_id
Not compared as sums.
A fully closed window
Partial periods produce timing differences that look like faults.
The gap split into named categories
Expected versus fault.
A documented, re-runnable procedure
Owned by your team.
GA4 reconciliation · architecture
What causes the gap — GA4 reconciliation
Five contributors. Only two of them are faults, and treating all five as problems leads to fixes that make things worse.
- 1
Consent denial
Denied visitors aren't measured. Correct behaviour, and it scales with your denial rate.
- 2
Ad and script blockers
A share of visitors never load GA4 at all. Expected, not a fault.
- 3
Modelling
GA4 estimates some conversions. Useful, and not the same as counted — know which is which.
- 4
Missing or malformed events
A genuine fault. transaction_id absent, purchase not firing on some payment methods.
- 5
Duplication
A genuine fault. A refreshed confirmation page counting twice.
- 6
Non-comparable records
POS orders, test transactions, imported records. They belong in your total and not in the comparison.
GA4 reconciliation · diagnose
Common mistakes and how to validate each — GA4 reconciliation
Ordered by how often we find them. Each one has a specific check rather than a general instruction to be careful.
- 01
Totals compared instead of records
Match on transaction_id and count the mismatches. The number is usually a surprise.
- 02
Partial window
Re-run on a fully closed period. Some of the gap disappears.
- 03
Non-web orders included
Filter them out. They're real revenue and they were never going to appear in GA4.
- 04
Everything treated as a fault
Split the gap. Consent denial isn't fixable and shouldn't be on a remediation list.
- 05
Nobody can re-run it
Document it. Reconciliation that depends on one person isn't reconciliation.
GA4 reconciliation · prove
How to prove your implementation is right — GA4 reconciliation
Against your own records and a live payload, not against a preview screen.
Source of truth
your store's or CRM's own records, matched on transaction_id
- Records matched on transaction_id over a fully closed window.
- Duplicates and missing records counted separately.
- The residual gap split into named categories.
- The procedure documented and re-run by your own team.
- Checked on a live conversion, not in preview mode.
- Reconciled over a fully closed window, matched per record.
- Re-checked 30 days later.
GA4 reconciliation · free audit
What we check in the free audit
- Totals compared instead of records
- Partial window
- Non-web orders included
- Everything treated as a fault
- Nobody can re-run it
Checked against
your store's or CRM's own records, matched on transaction_id
Free30 minutesNo obligation
GA4 reconciliation · when not to buy
What this reference deliberately leaves out — GA4 reconciliation
Stated openly, because a reference that's silent about its own gaps is the dangerous kind.
- There's no universal acceptable gap. It depends on your consent rate, traffic mix and blocker exposure.
- GA4's modelling methodology isn't fully documented and can't be reproduced independently.
- Sampling behaviour in large properties has its own effects on exported data, which are documented by Google.
- Vendor documentation is the authority, not this page. Where the two disagree, the vendor is right and we'd like to know so we can correct it.
- Parameter names and behaviour change. Anything here is accurate as we last verified it; verify against the current documentation before you rely on it for a build.
GA4 reconciliation · what we deliver
The checklist — GA4 reconciliation
Export your own records with IDs and values
For a fully closed period.
Export GA4 purchases for the same window
With transaction_id.
Match on transaction_id
Count records present in one and not the other.
Categorise the residual
Consent denial, blockers, modelling, duplication, genuine loss.
Document it so someone else can repeat it
Monthly, without you.
Pricing
Pick the package that fits your ad spend
Browser-side starter
$400One-time fee · lifetime ownership
Repairs and verifies your existing browser-side setup against this reference, on a live conversion.
- Implementation checked against the spec
- Verified on a live conversion
- Reconciled against your own records
- Written handover
1st-party server-side
Recommended$800One-time fee · most popular
Money events sent from your own records through a first-party container on your subdomain, built to this specification.
- 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, documented to this standard.
- 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 so the next break surfaces in days
FAQ
GA4 reconciliation questions, answered
No. Consent denial, blockers and modelling all produce legitimate differences. The goal is a gap you can explain and that stays stable.
There's no universal figure — it depends on your consent rate and traffic mix. Explainable and stable matters more than small.
Because totals hide equal and opposite errors. Ten missing and ten duplicated produce a perfect total and a broken setup.
Monthly if you can, and always after a site release. Most breaks we find date to a deploy.
Free · 30 min
Reconcile GA4 against the records that matter
Free30 minutesNo obligation
