Google Ads conversion tracking
Google Ads reports a conversion value the moment a tag fires. It doesn't automatically know about refunds, discount codes, or a checkout that skipped the tag entirely. Shopify does.
A standard Google Ads conversion fires from a tag on your order confirmation page. That works for a normal checkout, but accelerated checkout methods — Shop Pay, PayPal, an in-app browser — sometimes redirect a customer in ways that skip the confirmation page load the tag depends on, or that fire it in a context Google Ads can't attribute back to the original click.
Depending on the implementation, Google Ads can undercount purchases that were never observed in the first place, or overcount them when multiple tags or conversion actions record the same order. The two problems point in opposite directions, which is exactly why they're easy to miss in the same account — one masks the other in the total.
Illustrative example — a $120 order with a discount code, sales tax, and a later partial refund:
| Cart subtotal | $120.00 |
| Discount code (–15%) | –$18.00 |
| Sales tax + shipping | +$14.50 |
| Value at checkout (what the tag likely fires) | $116.50 |
| Partial refund, four days later | –$30.00 |
| Actual net revenue in Shopify | $86.50 |
Standard purchase implementations often retain the original checkout value unless later refunds or cancellations are sent back through conversion adjustments. Where that adjustment step isn't set up, the gap compounds over enough orders into a ROAS figure that looks better in Ads Manager than the store's bank balance would suggest.
How a refund reaches the conversion, if it's wired up
Conceptual — depends on conversion adjustments being configured for the account.
Enhanced conversions send hashed customer data — email, phone, address — alongside a standard conversion, so Google can match it to a signed-in user even when a click ID gets lost along the way. It improves how reliably a conversion gets attributed to the right ad. It doesn't, on its own, fix a revenue value that was wrong to begin with — that still depends on what value the store sends.
The most common cause on Shopify is running both Shopify's native Google & YouTube channel integration and a separate, custom Google tag, each logging its own conversion action for the same order. If both are set as a primary conversion action used for bidding, Google Ads counts and optimises against the order twice — a secondary action, used for reporting only, doesn't carry the same risk.
Where a customer hasn't granted analytics or ad-storage consent, Consent Mode lets Google Ads model conversions statistically instead of tracking them directly. It narrows the gap in aggregate; it doesn't recover any individual customer's data.
Can overcount
Can undercount
Search is the most straightforward — a click, a tag, a conversion. Most tracking issues here trace back to the tag itself, not the campaign type.
Shopping depends on your Merchant Center feed staying in sync with live Shopify pricing and availability; a stale feed shows up as disapproved or mispriced listings, not as a tracking error, but it looks similar in the reporting.
Performance Max leans on conversion value more heavily than either, since its automated bidding optimises directly against whatever value it's given — which makes accurate revenue values matter more here than anywhere else in the account.
Attribix sends purchase and enhanced-conversion data from your Shopify orders to Google Ads, and shows that alongside Google's own reported numbers so the gap is visible instead of buried across two separate dashboards. It doesn't control your Merchant Center feed, your account's conversion-action configuration, or how Google Ads itself models consent-restricted traffic — those stay in Google Ads and Merchant Center directly.
Connect your store and Google Ads account to see the gap for your own orders, not an illustrative example.
Want your Google Ads account managed? See Google Ads management, or ask about tracking setup.
See how this fits into Shopify attribution and ROAS tracking and server-side tracking.