Attribution & Analytics

How Cookieless Tracking Actually Works

With third-party cookies gone and Safari, Firefox, and increasingly Chrome restricting cross-site identifiers, here's the actual mechanics behind how modern attribution still functions.


Safari’s Intelligent Tracking Prevention has blocked third-party cookies since 2020, Firefox’s Enhanced Tracking Protection followed shortly after, and Chrome’s long-delayed Privacy Sandbox transition has pushed the industry toward the same reality on the last major holdout browser. The practical effect is that roughly half of web traffic, depending on audience and device mix, was already invisible to cookie-based tracking well before Chrome made any changes, and the share keeps climbing. Yet attribution didn’t die — it moved to a different set of mechanics almost entirely invisible to end users, and understanding how those mechanics actually function is the difference between panicking about “the end of tracking” and quietly adapting to it.

Why third-party cookies stopped working in the first place

A third-party cookie is set by a domain other than the one the user is visiting — an ad network dropping a cookie on your site so it can recognize the same browser later on a different site. Browsers restrict this specifically because it enables cross-site tracking without the user having any relationship with the party doing the tracking. First-party cookies, set by the domain the user is actually visiting, were never the target of these restrictions and remain fully functional — which is the foundation almost every cookieless approach is built on. The shift isn’t “tracking is banned,” it’s “tracking has to happen in a relationship the user actually has with your domain, not a background relationship with an ad network they’ve never heard of.”

This distinction matters because a lot of the anxiety around cookieless tracking assumes all tracking is gone, when what actually happened is narrower: cross-site, third-party identification got cut off, while first-party data collection on your own domain remains as viable as it ever was.

Server-side tracking moves the collection point

Client-side tracking — a JavaScript tag firing in the user’s browser — is directly exposed to ad blockers, browser privacy features, and increasingly aggressive tracking prevention that can throttle or expire cookies within days regardless of what the site itself wants. Server-side tracking relocates the collection point: instead of the browser sending data straight to an ad platform, the browser sends data to a server you control (often via a first-party subdomain), and that server forwards the relevant event data on to ad platforms and analytics tools using their server-to-server APIs.

This matters for two separate reasons. First, first-party server-side cookies survive far longer than client-side third-party ones — Safari’s ITP still limits first-party cookie lifespan in some cases, but the limits are dramatically less aggressive than what’s applied to third-party cookies. Second, server-side collection is largely immune to ad blockers, since most blockers work by blocking known third-party script domains from loading in the browser, and a server-side endpoint on your own domain simply doesn’t match those blocklists. The tradeoff is real infrastructure: you need a server (commonly a lightweight container or serverless function) sitting between the browser and the destination platforms, translating and forwarding events.

Conversions API-style approaches

Major ad platforms have each built their own version of a server-to-server conversion reporting API — Meta’s Conversions API, Google’s Enhanced Conversions, and similar mechanisms from other networks — that let an advertiser send conversion events directly from their server to the ad platform’s server, bypassing the browser entirely for that leg of the journey. The core idea is that the browser-side pixel and the server-side API call both fire for the same event, and the platform deduplicates them, using the server-side call as a reliable backstop when the browser-side pixel gets blocked or fails to load.

What makes this work for matching, rather than just logging an anonymous event, is that the server-side payload includes hashed identifiers — typically a SHA-256 hash of the user’s email address or phone number, collected first-party through a login, checkout, or form fill, then hashed before transmission so the raw personal data never leaves your server unencrypted. The ad platform hashes its own stored user identifiers the same way and matches on the hash, meaning the match happens without either party ever seeing the other’s raw personal data in transit. This is the mechanical core of most “cookieless” conversion tracking in production today: first-party collection of an identifier, one-way hashing, and server-to-server matching against the platform’s own hashed user graph.

Deterministic versus probabilistic matching

Deterministic matching relies on an exact identifier match — the hashed email from your checkout matches the hashed email the ad platform has on file for a logged-in user, full stop, no ambiguity. This is the gold standard for accuracy but has a coverage ceiling: it only works for users who provided an identifiable piece of data (email, phone, sometimes a mobile advertising ID) and only when that same identifier exists in both systems. Coverage rates for deterministic matching commonly land in the 50-70% range for consumer businesses with high-frequency checkout or login flows, and considerably lower for businesses where most sessions never involve a login or form fill.

Probabilistic matching fills the gap for the remaining traffic by using a cluster of signals — IP address, user agent, device characteristics, approximate timing of events, general behavioral patterns — to estimate, with a confidence score rather than certainty, that two events likely belong to the same user or device. This is fundamentally a statistical inference, not an identity match, and it trades some accuracy for coverage. Most production systems that claim comprehensive cookieless coverage are actually blending both methods: deterministic matching wherever a hashed identifier is available, falling back to probabilistic modeling to close the gap for anonymous or first-touch sessions, with the reported accuracy of the blended model typically disclosed as a confidence range rather than a hard number.

Privacy Sandbox, ITP, and ETP in practice

Chrome’s Privacy Sandbox initiative includes several distinct proposals worth knowing apart, because they solve different problems. The Topics API replaces third-party cookie-based interest profiling with a browser-computed set of coarse interest categories, refreshed periodically and shared with sites only in aggregate form, meaning advertisers get audience signal without individual-level tracking. Attribution Reporting API is the piece most relevant to conversion tracking specifically — it lets a browser record that an ad was shown or clicked, and later record that a conversion happened, then report the association back in an aggregated and noised form designed to prevent precise individual-level reconstruction while still preserving directional signal about which campaigns are driving results.

