What is CAC payback?

CAC payback answers: for the customers a channel acquired, how many periods of margin does it take, on average, to earn back what you spent acquiring them? A channel with a low CAC but customers who rarely reorder can take longer to pay back than a channel with a higher CAC and a loyal customer base.

Formula

CAC payback = customer acquisition cost ÷ (average order contribution margin × repeat rate)

Worked example

A channel spends €8,000 in a period and acquires 40 new customers, so CAC is €8,000 ÷ 40 = €200. Those customers place orders on that channel worth €60 of contribution margin on average, and 30% of them go on to place a second order (repeat rate 0.30). Expected margin per period is €60 × 0.30 = €18. CAC payback is €200 ÷ €18 ≈ 11.1.

How Saldo Metrics computes it

canonical.v_channel_payback_period computes payback_periods per acquisition channel as cac_base ÷ (avg_order_margin_base × repeat_rate):

  • cac_base — a channel's total ad spend (spend_base, summed from v_ad_spend_enriched) divided by the number of customers whose first ever order (o.order_date = c.first_order_date) was placed on that channel.
  • avg_order_margin_base — that channel's total contribution margin (contribution_margin_base, from v_contribution_margin) across every order on the channel, divided by its order count. Not first-order margin specifically.
  • repeat_rate — the share of that channel's acquired customers who placed more than one order, ever (lifetime, not a rate per calendar period).

Two things worth knowing before reading this as literally "months": the SQL has no calendar-time dimension at all — "period" here means one expected repeat-order cycle, not a fixed span of days. And repeat_rate and avg_order_margin_base are both lifetime figures, computed once over all history rather than per cohort-month, so payback_periods is a single lifetime snapshot per channel, not a payback curve over time. canonical.v_ltv_cac_ratio computes the same cac_base alongside ltv_per_customer_base (lifetime contribution margin per acquired customer) and ltv_cac_ratio; Saldo Metrics shows that ratio next to payback for context, but it is not part of the payback_periods formula itself. As with true ROAS and contribution margin, avg_order_margin_base counts contribution margin from completed sales only — cancelled orders, and orders refunded in full, are excluded.

Why it matters

Two channels can show the same true ROAS while differing sharply in how fast they repay their acquisition cost — a channel that pulls in one-time bargain hunters looks fine on a single-order basis but never turns a repeat-margin engine, while a channel with a higher upfront CAC but strong repeat behavior can be the better long-term bet.

Common mistakes

  • Reading "payback periods" as calendar months. The formula has no time axis; a channel whose repeat customers reorder within a week and one whose repeat customers reorder a year later can show the same payback_periods value.
  • Comparing payback across channels with very different acquisition volumes. A channel with few acquired customers produces a noisier repeat_rate estimate.
  • Ignoring a NULL value. payback_periods is NULL when a channel has no spend, no orders, or a repeat rate of exactly zero — a channel that has never repaid, not a channel with a payback of zero.

Where you see this in the app

The "CAC Payback & LTV:CAC" widget (Marketing domain), addable to any dashboard — shows CAC, payback periods and LTV:CAC ratio per channel in one table.