How to Calculate True ROAS (Not What Meta Tells You)
Log into Meta Ads Manager right now. Look at your ROAS column. That number is almost certainly wrong.
Not wrong because of a bug. Wrong because Meta's definition of ROAS and your definition of profitability are measuring fundamentally different things. And the gap between them is where D2C brands quietly bleed money while celebrating "great results."
What Meta's ROAS Actually Measures
When Meta reports a 4x ROAS on your campaign, here is what that number includes:
View-through conversions. Someone saw your ad in their feed, did not click, then purchased within 7 days. Meta takes credit. Was it the ad? Maybe. Was it the email they opened? The Google search they ran? The retargeting ad from another platform? Possibly all of those.
Gross revenue, not net. Meta counts the full purchase price. It does not subtract returns, refunds, exchanges, or cancellations. If your return rate is 15%, your actual revenue is 15% lower than Meta reports.
No cost of goods. A $100 sale with $60 COGS generates $40 in gross profit. Meta sees $100 in revenue. That is a significant difference when you are calculating whether a campaign is profitable.
All attribution windows. Depending on your settings, Meta may use a 7-day click, 1-day view attribution window by default. This means purchases that happen up to a week after a click and a day after a view get attributed to the ad. For brands running multiple channels, this leads to significant double-counting.
The True ROAS Formula
True ROAS accounts for the costs that Meta ignores:
True ROAS = (Revenue - COGS - Refunds - Shipping Costs) / Total Ad Spend
Or expressed as a contribution margin approach:
True ROAS = Gross Profit After Returns / Total Ad Spend
This gives you the actual dollars of profit generated per dollar of ad spend, not the inflated top-line revenue number.
Example: The 4x ROAS That Was Actually 1.6x
Let us walk through a real scenario. A skincare brand running Meta Ads reports the following for a campaign last month:
Meta's reported numbers:
- Ad spend: $10,000
- Attributed revenue: $40,000
- Reported ROAS: 4.0x
The adjustments Meta does not make:
| Adjustment | Amount | Explanation |
|---|---|---|
| View-through attribution | -$8,000 | 20% of attributed sales were view-through only |
| Returns and refunds | -$4,800 | 15% return rate on remaining revenue |
| COGS | -$10,880 | 40% COGS on net revenue |
| Net revenue after adjustments | $16,320 |
True ROAS: $16,320 / $10,000 = 1.63x
That is not a rounding error. The brand thought it was generating $4 for every $1 spent. The reality is $1.63. At a 1.63x true ROAS, this campaign is barely breaking even after you account for operational overhead, platform fees, and team costs.
Why the Gap Is So Large
The 40-60% overestimation range is not an exaggeration. Here is why the gap compounds:
Returns are category-dependent. Fashion and apparel brands see 20-30% return rates. Even skincare and supplements run 8-15%. Meta never sees these returns. Your ROAS stays inflated in the ads dashboard even as refunds pile up in Shopify.
COGS varies by SKU. Your hero product might have 35% COGS and your bundles might run 50%. A blended average misses the nuance. When high-COGS products get disproportionate ad spend, the gap between reported and true ROAS widens.
Multi-touch attribution inflates every channel. Meta takes credit. Google takes credit. Klaviyo takes credit. If you sum up the attributed revenue across all platforms, it will exceed your actual total revenue, sometimes by 2-3x. This is not a conspiracy; it is how each platform's attribution model works in isolation.
How to Calculate Your True ROAS Today
You do not need a data science team for this. You need four numbers:
Step 1: Get your real revenue
Start with Shopify (or your commerce platform) as the source of truth for revenue, not Meta. Filter by the same date range as your ad campaign. Subtract refunds and returns.
Net Revenue = Shopify Gross Revenue - Refunds - Returns
Step 2: Subtract COGS
If you track COGS per product in Shopify, pull the actual number. If not, use your blended gross margin percentage.
Gross Profit = Net Revenue x (1 - COGS %)
Step 3: Identify your ad spend
Use the actual spend from the ad platform, not any estimated or budgeted number.
Step 4: Calculate
True ROAS = Gross Profit / Ad Spend
Step 5: Set your threshold
Your break-even ROAS is not 1.0x. It is higher because you have operational costs beyond COGS and ad spend. For most D2C brands, the break-even true ROAS is between 1.5x and 2.0x depending on your overhead structure.
Anything below that threshold means the campaign is losing money, even if Meta says it is a 3x ROAS.
The View-Through Problem
View-through conversions deserve special attention because they are the single biggest source of ROAS inflation.
A view-through conversion means: someone was served your ad impression (it appeared on their screen), they did not click, and they purchased within 1 day. Meta counts this as a conversion from your ad.
The problem: that person may have been planning to buy anyway. They may have found you through organic search, a friend's recommendation, or an email. The ad appeared in their feed because Meta's algorithm knew they were likely to buy (that is how the algorithm works, it targets people likely to convert), but the ad may not have caused the purchase.
For many brands, view-through conversions account for 15-30% of total attributed conversions. Removing them entirely is too aggressive, as some genuinely were influenced by the ad. But counting them at full value is too generous.
A reasonable middle ground: weight view-through conversions at 25-50% of their reported value. This is imperfect, but it is far closer to reality than the default.
How to Automate True ROAS Tracking
Calculating true ROAS manually once is educational. Doing it weekly across multiple campaigns, ad sets, and creatives is unsustainable.
The sustainable approach requires:
1. A unified data layer. Your commerce platform, ad platforms, and financial data need to flow into a single source where COGS, refunds, and attribution can be reconciled automatically.
2. Platform-agnostic attribution. Instead of trusting any single platform's attribution, use your commerce platform's revenue as the baseline and allocate credit across channels based on your chosen model.
3. Real-time COGS integration. True ROAS should update automatically as product costs change, new SKUs launch, and refunds process.
4. Alerting on thresholds. When a campaign's true ROAS drops below your break-even point, you should know within hours, not at the end of the month when you reconcile everything manually.
This is exactly what Nucks does. It pulls revenue from Shopify, ad spend from Meta and Google, factors in COGS and refunds, and calculates true ROAS automatically. When a campaign drops below your threshold, Nucks alerts you and can pause the underperforming ad set without waiting for you to log in.
The Bottom Line
Meta's ROAS number is a marketing metric, not a financial metric. It is useful for comparing campaign performance within Meta, but it is dangerous as a proxy for profitability.
True ROAS, the one that accounts for returns, COGS, and realistic attribution, is typically 40-60% lower than what Meta reports. For a brand celebrating a 3x ROAS, the reality might be 1.2-1.8x.
That does not mean Meta Ads are not working. It means you need to make decisions based on the right number. And the right number requires data from outside Meta's walled garden.
Stop optimizing for a number that does not reflect reality. Start calculating the number that does.