Google Ads conversion tracking for ecommerce brands
An ecommerce brand has one unambiguous source of truth — the orders in its store — and almost every measurement problem is a discrepancy against it. What Google Ads adds on top of that is a mechanical requirement: gclid, gbraid and wbraid have to reach the record that holds the money, because Google Ads can only credit a conversion it can tie back to a click it recognizes. This page covers both halves — what a conversion is in ecommerce brands, and what Google Ads specifically needs to accept it.
Free30 minutesNo obligation
Specific to Google Ads × Ecommerce
Google Ads for ecommerce: one primary Purchase action, net of refunds
For an ecommerce brand on Google Ads, send the Purchase conversion action from the order record with the order ID as the transaction ID, gclid, gbraid or wbraid captured at landing, and Enhanced Conversions hashed from the order email. Count every conversion, and send refunds as conversion adjustments so Shopping and Performance Max bid on net revenue.
Most ecommerce spend on Google now runs through Shopping and Performance Max, which bid on whatever value the Purchase action reports. If that value includes tax and shipping, or ignores refunds, the campaigns chase gross revenue on products you then hand money back for. Decide whether value is net of tax and shipping, write the decision down, and keep it identical on the browser tag and the server path.
Pass the order ID as the transaction ID on every Purchase. Google drops a second conversion with the same transaction ID, which is what stops a refreshed confirmation page or a second integration from counting one sale twice, but only if both paths format it the same way, including any '#' prefix. Wallet and buy-now-pay-later checkouts that never return shoppers to your site are the reason to send from the order webhook rather than the confirmation page.
The other break is the store platform's own Google integration. It installs a purchase tag, an agency adds a container tag on top, and both conversion actions end up set as primary. Keep one primary Purchase action, set the other to secondary, and confirm in the conversion action list which one bidding actually uses. If you send cart data with conversions, check that the item IDs match the IDs in your Merchant Center feed.
Google Ads · Ecommerce · what breaks
Why Google Ads under-reports for ecommerce brands
- 01
Four dashboards, four revenue figures
Summing to more than was banked, with nobody able to say which to use.
- 02
Reported ROAS better than the bank statement
Which is how the problem usually gets noticed.
- 03
Refunds never reversed
So the reported number drifts further from reality with your return rate.
- 04
Gclid, gbraid and wbraid never reaches the record
Three parameters, not one. gclid is the long-standing identifier; gbraid and wbraid arrive on iOS traffic where privacy constraints prevent the usual one. Capture code that names only gclid loses a growing share, silently, and the loss is invisible until you audit how many records carry an identifier.
Google Ads · Ecommerce · the fix
What working looks like — Google Ads · Ecommerce
One order, one conversion
Deduplicated on the order ID at every destination.
Revenue that reconciles to the store
Per order, over a closed window.
Refunds and cancellations reversed
So the number can go down as well as up.
Google Ads · Ecommerce · architecture
How Google Ads and ecommerce brands actually connect
- 1
The conversion in ecommerce brands
Purchase is the money event, but the funnel above it matters for optimization: product view, add to cart, checkout started, payment info submitted. Each gets a definition and a firing rule before anything is built.
- 2
Google Ads needs a click to match
A click identifier inside the 90-day window, a conversion action name that matches one configured in the account, a conversion timestamp for when the outcome happened, and a value. Read the match rate after uploading — a file can upload perfectly and match nothing.
- 3
The identifier: gclid, gbraid and wbraid
Three parameters, not one. gclid is the long-standing identifier; gbraid and wbraid arrive on iOS traffic where privacy constraints prevent the usual one. Capture code that names only gclid loses a growing share, silently, and the loss is invisible until you audit how many records carry an identifier.
- 4
Where it gets sent from
your store's order records, web orders only.
- 5
Deduplication and window
There's no shared event ID mechanism like Meta's. What matters instead is the counting setting on each conversion action — 'one' for lead-type conversions so a repeat submitter doesn't count three times, 'every' for ecommerce where a second purchase is a second sale. This is the single most common misconfiguration we find in Google Ads accounts. Google's offline import window is 90 days from the click. Anything older can't be matched, and rows outside it fail as unmatched without much explanation. Measure your median click-to-outcome time against that before designing anything.
Google Ads · Ecommerce · events
The conversion map for ecommerce brands
Five events, one of which decides the money. The others exist so bidding has enough volume to learn from.
| Event | What it means here |
|---|---|
| Product view | High volume, browser-side is fine. Feeds retargeting and catalog matching. |
| Add to cart | Browser-side. The first real intent signal and useful for audience building. |
| Checkout started | Browser-side. Where the drop-off analysis lives. |
| Purchase | Server-side, from the order record. This is the one that has to be right. |
| Refund | Server-side, from the refund webhook. Almost never implemented, and it's why revenue only climbs. |
Google Ads · Ecommerce · diagnose
Diagnostic order — Google Ads · Ecommerce
- 01
Count records carrying gclid, gbraid and wbraid
- 02
Wallet payments skipping the confirmation page
Shop Pay and PayPal can be abandoned after payment. The order exists and no platform hears about it.
- 03
Two apps both sending purchase
A channel integration plus a container is two conversions for one sale.
- 04
Non-web orders in the comparison
POS, draft and phone orders belong in your total and not in a platform reconciliation.
- 05
Read the match rate on the upload, not the success message
A conversion action that stops receiving hits is flagged as inactive 30 days later — by which point a month of budget has already run against a missing signal. Check the last-received date on every action monthly; it takes two minutes and it's the cheapest monitoring available.
Google Ads · Ecommerce · prove
How it gets proven — Google Ads · Ecommerce
Source of truth
your store's order records, web orders only
- Order ID present in every destination's event log.
- Purchase count within a few percent of web orders for a closed week.
- No order ID appearing twice anywhere.
- A real refund tested and confirmed reversing.
- The match rate on the upload, not the success message read directly, not inferred from an upload succeeding.
Google Ads · Ecommerce · free audit
What we check in the free audit
- Count records carrying gclid, gbraid and wbraid
- Wallet payments skipping the confirmation page
- Two apps both sending purchase
- Non-web orders in the comparison
- Read the match rate on the upload, not the success message
Checked against
your store's order records, web orders only
Free30 minutesNo obligation
Google Ads · Ecommerce · when not to buy
When you don't need this — Google Ads · Ecommerce
- If Google Ads already reports conversions that reconcile against your store's order records within a few percent, this is working and there is nothing to buy.
- Measure identifier coverage yourself first — pull your last hundred records and count how many carry gclid, gbraid and wbraid.
- If you're running Performance Max exclusively and haven't separated your conversion actions, the import will work and the reporting won't tell you much. Worth sorting the account structure first.
Google Ads · Ecommerce · what we deliver
What gets built — Google Ads · Ecommerce
Purchase from the order webhook
Not from a thank-you page a customer can skip or refresh.
Order ID as the deduplication key
Stable and identical on every path without coordination.
Customer parameters hashed from the order
Normalized before hashing, which is where match quality is usually lost.
Refund webhook wired as a reversal
At every destination that accepts one.
Dispatch via Google's offline conversion import
Uploaded against the click identifier, either through the Google Ads API or as a file. The upload is the easy part; what limits it is how many of your records carry an identifier at all. Verify the current column format against Google's own template — it has changed before.
Written guarantee
95%+ tracking accuracy
Measured against your store's order records, web orders only. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
Google Ads · Ecommerce questions, answered
Usually not; Shopping and Performance Max bid better on product revenue. Whichever you choose, use the same definition on the tag and the server path.
Through conversion adjustments, which can retract or restate a conversion against its order ID. Confirm the current adjustment window and format in Google's documentation.
No. Each counts only what it can attribute, so a permanent gap is correct. What matters is that it's explainable and stays stable month to month.
Totals hide equal and opposite errors. Ten missing orders and ten duplicated ones produce a perfect total and a broken setup.
Shopify, WooCommerce, Magento, BigCommerce and custom builds all expose an order record or a webhook. That's the only requirement.
Three parameters, not one. gclid is the long-standing identifier; gbraid and wbraid arrive on iOS traffic where privacy constraints prevent the usual one. Capture code that names only gclid loses a growing share, silently, and the loss is invisible until you audit how many records carry an identifier.
Uploaded against the click identifier, either through the Google Ads API or as a file. The upload is the easy part; what limits it is how many of your records carry an identifier at all. Verify the current column format against Google's own template — it has changed before.
By reading the match rate on the upload, not the success message and reconciling against your store's order records, web orders only. An upload that succeeds is not an upload that matched.
More on Google Ads · Ecommerce
- Conversion recoveryRecovering Google Ads conversions that stopped arriving
- Enhanced ConversionsFixing Enhanced Conversions that report active and recover nothing
- EcommerceConversion tracking for ecommerce brands, measured against your orders
RELATED GUIDES
More for ecommerce brands: other angles on the same outcome
- EcommerceConversion tracking for ecommerce brands, measured against your orders
- Google Ads · Print on demandGoogle Ads conversion tracking for print-on-demand stores
- Google Ads · Footwear ecommerceGoogle Ads conversion tracking for footwear ecommerce brands
- Google Ads · Add to cart → purchaseHow to track add to cart to purchase for Google Ads
- Google Ads × SubscriptionsHow to reconcile Google Ads against your billing system
- EcommerceGoogle Ads for ecommerce brands: the build order
- LeadDyno → Google AdsConnecting LeadDyno to Google Ads
- Google Ads · Subscription boxesGoogle Ads conversion tracking for subscription box businesses
Free · 30 min
Get Google Ads reporting what ecommerce brands actually earn
Free30 minutesNo obligation
