§
§ · case study

Wellness brand, ROAS recovered post-iOS 18.

An archetype drawn from server-side attribution rebuilds we have shipped for DTC wellness brands. ROAS from 0.9x to 2.8x across thirteen weeks via Meta CAPI, Cloudflare sGTM, and warehouse-blended reporting.

§ 01 · archetype · wellness supplement

A DTC wellness brand watched its reported ROAS collapse after iOS 18.

iOS 18 shipped in September 2024 with capped postback windows and tighter App Tracking Transparency enforcement. Meta's ad manager, reading only browser-side pixels that Safari iOS now routinely dropped, reported blended ROAS falling from 2.1x to 0.9x within three weeks. The business had not actually lost revenue. The business had lost the ability to measure it. We rebuilt the stack and recovered reported ROAS to 2.8x across thirteen weeks, above pre-iOS-18 levels, because the new measurement captured conversions the old pixel had been missing all along.

reported ROAS
2.8x

From 0.9x at week 0, climbing through 13 weeks of stack rebuild. Above pre-iOS-18 baseline of 2.1x.

match rate
76%

Meta Event Match Quality score post-CAPI + SGTM. From 38% on browser-side pixel alone.

weeks to flip
13

Signed on week 0; CAPI live week 2; SGTM week 6; warehouse blended week 11; pre-iOS-18 baseline cleared week 13.

§ 02 · the challenge

The brand had not lost revenue. The brand had lost the ability to see it.

In September 2024 the founder watched Meta's ad manager report a week-over-week ROAS drop from 2.1x to 1.4x to 0.9x, with no change in ad spend, creative, or audience. Shopify revenue was flat. Email revenue was flat. Direct-type-in traffic was flat. Everything was flat except what Meta claimed it was driving. The logical conclusion, that ads had stopped working, was wrong. The actual conclusion, that iOS 18's Safari tracking restrictions had started dropping conversion events from the browser-side pixel, was harder to prove to a founder about to turn ads off.

The brand was running a standard 2023-era measurement stack: Meta Pixel on every page, Google Analytics 4 via client-side GTM, a handful of server events fired from Shopify webhooks into Klaviyo, and weekly CSV exports to a founder's spreadsheet. Nothing was server-side. Nothing was consent-aware beyond a cookie banner. Nothing survived contact with iOS 18's Intelligent Tracking Prevention 2.3 release.

The rebuild was not a matter of adding one tool. 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 no reported-ROAS improvement. Weeks 7 through 13 is where the curve turned.

§ 03 · the five-layer stack

Five layers, measured once.

The stack below is what every mid-market DTC brand should be running after iOS 18. Each layer solves a specific failure mode from the previous stack. The warehouse at the bottom is the single source of truth; everything above it is instrumentation feeding that truth.

Editorial 5-layer attribution stack diagram showing client-side pixel at top, consent layer, Meta Conversions API, Server-Side GTM on Cloudflare, and BigQuery warehouse with Rivery CDP at the bottom as the single source of truth.
Fig. 1 · the five-layer stack · each layer solves what the previous one missed
layer 01

Browser pixel.

Kept, not trusted. Meta Pixel + GA4 via GTM for audience building, not reporting. iOS 18 capped 24h postback respected.

layer 02

Consent.

Google Consent Mode v2 via Cookiebot. Per-user ad_storage + ad_user_data + ad_personalization signals.

layer 03

Meta CAPI.

Server-side Conversions API via Shopify webhook → Cloudflare Worker → Meta endpoint. Event deduplication via event_id.

layer 04

Server-side GTM.

sGTM on Cloudflare Workers. Routes events to Meta, GA4, TikTok, Klaviyo, BigQuery. First-party domain, no iOS throttling.

layer 05

Warehouse truth.

BigQuery via Rivery. Blended CAC, MER, contribution LTV. Single source of truth for founder's Monday meeting.

reporting

Looker Studio dashboard on BigQuery. Meta is no longer a reporting surface; it is an audience tool.

§ 04 · the recovery curve

Thirteen weeks. One curve.

Editorial line chart showing ROAS recovery from 0.9x at week 1 climbing through inflection points at week 2 when Meta CAPI went live, week 6 when Server-Side GTM deployed, and week 11 when warehouse blended reporting launched, ending at 2.8x in week 13.
Fig. 2 · the recovery curve · thirteen weeks, three inflection points
§ 05 · the thirteen-week runway

Engineering first. Reporting second.

  1. Weeks 1-2: audit current stack, map every event, ship Meta CAPI server-side via Shopify webhooks + Cloudflare Worker with event deduplication
  2. Weeks 3-5: migrate GTM to Consent Mode v2 via Cookiebot, configure ad_storage + ad_user_data + ad_personalization signals per region
  3. Weeks 6-8: deploy server-side GTM on Cloudflare, move all marketing event routing server-side, first-party subdomain for first-party cookies
  4. Weeks 9-10: wire BigQuery via Rivery CDP, schema for orders, sessions, events, customers, subscriptions
  5. Weeks 11-12: build Looker Studio dashboard: blended MER, contribution CAC, 1-year LTV, payback period by channel
  6. Week 13: switch founder's Monday reporting to warehouse dashboard, archive Meta as an audience surface only
from the founder · archetype composite
"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."
Composite quote
Patterns from multiple DTC wellness founder conversations
§ 06 · start a similar rebuild

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.