How browser tracking loses purchases
On Shopify, browser tracking runs through pixels in Settings > Customer events: the app pixels of your sales channels, such as Facebook & Instagram or Google & YouTube, and any custom pixels you add. A pixel reports a purchase only if the shopper's browser gets that far and lets the code run. Each of these stops it:
- an ad blocker or a browser privacy setting;
- a declined cookie banner, in markets where Shopify runs pixels only with the visitor's permission;
- a shopper who closes the tab before the Thank you page loads;
- an old purchase tag in the Thank you page's additional scripts that no longer runs on Shopify's newer Thank you and Order status pages; see what checkout extensibility changed for tracking.
The platform then counts fewer purchases than your store had, and your campaigns learn from part of your sales.
What server-side tracking fixes
- Ad blockers and browser privacy settings. They act on the browser. A purchase sent from a server does not pass through the browser, so they cannot stop the purchase itself. They can still stop the pixel that reads the consent choice and the click identifiers; see attribution below.
- Shoppers who leave before the confirmation page. The server learns about the order from Shopify when it is paid, not from a page view.
- Thin purchase data. A server can send the order's hashed e-mail, phone and address with the purchase, which helps Meta match it to a person.
- Not knowing what happened. A server can keep a record of each purchase it sent and the platform's answer, so you can check an order instead of guessing.
What it does not fix
- Declined consent. When a shopper declines marketing cookies, the pixel stops, and a server sender has to apply that choice too. In Tikra you pick how: Strict and Standard do not send a buyer who declined; My store manages consent leaves that decision to your own consent setup.
- Duplicates. If the browser pixel and the server both send a purchase without the same event ID, Meta counts it twice. Adding a server without that ID makes counts worse.
- Attribution, in part. The platform's own model and windows decide which ad gets credit. A server-sent purchase is tied to the click only when it carries the browser's identifiers: Meta's
_fbpand_fbc, GA4's client ID. When the browser was blocked and nothing was captured, the purchase still arrives, but GA4 may show it as direct or unassigned and Meta matches it on hashed customer data alone. - Platform reporting delays. Meta can take hours, and GA4's standard reports up to a day or two, to show a purchase they already received.
- A broken setup elsewhere. A wrong pixel ID, a wrong conversion action or an old access token stays wrong, whatever sends the event.
How to tell if you need it
Compare your paid online orders of the last 7 full days with each platform's purchase count for the same days, in your store's time zone. Leave out point of sale sales, draft orders and subscription renewals: they never passed through your storefront.
- If the platform gets clearly fewer purchases, and declined consent does not explain the gap, the browser is losing purchases and a server connection will help.
- If the platform gets more purchases than your orders, two senders are sending the same purchase. Fix the duplicate first.
In Meta Events Manager you can also open your pixel and the Purchase event: Meta shows how many purchases came from the browser and how many from a server. If server is zero, Meta only sees what browsers manage to send.
Or let Tikra check it for you: install from the Shopify App Store
Your options on Shopify
| Option | Who sends purchases from a server | Setup | What you see per order | Cost |
|---|---|---|---|---|
| Facebook & Instagram sales channel | Shopify, to Meta only, at the Enhanced and Maximum data sharing levels | Change one setting | Meta's totals in Events Manager; no record per order | No extra cost |
| Meta's setup in Events Manager | Meta, for a pixel already on your site | A few clicks, no code | Meta's totals in Events Manager | No setup fee, according to Meta |
| An app | The app's server, to the platforms it supports | Install and connect | Depends on the app | A monthly fee, by app |
| Your own server-side Google Tag Manager container | Your container, in your own Google Cloud project | A developer sets it up and keeps it updated | What you build | Hosting and developer time |
The sales channels you already have. Shopify's help says that at the Standard data sharing level of the Facebook & Instagram channel a Meta Pixel collects data in the browser, and at Enhanced and Maximum the store uses Meta's Conversions API as well as the pixel. You change the level under Sales channels > Facebook & Instagram > Settings > Data sharing settings. For Meta alone, this is the shortest way to a server connection. The TikTok app has data sharing levels too; see TikTok's Events API on Shopify. Shopify connects GA4 through the Google & YouTube channel; the pages we read describe only what its tag sends from the browser, so do not count on a server copy of purchases from it unless Google or Shopify documents one.
What you do not get from the channels: a record per order of what the platform received, or a way to send a missed order again.
To choose between the apps, see server-side tracking apps compared on price.
Doing it yourself, without Google Tag Manager
A developer can build a small service that hears about each paid order from Shopify, through a webhook for paid orders, and sends it on. The work is in the details each platform asks for.
For Meta's Conversions API:
event_timecan be at most 7 days before you send. Meta says one event older than that makes the whole request fail.event_source_urlis required for website events.event_idmust match theeventIDthe browser pixel sends for the same order, or Meta counts the purchase twice. Meta deduplicates only within 48 hours of the first copy.- Customer details such as e-mail must be normalised and hashed. The IP address and user agent must not be hashed.
- The browser ID (
fbp) and click ID (fbc) come from cookies on your domain, so your service has to collect them from the storefront and keep them with the order.
For GA4's Measurement Protocol:
- Google says it is meant to add to what the Google tag collects.
- Each event is joined to the visitor's earlier activity by the
client_id. Without the shopper's real client ID, the purchase still counts, but GA4 cannot tie it to the visit and its traffic source. - With a
session_id, sent within 24 hours of the session start, the event takes the location and device of that session. - Google offers a validation server to check the payload format before you send live events.
For both, the buyer's consent choice. Your service has to read it for each order and apply it, because a shopper who declined marketing or analytics should not be sent for that purpose.
For ChatGPT Ads, see what OpenAI's Conversions API needs.
How Tikra does it
Tikra is a Shopify app for server-side tracking. It sends each paid online order of your store from our server to Meta, Google Analytics 4, Google Ads, TikTok, Pinterest, Snapchat, Klaviyo and ChatGPT Ads, as the buyer's consent allows.
- A record for each order: what was sent to each platform, when, and the platform's answer. For GA4 the answer means Google received the order without an error; Google gives no confirmation per event.
- A check before sending: before Tikra sends anything to Meta, it reads Meta's own purchase count to see whether another tool already sends your purchases, so they are not counted twice.
- An hourly check: orders a platform did not accept are sent again, as far back as the platform takes them.
- Consent your way: Strict, Standard, or your store's own consent tool decides.
- No theme changes: Tikra uses Shopify's web pixel to read the consent choice and browser identifiers.
Setup by our team is included in every plan. Plans start at $99 a month, with a 14-day free trial.
Frequently asked questions
Does Shopify have server-side tracking built in?
For Meta, yes, in part: the Facebook & Instagram channel uses Meta's Conversions API at its Enhanced and Maximum data sharing levels. For Google Analytics 4 and Google Ads, Shopify's own pages describe browser tags only.
Is server-side tracking worth it for a small store?
Compare first. If Meta or GA4 counts clearly fewer purchases than your paid online orders and consent does not explain it, a server connection helps at any size. If the counts match, you may not need it for purchases.
Will I count purchases twice?
Only if two senders send the same purchase without a shared ID. Meta merges a browser and a server event that share the event ID and name, within 48 hours. Two server senders are not merged, so keep one.
Does it work with consent banners?
It has to follow them. A server must apply the buyer's consent choice the same way a browser tag must; it does not bypass the banner.
Can I drop the browser pixel completely?
You can, but Meta and Google both describe the server as an addition. The browser also sends page views and other events, and captures the identifiers that tie a purchase to an ad.
What does it cost?
The Facebook & Instagram channel and Meta's own setup have no extra cost. Apps charge a monthly fee; a server container costs hosting and a developer's time. Tikra starts at $99 a month, with setup included.
Check your store
Install Tikra from the Shopify App Store
Check that your tracking works
Related: Shopify conversion tracking · Meta Conversions API on Shopify · Meta shows fewer purchases than Shopify · Switching from Analyzify · Server-side events for Klaviyo · Server-side tracking for Shopify agencies