Skip to content
Bach.ai

Cookieless Attribution: An MER + Incrementality Stack

Published
Drafted with AI assistance and edited by the Bach.ai team. How we write

How do I rebuild attribution without cookies?

As a layered stack rather than a replacement for the old click path: server-side collection, modelled conversions, a blended efficiency ratio as the ledger, and incrementality testing for causal questions. No single layer restores the deterministic story, and expecting one to prolongs the problem.

Your pixel used to tell a clean story: this person saw the ad, clicked, came back four days later, and bought. That story was always part fiction, but now it is mostly gone. Browser tracking restrictions, consent gating, and shorter identifier lifetimes have quietly deleted the deterministic trail your reporting was built on. The mistake most operators make is treating this as a tooling problem with a tooling fix. It is not.

Cookieless attribution for DTC is not a single tool swap. It is a layered stack, and each layer does a job the others cannot. Build it as four layers: server-side event capture, modeled conversions, MER as your ledger of truth, and incrementality testing as your proof of causation. No single layer is “the answer.” Together they stay honest when deterministic signal disappears.

For the surrounding account decisions, compare Cookieless Readiness: 9 Tracking Gaps DTC Must Close and use Meta Ads Measurement: Attribution and Incrementality as the next diagnostic.

Be precise about what actually broke

This matters because it changes the fix. You did not lose conversions. You lost observability of the path to them. Specifically:

  • Cross-session linkage. The browser can no longer reliably connect an ad impression today to a purchase next week.
  • Event fidelity. Client-side pixels fire from the browser, where blockers, consent prompts, and dropped scripts silently eat events before they ever leave the device.
  • Deterministic match. Without a durable identifier, the platform increasingly estimates which conversions belong to which ad rather than observing it directly.

If you treat a modeled estimate as if it were an observed fact, every downstream decision inherits the error. The whole point of the stack is to keep what is measured separate from what is modeled, and to never let one masquerade as the other.

Layer 1: Server-side capture (CAPI) — recover the signal you still can

Start by clawing back the deterministic events that the browser is dropping. A server-side conversions API sends purchase, add-to-cart, and lead events from your backend or store platform directly to the ad platform, instead of relying on the browser to fire them.

The wins are concrete:

  • Events sent server-side are far less exposed to blockers, consent-driven script failures, and flaky page loads.
  • Better match quality. When you pass hashed, normalized customer parameters with each event, the platform reconnects more conversions to the right people and ads.

The discipline that separates a working CAPI setup from a vanity one:

  1. Deduplicate properly. If you run both browser pixel and server events, send a shared event ID so the same purchase is not counted twice. Most inflated CAPI reports are just double-counting.
  2. Pass the right user parameters. Match rate climbs with the completeness and cleanliness of the identifiers you send. Normalize before hashing.
  3. Match server events to your real order ledger. Reconcile event volume against actual confirmed orders weekly. A 30% gap between “events sent” and “orders shipped” is a measurement bug, not a performance story.

CAPI is foundational, but understand its ceiling: it improves signal, not causation. It tells the platform more about what happened. It does not tell you whether the ad caused it.

Layer 2: Modeled conversions — accept the estimate, but label it

Once deterministic matching thins out, the platform fills the gap by modeling. It uses the events it can still see to estimate the conversions it cannot directly observe. This is not a workaround you can switch off; it is how reporting works now.

The operator’s job is not to fight the model. It is to handle it honestly:

  • Treat platform-reported conversions as a modeled number, not a counted one. It is directionally useful for in-platform optimization and increasingly unreliable as a source of absolute truth.
  • Feed the model well. Modeling quality depends on signal quality, which loops straight back to Layer 1. Strong CAPI inputs produce better modeled outputs.
  • Give the optimizer enough events to learn. When a campaign or ad set starves for conversion signal, both delivery and modeling get noisier. As a rough planning range, the platform needs enough recent optimization-event volume per ad set to stabilize — think on the order of dozens of conversions a week, not a handful. Treat that as a structuring guideline, not an assured threshold, and consolidate ad sets that cannot clear it.

Modeled conversions keep the in-platform auction working. They are the steering signal. They are not the scoreboard.

Layer 3: MER — your ledger of truth above the platform

This is the layer that stays honest when everything below it gets fuzzy, because it ignores attribution entirely.

Marketing Efficiency Ratio (MER) is total revenue divided by total advertising spend across all channels, for a period. It does not ask which ad gets credit. It asks a blunt, un-fakeable question: for every unit of spend across everything, how much revenue came back?

