averagecac.com

How every number is computed

Methodology

Three data states, three rules. Every published CAC on the site carries one of three provenance badges. The badge tells you exactly how confident the number is and where it came from.

Live

Public-company CAC, computed from SEC filings

Every public-company page computes CAC as a two-step pipeline against SEC EDGAR. There is no manual entry, no guesswork, no third-party API in between.

  1. Numerator (S&M expense). Pulled weekly from the SEC EDGAR XBRL company-facts API. Tagged us-gaap:SellingAndMarketingExpensefor every company in our cohort except Paycom, which reports only the combined SG&A line - that exception is flagged on the page.
  2. Denominator (net-new customers). Customer counts are not in XBRL. They appear in MD&A narrative - "As of January 31, 2026, we had 13,328 total customers, increasing from 10,996 customers as of January 31, 2025." A Claude-driven structured-extraction prompt parses every 10-K and 10-Q for these disclosures, recording the exact sentence verbatim. The disclosure quote is shown on every page.
  3. Computation.Annual CAC = FY S&M ÷ (current-year customers − prior-year customers). Trailing-twelve-month CAC = rolling 4-quarter S&M ÷ same denominator. We report both annual and TTM where the data supports them.
  4. Multiple slices per company. Many companies disclose more than one customer-count slice - total customers, $100k+ ARR customers, $1M+ TTM customers, Atlas customers (MongoDB), Forbes Global 2000 customers (Snowflake). We render every slice the filing breaks out, each with its own CAC.
Sourced

Industry benchmark cells, cited from primary reports

Industry × stage × ACV benchmark cells on our benchmarks pages only publish a number when a named primary source publishes one. The primary sources we draw from:

Sources we plan to add but haven't yet: SaaS Capital's annual benchmark survey, ChartMogul's quarterly SaaS benchmarks, Bessemer's State of the Cloud public-company composites, OpenView (now retired but reports still cited), and KeyBanc Capital Markets' SaaS Survey. These reports require PDF parsing or paid access that we haven't worked through yet. Marketplaces and AI-native cells stay as stubs until cite-able primary data surfaces.

Each sourced cell shows the report name, the table or section reference, and the publication date. Cells are re-verified when the underlying reports refresh.

Estimated / No primary source

Honest stubs for cuts the primary sources don't publish

The benchmark grid has 180 cells (12 industries × 5 stages × 3 ACV bands). The named primary sources above don't cover all 180 - published data is concentrated in a few canonical cuts (SaaS B2B by ARR band, mostly). For the cells they don't cover, we do not triangulate, average, or impute a number to fill the gap.

Instead each unsourced cell renders a page that:

The page exists at its canonical URL so the long-tail search query has a destination, but it doesn't fabricate a number to fill it. This is the load-bearing principle of the publication: a missing number, surfaced honestly, is more useful than a confident guess.

What CAC even means

What blended CAC captures, and what it doesn't

Every CAC on this site is fully-loaded blended CAC: total sales & marketing spend divided by net-new customers. That includes spend on existing-customer expansion alongside new-logo acquisition, because public companies don't disclose that split. Companies with high net-revenue retention will show higher blended CAC than their true new-logo CAC. We surface this caveat on every page rather than estimate it away.

See the CAC formula page for the variations (paid CAC, blended CAC, new-logo CAC, fully-loaded CAC) and when each is appropriate.

Reproducibility

The pipeline is open

The SEC fetcher, MD&A extractor, and data files that produce every public-company page on this site are available on GitHub. Any of the published CAC numbers can be re-derived from the linked 10-K, the XBRL S&M tag we cite, and the disclosure quote we extracted. If anything doesn't reconcile, please open an issue.