How to track add to cart to purchase for Google Ads
This is the one funnel that mostly happens in a single session, which makes it look easy and hides where it actually fails: the purchase event at the end. Add to cart is cheap and reliable; purchase is the one that has to be right, deduplicated, and sourced from the order record rather than a page a customer can refresh. On Google Ads the specifics that matter are the click identifier (gclid, gbraid and wbraid), the import mechanism (Google's offline conversion import), and conversion actions deduplicate on their own counting setting rather than an event ID, so the setting matters more here than the payload. The chain only works end to end if the identifier is captured on landing and stored on the order record in your store — no cookie survives the gap between ad click and purchase sent with the order id.
Free30 minutesNo obligation
Specific to Google Ads × Add to cart → purchase
Google Ads: Purchase as primary, add_to_cart kept as secondary
On Google Ads, track add to cart as a secondary conversion action for observation and send the purchase as the primary action from the order webhook, keyed to the gclid, gbraid or wbraid stored on the order. Add Enhanced Conversions with the order's hashed email so iOS orders without a click ID still match.
The decision that matters most on Google Ads is the primary or secondary setting on each conversion action. If add_to_cart is left as primary alongside purchase, Smart Bidding counts both as goals, and Performance Max will happily spend toward Shopping traffic that fills carts. Set add_to_cart to secondary so it stays visible in the columns, and keep purchase as the only primary action, counted as every conversion.
Google Ads can also read the basket itself. Conversions with cart data attach item IDs, quantities and prices to the purchase, and those IDs must match the offer IDs in your Merchant Center feed exactly. A store that sends its internal SKU while the feed uses a variant ID gets a purchase that counts but item reporting that stays empty. Check the item-level report a week after launch rather than assuming it populated.
The add to cart stage is also where Google's three identifiers diverge in practice. Shopping clicks on iPhone often arrive with gbraid instead of gclid, and if the cart script only reads gclid into the order's attributes, the server-side purchase goes out unmatched for exactly the mobile buyers who add to cart fastest. Refunds can be retracted or restated in Google Ads through conversion adjustments, which is one advantage over most other platforms here; wire it.
Google Ads · Add to cart → purchase · what breaks
Where this funnel usually breaks — Google Ads · Add to cart → purchase
- 01
Purchase fired on the thank-you page
Refreshable, bookmarkable, and skippable by wallet payments. The order exists and no platform hears about it.
- 02
Two systems both sending purchase
A platform app plus a container is two conversions for one sale, and reported ROAS looks excellent until someone checks the bank.
- 03
Refunds never reversed
So reported revenue climbs and never falls, diverging from your books by your entire return rate.
Google Ads · Add to cart → purchase · the fix
What working looks like — Google Ads · Add to cart → purchase
Purchase sent with the order ID attributed to the click
Weeks later if necessary, because the identifier lives on the order record in your store rather than in a cookie.
Google Ads bidding fed the real outcome
Via offline conversion import, so it optimizes toward orders that were actually placed rather than toward cart adds.
A reconciliation that closes
Your store's order records, web orders only matched per record against what Google Ads reports, over a fully closed window.
Google Ads · Add to cart → purchase · architecture
The exact event sequence — Google Ads · Add to cart → purchase
Stages one to three are browser-side and mostly fine. Stage four is where the money is and where the failures cluster.
- 1
Ad click
Identifier captured on landing and persisted for the session and beyond.
- 2
Add to cart
Browser-side, with item detail. The first genuine intent signal and the basis of most retargeting.
- 3
Checkout started
Browser-side. Where drop-off analysis lives.
- 4
Order created
From the order webhook, not the thank-you page — wallet payments can be abandoned after payment completes.
- 5
Purchase sent with the order ID
Deduplicated on that ID at every destination, so one sale counts once.
Google Ads · Add to cart → purchase · diagnose
What's specific to Google Ads
- 01
Click 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.
- 02
Import mechanism: 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.
- 03
Deduplication
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.
- 04
Window and timing
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.
- 05
The Google Ads gotcha
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 · Add to cart → purchase · prove
How to prove the chain works — Google Ads · Add to cart → purchase
Source of truth
your store's order records, web orders only
- The same identifier confirmed on the order record in your store after a full real journey through every step.
- Purchase sent with the order ID confirmed arriving at Google Ads, verified by the match rate on the upload, not the success message.
- Your store's order records, web orders only reconciled against Google Ads per record over a fully closed window.
Google Ads · Add to cart → purchase · free audit
What we check in the free audit
- Click identifier: gclid, gbraid and wbraid
- Import mechanism: offline conversion import
- Deduplication
- Window and timing
- The Google Ads gotcha
Checked against
your store's order records, web orders only
Free30 minutesNo obligation
Google Ads · Add to cart → purchase · when not to buy
When this doesn't apply to you — Google Ads · Add to cart → purchase
- If you don't have a cart — a single-product checkout, a booking flow — the add-to-cart stage doesn't exist and you want the checkout-to-purchase sequence instead.
- 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.
- If your cycle from click to purchase sent with the order id regularly exceeds the import window, the final event can't drive bidding whatever you build. Optimize toward checkout started instead and use the later data for budget decisions rather than for bidding.
- If almost none of your orders carry a click identifier today, that's the whole project.
Google Ads · Add to cart → purchase · what we deliver
The implementation, on Google Ads
Capture gclid, gbraid and wbraid on landing
Auto-tagging appends the identifier. Confirm it's enabled in every account — it gets switched off for cleaner analytics URLs more often than you'd expect, and that single setting removes conversion attribution, Enhanced Conversions and offline import in one go.
Persist it to the order record in your store
For a single-session funnel a first-party cookie is usually sufficient — but set it server-side, because a JavaScript cookie is capped at seven days and any returning-visitor purchase falls outside that.
Send purchase sent with the order id from the record
The order webhook fires once per order, carrying the order ID as the deduplication key and the real value and currency. Dispatched to Google Ads through Google's offline conversion import.
Deduplicate and reverse
Conversion actions deduplicate on their own counting setting rather than an event id, so the setting matters more here than the payload. Refunds and cancellations should reverse from the refund webhook, which is the step almost nobody builds.
FAQ
Google Ads · Add to cart → purchase questions, answered
Usually not. Keep it secondary so it's reported but not bid on, unless purchase volume is too thin for Smart Bidding and you've decided deliberately to optimize on a proxy for a while.
The item IDs on the purchase most likely don't match the offer IDs in Merchant Center, or the merchant and feed details aren't being sent with the conversion. Compare one order's item IDs against the feed directly.
Because cart adds are abundant and cheap, and a channel that produces a lot of them and few orders will look excellent to bidding optimized on carts.
It doesn't, as a cookie — the gap is too long. It has to be written onto the order record in your store at the point of ad click, where it lives as a field rather than as browser storage.
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.
Two to four days for the implementation, plus a closed reconciliation window before we'd call it verified. Capture and persistence are the fiddly parts; the import itself is usually an afternoon.
Yes, and the reference pages on this site cover the mechanics. The part that's genuinely tedious rather than clever is keeping gclid, gbraid and wbraid alive through multi-step forms and a checkout hosted on a different domain, which fails silently at every stage.
More on Google Ads · Add to cart → purchase
- Meta · Add to cart → purchaseHow to track add to cart to purchase for Meta Ads
- TikTok · Add to cart → purchaseHow to track add to cart to purchase for TikTok Ads
- Microsoft · Add to cart → purchaseHow to track add to cart to purchase for Microsoft Ads
RELATED GUIDES
Funnels next to add to cart to purchase, and the checks that close it
- Google Ads · App install → purchaseHow to track app install to in-app purchase for Google Ads
- Google Ads · Quiz → segmented offerHow to track quiz completion to segmented offer for Google Ads
- Google Ads × Ecommerce OrdersHow to reconcile Google Ads against your store's order table
- Google Ads · MarketplacesGoogle Ads conversion tracking for marketplace sellers
- Google Ads · FashionGoogle Ads conversion tracking for fashion brands
- Magento → Google AdsConnecting Magento to Google Ads
- Tealium → Google AdsConnecting Tealium to Google Ads
- Google Ads · Reactivation → repeat purchaseHow to track lapsed customer reactivation to repeat purchase for Google Ads
Free · 30 min
Get add to cart to purchase tracked properly on Google Ads
Free30 minutesNo obligation
