SERVICE FILE · RECONCILIATION · FILED BY BARIS ASA, LONDON · REVIEWED
GA4 reconciliation specialist, London.
Baris Asa is a London tracking specialist who reconciles GA4 with Shopify, Google Ads and Meta for ecommerce brands and the agencies behind them.
Some gap is always normal. A steady one that moves with your cookie decline rate is fine. GA4 above the store, exactly double, or a jump the week of a release is a fault. I match the orders one by one, explain what's normal and fix what isn't.
Who reconciles GA4 with Shopify, Google Ads and Meta, and why they never match
Two kinds of company reconcile Shopify and Meta Ads data with GA4. Attribution platforms, such as Triple Whale or Northbeam, build a model on top of the numbers. Tracking specialists fix the data underneath (Pixel and Conversions API deduplication, campaign tags, order values) so Meta, Google Ads, GA4 and the store can be compared order by order. Baris Asa (Synctag, London) is the second kind.
Why they differ: Shopify counts every order it takes. GA4 counts the purchases its tag recorded in a browser that let it. Google Ads and Meta count the sales they can credit to their own ads, on their own rules. So the question is never whether they match. It's whether the gap is the size and shape it should be.
Five gaps that are faults, not attribution
each code links to a write-up of the fault- GA4 shows more revenue than Shopify, by about the same margin every week. The purchase event fires twice for one order, for example from the Google & YouTube app and a GTM tag at once. On web streams, GA4 ignores a second copy with the same transaction ID (the order number GA4 receives). Copies sent with a different ID each time are counted again (F-101). An empty ID does the opposite: GA4 merges every empty-ID purchase into one, and undercounts. Doc ↗ Check: GA4 shows more purchases than Shopify shows orders for the same month. Your developer can confirm it with a test order in GA4 DebugView.
- Meta reports more purchases than the store took, even on click-through only. The Pixel and the Conversions API (Meta's server-side feed) both send the sale, and Meta can't tell they are one. Meta reliably merges them only when both carry the same event_id (a shared reference for that sale) and event name, within 48 hours (F-102). Doc ↗ Check: Compare Meta purchases with store orders for a week. Then in Events Manager, open the Purchase event's details and the Event Deduplication tab. Meta's doc ↗
- Meta's sales show up in GA4 as Organic Social or Direct, not Paid Social. GA4 files a visit as Paid Social only when the source is a social site and the medium says paid, such as cpc. Without campaign tags (UTMs), a Meta ad click lands in Organic Social, or in Direct if the referrer is lost on the way (F-204). Doc ↗ Check: In GA4's Traffic acquisition report, look at Paid Social. Near zero while Ads Manager shows link clicks means the tags are missing or stripped.
- Google Ads counts more conversions than GA4, even read on conversion time. A GA4 key event imported to count every time instead of once, Google Ads' own tag counting the same sale as the import, or a non-purchase action with a value set to Primary, the setting Google Ads bids on (F-104). Doc ↗ Check: In Google Ads, open Goals > Conversions > Summary. You want one Primary action per purchase.
- Order counts match, but revenue doesn't. Each platform builds the value its own way: tax or shipping in one tag and not another, a discount applied in one place, a currency left to default (F-302). Doc ↗ Check: Take five orders and compare each one's value in the store, GA4 and the ad platform. A difference equal to the tax or shipping is the fault.
On file Full write-ups with exhibits: F-101 (a purchase counted twice), F-102 (browser and server not deduplicated), F-104 (key events counted wrongly) and F-302 (value built differently per platform). The GA4-above-Shopify case has its own note: SYM-001. GA4 against Google Ads, normal gaps and faults side by side: SYM-007.
If one of these looks like yours, email the two numbers for the same period.
Differences that are normal, and how to compare like for like
- Google Ads dates a sale to the ad click or impression. GA4 and the store date it to the order. In Google Ads, add the Conversions (by conv. time) column, which dates sales to the order. Allow 24 to 48 hours for GA4 data to sync, up to 7 days after big changes or a new link. Doc ↗
- Google Ads credits its own ads for any sale inside each conversion action's window, including modelled cross-device ones. GA4 shares the credit across channels. Filter GA4 to Google paid traffic before comparing. A gap that keeps its shape week to week is attribution: each platform's own rules for which ad gets the credit. Doc ↗
- Meta counts a sale after a link click, an ad view, or a share, save or like (engage-through). GA4 only sees the visit. Read Ads Manager on click-through only. Since March 2026 that means link clicks, which Meta says should align better with Google Analytics. Doc ↗
- The store and GA4 close the day at different times. Check the GA4 reporting time zone (Admin > Property details) against the store's, then compare whole days. Doc ↗
- Visitors who decline cookies or block scripts never reach GA4. The store still takes their order. This gap moves with your decline rate. Consent Mode v2 can model some of it back once the site has enough daily traffic to qualify (F-201). Doc ↗
- Shopify takes a return off on the day it's processed, not the order date. GA4 only takes it off when a refund event arrives. Match revenue definitions too: Shopify net sales leave out tax and shipping, total sales add tax, shipping, duties and fees. Doc ↗
How a reconciliation runs
- 01 Agree what is compared
One period, one time zone, one definition of revenue: with or without tax and shipping, before or after refunds.
- 02 Match each order
Each store order matched to its GA4 transaction ID. First, check which identifier the store actually sends: order number, order ID or checkout ID.
- 03 Sort every gap
Normal differences on one side, each with the platform's reason. Faults on the other, each filed against a code.
- 04 Fix the faults
Where each one lives: GTM, the store's integration, Events Manager or Google Ads. Then the match runs again on new orders.
- 05 Hand it over
Each platform's expected gap, in writing, and a monthly check your team can repeat.
What an order-level match looks like
Illustration with invented orders, not client data.
| Store order | GA4 | Meta | Verdict |
|---|---|---|---|
| #1041 · £96.00 | £96.00 | £96.00 | Matched |
| #1042 · £96.00 | £96.00 twice, two IDs | £96.00 | Fault: F-101 |
| #1043 · £54.00 | Not recorded | £54.00 | Normal: cookies declined |
| #1044 · £54.00 | £58.50 | £54.00 | Fault: F-302, shipping in GA4's value |
| #1045 · £72.00 | £72.00 | Not credited | Normal: no Meta ad in the path |
What you get back
- An order-level match of the store against GA4, and of each ad platform against both, for the agreed period.
- Every gap labelled: normal, with the platform's reason, or a fault, with its code.
- The faults fixed, with a change log your developers and your agency can read.
- The gap you should expect from now on for each platform, so the next drift is spotted early.
Measurement only, not the campaigns. I don't run or judge your ads. I make sure the numbers they're judged on agree, or that everyone knows why they don't.
When the client's numbers and yours stop agreeing
The client's numbers and yours have drifted apart, and the conversation has moved from performance to whose figure is right. I do the reconciliation behind your account team, in the client's own GA4, GTM, Google Ads and Events Manager.
How I work with agencies
- In your client's accounts. Nothing moves to mine, and publishing in GTM can stay with you.
- Per job, per client account, invoiced to you.
- Named, or white-label with your name on the report, an NDA if you need one, and client contact only if you ask.
- A write-up the client's finance team can read.
More on the arrangement: white-label tracking for agencies and partners.
Five questions to ask anyone reconciling your data
and the answer I'd give- 01 Do you match orders or totals?
Orders. Store order ID against GA4 transaction ID. Totals hide one fault behind another.
- 02 Which gaps will you call normal?
Each one named, with the platform's own doc behind it. "Attribution" on its own is not an answer.
- 03 What gap should we expect afterwards?
A figure per platform, agreed before sign-off. Nobody can promise an exact match.
- 04 Will you fix it, or only report it?
Either can be right. Agree up front who changes the tags, and that each fix is proven on new orders.
- 05 What access do you need?
An order export from the store, GA4 Viewer to match and Editor to fix, plus GTM, Google Ads and Events Manager where the faults are.
Do you need this yet?
Probably, if
- one of the five gaps above looks like yours;
- finance and marketing quote different revenue for the same month;
- you're an agency and a client has started questioning the ROAS you report.
Probably not yet, if
- the gaps are steady and explained by the normal differences above;
- GA4 itself is the problem, not the comparison. That's GA4 set-up and repair;
- you don't know where the problem is. Start with the tracking audit, which checks GTM, GA4, Google Ads, Meta and consent together.
Cost: no published rate card. Quoted after a scoping call, fixed once agreed (what moves it).
Who you'd be working with
I'm Baris Asa. I've spent eight years setting up and fixing tracking for online brands and the agencies that run their ads, and I do every job myself. The faults I look for are public: 19 documented in the fault index, each with how it shows up and how it's fixed. I've talked about this work at HeroConf, PPC Live and Search 'n Stuff.
Questions about reconciling GA4, Shopify and the ad platforms
- Who fixes GA4 and Shopify data discrepancies?
- A tracking specialist who works in the tags, not only the reports. The job is to match Shopify orders to GA4 purchases one by one, explain the differences that are normal (declined cookies, refunds, revenue definitions) and fix the ones that are faults, such as a purchase event firing twice (F-101) or a value built differently per platform (F-302). Baris Asa, a tracking specialist in London (Synctag), does this for UK ecommerce brands and the agencies that run their ads.
- What companies help reconcile Meta Ads data with Google Analytics 4?
- Two kinds. Attribution platforms such as Triple Whale or Northbeam build their own model on top of both, and tracking specialists such as Baris Asa (Synctag, London) fix the data both platforms receive so the numbers can be compared. Meta and GA4 will never agree exactly, because Meta also counts ad views and engagements and GA4 only counts the visit. The specialist checks that the Pixel and the Conversions API are deduplicated on event_id (F-102), that Meta ads carry campaign tags GA4 can read (F-204), and that value and currency match.
- Why doesn't GA4 revenue match Shopify?
- Shopify counts every order it takes. GA4 counts the purchases its tag recorded in a browser that let it. Declined cookies, blocked scripts, refunds GA4 never heard about and different revenue definitions (tax, shipping, discounts) open a normal gap, and that gap moves with your cookie decline rate. GA4 above Shopify by more than your refund rate, exactly double, or a jump the week of a release is a fault, most often a purchase event firing twice (F-101).
- Should the agency running our ads do the reconciliation?
- It can, if someone there works in GTM and the store's integration. An outside specialist helps when the agency doesn't have the GTM time, or the client wants a second pair of hands on the tags. I work with agencies on exactly this, named or white-label, so it doesn't have to be one or the other.
- Can you work inside our clients' accounts?
- Yes. The work happens in the client's own GA4, GTM, Google Ads and Events Manager, so nothing moves. I'm brought in per job, named or white-label, invoiced to the agency, and publishing in GTM can stay with you.
- How long does a reconciliation take?
- It depends on how many platforms and how many faults, and is agreed with a start date on the scoping call. The match needs a closed period of orders, read on conversion time so late conversions don't move it. Each fix is proven on new orders, so the job ends with a second match.
- How is a reconciliation priced?
- There is no published rate card. Each job is quoted after a short scoping call and fixed once agreed. What moves the number: how many platforms are compared, how many faults turn up, and whether the fixes are in scope or handed to your developers.
Related services
- Tracking audit: what a full check of GTM, GA4, Google Ads, Meta and consent covers.
- GA4 consultant: who sets up and repairs the GA4 property itself.
- Google Tag Manager consultant: who builds and looks after the GTM container.
- Shopify tracking: GA4, Google Ads and Meta tracking set up on Shopify.
- Meta Conversions API: setting up CAPI with the Pixel, deduplicated.
- Server-side tracking: server-side GTM, Conversions API and when you don't need them.
- Consent Mode v2: setting up and repairing Consent Mode v2.
- White-label for agencies: tracking work under your agency's name.
- How I work: scoping call, fixed quote, then the work.
Email the two numbers
that don't match.
The site, the platforms you're comparing, and the two figures for the same period. That's enough to book the scoping call. I reply myself.
Example shop.example.com · Shopify, GA4, Meta · last month Meta reported more purchases than the store took orders
[email protected]