SaaS CAC Payback by Channel: Months-to-Recover, Done Right
SaaS payback is a duration, not a ratio. Why ecom ROAS thinking breaks the calculation, and how to measure CAC payback in months — by acquisition channel, on a cohort basis, gross-margin adjusted.
Audience: SaaS / subscription businesses. This is not an e-commerce post — there is no AOV, no ROAS-as-headline, no "today's purchases." If you sell a recurring subscription with trials, MRR, and customers who pay over many months, this is for you. If you sell physical products with one-time orders, read our ecom benchmark and attribution material instead.
CAC payback is the single most clarifying metric in SaaS unit economics — and the one most often computed at the wrong altitude. The common mistake is to compute one blended payback number for the whole business and steer the budget with it. That blended number hides the fact that a paid-search customer and a paid-social customer can recover their acquisition cost months apart, on totally different gross margins, with totally different retention curves. Steering spend on the blend systematically over-funds the channel that looks cheap on day one and under-funds the channel that compounds.
This post is methodology-first. It defines CAC payback the way SaaS finance actually defines it, explains why importing e-commerce ROAS instincts breaks the calculation, and lays out how to measure months-to-recover by acquisition channel, on a cohort basis. Where we use a number, it is either tied to a public reference we link or explicitly framed as an illustrative example you can replicate on your own data.
What CAC payback actually means in SaaS
CAC payback period is the number of months it takes the gross-margin-adjusted recurring revenue from a customer (or cohort) to repay the fully-loaded cost of acquiring them. The standard form most SaaS finance teams use is:
CAC payback (months) = CAC ÷ (new MRR per customer × gross margin %)
A few parts of that definition do the heavy lifting, and each one is a place teams get it wrong:
- CAC is fully loaded. It is total sales-and-marketing spend attributable to acquisition, divided by new customers acquired in the same period — not just ad spend. Tooling, agency fees, and the salaries of the people running acquisition belong in the numerator. A channel that looks cheap on media cost alone can be expensive once the human cost of running it is included.
- The denominator is gross profit, not revenue. You recover margin, not top-line. A subscription with hosting, support, and payment-processing costs baked in might run 75–85% gross margin (typical for software per public SaaS benchmarks — see the Bessemer Cloud / Scaling to $100M resources for how cloud businesses frame margin and efficiency), so the denominator is meaningfully smaller than MRR. Skip the margin adjustment and every payback number you publish is optimistically short.
- It is denominated in months, not a ratio. This is the cleanest break from e-commerce. Ecom ROAS is a same-period ratio — spend a dollar, measure the revenue it returned in a short window. SaaS payback is a duration — the answer is "11 months," not "3.2x." If your dashboard reports SaaS acquisition as an ROAS multiple, it is quietly applying an e-commerce mental model to a subscription business.
For the conceptual companion on cohort LTV and when a payback number is even trustworthy, see our post on cohort LTV and CAC payback timing. This post goes one level deeper: payback split by channel.
Why e-commerce ROAS thinking misleads SaaS payback
Three ecom instincts, each of which quietly corrupts a SaaS payback read:
1. "Measure the return in the conversion window"
In ecom, the order completes within days of the click, so a 7- or 30-day window captures most of the value. In SaaS, the money arrives over many months and the signup-to-paid conversion itself often lags the click by weeks (free trial, then a credit-card conversion; or a no-card trial that converts on a later visit). A channel's true contribution is invisible inside any short window. We cover the lag side of this in depth in the companion guide, trial-to-paid attribution setup.
2. "Higher ROAS = better channel"
ROAS rewards immediate revenue. But the SaaS channel with the fastest first payment is frequently not the channel with the shortest payback — because payback depends on retention. A brand-search customer might convert at a high price and stay for years; a broad-prospecting customer might convert cheaply but churn before month three. Judging either on a same-day return multiple gets the ranking backwards.
3. "Attribute revenue to the click that converted"
Ecom last-click is defensible when the click and the purchase are the same session. In SaaS, the click creates an anonymous trial signup that only later becomes an identified paying customer. Without an identity stitch between those two events, the channel that drove the signup gets no credit for the MRR. This is exactly the gap the platform's SaaS analytics setup is built to close — identifying the user at signup so the channel that earned the trial also earns the eventual MRR.
The metrics to track for channel-level payback
To compute payback by channel honestly, track these per channel and per monthly cohort:
- New customers acquired (identified, paying — not trials, not signups).
- Fully-loaded CAC = (media + tooling + agency + acquisition headcount) ÷ new customers, per channel.
- New MRR per customer at conversion, by channel.
- Gross margin % (can be company-wide if you don't have per-customer cost; per-segment is better).
- Logo and revenue retention by cohort age — because payback is only "achieved" if the customer is still paying when the cumulative margin crosses CAC.
- CAC payback months = CAC ÷ (new MRR per customer × gross margin), then validated against the retention curve so you are not claiming payback that churn never actually delivered.
A widely-cited rule of thumb in SaaS investing is that a CAC payback under ~12 months is healthy for many B2B models — but treat that as directional, not a law. The benchmark varies enormously by ACV, motion (self-serve vs sales-led), and segment. For the framing behind these efficiency rules-of-thumb, see the Bessemer cloud benchmarks and a16z's writing on SaaS metrics. Do not paste a competitor's published payback number onto your own board deck — compute yours.
Methodology — measuring CAC payback by channel on your own data
You do not need a benchmark report. You need four steps against your own billing and acquisition data.
Step 1 — Stitch identity so MRR maps to a channel
The whole calculation collapses if you cannot connect a paying customer back to the channel that acquired them. The durable pattern: capture the acquisition channel at first touch (UTM source / medium, click ID, or first-touch referrer), persist it to the user record, and identify the user at signup so every later billing event inherits the channel. Concretely, with the platform pixel that is one call at account creation:
// On signup — links the anonymous ad-clicker to the customer record,
// so the channel that drove the trial also earns the eventual MRR.
admaxxer.identify(userEmail);
admaxxer('Signup', { plan: 'starter' });
Then connect your billing source of truth (a read-only restricted Stripe key) so MRR, trial-to-paid, and churn flow in automatically and join to that channel. See SaaS analytics setup for the end-to-end wiring.
Step 2 — Build monthly acquisition cohorts, by channel
Group newly-acquired paying customers by the month they converted and the channel that acquired them. Cohort-by-conversion-month (not signup-month) is the cleaner choice for payback, because payback is measured from the first dollar, not the first trial. Each cohort carries: customer count, fully-loaded CAC for that channel-month, and starting MRR.
Step 3 — Compute months-to-recover per cohort, per channel
For each channel-cohort, accumulate gross-margin-adjusted MRR month over month and find the month where the running total crosses the cohort's fully-loaded CAC. That crossing month is the realized payback — and because it walks the actual retained revenue forward, it automatically penalizes channels whose customers churn before recovery. A channel can show a short formula payback yet never actually cross the line if its cohort decays fast enough; the cohort walk is what surfaces that.
Step 4 — Rank channels by realized payback, and reconcile to the blended number
Now you have a payback curve per channel. The fast-payback channels can absorb more budget at the margin; the slow-but-retentive channels deserve patience, not a kill decision, if their cohorts cross the line and keep compounding. Always reconcile the sum of channel cohorts back to your overall blended payback — if they disagree, your identity stitch is dropping customers (some MRR is landing in an "unattributed" bucket), which is itself the most important finding.
Illustrative example
A self-serve B2B SaaS runs two paid channels. All numbers below are illustrative — the point is the shape, not the figures.
- Brand / non-brand search. Fully-loaded CAC ≈ $600/customer, new MRR ≈ $90, gross margin 80%. Formula payback = 600 ÷ (90 × 0.80) ≈ 8.3 months. The cohort walk confirms it: retention is strong, the cumulative-margin line crosses CAC near month 8, and keeps climbing.
- Broad paid social prospecting. Fully-loaded CAC ≈ $300/customer, new MRR ≈ $70, gross margin 80%. Formula payback = 300 ÷ (70 × 0.80) ≈ 5.4 months — looks better than search on the formula. But the cohort walk shows heavy early churn: by month 4 a large share of the cohort has cancelled, the cumulative-margin line flattens below CAC, and realized payback slips past month 9 — worse than search once churn is honored.
The naive blended read ("social is cheaper, shift budget to social") is exactly backwards. The cohort-walk read ("search pays back faster and compounds; fix social's retention before scaling it") is the one the data actually supports. The figures are invented for illustration; the methodology is what transfers to your account.
What we do at Admaxxer
Admaxxer is built for SaaS unit economics, not just ecom orders. For subscription businesses it:
- Stitches acquisition channel to the paying customer via identify() at signup, so MRR, trial-to-paid, and churn all carry a channel.
- Reads MRR/ARR (including annual plans) automatically from your billing connection — a read-only restricted key, no manual revenue entry.
- Reports CAC payback by cohort and by channel in months, not as an ecom ROAS ratio, alongside trial-to-paid rate and churn-by-source.
- Keeps the SaaS view and the e-commerce view cleanly separate, so subscription metrics are never silently rendered through an orders/AOV lens.
See the SaaS marketing overview for the product view, and our companion guide on setting up trial-to-paid attribution for the hands-on wiring. For the conceptual groundwork on when a payback number is even reliable, read cohort LTV and CAC payback timing, and for the broader channel-attribution framing, SaaS marketing attribution by channel.
FAQ
How is CAC payback different from ROAS, and why can't I just use ROAS for my SaaS?
ROAS is a same-period revenue-to-spend ratio designed for transactions that complete near the click — it answers "how many dollars back this week." CAC payback is a duration that answers "how many months until this customer's gross margin repays what we spent to get them." In SaaS the revenue accrues over many months and the conversion itself lags the click by weeks, so a same-period ratio captures almost none of the real value. Reporting SaaS acquisition as a ROAS multiple silently applies an e-commerce model to a subscription business and will mis-rank your channels.
Why measure payback by channel instead of one blended number?
Because a single blended payback hides that different channels recover on different timelines and different retention curves. A channel that looks cheap to acquire can churn before it ever recovers its cost, while a pricier channel pays back fast and compounds. Steering budget on the blend over-funds the channel that looks good on day one. Splitting payback by channel — on a cohort basis — is what lets you fund the channels that actually recover and compound.
Should I cohort by signup month or by paid-conversion month?
For payback, cohort by paid-conversion month — payback is measured from the first dollar, so the clock starts when the customer begins paying, not when they signed up for a trial. (For trial-to-paid rate analysis, signup-month cohorts are the right choice; the two analyses use different cohort definitions on purpose.) Our trial-to-paid attribution guide walks through both.
Do I include gross margin in the calculation?
Yes. You recover gross profit, not revenue. Dividing CAC by raw MRR (skipping the margin adjustment) makes every payback number optimistically short. Use a company-wide gross-margin percentage if you don't have per-customer cost data; per-segment margin is better when you have it. Public SaaS margin framing is discussed in the Bessemer cloud benchmarks.
What counts as "CAC" — just ad spend?
No — CAC should be fully loaded: media spend plus the tooling, agency fees, and acquisition-team salaries attributable to winning new customers, divided by new customers in the period. A channel that looks cheap on media alone can be expensive once the human cost of operating it is included. The point of fully-loaded CAC is that it is comparable across channels that need very different amounts of human effort.
Is a 12-month CAC payback good?
It's a common directional rule of thumb for many B2B SaaS models, not a universal law — the healthy range varies sharply by average contract value, sales motion (self-serve vs sales-led), and segment. Treat published figures from investors like a16z or Bessemer as framing for how to think about efficiency, and compute your own number. Don't paste a competitor's published payback onto your board deck.
How does attribution affect the payback calculation?
Decisively. If you cannot connect a paying customer back to the channel that acquired them, that customer's MRR lands in an "unattributed" bucket and the channel gets no credit — making every per-channel payback number wrong. The fix is an identity stitch: capture the acquisition channel at first touch and identify the user at signup so all later billing events inherit it. That is the core of the platform's SaaS analytics setup.