Free: the 90-second Leak Check. No email.Take it

Inside the Black Box · Part 8 of 11

4× ROAS and break-even: the ecommerce Black Box

Meta says 4.1× ROAS. Google says 3.8×. The bank account says break-even. Why the platforms both claim the same order, what ROAS leaves out, and the one number a Shopify store should run on instead.

Monday morning, a founder opens three tabs.

Meta Ads Manager: ROAS 4.1×. Google Ads: ROAS 3.8×. Shopify: revenue up 22% month over month.

Bank: about where it was in March.

Every tab is telling the truth by its own rules. None of them is telling the founder what the business made. This is the Black Box built directly into the tools — no agency required, though an agency that forwards these tabs with a summary on top has added a second box around the first.

“Every dashboard says we're winning. I'd like one that says whether we're profitable.”

Trick one: two platforms, one order

A customer sees a Meta ad on Tuesday, searches the brand on Thursday, clicks a Google Shopping ad, and buys.

Meta counts the order — the customer saw the ad within its attribution window. Google counts the order — the customer clicked and bought. Shopify counts one order. Add the platform dashboards together and you have two orders' worth of "revenue" against one order's worth of money.

This isn't a bug. Each platform attributes by its own rules (view-through windows, click windows, modeled conversions), and each rule is designed to give the platform credit. Neither can see the other. The overlap is often a large share of reported conversions, and nobody reports the overlap, because the overlap is the number that makes both ROAS figures smaller.

Rule of thumb: if platform-reported revenue is higher than Shopify revenue, the difference is double counting. It frequently is.

Trick two: "revenue" isn't money

Even on a single order with no double count, ROAS is built on the wrong numerator. Return on ad spend uses gross revenue — what the customer paid at checkout. What's left after the order actually ships and settles is a different number.

A $100 order, for a typical DTC product:

ItemItem
Gross revenue$100
Returns / refunds (say 12%)−$12
COGS on the net sale−$32
Shipping + packaging−$11
Payment processing−$3
Discount code the ad promised−$10
Contribution before ads$32

So a "4× ROAS" — $25 of ad spend to produce that $100 — actually leaves $32 − $25 = $7 on a $100 order. Before payroll, software, rent, and the founder's salary.

Cut the double count in (say Meta and Google together claimed $1.30 of revenue for every real $1.00) and the real ROAS on that spend is closer to 3.1×, which on the table above is zero. Break-even, to the dollar.

4.1× on the dashboard. Break-even in the bank. Both numbers are "correct."

Trick three: the ad account is the customer data

The ownership move from post #2 has an ecommerce-specific version. The Meta pixel, the Google tag, the conversions API connection, the audiences built from three years of purchasers — if these live in an agency's Business Manager or ad account rather than yours, the agency holds your customer data. Leave and the audiences, the conversion history, and the algorithm's learning go with them. Campaigns start from zero in a new account, at new-account prices.

Check: Business Manager → who owns the ad account and the pixel. If it isn't your Business Manager, the asset is rented.

The number to run on instead

Replace ROAS with something the bank recognizes. Two candidates, pick the one your accountant already tracks:

Marketing Efficiency Ratio (MER): total revenue ÷ total ad spend, measured from Shopify, not the platforms. No attribution, no double count. Blunt, but it can't lie to you.

Contribution margin after ads: per order, or per month — revenue − returns − COGS − shipping − processing − discounts − ad spend. This is the ecommerce version of cost per booked job. It's the number at the top of the report.

The Black Box reportsThe real report reports
Platform ROAS (each platform, separately)MER from Shopify revenue ÷ total spend
RevenueContribution margin after ads
ConversionsNet orders (after returns)
CPACost per profitable order — and how many orders aren't
Audience growthReturning-customer share; CAC payback in months

The bottom row matters more as the store grows. A store that only measures first-order ROAS will happily buy unprofitable first orders forever, or kill the campaigns that bring customers who reorder three times. Which is which only shows up if the report follows the customer past order one.

Worked month

A $1.8M/yr Shopify store, one month:

ItemDashboards sayReal
Ad spend (Meta + Google)$38,000$38,000
Revenue attributed$156,000 (both platforms summed)$142,000 (Shopify)
ROAS / MER4.1×3.7×
Returns−$17,000
COGS, shipping, processing, discounts−$71,000
Contribution after ads$16,000
Margin after ads"4.1× ROAS"11%

$16,000 on $142,000. That's a real business, and a thin one, and a single bad month of returns or a shipping-rate increase wipes it out. The 4.1× figure would never show that. The 11% does.

Now split it by campaign and the same thing happens as in post #7: the campaign with the best ROAS (a discount-code retargeting ad) has the worst contribution margin, because the discount eats it. The prospecting campaign with "bad" ROAS is bringing the customers who reorder.

Build it

  1. Shopify is the source of truth for revenue, orders, returns, and discounts. Export monthly.
  2. COGS per SKU from your inventory system or a spreadsheet.
  3. Ad spend from each platform's billing — not their attributed revenue.
  4. One table: revenue − returns − COGS − shipping − processing − discounts − ad spend.
  5. Split by campaign using UTM parameters and first-order discount codes, accepting that it's imperfect — imperfect contribution beats precise ROAS.

An afternoon to set up. Then monthly. Then it's the number the business runs on.

The Leak Check for stores

The three questions are the same ones as for a plumber: can you tie spend to profitable orders (not attributed revenue), do you own the ad accounts and the pixel, and how fast does a customer question get a human. The Leak Check has an ecommerce branch that asks them in store terms.

Run the Leak Check

What AdPlanck puts at the top

For stores, the first line of the monthly report is contribution margin after ads, with MER next to it and the platform ROAS figures in the appendix where they belong. Everything lives in your Business Manager and your Google account. Flat price, on the pricing page.

The platforms will always report a number that makes the platform look good. Someone has to report the one that makes the bank account look accurate. That's the job.


Sources & notes
  • Meta Business Help: attribution settings and windows; Google Ads Help: attribution models and conversion counting
  • Shopify Help: reports on returns, discounts, and net sales
  • Worked figures are synthetic composites; margins vary widely by category.