Case study no. 02 · Melbourne · DTC ecommerce
Recovering $1.42M of attribution lost to iOS.
Sixteen weeks of server-side attribution rebuild, consent infrastructure, and reporting reconciliation. Restored 71% of the match quality lost to iOS 14.5 and recovered $1.42M of provably profitable spend.
- Industry
- Direct-to-consumer apparel
- Location
- Melbourne, VIC
- Revenue at start
- $11.2M annual revenue at start of engagement
- Engagement
- 16 weeks · May to September 2024
Headline result
$1.42M
Recovered ad spend, year one
Difference between attributable revenue under restored measurement vs. the previous fourteen months at equivalent spend, controlled for peak. Calculation method documented in the engagement report.
- +71%
- Match quality restored
- −4%
- Reporting reconciliation gap, end of engagement
- +13pp
- Consent opt-in rate
Meta Event Match Quality score improvement, 3.1 to 7.4.
Meta vs. Shopify order count delta. Down from 32% pre-engagement.
OneTrust dashboard. 58% to 71%.
The brief
The problem.
Two years after iOS 14.5, the in-house team knew Meta attribution was degraded but did not know by how much. The reports looked plausible in isolation. Cross-checked against Shopify and the CRM, they were 32% off. The CFO had stopped trusting the dashboard.
The constraint.
Peak season was twelve weeks away. Anything that risked breaking the live data flow during peak was off the table. Build had to happen in parallel with BAU.
What was broken
01
Match quality had quietly collapsed
Event Match Quality scores in Meta had fallen from 7.8 (good) pre-iOS to 3.1 (poor). Without first-party data being passed via CAPI, Meta was guessing on more than half of the conversions.
02
Consent banner was rejecting CAPI calls
The OneTrust consent setup had been configured to block server-side calls under 'analytics' rather than 'marketing'. Roughly 41% of visitors who would have allowed CAPI were being silently blocked.
03
Shopify orders and Meta conversions did not reconcile
Order IDs were not being passed in the conversion event. Deduplication was failing, double-counting some events and missing others entirely. Net error: ~24% over-reporting on Meta, ~18% under-reporting on Google.
What changed and why
01
First-party data layer rebuilt
Hashed email, hashed phone, FBP, FBC, first-party cookie, and order ID added to every conversion event, both browser and server. Match quality recovered from 3.1 to 7.4 over six weeks of data.
02
Consent stack reconfigured
Server-side calls reclassified under marketing consent, with a clearer banner that improved opt-in rate from 58% to 71%. No legal change, just clearer wording.
03
Order ID deduplication enforced end-to-end
Every conversion event now carries the Shopify order ID. Meta and Google both deduplicate against it. Reconciliation gap closed from 32% to 4%, well within attribution noise.
Timeline
Weeks 1 to 2
Diagnostic. Read-only inventory of the existing stack and a written report.
Weeks 3 to 6
Server-side rebuild in a staging container. Zero impact on live BAU.
Week 7
Cutover during a low-traffic window. Old and new running side-by-side for verification.
Weeks 8 to 12
Consent reconfiguration, OrderID deduplication, reporting reconciliation.
Weeks 13 to 16
Steady-state monitoring, peak season readiness review, handover.
Anonymised at client request. Numbers are accurate. Identifying details have been removed.
Next step
Attribution still broken? It usually is.
If your reports stopped agreeing after iOS 14.5 and never quite recovered, this is the work. Sixteen weeks. No drama during peak.