Calculating ROAS, MER and Blended CAC (MBA DM)

Use this reference in Week 4 (paid search budgets) and Weeks 7–8 (analytics and the capstone pitch). Session 1 set the module’s health check: LTV ≥ 3× CAC (Week 1 notes). This page shows how to calculate the numbers behind that check without fooling yourself.

What you should be able to do

  • Calculate ROAS, break-even ROAS, MER, channel CAC, blended CAC and fully loaded CAC from a monthly P&L and ad reports.
  • Calculate contribution margin, a contribution-based LTV, LTV:CAC and CAC payback.
  • Explain why platform-reported, analytics-attributed and incremental results differ, and which to use for which decision.
  • Avoid the common mistakes that make a Nepali D2C brand look profitable when it is not.

1. Definitions and formulas

ROAS (return on ad spend)   = revenue attributed to ads ÷ ad spend
                              (Google Ads shows this as "Conv. value / cost"; × 100 for a %)
Gross margin %              = (revenue − cost of goods sold) ÷ revenue
Contribution margin %       = (revenue − COGS − variable order costs) ÷ revenue
                              variable order costs: delivery, packaging, payment fees, COD returns
Break-even ROAS             = 1 ÷ margin %     (use contribution margin for a realistic floor)
MER (marketing efficiency)  = total revenue ÷ total marketing spend
Blended ROAS                = total revenue ÷ total paid media spend
Channel (paid) CAC          = channel spend ÷ new customers attributed to that channel
Blended CAC                 = total paid media spend ÷ ALL new customers (paid + organic + referral)
Fully loaded CAC            = all acquisition costs ÷ all new customers
                              (media + creative + agency + influencers + marketing salaries + tools)
LTV (contribution basis)    = contribution per customer over a stated period (e.g. 12 months)
LTV:CAC                     = LTV ÷ CAC        (module target: ≥ 3)
CAC payback (months)        = months until cumulative contribution per customer ≥ CAC

Three definitions need a decision before you calculate:

  1. “Revenue.” Use delivered revenue excluding 13% VAT and after returns. Order value on the day of purchase overstates revenue when cash-on-delivery (COD) orders are refused.
  2. “Marketing spend” in MER. Practitioners use MER in more than one way; there is no standards body for it. In this module, MER uses all marketing spend, and “blended ROAS” uses paid media only. State your definition on every slide.
  3. “New customer.” CAC counts first-time buyers, not orders and not leads. A cost per lead is a different metric (see the CAC vs CPA self-check in Week 4).

Why break-even ROAS = 1 ÷ margin: if each NPR 1 of revenue leaves NPR 0.40 after product and order costs, you need NPR 2.50 of revenue to pay back NPR 1 of ads (2.50 × 0.40 = 1.00). Below that ROAS every sale loses money. For a full COD and return-to-origin version, use the break-even ROAS calculator for Nepali sellers.


2. Worked example: a Nepali D2C brand (illustrative numbers)

Pahadi Organics is a hypothetical Kathmandu brand selling tea and spice boxes on its own website, delivered nationwide. Every number below is illustrative for one month, chosen to make the arithmetic clear. None is a benchmark.

Inputs

Item NPR / value
Delivered revenue, excluding VAT, after returns 2,400,000
Orders 1,600
New (first-time) customers 1,000
Cost of goods sold 45% of revenue
Variable order costs (delivery, packaging, payment fees, COD returns) 15% of revenue
Paid media: Meta 300,000; Google 120,000; TikTok 60,000 480,000
Other marketing: influencers 80,000; creative/agency 90,000; marketing salaries 150,000 320,000
Total marketing spend 800,000

Attribution views of the same month

Channel Spend Platform-reported revenue GA4-attributed revenue GA4 new customers
Meta 300,000 1,650,000 1,080,000 420
Google 120,000 720,000 640,000 230
TikTok 60,000 240,000 120,000 70

The other NPR 560,000 of GA4 revenue came from organic search, direct, email and WhatsApp.

Step-by-step results