Safari’s ITP and Firefox’s ETP take a blunter approach: they don’t offer a replacement mechanism, they simply cap or block third-party storage and progressively tighten first-party cookie lifespans too, particularly for domains ITP’s heuristics flag as tracking-related based on redirect patterns and cross-site link decoration. Practically, this means a strategy built entirely around Chrome’s Privacy Sandbox APIs still leaves a meaningful Safari and Firefox gap, which is why most working cookieless setups combine server-side first-party collection (which works consistently across all three browsers) with platform-specific Conversions API integrations, rather than betting on any single browser vendor’s proposal.

Practical setup considerations

Standing up a genuinely cookieless-resilient tracking setup usually starts with an audit of every first-party data collection point already in place — checkout forms, account creation, newsletter signups — because these are the natural sources of the hashed identifiers that make deterministic matching possible, and most businesses already collect far more of this than they realize; the gap is usually in piping it to the right destinations, not in collecting it in the first place. From there, the server-side collection layer needs a first-party subdomain (something like data.yourdomain.com rather than a third-party analytics domain) to avoid being caught by browser heuristics that specifically target subdomains that look like tracking infrastructure.

Consent handling has to be wired through the entire pipeline, not just the browser-side pixel, since regulations governing personal data use apply regardless of whether the data ever technically touches a third-party cookie — a server-side hashed email is still personal data under most privacy frameworks, and consent state needs to travel with the event data all the way to the destination platform’s API call, not just gate the client-side script. Finally, expect a deduplication project: running both client-side pixels and server-side API calls simultaneously (the recommended redundant setup) means every platform will see two events for the same conversion unless event IDs are consistently generated and passed through both paths so the platform can merge them into one counted conversion rather than double-counting.

A worked example: what the numbers actually look like

Consider a mid-size e-commerce brand running $50,000/month in Meta ad spend before making any of these changes. On client-side pixel tracking alone, post-iOS 14.5 and post-ITP, they were seeing roughly 55% of actual purchases reported back to Meta — verified by comparing pixel-reported conversions against the true order count in their own order management system over a 30-day window. That 45% gap wasn’t lost revenue, it was invisible revenue: purchases that happened but that Meta’s optimization algorithm never learned from, meaning the ad platform was optimizing delivery based on just over half the signal it should have had.

After standing up a server-side Conversions API integration with hashed email and phone matching from their checkout flow, reported conversions rose to about 78% of true orders within six weeks — the remaining 22% gap is mostly guest checkouts with no email capture at all, plus a small residual of cases where the hashed identifier simply doesn’t match anything in Meta’s own user graph. That’s a real, measurable before-and-after: not a vague claim that “server-side tracking helps,” but a specific coverage lift from 55% to 78% on the same ad spend, which in this case translated to Meta’s algorithm optimizing toward a meaningfully larger and more accurate set of actual buyers, and a reported cost-per-acquisition that dropped about 18% over the following quarter as delivery improved — the ads didn’t get cheaper, the platform just got better at finding people who’d actually buy.

Common failure modes when implementing this

The most frequent mistake is standing up server-side tracking and turning off the client-side pixel at the same time, on the theory that the server-side call replaces it. This is backwards — the two are meant to run in parallel as redundant paths, with deduplication handling the overlap, because each catches conversions the other misses (the pixel catches sessions where a form fill never happened but a purchase did fire client-side; the server-side call catches sessions where an ad blocker or ITP killed the pixel before it fired). Turning off the pixel entirely usually reduces total measured coverage rather than improving it, since you’ve removed one of the two independent detection paths instead of adding a backstop to it.

A second common failure is hashing inconsistently across sources — for example, lowercasing and trimming whitespace from the email before hashing on the checkout page, but not applying the identical normalization on a different form elsewhere on the site (a newsletter signup, a lead-gen form). Since SHA-256 hashing is deterministic but sensitive to any difference in the input string, “User@Example.com” and “user@example.com “ (with a trailing space) hash to completely different values, silently breaking the match without throwing any visible error — the event still sends, it just never matches, and the only symptom is a coverage number that’s inexplicably lower than expected with no obvious cause in the logs.

A third failure mode is neglecting to update tracking when a checkout flow or CRM changes — server-side pipelines are custom-built infrastructure, not a drop-in script tag, so when a company migrates checkout providers or redesigns a signup form, the server-side event mapping has to be updated deliberately as part of that project, and it’s common for a redesign to ship without anyone remembering that the old field names or event triggers were feeding a pipeline nobody on the redesign team was aware existed. Document the server-side tracking dependency explicitly in whatever system tracks checkout or CRM changes, so it surfaces during planning rather than being discovered weeks later as a silent conversion-reporting gap.

Sequencing an implementation if you’re starting from nothing

Start with the audit of existing first-party collection points described above, because it tells you your realistic deterministic-match ceiling before you build anything — there’s no point building elaborate server-side infrastructure around an email field that only 10% of sessions ever populate. If that audit reveals thin first-party collection, the highest-leverage first step is often adding a low-friction email capture earlier in the funnel (a newsletter opt-in, a progress-saving prompt) rather than jumping straight to server-side infrastructure that has little identifier data to work with.

Once you have reasonable first-party collection, prioritize the single highest-spend ad platform’s Conversions API-equivalent integration first — for most consumer SaaS and e-commerce businesses that’s Meta, given how heavily its algorithm depends on conversion signal quality for optimization. Get that one integration fully validated, with coverage numbers measured against your true order count the way the worked example above did, before expanding to a second or third platform; a validated single integration with a clear before-and-after number is also the easiest way to get budget approved for extending the same infrastructure to Google, TikTok, or other platforms afterward.

Book a demo