At a glance
Return on ad spend, the headline efficiency number for Meta. action_values[purchase] ÷ spend. A 4× ROAS means £1 of Meta spend produced £4 of Meta-attributed purchase value. Below 2× is unprofitable for most DTC margins after COGS, fulfilment, and overhead. Caveat: post-iOS 14.5, Meta’s claimed ROAS over-states by 30, 80% versus commerce-platform truth without Conversions API.
Calculation
Calculated automatically from your Meta Ads (Facebook) data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A US homeware brand running Meta on a 7d/1d attribution window. The 30-day window is 02 Apr 26 to 01 May 26. Account currency USD. CAPI is live (rolled out 12 Mar 26).
Shopify-side total revenue for the same period: 48k. GA4 Paid Social-attributed revenue: $61k.
- The headline 3.97× is honest by Meta’s measurement, but the business ROAS is closer to 1.2, 1.6×. Real Meta-driven Shopify revenue (a probabilistic blend of UTM truth and modeled lift) is probably 154k. Divide that by spend: 1.3, 1.7×. Don’t quote 3.97× to the CFO without the gap caveat.
- Returning-audience Advantage+ at 6.32× is misleading. Returning customers were going to come back anyway; you’re paying Meta to defend revenue you’d capture for free via email or organic. Same dynamic as Branded Search on Google Ads. The “true acquisition” ROAS is closer to the cold-audience number (3.50×, or 1.4× on the Shopify-truth basis).
- iOS share is 63% on this account, structurally high. That makes the iOS gap especially material. The CAPI rollout in March helped (the gap was probably 50, 70% before; it’s down to 25, 35% now). Without CAPI, the headline ROAS would read closer to 5×, even more inflated.
- Modeled conversions are running at 11% of
action_valuesthis period. Reasonable, indicates CAPI is working (modeled fill dropped from ~22% pre-CAPI). If you see modeled fill >25% on a CAPI-live account, the implementation has gaps; checkevent_iddeduplication and CAPI event coverage. - The 30-day prior window had ROAS 4.21×, slight decline. Spend up 8%, ROAS down 6%. That’s mild scaling pressure, fine for now. If next 30 days shows ROAS down a further 10%+ alongside spend up, hit the brakes; you’re scaling beyond the efficient frontier. Plan a creative refresh in 7, 14 days (frequency on the cold Advantage+ campaign hit 4.7 last week).
- ROAS up + spend up = healthy scaling, expand budget if pacing allows.
- ROAS flat + spend down = budget cut without channel deterioration. Channel is still healthy.
- ROAS up + spend down = pulled back wisely from low-quality inventory; can scale back when audience refreshes.
- ROAS down + spend up = scaling beyond efficient frontier. Cap budget, refresh creative, audit Advantage+ output.
- ROAS down + spend flat = something changed in attribution, conversions, or competitive landscape. Investigate before cutting. Check Conversions Trend and Clicks vs Conversions first.
Sibling cards merchants should reference together
Reconciling against the vendor’s own dashboard
Where to look in Meta Ads Manager: Meta Ads Manager → Campaigns → Columns → “Purchase ROAS (return on ad spend)”. This is the column Meta itself surfaces as the headline efficiency reading. Match the date range to this card’s window and the footer total should reconcile to within sub-percent rounding. Other Ads Manager columns that look similar but aren’t:- Mobile App ROAS: app-purchase ROAS via SDK; separate ecosystem from web. Not in this card.
- Outbound CTR: clicks that left Meta vs clicks within Meta. Not ROAS.
- Conversion Lift / Brand Lift: Meta-run incrementality studies, separate methodology.
Cross-connector reconciliation:
The ROAS reading on this card is Meta’s view of Meta-driven performance. The same purchase will be claimed differently by every platform that has a tag in the path. The honest comparison set:
Known limitations / merchant FAQs
Why does Meta say I’m at 15× ROAS but Shopify says I’m at 3× ROAS? The single most common Meta question. Three layers stack:- Different denominator definitions. Meta’s ROAS uses
action_values[purchase]= Meta-claimed revenue including modeled conversions and 7d-click + 1d-view attribution. Shopify’s “Meta-source revenue” uses UTM-tagged orders only. The two are measuring different sets of orders. - iOS 14.5 ATT. Even on the same orders, Meta has Pixel + CAPI + modeling; Shopify has only what’s tagged with the right UTM. iOS users without ATT consent strip UTMs at link click; Shopify counts those orders as Direct. Meta still claims them.
- Last-click vs UTM-truth. Meta credits any purchase that touched a Meta click within 7 days. Shopify only credits orders where the customer arrived via a UTM-tagged Meta link as their last referrer. A user who clicked Meta on Mon, browsed away, returned via Google search Fri, bought, is Meta-attributed in Meta and Google-attributed in Shopify (or Direct, if the Google referrer was lost).
- The Pixel can still fire on opted-in users.
- For opted-out users, Pixel is blocked from receiving advertiser-id (IDFA), so Meta can’t link the conversion back to the user who clicked the ad.
- Meta backfills with statistical modeling (machine-learning estimates) and Conversions API (server-to-server bypass).
- Shopify: Install official Meta Sales Channel app → enable Conversions API → choose “Maximum” data sharing. 30-minute setup. Auto-deduplicates Pixel + CAPI via
event_id. Easiest. - BigCommerce: Meta Pixel app + manual CAPI via Tag Manager + custom event_id. 2, 4 hours.
- Adobe Commerce / Magento: Meta extension + custom server endpoint. 1, 3 days.
- Custom / headless: Build a server-side proxy that mirrors Pixel events. 1, 2 weeks.
- In all cases: deduplicate via
event_id(unique per purchase) and matching event timestamps. Test in Meta Events Manager → Test Events tab; if dedup is working, both Pixel and CAPI events show but Meta credits one. - Allow 7, 14 days for retraining before judging the ROAS lift; Meta’s models recalibrate over that window.
action_values) but typically run 8, 18% of total revenue for Pixel-only DTC accounts. Patterns:
- Pre-CAPI: modeled fill ~20, 30%. Inflated.
- Post-CAPI clean: modeled fill ~5, 12%. Healthy.
- Post-CAPI but still high (>20%): implementation gaps, audit
event_iddeduplication and event coverage.
- Search has less iOS impact (search intent is desktop and Android-heavier).
- Google Tag Manager + Enhanced Conversions has better consent-mode handling.
- Modeled-conversion share is lower (5, 12% on Google vs 8, 18% on Meta).
event_id matching, Meta server-side dedupes; you get the union (whichever event arrived first or whichever has more data wins, depending on Meta’s logic). Without dedup, you double-count and your ROAS reads ~80% inflated. Test it: Meta Events Manager → Test Events → check dedup status indicator. The official Shopify Sales Channel app handles this automatically; custom implementations need explicit dedup logic.