Metric Calculation Result
AOV 2,400,000 ÷ 1,600 NPR 1,500
Gross margin 1 − 0.45 55%
Contribution margin 55% − 15% 40%
Break-even ROAS (gross) 1 ÷ 0.55 1.82
Break-even ROAS (contribution) 1 ÷ 0.40 2.50
Meta ROAS: platform vs GA4 1,650,000 ÷ 300,000 vs 1,080,000 ÷ 300,000 5.50 vs 3.60
Google ROAS: platform vs GA4 720,000 ÷ 120,000 vs 640,000 ÷ 120,000 6.00 vs 5.33
TikTok ROAS: platform vs GA4 240,000 ÷ 60,000 vs 120,000 ÷ 60,000 4.00 vs 2.00
Blended ROAS (paid media) 2,400,000 ÷ 480,000 5.00
MER (all marketing) 2,400,000 ÷ 800,000 3.00
Blended CAC (paid media) 480,000 ÷ 1,000 NPR 480
Fully loaded CAC 800,000 ÷ 1,000 NPR 800
Contribution after marketing 2,400,000 × 0.40 − 800,000 NPR 160,000

Customer value. Assume each new customer’s first order contributes 1,500 × 0.40 = NPR 600, and customers then place on average 0.15 repeat orders a month at the same AOV, worth 0.15 × 1,500 × 0.40 = NPR 90 a month.

  • 12-month LTV = 600 + 12 × 90 = NPR 1,680
  • LTV:CAC (fully loaded) = 1,680 ÷ 800 = 2.10, below the module’s 3× target
  • CAC payback: 600 after the first order, then +90 a month → 690, 780, 870. Contribution passes CAC (NPR 800) in month 3 after the first order.

What a manager should conclude

  1. The business is profitable this month (NPR 160,000 after marketing) and the MER of 3.00 clears the contribution break-even of 2.50, but not by much.
  2. TikTok looks fine on its own platform (4.00) but sits below break-even (2.00) in GA4. It needs an incrementality test before more budget, not an automatic cut: upper-funnel channels are under-credited by last-click-style views.
  3. Platforms together claim NPR 2,610,000, more than the brand’s total revenue of 2,400,000. That is double counting, not extra sales.
  4. LTV:CAC of 2.1 says the growth engine is fragile. Levers: raise repeat purchase (email and WhatsApp flows, subscriptions), raise contribution margin (fewer COD refusals, better delivery rates), or lower fully loaded CAC. More ad spend alone does not fix it.

3. Attribution caveats: three lenses on the same sale

Lens What it measures Strength Blind spot
Platform-reported Conversions the ad platform credits to itself within its attribution window Fast; needed for in-platform optimisation Each platform credits itself, so totals overlap; includes view-through credit
Analytics-attributed (GA4) One credit per key event, shared across channels by the property’s model De-duplicated across channels; one source of truth Misses offline closes (WhatsApp, phone, COD refusals) unless imported; depends on tagging
Incrementality (lift tests) Extra conversions caused by ads, versus a holdout group or region that saw none Closest to cause and effect Needs volume, time and budget; results describe one period and one setup

Facts to keep straight:

  • Meta reports by an attribution setting chosen in Ads Manager (click and view windows); the default is commonly 7-day click and 1-day view. Check the setting in the account before comparing numbers.
  • GA4 offers three attribution models: data-driven, paid and organic last click, and Google paid channels last click. First click, linear, time decay and position-based were removed in November 2023. Direct visits get credit only when the whole path is direct.
  • Google Ads Conversion Lift compares a group that saw ads with a held-back control group and reports incremental conversions, incremental cost per action (iCPA) and incremental ROAS (iROAS). It is not available to every account. A simpler alternative is a geo holdout: pause a channel in comparable districts for a few weeks and compare sales with districts where it kept running.

Which number for which decision:

  • Daily bidding and creative tests → platform numbers (that is what the algorithm optimises).
  • Channel budget split → GA4 plus offline conversions, cross-checked with MER.
  • “Should we spend more at all?” → MER and contribution after marketing, plus a lift test for the largest or most disputed channel.

See the Analytics & CRO Reference for the GA4 reports and the attribution model table used in class.


4. Python calculator

Paste this into any Python 3 environment (Google Colab works); it uses no libraries. Replace the inputs with your sandbox or client numbers.

