Reporting

ROAS vs ROI vs CPA vs CAC: One Campaign, Four Answers

The four formulas side by side, run over the same campaign — where a 4.0× ROAS turns out to be a loss, and which number to put in front of a client.

ROAS, ROI, CPA and CAC are four different questions, not four names for performance. ROAS asks whether an ad account returned more than it cost. ROI asks whether the business made money. CPA asks what a conversion cost in media. CAC asks what a customer cost once everything is counted. Run them over the same campaign and they routinely disagree — a 4.0× ROAS can sit on top of a small loss, and that gap is where most reporting arguments actually come from.

The four formulas

MetricFormulaThe question it answersCosts it ignores
ROASattributed revenue ÷ ad spendDid this ad account return more than it cost?Everything except media
ROI(gross profit − total marketing cost) ÷ total marketing costDid the business make money?Nothing, if calculated properly
CPAad spend ÷ conversionsWhat did a conversion cost in media?Fees, salaries, and whether the buyer was new
CAC(sales cost + marketing cost) ÷ new customersWhat did a new customer cost, all in?Nothing, but it needs a clean “new customer” definition

Two of them are ratios and two are unit costs, which is why they are so easily quoted against each other in a way that makes no sense. ROAS of 4.0× and CPA of $50 are not comparable statements; they are different sentences about the same money.

One campaign, run four ways

Assume a month of ecommerce paid media, with these figures:

  • Ad spend: $10,000
  • Attributed revenue: $40,000 across 200 orders, so an average order value of $200
  • Of those 200 orders, 150 were from customers who had not bought before
  • Cost of goods: 55% of revenue
  • Payment and fulfilment: 8% of revenue
  • Management fee: $2,000. Allocated marketing salary: $3,000

ROAS

$40,000 ÷ $10,000 = 4.0×

Four dollars back for every dollar of media. On its own, this reads as a good month.

CPA

$10,000 ÷ 200 = $50

Fifty dollars of media per order, against a $200 order value.

CAC

($10,000 + $2,000 + $3,000) ÷ 150 = $100

Twice the CPA, and the difference is not a rounding error. CAC counts the fee and the salary, and divides by new customers rather than orders. Both numbers are correct; they are answers to different questions.

ROI

Gross profit first:

  • Cost of goods: $40,000 × 0.55 = $22,000
  • Payment and fulfilment: $40,000 × 0.08 = $3,200
  • Gross profit: $40,000 − $22,000 − $3,200 = $14,800

Total marketing cost is $10,000 + $2,000 + $3,000 = $15,000.

ROI = ($14,800 − $15,000) ÷ $15,000 = −1.3%

A 4.0× ROAS and a 1.3% loss, on the same campaign, from the same numbers. Nothing was measured wrongly. ROAS simply does not know what the goods cost.

This is not an edge case

At a 37% gross margin, break-even on media alone is a ROAS of 1 ÷ 0.37 = 2.7×. Once the $5,000 of fees and salary are included in the same period, the campaign needs $15,000 ÷ 0.37 = $40,541 of revenue to break even — a ROAS of 4.05×. It delivered 4.00×. The account was a fraction under the line the whole time, and no ad platform would ever have shown that.

What CAC has to be measured against

CAC is not a verdict on its own either. A $100 acquisition cost is cheap or ruinous depending on what a customer is worth, and that is the one figure none of the four formulas contains.

LTV = gross profit per order × orders per customer over their lifetime — gross profit, not revenue, and over a period you are willing to commit to.

From the same campaign, gross profit per order is $200 × 0.37 = $74. Assume a new customer buys 2.5 times in total, an assumption to take from your own order history and from cohorts old enough to have finished buying:

  • Lifetime value: $74 × 2.5 = $185
  • Against the $100 CAC: $185 ÷ $100 = 1.85×
  • On the first order alone: $74 − $100 = −$26

A new customer therefore does not pay back on the order that acquired them. They pay back on the second one. That makes the −1.3% ROI an accurate description of the month and a misleading description of the cohort — and it moves the decision from the ad account to whether the second order actually happens, which is a retention question, not a media one.

The revenue version is always the larger one

Calculating lifetime value on revenue instead of gross profit gives $200 × 2.5 = $500 and a ratio of 5.0×, which makes any acquisition cost look affordable. It is the same error as calculating ROI on revenue, and the more expensive of the two: a wrong ROI misdescribes the past, while a wrong LTV authorises the next budget.

Which number to put in front of whom

AudienceLead withBecause
The person managing the ad accountROAS and CPAThese are the numbers their levers actually move
A business owner or financeROI, with CAC alongsideThey are being asked to fund the whole cost, not the media line
A board or investorCAC, against what a customer is worthAcquisition cost against customer value is the question being asked

The failure mode is reporting ROAS to a business owner because it is the largest and friendliest number in the account. It is also the only one of the four that cannot answer their question.

Which of them becomes a reported KPI, and which stays in the appendix as context, is a separate decision with its own test — four numbers is the practical limit for a report anybody acts on. Whichever you choose, the number needs a line of commentary saying why it moved: a ROAS that improved because you cut the two worst ad groups is a different report from one that improved because the buying got better.

Four ways these get quoted wrongly

Summing ROAS across platforms. When three platforms each claim the same sale, the column adds up to more revenue than the business took. Blended ROAS — total revenue over total spend — is the figure that reconciles with the bank. Per-platform ROAS belongs in the appendix, not the headline.

Treating CPA as CAC. CPA counts conversions; CAC counts new customers, and includes the cost of the people doing the acquiring. In the example above, 50 of the 200 orders came from existing customers, so media cost per new customer is $10,000 ÷ 150 = $67 against a CPA of $50 — a third higher before a single fee or salary is added.

Calculating ROI on revenue instead of gross profit. ($40,000 − $15,000) ÷ $15,000 gives 167%, which is a wonderful number and describes nothing. Revenue is not profit, and the version of ROI that uses it is the reason this metric has a poor reputation.

Comparing this month’s CAC to last month’s without checking the mix. A month heavy on retargeting will show a flattering CAC because it acquired fewer genuinely new customers. The metric moved; the business did not.

Getting the inputs right first

All four formulas are trivial. The inputs are where the work is, and three of them decide the answer:

  • The attribution window. Change it and attributed revenue changes, which moves ROAS and ROI without anything happening in the business.
  • The definition of “new customer”. Decided once, written down, and applied the same way every month — otherwise CAC is not comparable to its own history.
  • Whether salaries and fees are in. Both versions are defensible. Only one of them is the version you used last month.

Agree these before the reporting period, not when the numbers arrive. The report template has a KPI definitions tab for exactly this reason, and it calculates conversion rate, CPA, ROAS and month-on-month change from the inputs so the arithmetic is not where the errors come from.

The short version

Use ROAS to manage an ad account. Use CPA to compare media efficiency between campaigns. Use CAC when the question is what a customer costs. Use ROI when the question is whether to keep funding this — and calculate it on gross profit, with every marketing cost included. Then set CAC against lifetime value, because none of the four can tell you whether an acquisition cost was worth paying.

If you are working out what any of these needs to be for a target to be reachable, the funnel calculator works backwards from the customer number to the traffic it requires. Each formula also has its own entry, with a worked example, in the metrics glossary.