Get your WooCommerce tracking to 95%+ accuracy guaranteed in writing.
PixelYourSite, GTM4WP, the official Meta plugin, Site Kit — most Woo stores have at least three of them stepping on each other. Events double-fire, dedup is broken, EMQ is stuck at 4. Meta keeps showing you a 4× ROAS that doesn't match what your bank account is saying. We tear it all out and replace it with one clean server-side stack.
Free30 minutesNo obligation
WooCommerce · what breaks
Where WooCommerce tracking falls apart
- 01
Plugins fight each other
PixelYourSite, GTM4WP, official Meta plugin, Google Site Kit — most stores have 3 of them running simultaneously, double-firing and breaking dedup.
- 02
Browser pixels miss a substantial share of orders
Same iOS / ad-blocker problem as every other platform — but on Woo it's worse because the thank-you page often loads with cached state and the pixel never fires.
- 03
Page builders inject scripts unpredictably
Elementor, Divi, WPBakery — each one can break the dataLayer, delay tag firing, or strip event listeners. Most audits we run find at least one builder-induced bug.
- 04
Variable products & subscriptions break events
Variable, grouped, and subscription products often fire AddToCart with the wrong content_id or value. Catalog matching collapses.
WooCommerce · the fix
What you get back — WooCommerce
Reliable Purchase events
Server-side fires from order_status_changed=processing — 100% reliable, regardless of thank-you-page behavior.
Variable & subscription products handled
We build a proper WooCommerce dataLayer that handles variations, subscriptions, bundles, and gift cards correctly.
WP Consent API wired to Consent Mode v2
Compatible with Complianz, Cookiebot, Real Cookie Banner — granted/denied signals flow through to Google and Meta.
Plugin chaos cleaned up
We retire conflicting plugins and consolidate on one clean GTM-based stack you can actually maintain.
WooCommerce · architecture
How a WooCommerce order should reach the ad platforms
WooCommerce gives you full server access, which is its real advantage. The order object is right there in PHP, and you never have to guess what the customer bought.
- 1
Click identifiers captured at first touch
Click IDs are captured at landing and written to a first-party cookie, then attached to the order as post meta at checkout, so the attribution survives into the order record rather than dying with the session.
- 2
The browser sends the fast, fragile copy
The browser fires the standard ecommerce events from the data layer. On WooCommerce this is where duplication starts: it is normal to find two or three tracking plugins each pushing their own purchase event on the same order-received page.
- 3
The order itself is the source of truth
The woocommerce_thankyou and woocommerce_payment_complete hooks fire server-side against a real order object. woocommerce_payment_complete is the safer of the two, because thankyou fires again on every page refresh.
- 4
A server container sends the authoritative event
A small plugin or a webhook posts the completed order to a GTM server container on your own subdomain, keyed on the WooCommerce order ID.
- 5
Customer identity raises match quality
The order has billing email, phone, name, city, state and postcode. Hashed server-side, these deliver the match quality lift that no browser-only WooCommerce setup can reach.
WooCommerce · events
The event set we build on WooCommerce, and where each one comes from
WooCommerce hooks give you a genuine server-side trigger for every money event, including ones with no browser session at all.
| Event | Fires when, on WooCommerce | Key parameters | Sent from |
|---|---|---|---|
| view_item | A single product template renders | item_id, value, currency, event_id | Browser + server, deduped |
| add_to_cart | woocommerce_add_to_cart fires, including AJAX adds from archive pages | item_id, quantity, value, currency, event_id | Browser + server, deduped |
| begin_checkout | The checkout page loads with a non-empty cart | value, currency, num_items, event_id | Browser + server, deduped |
| purchase | woocommerce_payment_complete fires against the order object | order_id, value, currency, items[], hashed email/phone/name/address, event_id | Server authoritative |
| refund | woocommerce_order_refunded fires in admin | order_id, value, currency | Server only |
| subscription_renewed | WooCommerce Subscriptions processes a renewal — no browser is present | value, currency, plan | Server only |
WooCommerce · normal or broken
WooCommerce-specific false alarms and real faults
Most WooCommerce tracking problems trace to plugins rather than to the platform.
Normal, not a fault
Order status changing after the conversion fired
Pending, processing and completed are separate states. Firing on payment complete and later seeing the status change is normal WooCommerce behavior.
Manual and phone orders absent from ad platform data
They had no web session. They belong in your revenue totals but not in your ad conversions.
Ad platforms report more conversions than you have orders
Meta credits a 7-day click and 1-day view; Google credits on click date. Two platforms can each claim the same sale. Compare each one to your order records separately and never add them together.
Recent days always look worse than they finish
Conversions are credited back to the date of the click, so yesterday's return on ad spend is understated and will keep improving for several days. This is attribution working, not data arriving late.
Actually broken
Two or three tracking plugins all firing purchase
The single most common WooCommerce fault. Each plugin works correctly in isolation and together they multiply your reported conversions.
Firing on woocommerce_thankyou with no order-key guard
The order-received page can be refreshed, bookmarked and revisited. Every reload fires another conversion unless the order is checked for an already-tracked flag.
Caching plugins serving a stale data layer
Page caching can serve one customer's cart values to the next visitor. The events look perfectly healthy and the values are somebody else's.
Order value including or excluding tax and shipping inconsistently
Different plugins compute the total differently. Value-based bidding then optimizes against a number that does not match your revenue.
WooCommerce · prove
How we prove the WooCommerce build is correct
The tag firing proves the tag fires. These prove the numbers are right.
Source of truth
WooCommerce order records in WordPress
- The purchase hook confirmed as payment_complete with a per-order guard, tested by refreshing the order-received page and confirming no second event.
- Page caching tested with a warm cache, confirming the data layer carries the correct customer's values.
- Order total treatment for tax and shipping documented and consistent across every destination.
- Purchase count within a few percent of woocommerce order records in wordpress for a fully closed week, matched on order ID rather than on totals.
- No order ID appearing twice in any platform's event log.
- Deduplication confirmed at every destination that supports it.
- Test and staff orders excluded, with the exclusion confirmed active rather than merely configured.
- The same reconciliation repeated 30 days later, because a setup that works once and then drifts is the harder failure to catch.
WooCommerce · free audit
What we check in the free audit
- Plugins fight each other
- Browser pixels miss a substantial share of orders
- Page builders inject scripts unpredictably
- Variable products & subscriptions break events
Checked against
WooCommerce order records in WordPress
Free30 minutesNo obligation
WooCommerce · when not to buy
When a WooCommerce rebuild is not what you need
We would rather say this now than three weeks into an engagement.
- You take under about 50 orders a month and spend little on ads. A single well-configured tracking plugin, with the others removed, will serve you.
- Your store is not advertised at all. Server-side tagging solves ad-platform signal loss; if there is no ad platform, there is no gain.
- You have unresolved plugin conflicts breaking checkout itself. Fix checkout first — tracking a broken checkout accurately is not the win it sounds like.
WooCommerce · what we deliver
Deliverables — WooCommerce
Server-side GTM container
Hosted on your subdomain or via Stape. Full ownership.
WooCommerce-specific dataLayer
Custom plugin or mu-plugin that emits clean events for view_item, add_to_cart, begin_checkout, add_payment_info, purchase — with correct values, currencies, and content_ids.
Meta CAPI with full advanced matching
Hashed email, phone, fn, ln, ct, st, zp, country, fbc, fbp, client_ip, client_user_agent, external_id.
Google Enhanced Conversions
Server-side hashed user data for Google Ads + GA4.
TikTok Events API (optional)
Same dedup pattern applied for TikTok if you run that channel.
QA + Notion runbook
Live test, EMQ verification, dedup check, full handover docs.
Written guarantee
95%+ tracking accuracy
Measured against WooCommerce order records in WordPress. Miss it and we keep working at no cost.
Pricing
Pick the package that fits your ad spend
Browser-side starter
$400One-time fee · lifetime ownership
Foundation pixel install for your WooCommerce store. Honest disclosure: this is a starting point only. If you spend $1K+/month on paid media you should be on the 1st-party server-side tier — rather than quote you a recovery percentage, we'll show you how to measure your own gap: compare what the platforms reported against the orders in your backend for the same week. That ratio is the entire argument, and it's yours to check — see trackingconsulting.com/measurement-accuracy-methodology.
- One-time fee · zero monthly · zero SaaS lock-in
- WooCommerce dataLayer (clean spec)
- GA4 e-commerce events
- Meta Pixel · Google Ads tag
- TikTok Pixel · Microsoft UET
- Consent Mode v2 banner integration
- QA test orders + 7-day support
- No CAPI · no iOS recovery
1st-party server-side
Recommended$800One-time fee · most popular
The done-for-you package every WooCommerce store running paid ads should start with. We build the entire 1st-party server-side stack on your subdomain — Meta, Google, TikTok, Microsoft, LinkedIn all fed from the server. Recovers the conversions iOS, Safari ITP, ad blockers and cookie deprecation hide today. You don't lift a finger. Built in 2–4 days · accurate data in 7 days.
- One-time fee · save vs SaaS subscriptions over 5 years
- Fully recovered + built in 2–4 days · accurate data in 7 days
- Everything in browser-side starter
- 1st-party server-side GTM (your subdomain)
- Meta CAPI · full advanced matching · 8+ EMQ
- Google Enhanced Conversions (Web + Leads)
- TikTok Events API · Microsoft UET server
- Deterministic browser ↔ server deduplication
- Live EMQ verification + screenshots
- Notion runbook + 30-day support · zero recurring
Full 1st-party stack
$1,800One-time fee · lifetime ownership
Every paid-media channel running 1st-party server-side, end-to-end. For WooCommerce brands spending $30K+/month who can no longer afford attribution leaks. Pay once. Own everything. Includes Pinterest + Snap + Reddit + LinkedIn CAPI, Klaviyo identity stitching, BigQuery + Looker Studio.
- One-time fee · save 6-figure SaaS subscriptions over 5 years
- Everything in 1st-party server-side tier
- Pinterest · Snapchat · Reddit · LinkedIn · X CAPIs
- Klaviyo identity stitching (if used)
- BigQuery export (server logs + GA4)
- Looker Studio attribution dashboard (branded)
- Multi-region / multi-currency / EU residency
- GDPR-audit-ready Consent Mode v2 wiring
- 60-day support · optional retainer · no lock-in
FAQ
WooCommerce questions, answered
Usually yes — most plugins double-fire when paired with server-side. We replace them with a thinner custom dataLayer plugin so you keep one source of truth.
Yes. The server-side stack is independent of your front-end. We do test all key checkout flows on your live theme to make sure nothing's blocking events.
Subscription renewals are tracked as separate purchase events with the correct recurring value. We handle initial signup, renewal, cancellation, and pause.
Yes. We wire to whichever consent banner you already use (Complianz, Cookiebot, Real Cookie Banner) and route signals via Google Consent Mode v2.
More on WooCommerce
- GuideWooCommerce + Meta Conversions API: Stop Losing Purchases to Ad Blockers
- GuideServer-Side Tracking Explained: What It Is, How It Works, and Who Actually Needs It (2026)
- GuideServer-Side Tracking for Shopify: The 2026 Setup That Actually Works
- Free toolFree WooCommerce audit
- Free toolWooCommerce dataLayer spec
- Free toolMeta EMQ predictor
- GA4 and WooCommerce mismatchWhy don't GA4 and WooCommerce revenue match?
- WooCommerce duplicatesStopping WooCommerce from counting one order twice
- WooCommerce server-sideServer-side tracking for WooCommerce
Free · 30 min
Get a free WooCommerce tracking audit
Free30 minutesNo obligation
