A GA4 property whose numbers you can actually use
GA4 collects almost anything you send it, which is why so many properties are full of data nobody can answer a question with. We build a documented event taxonomy, complete ecommerce payloads with real items arrays, register the dimensions you'll actually filter on, filter internal traffic properly, turn on the BigQuery export before you need it, and reconcile purchases against your store so the property has a known relationship to reality.
Free30 minutesNo obligation
GA4 setup & audit · what breaks
Why most GA4 properties don't get used — GA4 setup & audit
- 01
Ecommerce reports empty despite purchases recording
Almost always a malformed items array, which GA4 discards silently.
- 02
Parameters collected but invisible in reports
Unregistered custom dimensions. Nothing in the interface warns you.
- 03
Internal and staging traffic in the data
Distorting every rate in the property.
- 04
No agreed relationship to your store's numbers
So nobody trusts it enough to make a decision from it.
GA4 setup & audit · the fix
What you get out of it — GA4 setup & audit
Ecommerce reports that populate end to end
From item list impressions through to purchase.
A property that reconciles
Within the small gap consent modelling explains.
Dimensions you can actually filter on
Registered, so the data you collect is data you can use.
Event-level data preserved
BigQuery export on from the start, because it isn't retroactive.
GA4 setup & audit · architecture
Why the numbers were wrong before you got here — GA4 setup & audit
Worth understanding before buying anything, because it decides which tier you need — and for some readers the answer is that you don't need us yet.
- 1
The browser is the weakest link, and it is getting weaker on purpose
Every browser-side tag has to survive the page loading, the visitor staying, the script running and the request leaving. All four are now contested. The order in your database is certain; the browser event reporting it is not.
- 2
Safari caps the cookie your attribution depends on
Intelligent Tracking Prevention limits JavaScript-set cookies to seven days whatever expiry you set, so a customer who takes longer than a week to decide returns as a stranger. A cookie your own server writes in an HTTP response is not capped — the single largest practical difference between browser-side and first-party server-side.
- 3
Ad blockers remove the tag with no error
A blocked pixel does not warn anyone. The customer buys, the order lands, and no platform hears about it. First-party events from your own subdomain are not a third-party request and are not filtered the same way.
- 4
Consent is enforced by hope, not by architecture
Client-side consent means trusting each vendor script to honour a flag. A server container decides at the container: a denied destination receives nothing. That is a materially stronger position, and it also stops the over-blocking that discards data no law required losing.
- 5
Checkout can end where your tag isn't
Wallets and hosted payment pages can be abandoned after the money moves. Sending the purchase from the order record means it arrives whether or not anyone came back.
GA4 setup & audit · diagnose
How we scope the ga4 build — GA4 setup & audit
Before quoting. Each step narrows what the work actually is, so the price reflects your account rather than an average.
- 01
Check for duplicate purchase events
GA4 deduplicates on transaction_id within a limited window; without it a refresh counts twice.
- 02
Expand the items array on a live purchase
Missing or malformed items is the top cause of empty ecommerce reports.
- 03
Check which parameters are registered
Collected but unregistered is invisible, and nothing flags it.
- 04
Look for unfiltered internal traffic
It distorts every rate.
- 05
Verify referral exclusions
Payment providers otherwise take credit for the sale.
- 06
Reconcile purchases against the backend
One closed week, matched on transaction_id.
GA4 setup & audit · prove
How the work gets proven — GA4 setup & audit
A dashboard turning green proves a dashboard turned green. These are what we hand over instead.
Source of truth
Your store order records
- purchase count within a small percentage of backend orders for a closed week, matched on transaction_id.
- No transaction_id appearing more than once.
- Ecommerce reports populated from item list through to purchase.
- Every parameter used in a report registered as a custom dimension.
- Internal traffic filter confirmed active, not merely created.
- BigQuery export receiving daily tables.
- Reconciled over a fully closed window, matched on ID rather than on totals — totals hide equal and opposite errors.
- Payload evidence captured from real transactions, saved to your own records.
- The same reconciliation repeated 30 days later, because a setup that works once and drifts is the harder failure.
GA4 setup & audit · free audit
What we check in the free audit
- Check for duplicate purchase events
- Expand the items array on a live purchase
- Check which parameters are registered
- Look for unfiltered internal traffic
- Verify referral exclusions
- Reconcile purchases against the backend
Checked against
Your store order records
Free30 minutesNo obligation
GA4 setup & audit · when not to buy
When you shouldn't buy this — GA4 setup & audit
We would rather say it now than three weeks into an engagement.
- Your GA4 already reconciles and the ecommerce reports are populated. Verify it, then leave it alone.
- You make every decision inside the ad platforms and nobody opens GA4. Decide whether you'll use it before rebuilding it.
- You only need conversion tracking for ads. GA4 is not required for Google Ads conversions.
- You're on a different analytics stack that already answers your questions. Running two properly is more work than running one well.
GA4 setup & audit · what we deliver
What's included in the ga4 build — GA4 setup & audit
Documented event taxonomy
Recommended names where they exist, so built-in reports work; custom only where nothing standard fits.
Complete ecommerce payloads
items arrays with id, name, price, quantity and currency, in the shape GA4 requires.
Custom dimensions registered
For every parameter you intend to filter or segment on.
Internal traffic filtered
Staff, staging and test orders excluded before they reach reports.
Google Ads and BigQuery links
Conversion import and free event-level export, enabled early.
Consent Mode wired to one source
The same consent decision feeding every tag, not a separate implementation per tool.
Written guarantee
95%+ tracking accuracy
Measured against Your store order records. Miss it and we keep working at no cost.
Pricing
Pick the package that fits your ad spend
Browser-side starter
$400One-time fee · lifetime ownership
The correct browser-side build, done properly and verified on a live transaction. Honest about its ceiling: it will not survive Safari's cookie cap, an ad blocker, or a checkout that ends somewhere your tag isn't. If you spend $1K+/month on paid media, start one tier up.
- Correct events, correct parameters, correct values
- Verified on a live transaction, not in preview
- Reconciled against your own order records
- Written handover you keep
1st-party server-side
Recommended$800One-time fee · most popular
The tier that changes the outcome rather than patching it. Your money events stop depending on the browser: they are sent from your order records through a first-party server container on your own subdomain, so iOS, ad blockers, consent banners and interrupted payment redirects can no longer take them away. Built in 2–4 days. You own the stack outright, with no monthly SaaS.
- First-party server container on your own subdomain
- Money events sent from your order records, not the browser
- Meta, Google, TikTok, Microsoft and LinkedIn all fed server-side
- Deduplicated on a shared event ID, verified at every destination
- First-party cookies beyond Safari's 7-day cap on JavaScript-set cookies
- 95%+ conversion accuracy and 8+ Meta EMQ, guaranteed in writing
Full 1st-party stack
$1,800One-time fee · lifetime ownership
Every paid-media channel server-side, plus the offline loop that connects closed revenue back to the click. For advertisers whose spend makes an attribution leak more expensive than the build.
- Everything in 1st-party server-side
- Pinterest, Snapchat, Reddit and LinkedIn CAPI
- CRM and offline conversion loop, so closed revenue reaches bidding
- Refunds and cancellations reversed at every destination
- Klaviyo identity stitching, BigQuery and Looker Studio
- Monitoring, so the next break surfaces in days rather than a quarter
FAQ
GA4 setup & audit questions, answered
No. Expect GA4 slightly under, from consent denial and blockers. A small stable gap is correct; a large or growing one is a fault.
Usually a malformed items array. GA4 accepts the event and discards the ecommerce payload without surfacing an error anywhere.
Yes, and early — it isn't retroactive. It's free at typical volumes and it's the only way to get unsampled event-level data.
Not necessarily. Platform reporting answers bidding questions. GA4 answers behavioural ones. If nobody asks behavioural questions, you may not need it.
