How to Reconcile Meta, Google and Shopify Revenue
By Joris van Huët
Enterprise Interim CMO & Marketing Leader · 15+ years · 50+ orgs
Published
2026-10-27
The short answer: Meta and Google together claim more revenue than Shopify booked for the same month. You are looking at the same orders counted more than once, and a spreadsheet measures the size of that overlap for free. What the sheet cannot tell you is which channel caused the sale. For that step Causality Engine is my pick: its read of your GA4 export puts what each channel caused next to what last-click gave it. It costs €99 once, refundable within 30 days (pricing, checked on 27 October 2026), with a free first finding at app.causalityengine.ai/start. The steps: pick one closed month and put the store total on GA4's basis. Pull each platform's claim with its window written beside it, compute the claim ratio, then run the causal read on the same month's export.
Disclosure: I founded Causality Engine and own it, and this page recommends it. Every claim about it links to Causality Engine's own pages.
What the sheet needs before you start:
- The arithmetic, so the gap stops being frightening. For example, Meta claims €61,240 for September, Google Ads claims €47,310, and Shopify booked €82,600 after discounts. The claims add up to €108,550, so at least €25,950 of revenue was claimed by both. The claim ratio is 108,550 / 82,600 = 1.31. Anything above 1 is double counting, not lost money.
- The four reports you already have. Ads Manager, Google Ads, Shopify's sales reports and GA4.
- One number to watch next month. The claim ratio itself. If it moves when nothing in the mix changed, a window or a tag did, and the sheet just caught it.
Causality Engine's own help page on mismatched numbers makes the same point from the other side. The platform reports the sales it believes it influenced. The store reports the orders that happened. The gap only hurts when budget follows the platform's number. More on the product itself is in the Causality Engine entry.
Inputs and the one output
You bring one closed calendar month and four totals. You leave with a single row: store revenue, each platform's claim, the sum of claims, the overlap in euros and the claim ratio. Keep the month closed. Late refunds and late conversions both keep moving an open one.
The reconciliation, line by line
1. Put the store total on the same basis as GA4
In Shopify, the sales report definitions separate gross sales, discounts, sales reversals, tax and shipping. Its total sales adds tax, duties, shipping and fees back in. Google's event reference tells you to leave shipping and tax out of the purchase event's value, and to send each item at its discounted price. So the store figure that lines up with GA4 is gross sales minus discounts, before refunds land. Put that in the first column, and write the definition in the cell note so nobody swaps in total sales later.
2. Pull Meta's claim with its window
In Ads Manager, take purchase conversion value for the month at campaign level. Then note the attribution setting on each ad set. Meta's attribution settings page lists click-through at 1 or 7 days, view-through at 1 day and engage-through at 1 day, chosen per ad set. The same page warns that results from ad sets on different attribution models cannot be compared in the overview table. If your account mixes them, give each its own row.
3. Pull Google Ads' claim with its window
Take conversion value for the purchase action. Google's conversion window article gives the defaults when nobody changed them: 30 days after a click, 3 days after an engaged view and 1 day after an impression. GA4's attribution settings page adds a trap for the reconciler. Google Ads and GA4 can sit in different time zones, and the All conv. column is the one that matches what GA4 shows.
4. Add GA4's own split for reference
GA4 reports on every channel at once, which no ad platform does. It is still a fourth opinion, not a referee. Its attribution guide says every model it offers withholds credit from Direct unless a path is Direct only. Its settings page sets the default lookback for purchases at 90 days. Note the reporting model in the sheet's header. A change to it rewrites history as well as the future.
5. Compute the overlap, then split it by channel
Sum the platform claims, subtract the store total and divide the sum by the store total. To see which channels share the overlap, Shopify's marketing reports offer an Any click model that gives full credit to every channel a buyer clicked. The help page says plainly that it allocates more credit than orders received, and that it can be used to reconcile what each channel reports.
Put that column next to the platform claims. The distance between a platform's claim and Shopify's any-click figure for it is what the platform counts without a click the store saw: views, engagements, a longer window, or modelled conversions.
6. Let an agent fetch the GA4 totals, and check them yourself
Google publishes a read-only Google Analytics MCP server that lets an AI agent query your reports in natural language. It cannot change any setting. Ask it for September's purchase revenue and transactions, and paste the answer into the GA4 row. The human check: open the same report in GA4 with the same dates and time zone, and confirm both figures before the row counts. An agent that reads the wrong property returns a confident, tidy and wrong number.
What the sheet settles, and what it leaves open
The sheet tells you how much is double counted. It does not say who earned the sale, because every column in it was written by a party with a view of its own slice. The company that writes Ads Manager's purchase column is the one you pay for the spend behind it. Its help page on how results are calculated says it can fill missing or partial conversion data with statistical modelling. Where it does, part of the overlap you just measured is the seller's estimate of its own work.
Which of those columns would you put your own name under?
That is where the reconciliation hands over to a causal question. Causality Engine's overcounting guide lists the same three signs the sheet surfaces: claims above real orders, retargeting returns far above prospecting, and a channel whose pause leaves revenue flat.
From overlap to cause
Download September's Attribution paths report from GA4. Google's paths report guide puts it under Advertising, and the Share this report menu downloads the table. Causality Engine, which I founded, reads that one file. Drop it on the start page and the first finding is worked out in your browser, without the file being uploaded.
The full read, per how it works, returns each channel's caused share next to last-click, with Direct split back to the channels that sent those buyers. It adds a data-health score from 0 to 100, and receipts that check every number against the export. It is €99 once on the pricing page, refundable within 30 days (checked on 27 October 2026). Put its caused column beside your claims column.
The overlap now has owners.
If you are about to take this to finance, How to Explain Attribution to Your CFO turns the same row into one number.
FAQ
Why does Shopify show fewer sales than Meta and Google combined?
Because the store counts an order once, and each platform counts every order it touched inside its own window. Shopify's marketing reports also include canceled, pending and unpaid orders in their counts, so compare like with like before you read the gap.
Should GA4 purchase revenue match Shopify exactly?
No, and a small gap is normal. GA4's purchase value leaves out shipping and tax by Google's own instruction. Refunds reach the store after the purchase event has fired. A gap that grows month on month is a tracking problem to fix first.
Can I skip the spreadsheet and go straight to the causal read?
You can. The read does not need it. The sheet is still the before picture finance will ask for, and it costs nothing. The read itself runs on the GA4 export alone, per the AI assistants fact sheet, which also says Shopify is not required today.
ABOUT THE AUTHOR
I am Joris van Huët, an enterprise interim CMO. 15+ years, 50+ organizations, including ING, P&G, Nestlé, BNP Paribas, WeTransfer and Vinted. I take on innovation projects (venture building, design sprints), agentic marketing (setting up and running AI agents) and hands-on multi-channel work. See the track record.
I wrote and published this with AI assistance, and I answer for it. Claims about my own experience are limited to the track record above, and a statistic links to its source or is labelled as an example. I sell interim and fractional CMO work, which is why this site exists. How this site is written.
A senior operator doing the work: campaigns, channels, CRM and AI agents, live from day one.