47.66° N 117.43° W Summit · Profitable Growth
Conversion Tracking · Reconciliation
Why don't my Google Ads conversions match my Shopify orders?
Google Ads and Shopify count different things on different clocks. Google credits a conversion to the click date inside its attribution window. Shopify stamps the order at order time. Over thirty days, a count gap inside 10 percent is reconciled, 10 to 25 percent needs a named cause, and above 25 percent is a tracking problem.
The two numbers will never be equal, and an owner who expects them to be ends up chasing a gap that isn’t a defect. The useful question is how wide the gap can be before it stops being attribution and starts being a broken event or a setting. This page holds the band I use for every pair, and the six causes I rule out when a gap sits outside it.
Different clocks, same orders
Google Ads credits a purchase to the day of the click that earned it, inside a click-through window of 1 to 90 days depending on the action, plus a view-through window. Shopify writes the order on the day the card was charged. Same order, two dates, and on a thirty-day report the edges never line up.
That effect alone is measurable. In my Ecommerce Tracking Accuracy Benchmark, switching one account from click-date to conversion-date reporting moved its total by 5.8 percent on count and 7.4 percent on value, with nothing else changed. Then there’s what happens after the sale. On the one account where I could read the store’s order table, about a sixth of orders were refunded inside the window and about a tenth were cancelled, and the ad platform was never sent a restatement for any of them. Google keeps every one as a conversion. Shopify’s net figures drop them.
A gap is the normal state. This is the band I hold every account to, one row per pair.
| Comparison | What is being compared | Window | Band |
|---|---|---|---|
| Google Ads purchase conversions vs Shopify orders attributed to paid search (GA4 last-non-direct, or Shopify Sales by traffic source) | Count. Google on click date, Shopify on order date, gross orders with refunds and cancellations left in | 30 days | Inside 10 percent, reconciled. 10 to 25 percent, name the cause. Above 25 percent, tracking problem |
| Google Ads conversion value plus Meta purchase value vs Shopify gross revenue attributed to paid | Revenue | 30 days | Inside 15 percent, healthy. Above 15 percent, a setting or an event is padding the value |
| GA4 paid-channel conversions vs Shopify paid orders | Count. GA4 sessionizes on last non-direct click | 30 days | Within 20 percent |
| GA4 paid-channel conversions vs Google Ads plus Meta reported conversions | Count | 30 days | Within 15 percent |
| Meta purchases vs Shopify orders | Count. Meta models the iOS share | 30 days | In the accounts I’ve reconciled, Meta reports 10 to 40 percent above Shopify, wider on high-iOS stores |
| Meta purchases vs GA4 paid-social conversions | Count | 30 days | 10 to 30 percent, Meta higher |
| CRM closed-won deals vs offline conversions imported to Google Ads and Meta | Count. Same records on both sides, by deal date | 7 days | Under 5 percent |
The first row is the one this question is about. Between 10 and 25 percent, I want a named cause from the list below before anyone touches a bid. Compare gross to gross, Shopify’s gross orders and gross revenue in the same window, so refunds don’t open a gap on their own.
The setting that pads revenue
A Shopify client’s $32.99 order landed in Google Ads as $148.95. The dataLayer was clean and GA4 said $32.99. The prior agency had switched on Customer Lifecycle Value Optimization with a hardcoded $115.96 incremental value for new customers, so every new-customer conversion arrived as revenue plus $115.96, and Smart Bidding had been chasing that number for nine months. The setting is two clicks deep under Conversions, then Summary, and it’s the first thing I check when the count reconciles and the revenue doesn’t. The full receipt is on the blog.
Add-to-cart value counted as revenue
The column reads “Conv. value”. Nothing in the interface says what fed it. On two of the three accounts in the benchmark, between 16.6 and 17.2 percent of counted conversions and between 19.8 and 25.8 percent of reported conversion value came from add-to-cart and begin-checkout events, because those actions had been set to count inside the bidding metric. One Shopping campaign on one of those accounts had no purchase goal at all. In 90 days it reported 5.96 conversions, every one a cart or checkout event, and the algorithm bid to maximize cart value.
This is why the revenue band sits at 15 percent rather than 25. The smallest value defect I have measured was 19.8 percent, and a wider band would call it normal. Open the conversion-action list and read the category of every action that counts. The name tells you nothing.
Two purchase events, one order
Three purchase-category conversion actions were live at once on one benchmark account: the store sales-channel tag, a tag-manager deployment, and an analytics-imported purchase event. Over their common live window they recorded 382.02, 321.59 and 266.99 purchases for the same store, a 30.1 percent spread between the highest and the lowest. The account counted only one of them. The other two existed to disagree with it.
The same defect shows up on Meta when the browser pixel and the Conversions API both fire a purchase without a shared event_id, which, on the accounts I’ve cleaned up, inflated reported ROAS by thirty to fifty percent. Inside Google Ads the tell is a conversion rate above eight percent on a high-volume campaign, which almost always means branded overlap or a de-duplication failure. The dedup contract, one event ID shared by browser and server, is in the Tracking Stack.
The purchase event that went dark
When Sugar Babies came to me, Google Ads was counting roughly 68 percent of the conversions GA4 saw, with the rest landing in direct / none. The server-side container was running. The Checkout Extensibility migration had broken the purchase event on the alternate checkout domain, so orders completed there never reached the tag. Fixing the domain and validating end to end took the gap from 32 percent to within 4 percent in two weeks.
A gap that opens on a specific date usually has a specific cause, and a checkout change is the most common one I find. What Checkout Extensibility breaks, and the order to fix it in, is its own answer.
Revenue that landed in Unassigned
A furniture brand with a server-side stack on paper had GA4 filing its revenue under Unassigned. Two GA4 installs were fighting over one property: the server-side container and Shopify’s native Google channel app, each with its own session handling. Behind that, the server stack was sending zero ecommerce events because one checkbox in the Shopify app was unchecked, and the purchase tag sent capital-P Purchase where GA4 binds to lowercase purchase.
When GA4 can’t resolve a session to a channel, Shopify’s paid orders and Google’s conversions each look fine on their own and refuse to meet in the middle. Count your installs before you touch an attribution setting.
The five-number reconciliation I run weekly
Fifteen minutes in a spreadsheet, five numbers, same thirty-day window: Google Ads conversions, Meta conversions, GA4 paid-channel conversions, Shopify paid orders, Shopify gross revenue. I read them against the table above in a fixed order.
- Google Ads conversions against Shopify paid orders. Inside 10 percent, move on. Outside 25, stop here.
- GA4 paid conversions against Shopify paid orders, within 20 percent, and against the Google Ads plus Meta sum, within 15 percent. A miss on either points at a channel-mapping or session problem, the kind two GA4 installs produce.
- Platform conversion value against Shopify gross paid revenue, within 15 percent.
If the count band holds and the revenue band doesn’t, the cause is a value setting: lifecycle padding or cart value counted as revenue. If neither holds, an event is missing or doubled. Either way, no bid, budget, or structure change goes in until the count gap is back inside 10 percent, because every one of those decisions is computed from the column that’s wrong. A gap that holds steady for a month is attribution. One that jumps in a single week is a broken tag with a date on it.
Related questions
-
How does Shopify Checkout Extensibility break my tracking, and how do I fix it?
Shopify retired checkout.liquid and additional scripts. What that breaks in your pixel, GA4, and CAPI tracking, and how to rebuild it with Web Pixels.
Read the answer
-
Why is my Shopify conversion tracking not working?
Shopify tracking breaks at predictable points: a missing Customer Events pixel, mismatched event names, or no deduplication. How I find the real cause.
Read the answer
-
Why don't my GA4 and Meta conversion numbers match?
GA4 and Meta count conversions differently: attribution windows, modeling, dedup. How to read the gap and when it signals a real problem.
Read the answer
-
What's the difference between Google Tag Manager and GA4?
Google Tag Manager is the delivery system for your tracking tags. GA4 is one report those tags feed. Here is how they differ and how they work together.
Read the answer
Want this diagnosed in your account?
Same diagnosis,
run on your account.
Thirty minutes on the phone. I look at your spend, your tracking, and your search-term reports before the call. You walk out with a clear list of what is leaking and what to fix first.