From 0.9x at week 0, climbing through 13 weeks of stack rebuild. Above pre-iOS-18 baseline of 2.1x.
Wellness brand, ROAS recovered post-iOS 18.
An archetype built from the server-side attribution rebuilds we have shipped for DTC wellness brands. ROAS climbed from 0.9x to 2.8x in thirteen weeks with Meta CAPI, Cloudflare sGTM, and warehouse-blended reporting.
A DTC wellness brand watched its reported ROAS collapse after iOS 18.
The revenue never dropped. The measurement did. iOS 18 shipped in September 2024 with capped postback windows and tighter App Tracking Transparency enforcement. Safari on iOS started dropping browser-side pixel events. Meta's ad manager, reading only that pixel, reported blended ROAS falling from 2.1x to 0.9x within three weeks.
We rebuilt the stack. Reported ROAS recovered to 2.8x across thirteen weeks, above the pre-iOS-18 level. It landed higher because the new measurement caught conversions the old pixel had been missing all along.
Meta Event Match Quality score post-CAPI + SGTM. From 38% on browser-side pixel alone.
Signed on week 0; CAPI live week 2; SGTM week 6; warehouse blended week 11; pre-iOS-18 baseline cleared week 13.
The brand had not lost revenue. The brand had lost the ability to see it.
In September 2024 the founder watched Meta report ROAS sliding week over week: 2.1x, then 1.4x, then 0.9x. Ad spend had not changed. Neither had creative or audience. Shopify revenue was flat. Email revenue was flat. Direct-type-in traffic was flat. The only number falling was the one Meta claimed to drive.
The obvious conclusion was that ads had stopped working. It was wrong. iOS 18's Safari tracking restrictions had started dropping conversion events from the browser-side pixel. Proving that to a founder about to turn ads off was the harder job.
The stack itself was standard 2023 issue. Meta Pixel on every page. Google Analytics 4 through client-side GTM. A handful of server events from Shopify webhooks into Klaviyo, plus weekly CSV exports into the founder's spreadsheet. Nothing was server-side. Nothing was consent-aware beyond a cookie banner. Nothing survived iOS 18's Intelligent Tracking Prevention 2.3 release.
This was not a one-tool fix. It was a full stack replacement. The thirteen-week runway below is what we ran, stage by stage. The first six weeks were pure engineering with nothing to show in reported ROAS. The curve turned in weeks 7 through 13.
Five layers, measured once.
This is the stack every mid-market DTC brand should run after iOS 18. Each layer fixes a specific failure of the old setup. The warehouse at the bottom is the single source of truth. Everything above it is instrumentation feeding that truth.
Browser pixel.
Kept, not trusted. Meta Pixel + GA4 via GTM for audience building, not reporting. iOS 18 capped 24h postback respected.
Consent.
Google Consent Mode v2 via Cookiebot. Per-user ad_storage + ad_user_data + ad_personalization signals.
Meta CAPI.
Server-side Conversions API via Shopify webhook → Cloudflare Worker → Meta endpoint. Event deduplication via event_id.
Server-side GTM.
sGTM on Cloudflare Workers. Routes events to Meta, GA4, TikTok, Klaviyo, BigQuery. First-party domain, no iOS throttling.
Warehouse truth.
BigQuery via Rivery. Blended CAC, MER, contribution LTV. Single source of truth for founder's Monday meeting.
Looker Studio dashboard on BigQuery. Meta is no longer a reporting surface; it is an audience tool.
Thirteen weeks. One curve.
Engineering first. Reporting second.
- Weeks 1-2: audit current stack, map every event, ship Meta CAPI server-side via Shopify webhooks + Cloudflare Worker with event deduplication
- Weeks 3-5: migrate GTM to Consent Mode v2 via Cookiebot, configure ad_storage + ad_user_data + ad_personalization signals per region
- Weeks 6-8: deploy server-side GTM on Cloudflare, move all marketing event routing server-side, first-party subdomain for first-party cookies
- Weeks 9-10: wire BigQuery via Rivery CDP, schema for orders, sessions, events, customers, subscriptions
- Weeks 11-12: build Looker Studio dashboard: blended MER, contribution CAC, 1-year LTV, payback period by channel
- Week 13: switch founder's Monday reporting to warehouse dashboard, archive Meta as an audience surface only
"We almost turned off ads because Meta said they were broken. The rebuild showed us we had a measurement problem, not an ads problem. Thirteen weeks later we were spending more and reporting a higher ROAS than before iOS 18."
Watching your reported ROAS collapse?
We run server-side attribution rebuilds in 10 to 14 weeks. Audit in week one, written plan in week two, implementation through week ten, reporting flip in week thirteen.
Published · Last updated .