"""ROAS, MER and blended CAC calculator. All figures are illustrative NPR for a
hypothetical Nepali D2C brand for one month; replace them with your own."""

revenue_net = 2_400_000          # delivered sales, excluding 13% VAT, after returns
orders = 1_600
new_customers = 1_000            # first-time buyers this month
cogs_pct = 0.45                  # product cost as a share of net revenue
variable_pct = 0.15              # delivery, packaging, payment fees, COD returns

paid_media = {"Meta": 300_000, "Google": 120_000, "TikTok": 60_000}
other_marketing = {"Influencers": 80_000, "Creative/agency": 90_000, "Marketing salaries": 150_000}
platform_reported = {"Meta": 1_650_000, "Google": 720_000, "TikTok": 240_000}
ga4_revenue = {"Meta": 1_080_000, "Google": 640_000, "TikTok": 120_000}
ga4_new_customers = {"Meta": 420, "Google": 230, "TikTok": 70}

paid_total = sum(paid_media.values())
marketing_total = paid_total + sum(other_marketing.values())
aov = revenue_net / orders
gross_margin = 1 - cogs_pct
contribution_margin = gross_margin - variable_pct

print(f"AOV                       NPR {aov:,.0f}")
print(f"Gross margin              {gross_margin:.0%}   break-even ROAS {1 / gross_margin:.2f}")
print(f"Contribution margin       {contribution_margin:.0%}   break-even ROAS {1 / contribution_margin:.2f}")
print()
print(f"{'Channel':8} {'Spend':>9} {'Platform ROAS':>14} {'GA4 ROAS':>9} {'GA4 CAC':>8}")
for ch, spend in paid_media.items():
    print(f"{ch:8} {spend:>9,} {platform_reported[ch] / spend:>14.2f} "
          f"{ga4_revenue[ch] / spend:>9.2f} {spend / ga4_new_customers[ch]:>8,.0f}")
print(f"Platforms claim NPR {sum(platform_reported.values()):,} vs actual revenue NPR {revenue_net:,}")
print()
print(f"Blended ROAS (paid media)  {revenue_net / paid_total:.2f}")
print(f"MER (all marketing)        {revenue_net / marketing_total:.2f}")
print(f"Blended CAC (paid media)   NPR {paid_total / new_customers:,.0f}")
print(f"Fully loaded CAC           NPR {marketing_total / new_customers:,.0f}")
profit_after_marketing = revenue_net * contribution_margin - marketing_total
print(f"Contribution after marketing NPR {profit_after_marketing:,.0f}")
print()

# Customer value: first order now, then 0.15 repeat orders per month at the same AOV.
cac = marketing_total / new_customers
first_order_cm = aov * contribution_margin
monthly_repeat_cm = 0.15 * aov * contribution_margin
ltv_12m = first_order_cm + 12 * monthly_repeat_cm
print(f"12-month LTV (contribution) NPR {ltv_12m:,.0f}   LTV:CAC {ltv_12m / cac:.2f}")
month, cumulative = 0, first_order_cm
while cumulative < cac:
    month += 1
    cumulative += monthly_repeat_cm
print(f"CAC payback: month {month} after the first order "
      f"(cumulative contribution NPR {cumulative:,.0f} >= CAC NPR {cac:,.0f})")
print()

