# CAC, payback and ROI

> Judge a paid channel by the cohort it buys: CAC, payback period and cohort ROI at a stated age, and why a month's profit divided by that month's spend flatters ads.

- Course: [Product Analytics: From Data to Decisions](https://productovi.com/courses/product-analytics.md)
- Module: Are we making money on it?
- Lesson 27/32, ~31 min
- Source: https://productovi.com/courses/product-analytics/cac-payback-roi

## Triple the budget?

**Alex Tutor:** Budget meeting week at Halves. Theo wants your support, and on the product team, your support means the data agrees.

**Theo:** Paid social is our cheapest way to buy users: about 95 cents each. For the summer I want to triple its budget. Will you back me at Friday's budget meeting?

**Alex Tutor:** Before "how much", ask "how soon". Every dollar you spend buys a cohort of users. The meeting needs one answer: how many months until that cohort's gross profit has paid the dollar back?

![A gardener spends a small pile of coins on seedlings; months later the harvested fruit piles up as high as the coins.](https://productovi.com/courses/product-analytics/inline/cac-payback-roi-illustration-2.webp)

*Spend buys a cohort; payback is the month its earnings catch up.*

**Sofia:** So we follow each bought cohort as it ages, not the channel as a whole.

**Alex Tutor:** Yes, with three numbers. **CAC** is the spend per user it bought. **Cohort ROI** is always stated at an age: "ROI at month 3". The **payback period** is the first age at which the cohort's cumulative gross profit covers its spend.

$$
\text{CAC} = \frac{\text{spend}}{\text{new users}} \qquad \text{ROI}_{m} = \frac{\text{cumulative gross profit}_{m} - \text{spend}}{\text{spend}}
$$

*Payback period: the first month m when cumulative gross profit ≥ spend.*

**Dataset (CSV):** [Paid cohorts, January–June 2026](https://productovi.com/datasets/product-analytics/cac-payback-roi/halves-paid-cohorts-2026.csv)

One row per sign-up month and paid channel; cumulative gross profit by month since sign-up.

- `cohort`: Sign-up month
- `channel`: Paid channel
- `new_users`: Users the channel brought that month
- `spend_usd`: Ad spend that month, USD
- `gp_cum_m0`: Cumulative gross profit of the cohort by month 0, USD
- `gp_cum_m1`: … by month 1
- `gp_cum_m2`: … by month 2
- `gp_cum_m3`: … by month 3
- `gp_cum_m4`: … by month 4
- `gp_cum_m5`: … by month 5 (empty: the cohort isn't that old yet)

## One cohort, month by month

**Alex Tutor:** Walk one row before comparing anything. January, store search ads: \$892.60 bought 570 users.

**Sofia:** Month 0 brings back \$305.30, about a third. By month 3 it's \$772.47, still 13% short. Month 4: \$907.41, just past the \$892.60.

**Alex Tutor:** So it paid back at month 4, the cohort's fifth month of life, and by month 5 it's at +16%. Keep the `month_since_signup` numbers from the column names; they avoid off-by-one arguments.

![The January store-search cohort's cumulative gross profit passes its $892.60 spend at month 4 ($907.41) and is 16% above it by month 5.](https://productovi.com/courses/product-analytics/diagrams/m7-l3-payback-curve.png)

> **Exercise:** What was the **CAC** of the January 2026 store-search-ads cohort? Round to cents.

## Cheaper per user, slower to pay back

**Theo:** Store search users cost two-thirds more. Paid social has to be the better deal.

**Alex Tutor:** Compare the channels at the same age. Take January's paid-social row at month 4.

> **Exercise:** What was the **cohort ROI at month 4** of the January 2026 **paid-social** cohort? Give a percentage; negative means a loss so far.

**Alex Tutor:** Now the payback period for the same row. Read across January’s paid-social cumulative gross profit until it reaches the spend.

> **Exercise:** What is the **payback period** of the January 2026 **paid-social** cohort: the first `month_since_signup` at which cumulative gross profit is at least the spend?

**Sofia:** February gives the same picture. At month 4 both store-search cohorts have paid back, while February's paid social is still \$2.16 short.

**Alex Tutor:** People who search the store for a bill-splitting app arrive with a need, and more of them subscribe. The low CAC is half of the story; how fast users pay it back is the other half.

![One boat hauls in many tiny fish, another catches fewer but much bigger fish, and its hold fills faster.](https://productovi.com/courses/product-analytics/inline/cac-payback-roi-illustration-3.webp)

*Cheap users aren't the better deal if fewer of them ever pay.*

> **Exercise:** Compare the January and February 2026 paid cohorts at month 4. Which statement does the data support?

## Same age, same prices

**Maya:** The April cohorts look far better: paid social is at −7% at month 2, January was at −31%. Did Theo's new ads work?

**Alex Tutor:** Since 1 April new subscribers pay \$4.99 instead of \$3.99, so April users earn more per head even with the same ads. Compare at the same age **and** under the same prices: March is the latest old-price cohort with a month-3 number.

> **Exercise:** What was the **cohort ROI at month 3** of the March 2026 paid-social cohort? Give a percentage; negative means a loss so far.

**Alex Tutor:** Before Theo’s report, a quick reading check. Two lines for the same slide; which one can the meeting actually use?

> **Exercise:** Which line states paid-acquisition ROI **correctly** for the budget meeting?

## Checking the +74%

**Theo:** My monthly report has a stronger argument anyway. In May paid social cost \$1,414.55 and returned \$2,454.89 of gross profit: +74%.

**Dataset (CSV):** [Paid channels by calendar month, January–June 2026](https://productovi.com/datasets/product-analytics/cac-payback-roi/halves-paid-calendar-2026.csv)

Theo's view: each month's spend next to that month's gross profit from all of the channel's users.

- `month`: Calendar month
- `channel`: paid_social or store_search_ads (search ads inside the app stores)
- `spend_usd`: Ad spend in the month, USD
- `gross_profit_usd`: Gross profit in the month from all users the channel ever brought, USD

**Alex Tutor:** Where does the \$2,454.89 come from? From every user paid social has ever brought, back to January 2025. May's own cohort is at −24% after month 1.

**Sofia:** So a calendar month mixes old cohorts' income with this month's spend. It flatters any channel that has been running for a while.

![This month's fruit basket is filled mostly from old tall trees, while a newly planted sapling beside them has barely any fruit.](https://productovi.com/courses/product-analytics/inline/cac-payback-roi-illustration-4.webp)

*A calendar month's income comes mostly from old cohorts, not this month's spend.*

> **Exercise:** Why doesn't "May gross profit ÷ May spend" tell you whether May's paid-social spend paid off? Select all that apply.

**Alex Tutor:** One more line matters for tripling. In June, when paid-social spend almost doubled to \$2,785.11, CAC jumped from \$0.96 to \$1.18. The next users are dearer than the last.

**Alex Tutor:** Check one tempting conclusion from that jump.

> **Exercise:** Paid social cost \$1,414.55 for 1,478 users in May and \$2,785.11 for 2,352 users in June. True or false: the extra users June’s bigger budget bought cost about the June average, \$1.18 each.

**Theo:** So what do I bring on Friday?

**Alex Tutor:** Cohort numbers with their age: CAC, payback month, ROI at a stated month. Then what tripling would do to CAC, and what we don't know yet.

> **Exercise:** Theo, the Halves growth marketer, wants to triple paid-social spend for the summer because it buys users for about \$0.95 each. Reply to him in 3–5 sentences: should Halves triple paid-social spend for the summer? Use cohort numbers with their age.

**Alex Tutor:** The rule: spend buys a cohort, so judge it by that cohort at a stated age. A calendar month is a mix of ages and says little about any of them.

- Previous lesson: [The LTV curve](https://productovi.com/courses/product-analytics/ltv-curve.md)
- Next lesson: [Price testing case: price or paywall?](https://productovi.com/courses/product-analytics/price-or-paywall.md)

---
Productovi Learning. Free, no sign-up needed to read.
