Stefan RiemeyerGoogle Ads Freelancer

Is your conversion data right? Checking Google Ads against the shop

A check routine using an order export: count as an upper limit, value per order as a definition test, plus double counting, currency and cancellations.

Stefan Riemeyer/Updated 3 November 2026/7 min read

Shop, all orders Google Ads, plausible Google Ads, error Upper limit Purchases in one period by conversion time. Schematic, no real data

The conversion data in Google Ads does not have to match the shop. It has to fit inside the shop. Google Ads counts only purchases that follow an ad interaction, while the shop counts all of them. If you check for equality, you will always find a gap and can derive nothing from it. If you check against limits instead, you find real errors using an order export and two columns in Google Ads, without opening Tag Manager.

My check routine therefore has three parts: count as an upper limit, value per conversion as a definition test, and a sample of test orders to find the causes. How tracking is built is covered in setting up conversion tracking in an online shop. This article is only about the check.

What you need from the shop

Export all orders for a completed period from the shop system. Four weeks are enough to start. These are the columns you need:

Column What for
Order number Spot duplicate and missing orders
Order date with time Delimit the period cleanly
Total amount gross Comparison, if Ads receives gross
Tax amount Derive net
Shipping costs Check whether shipping is in the value
Discount Check whether the value is passed before or after discount
Currency Multi-currency shops, such as EUR and CHF
Status Separate cancellations and test orders

From these columns you calculate three values per order: gross, net excluding shipping, net including shipping. One of these definitions should match your Ads value.

In Google Ads: the by-conversion-time columns

The standard columns in Google Ads assign conversions to the day of the click, not the purchase date, as Google itself describes. A click at the end of the month with a purchase a week later lands in the wrong month if you set it against a shop export by order date. For the comparison you therefore use the columns "Conversions (by conv. time)" and "Conv. value (by conv. time)", which assign purchases to the time they took place.

Filter to the purchase action and check that it counts as a primary action, otherwise it is missing from the Conversions column. If several purchase actions are active, such as a website tag and an import from GA4, check each one individually. Two actions measuring the same purchase are already the first finding.

Check 1: the count must not exceed the shop

The first rule is hard: in the same period, by conversion time, Google Ads must never report more purchases than the shop had orders in total, all channels together. If Ads is above that, something is counting twice or the action is measuring something other than purchases.

The limit also applies with modelled conversions. According to Google, conversions from consent mode modelling appear in the normal Conversions column, with a threshold of 700 ad clicks over seven days per country and domain grouping among the preconditions. What is modelled are purchases that took place but were not measured. Even the model cannot plausibly deliver more purchases than the shop had in total.

Below the upper limit, Ads' share of all orders is not an error signal but a metric. I consider it more informative than any tolerance once you track it week by week: if it jumps noticeably without a change to budget or campaigns, something in the tracking has changed.

Check 2: the value per conversion reveals the definition

Divide the conversion value in Ads by the conversions, both by conversion time. Compare the result with the average order value from the export, once gross, once net excluding shipping, once net including shipping. Ads purchases do not have exactly the same basket as all shop purchases, but the gap between the definitions is usually larger than that difference.

A worked example with invented, round figures: suppose a shop with a tax rate of 19% has an average order value of €100 net excluding shipping, and an average of €5 net shipping. Google Ads shows €125 per conversion.

Definition Value per order Ads above shop value
Net excluding shipping €100.00 25%
Net including shipping €105.00 19%
Gross including shipping €124.95 0%

Here gross including shipping is being passed. That is not a measurement error in the technical sense, but a commercial one: anyone who has calculated target ROAS on net revenue excluding shipping is steering with a value flattered by about a quarter. Every ROAS in the account and every break-even calculation is shifted by exactly that factor. Which definition is right is decided not by Google but by your invoicing. It just has to be the same everywhere.

The check does not help if tax and shipping happen to be about as large as the difference in basket between Ads buyers. Then you need the sample below.

Check 3: currency and format

According to Google, the conversion value is passed as a number with a period as the decimal separator, and the currency as an ISO 4217 code, so EUR or CHF. Two errors show up immediately in the value per conversion: a comma as the separator produces nonsensical values, and a Swiss shop that reports CHF amounts with the code EUR shifts the value by the exchange rate.

