July 5, 2026
Feed the Ad Machines Better Data: The Complete Conversion Tracking Fix for WooCommerce Stores

Here’s an uncomfortable truth about running ads in 2026: you’re not really running your ads anymore. Google and Meta’s AI is. Smart bidding decides what you pay per click. Advantage+ decides who sees your ads. The algorithms test your creative, pick your audiences, and spend your money.
You have exactly one job left, and it’s the job most store owners are failing at: feeding those machines accurate conversion data.
The ad platforms’ AI is like a hunting dog. Give it a clean scent and it will find your customers with terrifying efficiency. Give it a confused scent — missed conversions, missing purchase values, duplicate events — and it will enthusiastically drag you into a swamp while charging you for the privilege.
Garbage in, garbage bidding out.
This is the complete fix. It’s a few hours of unglamorous work, it costs nothing, and it’s worth more than any targeting hack, creative trick, or guru course you’ll find this year. We’ve done this exact process on our own six-figure WooCommerce store and on client accounts, and broken tracking is the single most common problem we find — including on accounts spending five figures a month.
Coffee up. Let’s go.
Part 1: Why This Matters More Than Anything Else You Could Do
Before the how, thirty seconds on the why — because understanding this changes how seriously you take the rest.
Smart bidding learns from your conversion data and nothing else. When Google’s Maximize Conversions or Meta’s sales campaigns decide whether to bid on a given user, they’re pattern-matching against the conversions you’ve reported. Every purchase your tracking misses is a lesson the AI never learns. Every duplicate it reports is a lie the AI believes.
The damage compounds. A store missing 30% of its conversions isn’t just underreporting results — the bidding AI is learning from a distorted sample of who its customers are. It optimizes toward the customers it can see, and drifts away from the ones it can’t. Bad data doesn’t just hide your performance; it actively degrades it, month after month.
And here’s the kicker: the platforms will never tell you your tracking is broken. Their dashboards will happily show you results from whatever data they’re getting. Plenty of stores run “profitable” campaigns on broken tracking for years — either leaving money on the table or losing it — with no idea.
So we verify everything ourselves. Trust nothing, test everything.
Part 2: Verify Google Ads Purchase Tracking End-to-End
Step 1: Find out what you’re actually working with (10 minutes)
First, map your current setup. In your WordPress admin, figure out how Google tracking is installed. It’s almost always one of these:
- Google for WooCommerce (the official plugin, formerly Google Listings & Ads)
- A tag plugin like GTM4WP or Site Kit pushing data to Google Tag Manager or gtag
- An SEO/marketing plugin with tracking bolted on
- Hand-pasted code in your theme from a developer three years ago
- Some combination of the above — which is where duplicate conversions come from
Write down every plugin and code snippet that mentions Google, gtag, GTM, or Ads. If you find two or more things sending purchase events, you’ve likely found your first problem already: duplicate conversion counting, which makes your results look better than they are and trains the bidder on inflated numbers.
One tracking pathway per platform. Pick one, remove the rest.
Step 2: Check the conversion action in Google Ads (10 minutes)
In Google Ads, go to Goals → Conversions → Summary. You’re looking for your purchase conversion action. Check four things:
- Status should say “Recording conversions.” If it says “Inactive” or “No recent conversions” and you’ve had sales this week — broken.
- The counting setting should be “Every” for purchases (someone buying twice is two conversions), not “One.”
- Value column should show varying real numbers, not a flat default like “1” for every conversion. Flat values mean you’re not passing purchase amounts — we’ll fix that in Part 4.
- Primary vs. secondary: your purchase action should be marked Primary (it feeds bidding). If you also have a GA4-imported purchase event and a Google Ads tag purchase event both marked Primary, you’re double-counting — set one to Secondary. This exact misconfiguration is everywhere.
Step 3: The test order (20 minutes + waiting)
Now for the ground truth. Dashboards can lie; a real order can’t.
- Click one of your own Google ads. Yes, really — search your brand name, click your ad (a few cents well spent), because you need the click ID (GCLID) in the URL for attribution to work end-to-end. Clicking your site from a bookmark tests the pixel, but not attribution.
- Place a real order. Use a real payment method on a cheap product — you’ll refund it after. Don’t use a 100% discount code; some tracking setups skip zero-value orders.
- Confirm the order completed in WooCommerce and note the exact order total and time.
- Wait, then check Google Ads. Conversions typically appear within 3 hours but can take up to 24. Go back to the conversion action and look for your test: right count (one), right value (your order total), attributed to the campaign you clicked.
If the conversion shows with the right value: congratulations, you’re ahead of half the stores out there. Refund your order and move to Part 3.
If it doesn’t show, or shows without a value: something in the chain is broken. The usual suspects, in order of frequency:
- Consent mode / cookie banner blocking tags. If your cookie consent plugin blocks Google tags until acceptance and you didn’t accept during the test, no data fired. Make sure consent mode v2 is configured, not just a wall that silently kills tracking.
- Thank-you page never loads the tag. Express checkouts, payment redirects (PayPal, Klarna), or aggressive caching on the order-received page can prevent the purchase event from firing. Check whether your integration fires server-side (immune to this) or browser-side (vulnerable to it).
- Duplicate plugins fighting. Two integrations can conflict and result in zero events instead of two.
- The tag simply isn’t on the site. Use Google Tag Assistant (tagassistant.google.com) to connect to your site, run through a checkout on staging, and watch which tags actually fire on the order-received page.
Fix, re-test with another order, repeat until the numbers match. This loop is tedious. It is also the highest-ROI tedium in digital marketing.
Step 4: Turn on Enhanced Conversions (10 minutes)
With basic tracking verified, flip on Enhanced Conversions (Google Ads → your conversion action → Settings → Enhanced conversions). This sends hashed first-party data (email, mostly) alongside the conversion, letting Google recover attribution that cookies lose — which matters more every year as browsers tighten up. Most WooCommerce Google integrations support it with a checkbox. Typical recovery is meaningful: stores commonly see reported conversions rise 5–15% purely from attribution recovery, not new sales. That’s 5–15% more training signal for the bidder.
Part 3: Verify Meta Purchase Tracking (Pixel + CAPI)
Meta tracking has an extra wrinkle Google doesn’t: since iOS 14, browser-side pixel data alone is Swiss cheese. You need two pathways working together — the browser Pixel and the Conversions API (CAPI), which sends events server-to-server and survives ad blockers, iOS privacy prompts, and browser restrictions.
Step 1: Check what’s firing (10 minutes)
Go to Meta Events Manager → Data Sources → your Pixel → Overview. Look at your Purchase event:
- Connection method should show both “Browser” and “Server” traffic. Browser-only means you’re missing a big slice of conversions (often 20–40% post-iOS-14). Server-only is actually fine; both is best.
- Event Match Quality score on the Purchase event: aim for “Good” (6+) or better. Low scores mean you’re sending events without enough customer info (email, name, phone — hashed automatically) for Meta to match them to users. Your WooCommerce integration’s settings usually control which parameters get sent; turn on everything it offers.
- Deduplication: if browser and server both report, each event pair needs a matching event ID so Meta counts it once. Events Manager will warn you about deduplication issues right on the overview screen. Duplicate purchases inflate your ROAS and mistrain the bidder — same disease as the Google double-count, different platform.
If you have no CAPI at all: the official Facebook for WooCommerce plugin includes it, as do FunnelKit, and most quality tracking plugins. You do not need to pay a monthly fee for a “CAPI gateway” service for a standard WooCommerce store — the free integrations handle it.
Step 2: The Test Events tool (15 minutes)
Meta gives you a live debugger, so use it: Events Manager → your Pixel → Test Events tab.
- Open your store in another tab with the test event code active (the tool shows you how).
- Run a full checkout with a real cheap order.
- Watch the event stream: you want to see Purchase fire with the correct value and currency, from both browser and server, deduplicated.
Common failures and fixes:
- Purchase fires with value 0 or no value: your integration isn’t passing order totals. Check its settings for “send purchase value” or similar. Value-less purchases make Advantage+ and value optimization useless.
- Purchase fires twice: deduplication broken — usually two plugins both sending, or event IDs not matching between Pixel and CAPI. One integration, not two.
- Purchase never fires: same suspects as Google — consent banner, redirect checkout flows, caching on the thank-you page. CAPI fixes most of these because it fires from your server when the order is created, regardless of what the browser does. If you can only make one pathway bulletproof, make it CAPI.
Refund your test order. (Pro tip from running our own store: keep a $5–10 “tracking test” product hidden in your catalog. You’ll use it more than you think.)
Part 4: Pass Real Purchase Values, Not Just Counts
This is the shortest section and pound-for-pound the most valuable.
A conversion count tells the AI that someone bought. A conversion value tells it what kind of buyer they were. A $12 sticker order and a $340 gear order are wildly different customers, and the bidding AI can only tell them apart if you send values.
Without values, “Maximize Conversions” happily fills your store with $12 orders because they’re cheapest to get. With values, you unlock value-based bidding (Maximize Conversion Value, target ROAS on Google; value optimization on Meta) that hunts for the $340 buyers.
The checklist:
- In your Google integration plugin’s settings, confirm purchase/order value is being sent — then verify it in Google Ads (varying values in the conversion column, per Part 2).
- In your Meta integration, same thing — then verify in Test Events (value and currency present, per Part 3).
- Decide: revenue or profit? Default is order revenue. But if your margins vary wildly across products, revenue-based bidding can chase high-revenue, low-margin sales. Some integrations support sending margin-adjusted values; that’s an advanced move, but know it exists. At minimum, know which number your AI is optimizing and whether that number correlates with money in your pocket.
- Check currency matches between your store and ad accounts. A store sending EUR values to a USD ad account produces quietly, hilariously wrong ROAS.
Do NOT flip your bidding strategy to value-based the same day you fix values. That’s a Part 6 problem. Let clean values accumulate for at least 2–4 weeks first, so the strategy has real data to learn from on day one.
Part 5: UTM Parameters — Your Independent Audit Trail
Everything so far improves the data the platforms see. Now build the data you see — because here’s a rule to tattoo somewhere: platform-reported results always flatter the platform.
Google says the sale was Google’s. Meta says the same sale was Meta’s. Both use attribution windows and modeling that credit themselves generously. Add their claimed conversions together and you’ll routinely get more sales than your store actually had. The referee for these disputes is your own first-party data, and UTMs are how you collect it.
The structure
UTMs are just tags appended to your ad URLs. Pick a convention and never deviate — consistency matters more than the specific choices:
?utm_source=facebook
&utm_medium=paid
&utm_campaign={{campaign.name}}
&utm_content={{ad.name}}
Rules that save future-you from misery:
- Lowercase everything.
Facebookandfacebookbecome two different sources in your reports. - No spaces — use hyphens or underscores.
- utm_source = the platform (facebook, google, tiktok, email, podcast)
- utm_medium = the type (paid, organic, email)
- utm_campaign / utm_content = which campaign and which ad
Platform setup
Google Ads: auto-tagging (GCLID) handles Google↔GA4 attribution automatically — confirm it’s on under Account Settings. If you also want explicit UTMs for your own database, set a tracking template at the account level under Account Settings → Tracking, using ValueTrack parameters like {campaignid} — one template, every ad tagged forever.
Meta: in Ads Manager, every ad has a “URL parameters” field at the bottom of the ad setup. Paste your UTM string using Meta’s dynamic parameters ({{campaign.name}}, {{adset.name}}, {{ad.name}}) once, then duplicate ads from tagged ads going forward. Dynamic parameters mean you never hand-type a campaign name again — and never typo one either.
Everything else (email footers, podcast links, QR codes on stickers): build links with a UTM generator or a simple spreadsheet formula. If you promote it, tag it.
Capturing UTMs on your side
GA4 records UTMs automatically. But the real power move for a WooCommerce store is storing the UTM data on the order itself — first-party attribution that lives in your database, immune to platform spin. WooCommerce ships with basic order attribution built in now (you’ll see origin data on orders), and dedicated attribution plugins go deeper: first-click vs. last-click, full touch history, revenue by campaign inside your own admin.
We built exactly this into our own tooling because it settles arguments instantly. When Meta claims $9,000 attributed revenue and your own order data shows $4,500 came in with Meta UTMs, the truth is somewhere in that gap — but now you’re negotiating with evidence instead of taking the platform’s word for it.
The monthly audit ritual (15 minutes)
Once a month, build a simple three-column comparison for each platform: platform-claimed conversions/revenue, GA4’s number, and your WooCommerce order-attribution number. They will never match exactly — attribution windows differ, and that’s fine. What you’re watching for is the ratio holding steady. If Meta usually claims 1.5× what your first-party data shows and suddenly claims 3×, something changed — tracking broke, attribution settings shifted, or performance genuinely moved. Either way, you caught it in weeks instead of quarters.
Part 6: The Bidding Strategy Warning — Learn From Our Scars
Now that your data is clean, you’ll be tempted to immediately switch bidding strategies to take advantage. Slow down. This section exists because we learned it with real money.
Every significant change to a campaign resets its learning phase. Switching bid strategies (Maximize Conversions → Maximize Value), changing conversion goals, major budget jumps (roughly 25%+ overnight), big audience or creative overhauls — each one tells the AI “forget what you knew, start re-learning.” During re-learning, performance is volatile and usually worse. Meta literally labels it “Learning” on the ad set; Google does the same dance without always admitting it.
We watched this firsthand on our own store: a switch from Maximize Conversions to Maximize Value — a reasonable-sounding upgrade — cratered performance off a cliff, not a dip. Because it wasn’t a small tweak. It changed the fundamental question the AI was answering, from “who is most likely to buy?” to “who will spend the most?” — and it had to relearn the answer from scratch, on our ad budget, in real time.
The rules that keep you out of the swamp:
- One variable at a time. Change the bid strategy OR the budget OR the audience. Never two in the same week. If performance moves, you need to know why.
- Give every change two full weeks before judging. Learning phases genuinely take 1–2 weeks (Meta’s rough benchmark is ~50 conversion events per ad set per week to exit learning; low-volume stores take longer). Judging a strategy on day 4 is judging a puppy on day 4 of training.
- Sequence value-based bidding deliberately. Fix value tracking (Part 4) → let clean values accumulate 2–4 weeks under your current strategy → then switch to value optimization → then hold everything else still for two more weeks. That’s a month-long runway, and it’s the difference between an upgrade and a crater.
- Keep a change log. A dead-simple spreadsheet: date, campaign, what changed, why. When performance shifts three weeks later, this log is how you diagnose it in minutes instead of retroactively guessing. Every account we manage has one. Every account should.
- Never make changes right before your peak season. Learning-phase volatility during your Black Friday is self-inflicted pain. Freeze strategy changes 4–6 weeks before any period you can’t afford to fumble.
Part 7: The Ongoing Maintenance Schedule
Tracking isn’t fix-once. Plugins update, checkout flows change, consent banners get “improved,” and things silently break. The maintenance rhythm:
Monthly (30 minutes):
- Run the three-way attribution comparison (platform vs. GA4 vs. WooCommerce order data)
- Glance at Events Manager for deduplication or match-quality warnings
- Glance at Google Ads conversion status for anything “inactive”
Quarterly (1 hour):
- Full test order through each ad platform’s click path, verify end-to-end
- Confirm no new plugin has added a second tracking pathway
- Review the change log against performance trends
After ANY of these events, re-test immediately:
- Checkout plugin update or replacement
- New payment method added (express checkouts are notorious tracking-breakers)
- Theme change
- Cookie/consent plugin change
- Any tracking or SEO plugin update
That last list is the one nobody follows and everybody should. The most common “our ads suddenly stopped working” call we get traces back to a routine plugin update two weeks earlier that quietly killed the purchase event.
The Bottom Line
None of this is glamorous. There’s no growth hack here, no secret audience, no creative formula. Just plumbing.
But the AI running your ads is only as smart as the data you feed it — and most of your competitors are feeding theirs garbage. Clean, complete, value-rich conversion data with an independent first-party audit trail is a genuine competitive advantage precisely because it’s boring and everyone skips it.
Two to four hours of work. Zero budget. Compounding returns every month the machines bid with a clean scent instead of a confused one.
At Gorilla Public, tracking verification is the first thing we do on every ad account we touch — before strategy, before creative, before anything. Because strategy built on broken data isn’t strategy. It’s astrology with a budget.
Want your tracking audited by someone who’s fixed this a hundred times? Get an ad tracking audit from Gorilla Public →