ACV vs ARR: The ACV Metric Explained With SQL
TL;DR: The ACV metric (annual contract value) is the recurring value of one customer contract divided by its length in years, with one-time fees left out. ARR (annual recurring revenue) is the whole company's recurring revenue right now, annualized. Use ACV to size and compare deals; use ARR to measure the size and growth of the business.
The ACV metric answers "how much is a typical contract worth per year?" Take the contract's total value, remove one-time items such as onboarding or setup fees, and divide by the term in years: a 4-year, $40,000 subscription has an ACV of $10,000 (Wall Street Prep). ARR answers a different question: "how much recurring revenue does the company run at today?" It is usually MRR x 12, summed across every active customer (Wall Street Prep, ARR). The two match for a simple one-year contract and drift apart for ramped multi-year deals, monthly plans and contracts with fees. Below, the same four contracts are computed both ways, followed by the SQL to calculate each from a contracts table.

ACV vs ARR at a glance
| Criterion | ACV (annual contract value) | ARR (annual recurring revenue) |
|---|---|---|
| What it measures | Average yearly value of one contract | Company-wide recurring revenue, annualized |
| Unit | Per contract (or average across new contracts) | One total for the business |
| Formula | Recurring contract value / term in years | MRR x 12, or sum of active annualized subscriptions |
| One-time fees | Excluded | Excluded |
| Ramped multi-year deals | Averaged across all years | Only the year currently in effect |
| Month-to-month plans | Often excluded (no contract term) | Included |
| Time view | Fixed at signing | Changes every day with churn and expansion |
| Main users | Sales, sales ops, pricing | Founders, finance, investors |
| Answers | Is our deal size growing? Which segment is worth chasing? | How big is the business and how fast is it growing? |
Neither metric is defined by GAAP. Recognized revenue under ASC 606 (FASB) is a separate accounting number, so ACV and ARR are operating metrics each company has to define and apply consistently.
What is the ACV metric? Definition and formula
ACV is the annualized recurring value of a single customer contract. The formula is:
ACV = (Total contract value - one-time fees) / contract term in yearsWall Street Prep calls the numerator "normalized TCV": total contract value with one-time fees removed. Total contract value (TCV) itself is the full commitment, recurring plus one-time, so TCV = (MRR x term in months) + one-time fees (Wall Street Prep, TCV).
Teams report ACV two ways:
- Per contract: the yearly value of one deal, used in pipeline reviews and commission plans.
- Average ACV: the mean ACV of contracts signed in a period, usually new business only. This is the number people mean when they say "our ACV went from $8k to $15k."
Ben Murray (The SaaS CFO) points out that ACV is also expanded as "average contract value", and that companies define it differently. Write your definition down: which contracts, which fees, new business only or renewals too.
How is ACV different from ARR?
ACV describes a contract; ARR describes the company. ACV is frozen at signing and averages a contract over its whole term. ARR is a snapshot of what is billing right now, so it moves every time a customer upgrades, downgrades, churns or comes back. Wall Street Prep lists six ARR movements: new, expansion, renewal, churned, contraction and reactivation ARR. ACV has none of those; a new contract gets a new ACV.
The cleanest way to see the gap is one set of contracts computed both ways.
One contract set, computed both ways
Four customers, all active today, which is in year one of every contract:
| Customer | Contract | Recurring value | One-time fees | TCV | ACV | ARR today |
|---|---|---|---|---|---|---|
| Acme | 1 year, $12,000/yr | $12,000 | $3,000 onboarding | $15,000 | $12,000 | $12,000 |
| Birch | 3 years, $30,000/yr | $90,000 | $6,000 setup | $96,000 | $30,000 | $30,000 |
| Cedar | Monthly plan, $500/mo | n/a | none | n/a | excluded | $6,000 |
| Delta | 3 years ramped: $20k, $30k, $40k | $90,000 | none | $90,000 | $30,000 | $20,000 |