For multi-currency shops, split the export by currency and check each group on its own. Small deviations in the converted value are explainable there, as long as the shop and Google Ads calculate with different rates. A gap the size of the whole exchange rate is not.

Check 4: spotting double counting

A common cause of too many purchases is a combination of two settings. With the "Every" counting option, Google Ads records every conversion after an ad interaction, and for sales Google recommends exactly this setting (counting "Every" or "One"). The only protection against duplicate purchases is then the transaction ID: if two conversions have the same action and the same ID, Google Ads does not count the second one, treating it as a duplicate, according to the help page on transaction IDs.

If the ID is missing, reloading the confirmation page counts as a second purchase. The opposite error is a fixed ID that is the same for every order: according to Google, orders are then not fully counted, and Ads falls well below the shop. The ID must be unique per order, at most 64 characters long and free of personal data. The simplest choice is the order number from the shop. More ways to find duplicates are in finding duplicate conversions.

The sample: three test orders

The limit checks tell you whether something is wrong. The test orders tell you what. I would trigger three orders via an ad click: a normal one, one with a discount code, and one where you reload the confirmation page afterwards. For multi-currency shops, add one order per currency.

For each order, note the order number, gross, net, shipping and discount from the shop. What the tag actually passed you can see in the browser's network traffic or in Tag Manager's preview mode: transaction ID, value, currency. If the ID matches the order number, the value fits your definition and the reloaded page has no effect, the handover is clean. Afterwards you cancel the test orders in the shop. Test purchases and cancellations are among the known causes of discrepancies, and otherwise they distort the next evaluation.

Cancellations, returns and time lag

Google Ads receives the value at the moment of purchase. Cancellations and returns can be withdrawn or restated afterwards through conversion adjustments, with the order number as the key. According to Google this works up to 54 days after the conversion, recommended from 24 hours after it, and for Smart Bidding, adjustments within seven days are the most useful. Without adjustments you compare against all orders including cancellations, with adjustments against the adjusted value. How passing returns is built is described in passing returns to Google Ads.

A comparison straight after month end is too early. Purchases after a late click and adjustments are still to come. I would check the period only one to two weeks after it ends and record the final state.

When the routine is not enough

The check finds wrong definitions, double counting and outages. It says nothing about whether Google Ads assigns a purchase to the right click, or whether the purchase would have happened without an ad. For the comparison with Analytics there is a separate article on GA4 and Google Ads. For very small shops with few Ads purchases a month, the share fluctuates too much for week-on-week comparisons. Then only the sample carries weight, and you repeat it after every change to the shop or checkout.

Further questions

How large may the gap between Google Ads and the shop be?

There is no official tolerance, and a blanket percentage would be a guess. Instead I check two hard limits: Ads does not report more purchases than the shop had in total, and the value per conversion is not off from the shop value by tax or shipping. Within those limits I watch whether the share stays stable from week to week.

Do I have to strip cancellations and returns out of Google Ads?

Only if you reverse them through conversion adjustments or correct them in the value. In that case you compare against the adjusted shop value, otherwise against all orders including cancellations. According to Google, adjustments are possible up to 54 days after the conversion, and recommended from 24 hours after it.

Sources

  1. Use a transaction ID to minimize duplicate conversions, Google Ads Help
  2. Track transaction-specific conversion values, Google Ads Help
  3. Unterschiede Conversiontracking in Google Analytics und Google Ads (differences in conversion tracking between Google Analytics and Google Ads), Tobias Batke (in German)
  4. Understand conversions by time with new columns, Google Ads Help
  5. About conversion counting options, Google Ads Help
  6. About consent mode modeling, Google Ads Help
  7. About conversion adjustments, Google Ads Help
  8. Meta, GA4 und Shopify abgleichen (reconciling Meta, GA4 and Shopify), beecommercer (in German)
Stefan Riemeyer

Stefan RiemeyerIndependent Google Ads freelancer for e-commerce in the DACH region. I work on every account I manage myself. How I work as a Google Ads freelancer.

Request a free audit

Read next