GASP
Core Efficiency Metrics Efficiency

CAC Payback Period

CAC Payback Period: The number of months required to recover the cost of acquiring a customer. Also called "Months to Recover CAC" or "Time to Recover CAC."

Also known as: CAC

Formula

CAC Payback = CAC / (ARPA × Gross Margin)
CAC Payback-O = CAC-O / (ARPA × GM-O)
CAC Payback-M = CAC-M / (ARPA × GM-M)
CAC Payback-O = CAC Payback-M × (CAC-O / CAC-M) × (GM-M / GM-O)

Computable definition

The canonical formula in the GASP formula grammar. The MCP server compiles it to SQL over the datasets listed below.

metric.cac / (metric.arpa * metric.gross_margin)

Unit: months

Operating form (O) (see the dual-lens forms)
metric.cac.O / (metric.arpa * metric.gross_margin.O)
Market form (M) (see the dual-lens forms)
metric.cac.M / (metric.arpa * metric.gross_margin.M)

Data requirements

Grain: Monthly aggregate · Frequency: Monthly · Aggregation: aggregate (month) · Staged: no · Main source: Billing.

Field Dataset Type
cost cost_event decimal
cost_function cost_event string
customer_id customer string
customer_id revenue_event string
customer_status customer string
event_date cost_event date
event_date revenue_event date
event_type revenue_event string
mrr subscription decimal
period_start financials date
revenue financials decimal
snapshot_date customer date
snapshot_date subscription date
subscription_status subscription string
Example SQL (Postgres)
SELECT (CAST(((CAST((SELECT COALESCE(SUM(cost), 0) FROM cost_event WHERE event_date >= :period_start AND event_date <= :period_end AND cost_function = 'gtm') AS DOUBLE PRECISION) / NULLIF(((SELECT COUNT(DISTINCT customer_id) FROM revenue_event WHERE event_date >= :period_start AND event_date <= :period_end AND event_type = 'new')), 0))) AS DOUBLE PRECISION) / NULLIF((((CAST(((SELECT COALESCE(SUM(mrr), 0) FROM subscription WHERE snapshot_date = :period_end AND subscription_status = 'active')) AS DOUBLE PRECISION) / NULLIF(((SELECT COUNT(DISTINCT customer_id) FROM customer WHERE snapshot_date = :period_end AND customer_status = 'active')), 0))) * ((CAST(((SELECT COALESCE(SUM(revenue), 0) FROM financials WHERE period_start >= :period_start AND period_start <= :period_end) - (SELECT COALESCE(SUM(cost), 0) FROM cost_event WHERE event_date >= :period_start AND event_date <= :period_end AND cost_function = 'infrastructure')) AS DOUBLE PRECISION) / NULLIF((SELECT COALESCE(SUM(revenue), 0) FROM financials WHERE period_start >= :period_start AND period_start <= :period_end), 0)))), 0)) AS cac_payback

Access: recommended sensitivity tier confidential, access scope unscoped. Guidance your policy engine enforces.

From an agent: with the GASP MCP server, call lookup_metric({ "name": "CAC Payback Period" }) or generate_query({ "metric": "CAC Payback Period", "adapter": "<your adapter JSON>" }).

Benchmarks

  • Under 12 months: Good, investor-friendly target (best-in-class)
  • 12-18 months: Acceptable (Median 2024: 18-20 months)
  • 18-24 months: Concerning for most segments
  • Over 24 months: Requires attention

What It Tells You

How many months of gross profit a new customer takes to repay what it cost to win. Payback sets how much cash growth ties up, so it limits how fast a company can grow on its own money.

Dual-Lens: Operating / Market Forms

Both governed forms are computed from the same Commercial Event Ledger, with Attribution Taxonomy Layer tags deciding which events each form counts.

Operating Form: Fully Loaded CAC Payback (CAC Payback-O)

CAC Payback-O recovers Fully Loaded CAC from contribution margin. Implementation and onboarding cost raise the amount to recover and variable service costs lower the monthly margin that recovers it.

CEL Source:
`Revenue_Event`, `Cost_Event`
ATL Inclusion:
CAC-O costs (`gtm`, `implementation`, `onboarding`); GM-O costs (`infrastructure`, `support`, `success_engineering`, `implementation`, `onboarding`)
CAC Payback-O = CAC-O / (ARPA × GM-O)

What it tells you: How long a customer really takes to pay back everything spent to win and activate it. The number for cash planning.

Market Form: GTM CAC Payback (CAC Payback-M)

CAC Payback-M recovers GTM CAC from SaaS gross margin. It matches the payback period Benchmarkit and KeyBanc report and the benchmarks above.

CEL Source:
`Revenue_Event`, `Cost_Event`
ATL Inclusion:
CAC-M costs (`gtm` only); GM-M costs (`infrastructure` only)
CAC Payback-M = CAC-M / (ARPA × GM-M)

What it tells you: The investor-comparable payback period used in benchmarks and board reporting.

Bridge

CAC Payback-O = CAC Payback-M × (CAC-O / CAC-M) × (GM-M / GM-O)

A payback that looks healthy on the market form and runs months longer on the operating form means activation and service costs are tying up cash the S&M view does not show. The ratio CAC-O / CAC-M isolates the acquisition side; GM-M / GM-O isolates the delivery side. ---

Connected in the GASP relationship graph.

Upstream: what drives this

  • ARPA component of CAC Payback Period (Core)
  • CAC component of CAC Payback Period (Core)
  • Gross Margin component of CAC Payback Period (Core)

Downstream: what this drives

Try searching for:

↑↓navigate↵select