What the table shows:
- Average ACV is $24,000 ((12,000 + 30,000 + 30,000) / 3). Cedar has no contract term, so it is left out.
- ARR is $68,000 (12,000 + 30,000 + 6,000 + 20,000). Every recurring dollar billing today counts, Cedar included.
- Delta is where the metrics disagree. Its ACV is $30,000 because the three years average out to that. Its ARR is $20,000 because that is what it pays this year. Reporting Delta's ACV as ARR would overstate the business by $10,000 today.
- Fees never count. Acme's $3,000 and Birch's $6,000 are in TCV, and in neither ACV nor ARR.
Do one-time fees count in ACV?
No. Onboarding, setup, implementation, training and other professional services are excluded from ACV, because ACV is meant to describe recurring value. Wall Street Prep defines ACV as "excluding any one-time fees", and the same exclusion applies to ARR. One-time fees belong in TCV and in recognized revenue. If you sell a lot of services, track them as a separate services bookings number so they don't inflate deal size.
Multi-year contracts: how ramps and partial years change ACV
To calculate ACV for a multi-year contract, divide its recurring value by the number of years. A 3-year contract worth $90,000 in subscription fees has an ACV of $30,000, whether it is billed flat ($30k each year) or ramped ($20k, $30k, $40k). Two variations to decide on and document:
- Ramped deals: some teams use the first-year value as ACV instead of the average, which is closer to what Ben Murray describes ("what are we really getting in that first year"). Pick one rule. The average makes deals comparable; the first-year value matches cash and ARR.
- Partial years: for an 18-month contract, divide by 1.5, not by 2. An 18-month, $27,000 subscription has an ACV of $18,000.
Postgres queries for both metrics
The queries below assume PostgreSQL and two tables. Each contract line is either recurring (one row per billing period) or one-time.
-- contracts: one row per signed contract
CREATE TABLE contracts (
id serial PRIMARY KEY,
customer text NOT NULL,
signed_at date NOT NULL,
term_months int NOT NULL -- 1 for month-to-month plans
);
-- contract_lines: what the customer pays and when
CREATE TABLE contract_lines (
contract_id int REFERENCES contracts(id),
kind text CHECK (kind IN ('recurring', 'one_time')),
amount numeric(12,2) NOT NULL,
period_start date,
period_end date -- exclusive
);ACV per contract and average ACV. The FILTER (WHERE l.kind = 'recurring') clause drops one-time lines, term_months >= 12 drops month-to-month plans, and dividing by term_months / 12.0 turns the term into years:
WITH per_contract AS (
SELECT c.id,
c.customer,
c.signed_at,
SUM(l.amount) AS tcv,
SUM(l.amount) FILTER (WHERE l.kind = 'recurring')
/ (c.term_months / 12.0) AS acv
FROM contracts c
JOIN contract_lines l ON l.contract_id = c.id
WHERE c.term_months >= 12
GROUP BY c.id, c.customer, c.signed_at, c.term_months
)
SELECT customer, tcv, ROUND(acv, 2) AS acv
FROM per_contract
ORDER BY acv DESC;
-- average ACV of new contracts signed per quarter
SELECT date_trunc('quarter', signed_at) AS quarter,
ROUND(AVG(acv), 2) AS avg_acv,
COUNT(*) AS contracts
FROM per_contract
GROUP BY 1
ORDER BY 1;Note the second query reuses the per_contract CTE, so run it in the same statement (replace the first SELECT with it).
ARR today (every recurring line whose period covers today, annualized by its own length):
SELECT ROUND(SUM(
l.amount * 12.0 /
((EXTRACT(YEAR FROM age(l.period_end, l.period_start)) * 12)
+ EXTRACT(MONTH FROM age(l.period_end, l.period_start)))
), 2) AS arr
FROM contract_lines l
WHERE l.kind = 'recurring'
AND l.period_start <= CURRENT_DATE
AND l.period_end > CURRENT_DATE;Here age(period_end, period_start) returns the period length as an interval, so a monthly line is multiplied by 12 and a yearly line by 1. On the example set, Cedar's current month line ($500 over 1 month) adds $6,000, and Delta's year-one line ($20,000 over 12 months) adds $20,000, giving $68,000. If you keep subscriptions in a billing tool such as Stripe instead, the same logic applies to its subscription items: annualize each active item's price by its billing interval. Our ARR guide and MRR guide cover those edge cases, and the ARR waterfall walkthrough shows how to split ARR changes into new, expansion and churn.
Choose ACV if / choose ARR if
Use ACV when you need to:
- compare deal sizes across segments, reps or quarters
- set sales capacity: a team closing $5k ACV deals needs a different motion than one closing $50k deals
- check whether a pricing change raised what new customers commit to per year
Use ARR when you need to:
- report the size of the business to a board or investors
- measure growth month over month or year over year
- track retention and expansion (see net revenue retention)
Most B2B SaaS teams track both: ARR as the headline, average ACV of new business as a sales health metric. The full set of related numbers is in our SaaS metrics glossary.
Keeping ACV and ARR consistent across teams
The failure mode is not the formula, it is two teams running different versions of it. Sales pulls ACV from the CRM with fees included; finance computes ARR from billing; the board deck mixes them. Put both definitions in one place, run them against the same tables, and show the query next to the number. AI for Database connects to Postgres, MySQL, Stripe-synced tables and other sources, answers questions like "average ACV of new contracts by quarter" in plain English with the SQL shown, and keeps the result on a self-refreshing dashboard. Try AI for Database free at aifordatabase.com.
Frequently Asked Questions
What does ACV stand for?
In SaaS, ACV stands for annual contract value, also written as average contract value when it refers to the mean across contracts. In retail and consumer goods, ACV means All Commodity Volume, a distribution metric that has nothing to do with contracts.
Is ACV the same as ARR for annual contracts?
For a single one-year contract with no one-time fees, the contract's ACV equals its contribution to ARR. They diverge as soon as there are fees, ramped multi-year pricing, monthly customers or mid-term changes.
Is ACV the same as TCV?
No. TCV is the total value of the contract over its whole term, including one-time fees. ACV is the recurring part divided by the number of years. A 4-year, $40,000 contract has a TCV of $40,000 and an ACV of $10,000.
Should renewals count in average ACV?
Decide and document it. Most teams report average ACV for new business only, because renewals mix pricing history into the number. Track renewal and expansion value separately, as ARR movements.
What is a good ACV?
There is no universal benchmark; ACV depends on the segment you sell to. What matters is the trend and whether your sales motion fits it: low ACV deals need self-serve or high-volume sales, high ACV deals can carry a longer sales cycle and a field team.