Server-side tracking for WooCommerce
WooCommerce is PHP you control, which makes it one of the easiest platforms to source money events correctly. woocommerce_payment_complete and the processing status transition each fire exactly once per order, carrying the order ID, totals and customer data. That removes the whole class of refresh-and-gateway duplication rather than guarding against instances of it.
Free30 minutesNo obligation
WooCommerce server-side · what breaks
What goes wrong on WooCommerce
- 01
The same order counted several times
The order-received page is refreshable, bookmarkable and shareable.
- 02
Different gateways returning differently
Card, PayPal and offsite redirects each land the customer somewhere different, and the untested one is where conversions go missing.
- 03
Plugin conflicts
A tracking plugin and a hand-built tag both firing a correct purchase produces two correct purchases.
- 04
Orders paid later never counted
Bank transfer and cheque sit in on-hold and complete outside any browser session.
WooCommerce server-side · the fix
What changes — WooCommerce server-side
One conversion per order
Fired from a status change, not a page view.
Refreshes and back-buttons harmless
Because the page no longer triggers anything.
Every gateway path covered
Including the ones that redirect twice.
WooCommerce server-side · architecture
What WooCommerce exposes to a server container
You control the server, so the money event can come from the place that already knows the truth.
- 1
Purchase from the order hook
woocommerce_payment_complete fires once, from the order, with no browser involved.
- 2
Order ID as the deduplication key
Available identically to PHP and to the browser.
- 3
Customer data from the order object
Normalized then hashed at the container.
- 4
Refunds from woocommerce_order_refunded
So revenue can fall as well as rise.
- 5
Caching bypassed for dynamic values
A cached data layer is a real WooCommerce failure and easy to mistake for a tag fault.
WooCommerce server-side · diagnose
Where WooCommerce tracking breaks, in diagnostic order
Each check rules out a class of cause, so by the last one there is usually a single explanation standing.
- 01
Refresh a confirmation page and watch
The fastest reproduction of the most common WooCommerce fault.
- 02
Match platform purchases to order IDs
Repeated IDs prove duplication rather than over-attribution.
- 03
List every tracking-adjacent plugin
Then check the ones nobody mentioned.
- 04
Test each gateway's return path
They differ more than people expect.
- 05
Check whether a caching plugin is active
And whether the confirmation page is excluded from it.
WooCommerce server-side · prove
The QA evidence — WooCommerce server-side
Run on WooCommerce specifically, on a live conversion rather than in preview mode.
Source of truth
your WooCommerce order records
- Confirmation page refreshed repeatedly with no additional event.
- Every gateway return path tested with a real transaction.
- No order ID appearing twice at any destination.
- Purchase count within a few percent of WooCommerce orders for a closed week.
- A real refund issued and confirmed reversing.
- Reconciled over a fully closed window, matched per record rather than on totals.
- Re-checked 30 days later, and after any platform update.
WooCommerce server-side · free audit
What we check in the free audit
- Refresh a confirmation page and watch
- Match platform purchases to order IDs
- List every tracking-adjacent plugin
- Test each gateway's return path
- Check whether a caching plugin is active
Checked against
your WooCommerce order records
Free30 minutesNo obligation
WooCommerce server-side · when not to buy
When you don't need this on WooCommerce
Worth reading before you buy anything, from us or anyone.
- If your purchase count matches your WooCommerce order count and refreshing the confirmation page fires nothing extra, you don't have the classic WooCommerce problem and probably don't need us.
- Filtering duplicates out in GA4 is not a fix — the ad platforms still received them and bidding still optimized on them — but if you genuinely only care about reporting, it's cheaper than a rebuild.
- Moving purchase to the order hook is something a competent WordPress developer can do. If you have one, hand them this page.
- Reconcile a closed week on order ID first. It costs an hour and tells you whether any of this is worth paying for.
WooCommerce server-side · what we deliver
What the server-side build gives you on WooCommerce
Container on your own subdomain
Your domain, your certificate, hosting in an account you control.
Money events from WooCommerce orders
woocommerce_payment_complete or the processing status transition, each firing exactly once per order.
Deduplicated at every destination
On a shared event ID, verified before any existing path is removed.
Consent enforced before dispatch
A denied destination receives nothing, verified by capture rather than configuration.
Written guarantee
95%+ tracking accuracy
Measured against your WooCommerce order records. 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
Repairs and verifies the browser-side setup you already have, on a live conversion. Honest about its ceiling on this platform.
- Root cause fixed, not worked around
- Verified on a live conversion
- Reconciled against your own records
- Written handover
1st-party server-side
Recommended$800One-time fee · most popular
Money events sent from your own records through a first-party container on your subdomain, so the browser can no longer lose them.
- First-party server container on your own subdomain
- Money events from your records, not the browser
- Deduplicated on a shared event ID at every destination
- First-party cookies beyond Safari's 7-day cap
- 95%+ accuracy and 8+ Meta EMQ, guaranteed in writing
Full 1st-party stack
$1,800One-time fee · lifetime ownership
Every paid channel server-side plus the offline loop, with monitoring so the next break surfaces in days.
- Everything in 1st-party server-side
- Pinterest, Snapchat, Reddit and LinkedIn CAPI
- CRM and offline conversion loop
- Refunds and cancellations corrected wherever each platform allows it
- Monitoring on every destination
FAQ
WooCommerce server-side questions, answered
For the duplication problem, no — the order hook fixes that on its own. For Safari cookie lifetime and ad blockers, that's what server-side adds.
The order hook part, yes, and it's the higher-value half. Hand them this page.
It can. A cached confirmation page serving a stale data layer is a real WooCommerce fault that looks exactly like a broken tag.
Order meta is the cleanest carrier — it survives the gateway round trip and is available server-side.
Free · 30 min
Move WooCommerce events off the browser
Free30 minutesNo obligation
