How to Set Up WooCommerce Google Ads Conversion Tracking
Create a Purchase conversion action, fire the tag on the WooCommerce order-received page with real order value and ID, then test it. Full setup guide.
To track Google Ads conversions in WooCommerce, you create a Purchase conversion action in Google Ads, then fire that conversion tag on the WooCommerce order-received (thank you) page with the real order total, currency and order ID. The two reliable ways to do it are the free Google Listings & Ads plugin (fastest, about 15 minutes) or Google Tag Manager reading a dataLayer purchase event (more control, about 60–90 minutes).
Whichever route you pick, the setup is not finished until you have placed a real test order and seen the conversion appear in Google Ads. Most broken WooCommerce tracking we inherit was installed correctly and never tested.
What does Google Ads conversion tracking actually track in WooCommerce?
It tracks a specific action on your store and ties it back to the ad click that caused it. For a WooCommerce store, that is almost always the completed purchase, plus a handful of supporting events.
Google matches the action to the click using the GCLID (Google Click Identifier) stored in a first-party cookie by the Google tag or the Conversion Linker. If that cookie is missing or blocked, the sale still happens in WooCommerce but Google never sees it.
The events worth tracking on a typical store:
- Purchase — fires on the order-received page. This is your only primary conversion in 95% of accounts.
- Begin checkout — fires on /checkout/. Useful as a secondary signal and for remarketing audiences.
- Add to cart — high volume, low value. Keep it secondary (observation only), never primary.
- Newsletter signup or account creation — secondary, useful for Performance Max audience signals.
- Phone call or chat — if you sell high-ticket items and people call before buying.
Set only Purchase to "Primary action" in the conversion action settings. Everything else goes to "Secondary action" so Smart Bidding optimizes toward revenue instead of toward people clicking "Add to cart" ten times.
How do you set up conversion tracking in Google Ads for WooCommerce?
Start in Google Ads: Goals > Conversions > Summary > New conversion action > Website. Enter your store URL, choose Purchase as the category, and set it to use "Use different values for each conversion" so revenue is reported per order.
Google's own documentation on setting up website conversion tracking covers the account-side steps. The part that trips people up is the WooCommerce side. Here are the three realistic routes.
Option 1: The Google Listings & Ads plugin (fastest)
Install "Google for WooCommerce" (formerly Google Listings & Ads) from the WordPress plugin directory, connect your Google account, and connect your existing Google Ads customer ID instead of creating a new one. The plugin installs the global site tag and fires a purchase conversion with the order value automatically.
This is the right choice if you run one store, one currency, and you do not need custom logic. Two cautions: it creates its own conversion action, so disable or archive any older purchase conversion to avoid double counting, and it does not give you much control over whether tax and shipping are included in the value.
Option 2: Google Tag Manager with a dataLayer purchase event (most control)
This is what we install for most stores spending over roughly $3,000/month. You push a purchase event into the dataLayer on the order-received page, then build a Google Ads Conversion Tracking tag in GTM that reads the value, currency and transaction ID from it.
Steps:
- Install GTM on the site (a plugin like GTM4WP, or hardcode the container in your child theme's header and body).
- If you use GTM4WP, turn on the eCommerce > "Enhanced eCommerce" tracking option. It pushes a standard purchase event with items, value, currency and order ID.
- In GTM, create Data Layer Variables for ecommerce.value, ecommerce.currency and ecommerce.transaction_id.
- Create a Custom Event trigger on the event name GTM4WP uses (usually purchase).
- Add a Google Ads Conversion Tracking tag with your Conversion ID and Label, mapped to those three variables, fired on that trigger.
- Add a Conversion Linker tag firing on All Pages. Without it, Safari and Firefox clicks drop out.
- Preview, test, publish.
The transaction ID matters more than people think. If a customer refreshes the thank-you page, Google deduplicates on that ID and counts one conversion instead of two.
Option 3: A paid tracking plugin
Plugins in the $100–200/year range handle Google Ads, GA4, Meta and Microsoft tags from one settings screen, including refund handling and excluding tax/shipping from value. Worth it if you do not want to maintain GTM yourself and your store has unusual gateways.
Which method should you choose?
| Method | Setup time | Cost | Enhanced conversions | Best for |
|---|---|---|---|---|
| Google for WooCommerce plugin | 15–30 min | Free | Automatic | Single store, standard checkout |
| GTM + dataLayer | 60–90 min | Free (your time) | Manual mapping | Multi-channel tracking, custom value rules |
| Paid tracking plugin | 30–45 min | $100–200/yr | Usually built in | Stores running 3+ ad platforms |
| Server-side GTM | 1–2 days | $30–120/mo hosting | Yes, server-side | Stores over ~$50k/mo revenue |
How do you test Google Ads conversion tracking before trusting it?
Place a real order and watch it fire. Nothing else counts as a test.
The sequence we use on every WooCommerce build:
- Create a hidden $1 product and set it to "Hidden" catalog visibility so it never appears in search or the Google Merchant Center feed.
- Enable a direct payment method you can complete — Cash on Delivery or Check Payments works. This confirms the thank-you page renders, but also test your real gateway at least once, because off-site gateways behave differently.
- Open GTM Preview (Tag Assistant), go through checkout, and confirm the purchase event appears in the Summary panel with the right value and currency.
- Check the tag fired, not just the event. Click the purchase event in Tag Assistant and verify the Google Ads Conversion Tracking tag is under "Tags Fired".
- Install the Google Tag Assistant Chrome extension and confirm a conversion request goes to googleadservices.com with your conversion ID and a non-zero value.
- Wait up to 3 hours, then check Goals > Conversions in Google Ads. The status column should change from "No recent conversions" to "Recording conversions".
- Refund the test order in WooCommerce so it does not pollute your revenue reporting.
One thing to know: a test order placed without clicking an ad will register in the conversion action status but will not appear in campaign reports, because there is no GCLID. That is normal and does not mean the setup failed.
To test the full click-to-conversion path, click one of your own ads (or append ?gclid=TEST123 to your landing page URL in the same browser session), then buy. Within a day you should see the conversion attributed to the campaign.
Should conversions come from the Google Ads tag or from Google Analytics?
Use the Google Ads conversion tag as your primary purchase conversion, and import GA4 conversions only as secondary actions. Running both as primary is the most common double-counting mistake we find in audits.
The practical differences:
- Google Ads tag reports on the date of the click, uses Google Ads attribution, and feeds Smart Bidding fastest. Values appear within hours.
- GA4 imported conversions report on the date of the conversion, use GA4 attribution, and can lag 24–48 hours. Useful for cross-channel comparison, bad as a bidding signal when speed matters.
If you already import GA4 purchases and now add the native tag, go into Goals > Conversions and flip the GA4 purchase action to Secondary before you publish. Otherwise your reported ROAS doubles overnight and Smart Bidding overbids for two weeks.
Turn on enhanced conversions for web either way. It sends a hashed version of the email address the customer entered at checkout, which recovers conversions that cookies miss. In our e-commerce accounts it typically recovers somewhere in the 5–15% range of purchases, though your number depends on browser mix and consent rates.
What is server-side conversion tracking and does a WooCommerce store need it?
Server-side tracking sends the conversion from your server (or a server-side GTM container) to Google, instead of from the shopper's browser. It survives ad blockers, Safari's cookie limits and browser extensions that strip tracking requests.
You need it when: ad blocker usage in your audience is high (developer, gaming and privacy-adjacent niches), your WooCommerce order count is consistently 20%+ higher than Google Ads reported conversions after you have fixed everything else, or you are spending enough that a 10% data gap costs real money.
You do not need it when you run under about $5,000/month in ad spend. The setup cost and the monthly Cloud Run or hosted container bill ($30–120/month typically) is not worth a few recovered conversions.
A middle path that costs nothing: keep client-side GTM, but add enhanced conversions and the Conversion Linker, and make sure your consent banner is not blocking the Google tag by default for users who have consented. That closes most of the gap for standard retail stores.
If your tracking already looks wrong and you are not sure whether it is a tag problem or a campaign problem, work through the diagnostic steps for Google Ads not working before you spend two days on server-side infrastructure.
How does offline conversion tracking work with WooCommerce or HubSpot?
Offline conversion tracking closes the loop when the sale finishes somewhere other than the website — a phone order, a quote that converts three weeks later, or a B2B deal that closes in your CRM.
The mechanism is the same everywhere:
- Capture the GCLID from the landing page URL into a hidden form field or a WooCommerce order meta field.
- Store it with the lead or order in your CRM.
- When the deal closes, upload the GCLID with a conversion name, timestamp and value back to Google Ads.
Google supports offline conversion imports via manual CSV upload, Google Sheets on a schedule, or the API. For a WooCommerce store taking phone orders, a simple weekly Sheets upload is usually enough.
HubSpot Google Ads conversion tracking
HubSpot has a native Google Ads integration (Marketing Hub Professional and above). Connect the ad account in HubSpot Settings > Marketing > Ads, then create an "Ads event" tied to a lifecycle stage or deal stage. HubSpot pushes the conversion back to Google Ads with the GCLID it captured on the form.
Two requirements people miss: the HubSpot tracking code must be installed on the landing pages, and the form must be a HubSpot form (or pass the GCLID through to HubSpot via a hidden field). Native WooCommerce checkout does not pass the GCLID to HubSpot unless you add it as order meta and sync it.
If your WooCommerce store also sells wholesale or takes quote requests, this is the setup that stops Google from optimizing toward low-value retail orders only. It is the same idea we use when building Google Ads campaigns for e-commerce that need to weigh different order types differently.
Why don't WooCommerce and Google Ads numbers match?
They never match exactly, and you should stop trying to make them. A 5–15% gap is normal. A gap over 30% means something is broken.
Normal causes of the gap:
- Attribution date — Google Ads credits the conversion to the day of the click, not the day of the sale. A sale today from last Tuesday's click lands on last Tuesday.
- Conversion window — the default click window is 30 days. Sales from a click 45 days ago are invisible unless you extend it (up to 90 days).
- Attribution model — data-driven attribution splits credit across keywords, producing decimals like 0.47 conversions.
- Time zone — your Google Ads account time zone may differ from your WordPress site time zone. Check both.
- Consent — users who decline tracking do not fire the tag.
- Non-ad orders — organic, email and direct orders show in WooCommerce and never in Google Ads.
Causes that mean something is actually broken:
- Off-site gateways skipping the thank-you page. PayPal Standard and some bank redirect gateways can land customers back on the order page without firing JavaScript. Test every gateway you accept.
- Page caching stripping the dataLayer. Full-page cache plugins sometimes cache the order-received page. Exclude /checkout/order-received/ from caching in WP Rocket, LiteSpeed or your host's cache rules.
- Currency mismatch. If your conversion action is set to USD and you pass CAD values without a currency parameter, Google reads CAD numbers as USD and your ROAS looks 35% better than reality.
- Value including or excluding tax and shipping inconsistently between GA4 and Google Ads, so the two never reconcile.
- Two tags firing. The plugin and your GTM container both installed a purchase tag. Check the network tab for duplicate conversion requests.
Build a simple monthly reconciliation: WooCommerce revenue from Google / Paid Search in your analytics, versus Google Ads conversion value. If the ratio stays steady month to month, your tracking is stable even if the absolute numbers differ.
What should you do after the tag is live?
Set the conversion window and value rules once, then leave them alone for at least 30 days so Smart Bidding has consistent data.
Checklist for the first month:
- Purchase set to Primary; everything else Secondary.
- Click-through conversion window at 30 days (extend to 60 if your average time to purchase is over a week).
- Enhanced conversions on and reporting "Recording enhanced conversions".
- Conversion Linker firing on All Pages.
- Refunds handled — either via a plugin that sends negative values, or by accepting a small overstatement.
- A calendar reminder every quarter to re-run the test order, because theme updates and plugin updates break tags silently.
Once the data is trustworthy, the bottleneck usually moves from tracking to the pages themselves. If your tracked conversion rate sits below 1.5% on paid traffic, spend your next hour on e-commerce conversion rate optimization rather than on bid adjustments.
If you would rather hand this off, the Google Ads team at Lead Key Agency installs and verifies WooCommerce tracking as part of onboarding, including enhanced conversions, offline imports and a documented test order you can re-run yourself.
The short version
Create one Purchase conversion action with dynamic values. Fire it on the order-received page with the order total, currency and order ID. Add the Conversion Linker and enhanced conversions. Place a real test order, confirm it in Tag Assistant and in the Google Ads status column, then refund it.
That is the whole job. Everything else — server-side, offline imports, HubSpot sync — is an upgrade you add once the basics are proven to work.
Want someone to check your setup and tell you exactly what is leaking? Book a free 30-minute strategy call and we will walk through your conversion actions with you.
Want the Lead Key team to do this for your business?
A free strategy call comes with an audit of your website and Google listing, and a written plan you keep either way.
Frequently asked questions
Where exactly does the WooCommerce conversion tag need to fire?
On the order-received page, which lives at /checkout/order-received/{order-id}/ by default. The WordPress hook most plugins use is woocommerce_thankyou. If you use a custom thank-you page or a one-page checkout plugin, confirm that URL still loads JavaScript and is excluded from your page cache.
Should the conversion value include tax and shipping?
Most stores exclude both and send the net product subtotal, because that is closer to the revenue you actually keep. The important thing is consistency: use the same rule in Google Ads, GA4 and Meta so your reports reconcile. If you switch, note the date so you do not misread the step change as a performance drop.
How do I handle refunds so my ROAS is not overstated?
Google Ads accepts negative conversion adjustments through offline conversion adjustment uploads, or through a tracking plugin that sends a retraction when an order status changes to refunded. If your refund rate is under about 3%, many stores just accept the overstatement and factor it in manually. Above 10%, set up adjustments properly.
Why does Google Ads say 'No recent conversions' after I placed a test order?
The status can take up to three hours to update, and some accounts take longer. If it still shows nothing after a day, check that the Conversion ID and Label in your tag match the conversion action exactly, that the tag fired in Tag Assistant, and that your consent banner is not blocking googleadservices.com before the tag runs.
Do I need both the Google tag (gtag.js) and Google Tag Manager?
No, and running both usually causes duplicate conversions. Pick one. If GTM is your container, remove any hardcoded gtag conversion snippet from the theme and any plugin that injects its own Google Ads tag, then verify in the browser network tab that only one conversion request fires per purchase.
Can I track conversions if customers check out through PayPal or Stripe redirect?
Yes, as long as the customer is returned to your WooCommerce order-received page after payment. Some older gateway configurations drop them on a generic page or rely on a webhook to mark the order paid, which means no JavaScript fires. Test each gateway individually with a real order and, if the thank-you page is skipped, switch to server-side or offline conversion upload for those orders.
How long should I wait before judging campaign performance after fixing tracking?
Give Smart Bidding 2–4 weeks and at least 30 conversions after the fix before changing bid strategies. Conversion data before and after a tracking change is not comparable, so annotate the change date and compare only forward from there.

Mark writes about what actually gets small businesses customers from Google, social media and AI: the campaigns, the listings, the websites and the numbers behind them. Every article is built from real search demand and the work our team ships for clients across the US and Canada.