# Exercise answers
print("Ex1 break-even ROAS at 35% contribution margin:", round(1 / 0.35, 2))
print("Ex2 MER:", round(1_800_000 / 450_000, 2), "| fully loaded CAC:", round(450_000 / 600))
print("Ex3 Meta ROAS platform vs GA4:", round(900_000 / 200_000, 2), round(520_000 / 200_000, 2))
print("Ex4 iROAS:", round((3_100_000 - 2_800_000) / 150_000, 2))
print("Ex5 payback months:", -(-(1_200 - 500) // 100))

Output (Python 3.11):

AOV                       NPR 1,500
Gross margin              55%   break-even ROAS 1.82
Contribution margin       40%   break-even ROAS 2.50

Channel      Spend  Platform ROAS  GA4 ROAS  GA4 CAC
Meta       300,000           5.50      3.60      714
Google     120,000           6.00      5.33      522
TikTok      60,000           4.00      2.00      857
Platforms claim NPR 2,610,000 vs actual revenue NPR 2,400,000

Blended ROAS (paid media)  5.00
MER (all marketing)        3.00
Blended CAC (paid media)   NPR 480
Fully loaded CAC           NPR 800
Contribution after marketing NPR 160,000

12-month LTV (contribution) NPR 1,680   LTV:CAC 2.10
CAC payback: month 3 after the first order (cumulative contribution NPR 870 >= CAC NPR 800)

Ex1 break-even ROAS at 35% contribution margin: 2.86
Ex2 MER: 4.0 | fully loaded CAC: 750
Ex3 Meta ROAS platform vs GA4: 4.5 2.6
Ex4 iROAS: 2.0
Ex5 payback months: 7

Channel CAC uses GA4 new customers: Meta 300,000 ÷ 420 ≈ NPR 714. Notice that every channel CAC is higher than the blended CAC of NPR 480, because blended CAC also counts the customers who arrived through organic search, referrals and WhatsApp.


5. Common mistakes

Mistake Why it misleads Fix
Comparing ROAS with a target that ignores margin A 3× ROAS can lose money at a 30% contribution margin Compare with break-even ROAS = 1 ÷ contribution margin
Using order value including VAT and before COD refusals Inflates revenue and ROAS Delivered revenue, excluding 13% VAT, after returns
Adding up platform-reported revenue Platforms overlap; totals can exceed real revenue Reconcile with the P&L; use MER as the reality check
Calling paid CAC “blended CAC” Hides how much growth depends on organic and repeat channels Label which customers and which costs are in the formula
Leaving salaries, agency and creative out of CAC CAC looks far cheaper than the business really pays Report fully loaded CAC alongside media-only CAC
LTV on revenue, not contribution Overstates LTV:CAC Calculate LTV on gross or contribution margin (Week 1 rule)
Counting leads or orders as customers Repeat orders and unqualified leads shrink “CAC” CAC = cost ÷ new paying customers
Cutting upper-funnel channels on last-click data alone They may drive searches that other channels get credit for Test with a holdout before cutting
Mixing months Spend in Dashain, sales in Tihar Use the same period; note festival seasonality

6. Exercises (answers below)

  1. A brand’s contribution margin is 35%. What is its break-even ROAS?
  2. Monthly revenue is NPR 1,800,000, total marketing spend is NPR 450,000 (all costs), and 600 new customers were acquired. Calculate MER and fully loaded CAC.
  3. Meta spend is NPR 200,000. Ads Manager reports NPR 900,000 of purchase value; GA4 attributes NPR 520,000 to Meta. Calculate both ROAS figures and say which you would use for the budget meeting.
  4. A geo holdout runs Meta ads in test districts costing NPR 150,000. Sales there are NPR 3,100,000, against NPR 2,800,000 expected from matched control districts. Calculate iROAS and decide whether the spend was profitable for a brand with a 2.50 break-even ROAS.
  5. Fully loaded CAC is NPR 1,200. A customer’s first order contributes NPR 500 and each later month contributes NPR 100. How many months after the first order until payback?
Answers 1. 1 ÷ 0.35 = **2.86**. Any ROAS below 2.86 loses money on contribution. 2. MER = 1,800,000 ÷ 450,000 = **4.0**. Fully loaded CAC = 450,000 ÷ 600 = **NPR 750**. 3. Platform ROAS = 900,000 ÷ 200,000 = **4.5**; GA4 ROAS = 520,000 ÷ 200,000 = **2.6**. Use GA4 (de-duplicated, consistent across channels) for budget allocation and quote the platform figure only as Meta's own view. If Meta is a major channel, propose a lift test to settle the gap. 4. Incremental revenue = 3,100,000 − 2,800,000 = 300,000. iROAS = 300,000 ÷ 150,000 = **2.0**, below the 2.50 break-even, so the incremental sales did not pay for the ads at this spend level. Test lower budgets, better creative or different audiences before scaling. 5. Remaining after the first order: 1,200 − 500 = 700. 700 ÷ 100 = **7 months**.

Further reading