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

Meta Event Match Quality score improvement, 3.1 to 7.4.

−4%
Reporting reconciliation gap, end of engagement

Meta vs. Shopify order count delta. Down from 32% pre-engagement.

+13pp
Consent opt-in rate

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

  1. 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.

  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. 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

  1. Weeks 1 to 2

    Diagnostic. Read-only inventory of the existing stack and a written report.

  2. Weeks 3 to 6

    Server-side rebuild in a staging container. Zero impact on live BAU.

  3. Week 7

    Cutover during a low-traffic window. Old and new running side-by-side for verification.

  4. Weeks 8 to 12

    Consent reconfiguration, OrderID deduplication, reporting reconciliation.

  5. 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.