If you opened your CFO’s ROAS dashboard this morning and the number looked too good, congratulations: your attribution is lying. If it looked too bad, also congratulations — the lie just runs in the other direction. Either way, you are not measuring what you think you’re measuring, and the gap between “what the dashboard says” and “what the bank account does” has gotten wider every quarter since 2021.
We’ve spent the last three years rebuilding the attribution stack on $20M+ of operated spend across 200+ growth teams. Some of the rebuilds were surgical. Some were salvage operations. The patterns are the same. This post is what we’ve learned.
The signal got worse, fast
Three things happened between 2021 and 2025 that broke client-side tracking for almost every paid channel.
iOS 14.5 introduced ATT and gutted Meta’s pixel-level signal. The remaining click-through events became modeled estimates, and the modeling got more aggressive year over year. By 2024, a meaningful share of “reported conversions” in any Meta ad account is no longer a conversion at all — it’s a probabilistic guess based on aggregated post-event signal.
Safari ITP and Firefox ETP started capping first-party cookie lifetime to 7 days, then to 24 hours for some scripts. Most attribution windows are 30+ days. The math broke quietly.
Third-party cookies began their slow deprecation in Chrome — partial, repeatedly delayed, but real. Display, retargeting, and view-through measurement on the open web have already lost most of their fidelity, and the writing on the wall is what every senior media buyer is reading.
The signal got worse, but most reporting dashboards kept reporting like nothing happened. That’s the lie.
The platforms responded by leaning harder on modeling. Google’s conversion modeling, Meta’s post-event attribution, TikTok’s VTA — all of them turned dials toward “estimate more, observe less.” That’s rational from the platform’s perspective. From the advertiser’s perspective, it means the conversions credited to your campaigns are increasingly statistical fiction.
Last-click is a fairy tale
Last-click attribution was always a fairy tale, but in 2025 it’s a fairy tale told by someone who’s lost half their library. The remaining clicks the system can see are even more skewed toward the bottom of the funnel than they used to be, because:
- Branded search still tracks cleanly — people search your brand, click, convert. Easy. Last-click loves it.
- Cold prospecting via Meta now relies on modeled conversions stitched from anonymized signal. Last-click sees half of what actually happened, at best.
- YouTube, TikTok, Display — the channels where the customer first hears about you — get systematically under-credited because the click that closes the deal is almost always somewhere else.
The predictable result: most accounts cut their prospecting spend, double down on branded search, and then wonder why blended CAC slowly climbs while reported ROAS goes up. The dashboard celebrates. The bank account doesn’t.
Four fixes work. None of them are new. All of them require commitment to running differently from how most agencies run.
Fix #1: Server-side everything
Move every important conversion event to server-side. This is not optional anymore.
The mechanics: instead of a pixel firing in the browser when a user converts, a server-side container (GTM Server, Stape, RudderStack, Segment — we’ve shipped on all of them) fires the event from your infrastructure to the platform’s conversion API. This bypasses browser-level restrictions (ITP, ad blockers, third-party cookie blocking) and dramatically improves the platform’s ability to match the event to a user.
The proof point: Event Match Quality on Meta. On client-side pixel, EMQ for most accounts sits around 4–6 out of 10. Move to CAPI through a server-side container with proper user-data hashing, and EMQ climbs to 8–10. The same conversion event, transmitted differently, is worth ~30–40% more to the algorithm.
What “more” means in practice: more conversions credited (because more matches), tighter optimization (because the algorithm has cleaner signal to learn from), better lookalike audiences (because the seed data is bigger). It compounds.
Fix #2: Offline conversion import
Most B2B and considered-purchase funnels don’t convert in-session. A lead form submission is not a customer. A booked consult is not yet revenue. Last-click attribution stops at the form. The CRM picks up the story from there. The two systems never talk.
Fix it by stitching them. Offline conversion import (OCI) is the mechanism: the CRM pushes events back to the ad platform when a lead becomes a paying customer (or a booked appointment, or a closed deal), with the original click ID stitched to the event. The platform then knows which ad — which ad set, which campaign, which creative — produced that revenue, not just that lead.
This single change reframes the conversation in every monthly review we’ve run for healthcare and B2B clients. The CMO stops saying “we got 240 leads last month” and starts saying “we got 42 booked patients from Google, 11 from Meta, and our blended CAC by booked patient is $312.” The CFO leans in. The conversation changes.
The data hygiene that makes this work
OCI requires that gclid, fbclid, and equivalent click IDs are captured at lead-submission time and stored on the lead record in the CRM. That’s a 90-minute integration job most agencies skip. Done well, it’s the single highest-leverage piece of plumbing in the entire stack.
Fix #3: Cohort-based ROAS
Single-month ROAS is a single-purchase metric. Most categories — wellness, healthcare, subscription, marketplaces — are multi-purchase businesses. The metric and the business don’t match.
Cohort-based ROAS fixes this by tracking revenue by acquisition month, then projecting forward at month-3 and month-6 checkpoints. The metric becomes “the customers we acquired in March generated $X by June, $Y by September, $Z by December.” That number can be projected, modeled, and trusted in a way single-month ROAS cannot.
For wellness brands specifically, we’ve watched accounts triple their paid budget on the back of a properly modeled month-6 cohort ROAS where month-1 ROAS would have suggested cutting spend by 40%. The difference between the two numbers is whether the brand chooses to scale or stall. The business doesn’t change; the lens changes; the outcome diverges.
Fix #4: Creator-stitched attribution
For consumer brands — especially wellness, beauty, and supplement D2C — creators now drive a large fraction of revenue, often 30–50%. Most accounts attribute none of it. Creator spend goes into a black box; conversions sit in “direct” or “organic social” on the dashboard; the feedback loop never closes.
Stitch it. Three layers:
- Creator-specific UTM codes on every link the creator posts. The code carries the creator’s ID, the platform, the campaign, and the date.
- Post-purchase “how did you hear about us?” survey on the order confirmation. Multi-select. The data’s rougher than UTM-stitched conversions, but it captures the creators whose content didn’t get a click but did get a sale.
- Weekly creator-level ROAS report, computed from the stitched data and aged at the same cohort cadence as the rest of your paid. Top performers get paid amplification; under-performers get rotated out.
This is the most operationally heavy of the four fixes. It also produces the largest single behavioral change in how the brand spends. Once the data is on the table, the conversation goes from “we work with 47 creators” to “we work with 12 creators that produce 80% of attributable creator revenue — let’s amplify those.”
What this looks like in practice
The accounts we’ve rebuilt this way share a few visible markers six months in:
- The blended CAC line on the dashboard agrees with the CRM-side blended CAC line, plus or minus 10%. (Before the rebuild, divergence of 40–60% is the norm.)
- Branded search budget gets cut. Prospecting budget gets increased. Total paid spend usually goes up, not down, because the team has finally found the channels that were under-credited and is willing to scale them.
- Monthly business reviews stop being about ROAS arguments and start being about cohort projections. The CFO joins. The conversation is shorter.
The fixes aren’t hard to describe. They are hard to commit to. Each one requires saying “the dashboard I’ve been staring at for years is wrong, and the new number will look worse before it looks better.” That’s the part most teams choke on. The teams that don’t are the ones that compound.
The bottom line
Attribution in 2025 is broken in a way that’s structural, not cyclical. The platforms aren’t going to fix it for you. The browsers aren’t going to roll back ITP. The regulators aren’t going to ease ATT. The signal that you used to get for free is gone, and the only way back to a clean read on your paid acquisition is to rebuild the plumbing.
Server-side conversions. Offline import to and from the CRM. Cohort-based ROAS. Creator-stitched attribution. None of these are new ideas. All of them are things most accounts haven’t shipped. The accounts that ship them stop arguing about whether paid is working and start arguing about how to scale it.
If you want the second conversation instead of the first, the rebuild starts with the plumbing.