Client-side vs server-side tracking: where the event starts
Published 2026-10-29
“Server-side tracking” sounds like one setup that you either have or lack. Vendors use the term for at least three different things: a server container that receives requests from your visitors’ browsers, an API that accepts events from your own systems, and a webhook that your store, network or CRM sends when an order changes. The three see different sales.
Whether a setup is client-side or server-side depends on where the event starts, not on the server it passes through. An event that starts in the browser is still a browser event after a server relays it. Server-side Google Tag Manager, a pixel forwarded through your own server and Google tag gateway all move the request. None of them can see a sale that never happens in a browser.
Eight setups, one question
Read from each vendor’s own documentation on 22 October 2026. Every row is in facts above with its
source.
| Setup | Where the event starts | What triggers it | What it cannot see |
|---|---|---|---|
| GTM server container | The browser | A request from the visitor’s device, sent by gtag.js to the server container URL | Any sale that sends no request from a browser |
| Google tag gateway | The browser | The Google tag, served from your own domain through your CDN, load balancer or web server | The same sales: it changes the route, not the source |
| Meta Conversions API | Wherever you send it from | A call from your server, labelled with one of nine action_source values | Any conversion your systems do not record and send |
| TikTok Events API | Wherever you send it from | A call from your server, with events from websites, apps, stores or CRMs | Any conversion your systems do not record and send |
| Shopify order webhooks | A server (Shopify) | An order created, paid or refunded, from web, mobile_app or pos | The ad click, unless the order holds the visit |
| ClickBank Instant Notification Service | A server (ClickBank) | A sale, rebill, refund, chargeback or cancelled rebill | Anything on your pages: it reports ClickBank’s own transactions |
| HubSpot workflow webhook | A server (HubSpot) | A record that meets a workflow’s criterion reaches the webhook action | The ad click, unless the record holds it |
| ChatGPT Instant Checkout | A server (ChatGPT, then the merchant’s backend) | The buyer confirms the order in the chat | The conversation: only the data needed for the order reaches the merchant |
Two rows start in the browser. Two are pipes that carry whatever you send them. Four start on the server where the sale is recorded, and one of those four is a checkout inside an AI assistant.
The two that start in the browser
Google describes the server container plainly: “The server receives web requests from the user’s device.” Its clients turn those requests into events. The container waits for the browser. A buyer who orders by phone, renews a subscription or pays on a checkout that you do not run sends it nothing.
Google tag gateway goes less far. It serves the Google tag from your own domain, through your CDN, load balancer or web server. Google’s help page says it runs your tags client-side or server-side, which is how one product ends up on both sides of the line. The tag still loads in the visitor’s browser.
Google reports an 11% uplift in signals for advertisers who set up the gateway. The footnote says what that counts: Google tag script loads, with and without the gateway, over one week in April 2025. More browsers loaded the tag. That measures how much the plain browser path was losing. It cannot include a sale that never loaded a page.
None of this makes server-side tagging worthless. It gets more browser events through. A cookie that your own server sets is also outside Safari’s 7-day limit on cookies written in JavaScript, as the cookie behind a click window shows. It makes the browser half better. It does not add the other half.
The two that are pipes
Meta’s Conversions API and TikTok’s Events API start nothing. They deliver what your systems send them.
Meta’s action_source field says where a conversion occurred, and it takes nine values. One of them is
website. The others are app, email, phone_call, chat, physical_store, business_messaging,
system_generated and other. Meta’s example for system_generated is a subscription renewal on
auto-pay: a conversion with no visitor and no browser.
So “we use the Conversions API” does not answer the question. If your server forwards the pixel’s purchase event, that event started in the browser. If your billing system sends the renewal, it started on a server. Same API, different sources. TikTok recommends running its Pixel and its Events API together, with deduplication, because a working setup has both kinds.
The four that start where the sale happens
These see the sales that a browser cannot.
- Shopify fires
orders/createwhen an order is created,orders/paidwhen it is paid andrefunds/createwhen a refund is made. An order’ssourceNamecan beweb,mobile_apporpos, so a till sale reaches the webhook the same way a web sale does. - ClickBank’s Instant Notification Service posts sales, rebills, refunds, chargebacks and cancelled rebills to a URL that you set. A rebill runs on ClickBank’s billing schedule, with no visitor anywhere.
- HubSpot enrols a record in a workflow when a criterion becomes true, and a webhook action then sends its data to your URL. A lead that a salesperson marks as a customer starts in the CRM.
- ChatGPT Instant Checkout is in the next section.
What these miss is the click. A webhook knows the sale. It knows the ad only if the
click ID or the visit was saved with the order. Shopify keeps the online store
visits before an order in customerJourneySummary. A till sale has none. A postback is only as
attributed as the ID it carries, which is the first thing to test.
What AI changes
OpenAI announced Instant Checkout on 29 September 2025. A ChatGPT user confirms the order and pays without leaving the chat. ChatGPT sends the order details to the merchant’s backend through the Agentic Commerce Protocol, and the merchant takes payment and ships with its existing systems. OpenAI’s commerce documentation still tells merchants to integrate through its Agentic Checkout Spec.
In that purchase the buyer never loads your website. There is no page, no thank-you page and no tag. A server container waits for a request that never comes. The order exists only on the merchant’s server, so only a server-side source, such as the order webhook from the merchant’s own store, can record it. OpenAI also says that only the data needed to complete the order reaches the merchant, so the order arrives with no visit attached. Each sale made this way is one that the browser half of a setup will never count.
How to tell what you have
Ask these questions of any setup called server-side, yours or a vendor’s:
- Where does the event start? If the answer is a tag on the page, the setup is client-side, whatever route the request takes next.
- Which of your sales never touch a browser? Renewals, refunds, chargebacks, phone and till sales, deals closed in a CRM, sales on a network’s checkout, assistant checkouts. List them.
- Which system records each one, and can it send a webhook or postback? That system is your server-side source.
- Does that record carry the click ID? Without one, the event arrives on time and unattributed.
- Do the browser and server events share an event ID? When both report the same purchase, the platform needs one key to count it once.
Question 4 is where server-side setups fail quietly. The record has to carry a click ID, and there are two kinds: the one the ad platform created and the one your tracker created. Each one matches only in the system that made it.
Sources
- Google Tag Manager: a server container receives web requests from the user's device and turns them into events. Clients are the adapters between software on the device and the container. A site points gtag.js at the container with the server_container_url setting. verified 2026-10-22
- Google tag gateway for advertisers runs Google tags, client-side or server-side, through the advertiser's own infrastructure, such as a CDN, load balancer or web server, so the tags are served from the advertiser's own domain. verified 2026-10-22
- Google: advertisers who configured Google tag gateway saw an 11% uplift in signals (Google Data, global, 9 to 16 April 2025, 7-day trailing median). The uplift is based on Google tag script loads, comparing tags without the gateway to tags with it. verified 2026-10-22
- Meta's Conversions API connects an advertiser's marketing data, including website, app, business messaging and offline events, from the advertiser's servers, website platform, app or CRM to Meta. verified 2026-10-22
- Meta's action_source server event parameter specifies where a conversion occurred. Its values are email, website, app, phone_call, chat, physical_store, system_generated, business_messaging and other. verified 2026-10-22
- Meta defines the system_generated action source as a conversion that happened automatically, for example a subscription renewal set to auto-pay each month. verified 2026-10-22
- TikTok's Events API connects TikTok with the advertiser's marketing data and takes events from websites, mobile apps, physical stores (offline) and CRM integrations. TikTok recommends using the Pixel and the Events API together with event deduplication. verified 2026-10-22
- Shopify webhook topics: orders/create occurs whenever an order is created, orders/paid whenever an order is paid, and refunds/create whenever a refund is created on an order. verified 2026-10-22
- A Shopify order's sourceName identifies where it was placed, such as web, mobile_app or pos. Its customerJourneySummary holds the customer's visits and interactions with the online store before the order. verified 2026-10-22
- ClickBank's Instant Notification Service reports transactions in the ClickBank system for your account in near real time: sales, rebills, refunds, chargebacks, cancel and uncancel rebill actions, subscription changes, cart abandonment if enabled, and test transactions. It sends them by HTML form POST to a URL you set, encrypted with AES-256 in CBC mode. verified 2026-10-22
- HubSpot enrollment triggers enroll records into workflows automatically. Filter-based triggers enroll a record when a criterion is true; event-based triggers enroll it when an event has happened. verified 2026-10-22
- A HubSpot workflow webhook action sends data from HubSpot to an external tool with a POST request, or retrieves data with GET. Webhook URLs must begin with HTTPS. verified 2026-10-22
- OpenAI announced Instant Checkout on 29 September 2025: a ChatGPT user can confirm an order and complete the purchase without leaving the chat. ChatGPT sends the order details to the merchant's backend with the Agentic Commerce Protocol, the merchant processes payment and fulfilment with its existing systems, and only the information needed to complete the order is shared with the merchant. verified 2026-10-22
- OpenAI's commerce documentation says merchants integrate with OpenAI's checkout flow by implementing the Agentic Checkout Spec. verified 2026-10-29
- WebKit: ITP deletes all cookies created in JavaScript and all other script-writeable storage after 7 days of no user interaction with the website. verified 2026-10-22