Why MER anchors a cookieless stack:

  • It is attribution-agnostic. No pixel, no identifier, no modeling assumption can inflate it. Both numbers come from systems you control — your ad bills and your store’s confirmed revenue.
  • It catches the lie that platform ROAS tells. When platform-reported ROAS climbs while blended MER stays flat, the platform is reattributing conversions it would have captured anyway. That gap is the wasted-spend signal.
  • It connects to the only thing that pays the bills. Pair MER with contribution margin. A campaign can post a flattering reported ROAS and still lose money once you account for COGS, shipping, and fulfilment. Always pressure-test efficiency against CPA-to-margin, not against a platform number in isolation.

Read MER as a trend, not a single day. Daily blended figures jump around with order timing; the weekly and monthly slope is where the truth lives. When you scale spend and MER holds or improves, you are buying real incremental revenue. When you scale and MER decays, you are paying more to reach people who were already going to buy.

Layer 4: Incrementality — the only layer that proves cause

Everything above tells you what happened with varying confidence. Only incrementality testing tells you what your spend actually caused — the revenue that would not have existed if the ad never ran.

Two practical, cookieless-safe methods:

  • Holdout / matched-market tests. Split comparable populations into a group exposed to a campaign and a group deliberately held back. The difference in outcomes is your lift. Because it relies on aggregate outcomes rather than individual tracking, no cookie is required.
  • Platform conversion-lift studies. Randomized exposure tests that compare buyers in a treated group against a control. Run these on your largest line items, where the budget justifies the measurement cost.

Incrementality is heavier to run and you cannot test everything at once, so prioritize: your biggest spend lines, your retargeting (the usual home of over-credited “incremental” sales that would have converted anyway), and any channel where reported performance looks too good to be true. As an illustrative planning range, many brands find a meaningful slice of reported conversions — frequently somewhere in the 20-40% band on heavy retargeting — are not truly incremental. Do not take that as a fact about your account; take it as the reason to test before you trust.

Putting the stack together

The four layers are not interchangeable. They answer different questions and reinforce each other:

Layer What it recovers What it cannot do
CAPI Lost deterministic events, match quality Prove causation
Modeled conversions In-platform optimization signal Serve as absolute truth
MER An un-fakeable efficiency ledger Tell you which ad worked
Incrementality Causal, true lift Run cheaply on everything

The operating loop: feed the optimizer with strong CAPI signal, steer day-to-day with modeled conversions, judge real efficiency on the MER trend against margin, and periodically recalibrate your trust in the platform’s numbers with an incrementality test. When the test disagrees with the dashboard, the test wins, and you adjust how much weight you give reported ROAS going forward.

This is also where keeping a clean, reconciled ledger pays off operationally. A read-only operator like Bach can watch the MER-versus-reported-ROAS gap widen and flag it before you have scaled spend into reattributed, non-incremental revenue — but the judgment of what to test next stays yours.

The takeaway

Stop hunting for the one tool that “fixes” attribution. There isn’t one, and anything sold as a perfect deterministic replacement is quietly modeling under the hood anyway. Build the stack instead: server-side events to recover signal, modeled conversions to steer, MER to keep score honestly, and incrementality to prove cause. Deterministic tracking is not coming back. A measurement system that survives without it is the actual deliverable — and the brands that build it now will read their numbers straight while their competitors keep trusting a story the browser already stopped telling.

Documented thresholds

Meta publishes the figures below; they are reproduced here with the article they come from. Retrieved 2026-09-22 — Meta revises this documentation without notice, so verify anything load-bearing against the current version before you act on it.

  • The default window. Meta documents 7-day click or 1-day view as the default for all new ad sets. The selectable alternatives are 1-day click, 7-day click, and 1-day click or 1-day view.
  • A wider window reallocates credit, it does not create revenue. Take $5,000 of spend credited with 100 conversions on 1-day click — a reported $50 cost per result. If 7-day click credits the same spend with 140, reported cost falls to $35.71, an apparent 28.6% improvement with no additional sale.
  • Why Commerce Manager disagrees. Its tagged-content reporting is fixed at 28-day click plus 1-day view and cannot be changed, and it reports by conversion date while Ads Manager reports by impression date. Both can be correct and still differ on the total and the day.

Source: Meta Business Help Centre — https://www.facebook.com/business/help/854500742637772, https://www.facebook.com/business/help/1997130013754737.

Method and sources

“As a layered stack rather than a replacement for the old click path: server-side collection, modelled conversions, a blended efficiency ratio as the ledger, and incrementality testing for causal…”

Source: Where this guide describes platform behaviour, it follows Meta’s published advertising and Marketing API documentation, which changes without notice — verify anything load-bearing against the current version before you act on it. Every threshold the guide asks you to supply is first-party, drawn from your own account exports and commerce ledger, because no external benchmark can stand in for your own margin structure.

See what your Meta ads are really costing you.

Connect your account and Bach ranks potential revenue leaks with estimates and actions you can review. Free for 7 days, no credit card.

Start Free Audit
Start your free audit