flowsk.com
Why attribution is broken

The death of the pixel: what iOS 14 and ATT did to your attribution

App Tracking Transparency did not just cost you IDFA matching. It ended the era where a JavaScript tag on a page was a sufficient measurement strategy — and most stacks never adapted.

Aug 2, 2026· 4 min read ·Why attribution is broken
Quick answer

measurable = (not blocked) × (identity survived) × (event delivered)

Between ad blockers, tracking protection, in-app webviews and ATT, roughly 20–30% of paid traffic never runs your client-side tag at all. Those conversions do not error — they are simply absent, and absence looks exactly like poor performance.

The replacement is not a better pixel. It is moving the identity and the conversion to your server.

For fifteen years, measurement had a settled answer: put a tag on the page, and the tag tells you what happened.

That answer stopped working, and it stopped working quietly. There was no error page and no migration deadline — just a slow drift where the numbers got worse and everyone assumed the market had got harder.

What actually happened, in order

2017 — Safari ships ITP. Third-party cookies restricted, then blocked. First-party JavaScript cookies capped at seven days.

2020 — Chrome announces third-party cookie deprecation. Delayed repeatedly, but the direction was set and the industry started building around it.

2021 — iOS 14.5 ships App Tracking Transparency. Apps must ask before accessing the IDFA. Most users say no. The deterministic identifier that the entire mobile advertising ecosystem was built on evaporates in a quarter.

Continuously — ad blocking normalises. No longer a technical-audience behaviour. Built into browsers, built into VPNs, built into some ISPs.

Each event on its own was survivable. Together they removed the assumption underneath every client-side measurement stack: that your tag runs, that it can store an identifier, and that the identifier persists.

The three independent failures

Client-side measurement now needs three things to go right, and each fails separately:

Failure Cause What you see
Tag never runs Ad blocker, tracking protection, network filter Conversion is simply absent
Identity does not persist ITP 7-day cap, storage eviction Returning customer looks brand new
Event does not arrive Page closed early, network drop, CSP Intermittent, unexplainable gaps

Multiply them and the surviving share is uncomfortable. And crucially, none of them produce an error you can alert on. The data is just quietly incomplete, in a way that reads as underperformance.

Why the platforms started modelling

Faced with the same holes, the ad platforms did the only thing available to them: they estimated.

Meta’s modelled conversions, Google’s consent-mode modelling, Apple’s own SKAdNetwork — all of them are attempts to reconstruct what used to be observed. As engineering, this is impressive. As a basis for reconciling revenue, it is a category error: you cannot audit an estimate, and you certainly cannot show one to a CFO who is looking at a bank statement.

The part almost nobody adapted

Here is the strange thing. Everyone in marketing knows the pixel got worse. Very few stacks changed in response.

The typical 2026 setup is still: a client-side tag, an identity in localStorage or a JavaScript cookie, conversions reported by the browser. That is the same architecture as 2016 with more dashboards on top.

The adaptation that actually addresses the three failures:

1. Move the identity to your server. A first-party cookie set in an HTTP response is not capped at seven days and does not depend on JavaScript running. This fixes failure two entirely.

2. Send conversions from your backend. The payment webhook fires regardless of what the browser did. This fixes failure one for the events that matter.

3. Keep client events for context, and expect to lose some. Pageviews and clicks are cheap. Losing 25% of them costs you nothing important, as long as the money is not on that path.

4. De-duplicate on a business key. Once both sides report the same purchase, a shared key collapses them into one confirmed conversion rather than two.

That is not a workaround, a loophole, or an anti-privacy measure. It is what measurement looks like when you stop assuming the browser is a reliable narrator.

The honest framing

The pixel is not dead in the sense of “delete it.” Keep it — it is what your ad platforms optimise on, and their optimisation is genuinely valuable.

What died is the idea that a tag on a page is a sufficient measurement strategy. The tag is now one input among several, and the least reliable one. Build the ledger somewhere the browser cannot vote on it.

Start by finding out what you are actually running: the first-party tracking scanner lists every third-party request on your page, and the ITP loss estimator prices the identity half of the problem.

Frequently asked questions

What exactly did ATT change?

From iOS 14.5, apps must ask permission before accessing the IDFA, and most users decline. That removed the deterministic cross-app identifier the entire mobile ad ecosystem was built on, and forced platforms to model conversions they can no longer observe.

Does ATT affect web tracking?

Not directly — it governs app tracking. But its effects arrive on the web anyway: traffic from in-app browsers, degraded platform matching, and a general tightening of storage policy that Safari applies to the web through ITP.

How many people actually block trackers?

Reported figures vary widely by audience and region. Paid social traffic on mobile is typically worse than site averages, and technical audiences are worse again. Measure your own by comparing client-reported conversions to server-confirmed ones.

Is server-side tracking a way around consent?

No, and anyone selling it that way is selling you a compliance problem. Server-side tracking is about reliability, not about evading a user's choice. Respect consent, then measure reliably within it.

What replaces the pixel?

Two things: a first-party identity your server owns, and conversion events sent from your backend. Keep the pixel for ad platform optimisation — just stop treating it as your source of truth.

See what is actually loading on your site

Scan any URL and see every third-party tracker on the page — each one a request that a blocker can drop before your code runs.

Scan my site

Stop guessing which ad made the sale.

Flowsk Signals stitches the anonymous click to the email to the purchase — first-party, server-side, de-duplicated. One snippet, $29/mo, and every conversion comes with a receipt you can inspect.

Keep reading