Server-side tracking for Shopify and WooCommerce
ROASaurus saves every ad click on your domain, matches it to the paid order and sends the purchase to your ad platforms from the server.
Every click id kept
Nineteen click ids and six UTM fields, stored against a first-party visitor id.
Collected on your domain
Through the Shopify app proxy or a CNAME subdomain, so ad blockers see your own site.
Sent from the real order
Purchases are sent from your store's paid orders, not from a browser tag.
Fifteen ad platforms
Meta, TikTok, Snapchat, Pinterest, Reddit, X, Microsoft Advertising, Taboola, LinkedIn, OpenAI Ads, Spotify, AppLovin, Criteo, AdRoll and Outbrain, plus Google Ads enhanced conversions on Shopify.
Deduplicated
The browser pixel and the server event share one event id, so each platform keeps one purchase.
Consent and bots handled
Shopify's privacy settings or your consent tool decide which visitors are tracked. Crawlers and headless browsers are dropped first.
Why browser pixels miss purchases
Ad blockers stop many pixel requests, and Safari caps cookies set by scripts at seven days, so a buyer returning after a week can look organic. Server-side tracking sends the purchase from your order data to each platform's API, with the click id saved at the first landing.
How it works
1. Capture the click
The script reads the click ids fbclid, gclid, gbraid, wbraid, ttclid, msclkid, ScCid, epik, rdt_cid, twclid, tblci, li_fat_id, adct, aleid, alart, oppref, awc, im_ref and OutbrainClickId, plus all six UTM fields, and stores them against a first-party visitor id, the _tl cookie. On Shopify the visitor id is also written to the cart.
2. Collect first-party
- Shopify app proxy. The storefront posts events to
yourstore.com/apps/roasaurus/e, which Shopify signs and forwards. Same-origin, no DNS change, with the regular collector as fallback. - CNAME subdomain. Point
t.yourstore.comat ROASaurus and a certificate is issued automatically. The script and events then load from your own subdomain, so ad blockers treat them as first-party, and the visitor id is also set as a server cookie there. Safari may still cap that cookie at 7 days.
3. Match the order
On Shopify, orders are matched through cart attributes, cart and checkout tokens and the checkout pixel. The purchase is sent from the orders/paid webhook after a 20-second hold, so the browser checkout event (IP, user agent, fbp) can be joined first. Cash on delivery and external checkouts send when the order is created.
The WooCommerce plugin stores the tracking cookies on each order. Platforms without cart attributes match by the thank-you page Purchase event, then a hashed email the visitor gave earlier on your site (in a popup or through an Identify call), then the same IP and browser seen from three hours before to 15 minutes after the order, when exactly one visitor fits. See other webshops and funnels.
4. Send to every platform
ROASaurus forwards PageView, ViewContent, AddToCart, InitiateCheckout, Purchase and Lead. Each server event carries SHA-256 hashed customer data, the platform's own click id, IP address and user agent.
| Platform | Server API | Browser pixel, same event id |
|---|---|---|
| Meta | Conversions API | Yes |
| TikTok | Events API | Yes |
| Snapchat | Conversions API v3 | Yes |
| Conversions API v5 | Yes | |
| Conversions API v3 | Yes | |
| X | Ads API conversions (OAuth 1.0a) | No, server only |
| Microsoft Advertising | UET Conversions API | No, server only |
| Taboola | S2S postback | No, server only |
| Conversions API | No, server only | |
| OpenAI Ads | Conversions API | Yes |
| Spotify Ads | Conversions API | Yes |
| AppLovin | Axon Conversion API | Yes |
| Criteo | Server-side events | No, server only |
| AdRoll | Server-to-Server Event API | No, server only |
| Outbrain | S2S postback | No, server only |
| Google Ads | Enhanced conversions from the Shopify checkout | Checkout pixel |
Deduplication, consent and bots
Deduplication. The browser pixel fires with the same event id as the server event, so the platform keeps one copy. Double counting usually means another app sends the same pixel; here is the fix.
Consent. With "Respect visitor consent" on (the default), Shopify's customer privacy API or your consent tool decides. If a visitor declines marketing cookies, they get no visitor id, so their ad clicks and visits are not linked to them, and their browser events are not sent to ad platforms. The paid order itself is still sent server-side with hashed order data to Meta, TikTok, Snapchat, Pinterest, Reddit, X, Microsoft Advertising and Taboola; LinkedIn and the destinations added after it get nothing. In strict mode nothing is sent from the browser until the visitor consents. See consent and privacy.
Bot filter. Crawlers, link previewers, uptime checks, AI bots and headless automation are dropped before the event log or any send.
Event and delivery log. Every delivery is listed per platform with the request and the platform's response. Failed deliveries are retried with backoff.
Who it is for and setup
Stores that advertise on Meta, TikTok or other paid channels and want those platforms to see every purchase. On Shopify, setup takes about ten minutes: connect the store, switch on the theme app embed, paste the checkout pixel and add your ad platforms. Guides: Shopify, Meta, WooCommerce and custom sites. Integrations: Shopify, Meta, TikTok, Google Ads and more.
Limits
- X, Microsoft Advertising, Taboola, LinkedIn, Criteo, AdRoll and Outbrain get their conversions from the server only.
- Taboola postbacks only work after a Taboola click (
tblci) and return no validation, so failures cannot be detected. - Microsoft's UET Conversions API is in limited rollout.
- Outside Shopify, consent is read from OneTrust, Cookiebot, Usercentrics, Didomi, CookieYes, iubenda, Termly, Complianz, Osano, TrustArc, any IAB TCF banner, Google Consent Mode and the WP Consent API. Other banners pass the choice with
tlq('consent', …).
Further reading: server-side tracking on Shopify and the Meta Conversions API.
Built on the same first-party data
Questions, answered
What is server-side tracking?
Server-side tracking sends conversion events from a server to each ad platform's API, instead of relying only on a pixel in the shopper's browser. ROASaurus sends each purchase from your store's paid orders, so ad blockers and browser cookie limits do not stop it.
Will purchases be counted twice?
Not by ROASaurus. Where a browser pixel exists, it and the server event carry the same event id, so Meta, TikTok, Snapchat, Pinterest, Reddit, OpenAI Ads, AppLovin and Spotify keep one copy. Double counting comes from another app sending the same pixel; switch that one off.
Do I need a CNAME or a developer?
No. On Shopify, the app proxy sends events through your own domain without DNS changes. A CNAME subdomain is optional: it serves the script and events from your own subdomain, so ad blockers treat them as first-party.
Which ad platforms receive server events?
Meta, TikTok, Snapchat, Pinterest, Reddit, X, Microsoft Advertising, Taboola, LinkedIn, OpenAI Ads, Spotify, AppLovin, Criteo, AdRoll and Outbrain. Google Ads receives enhanced conversions from the Shopify checkout pixel. GA4, server-side GTM, Segment, Awin, impact.com, Attentive, Postscript and Omnisend can receive events too.
Every sale, traced to the ad that earned it
Server-side tracking, profit and lifetime value in one app. 14-day free trial, no credit card.
Start your free trial →