What is average deal size, and how do you measure it in Metabase?
Average deal size is the typical value of a won deal — often called average contract value (ACV). It anchors forecasting, quota-setting, and pipeline math, but deal values are right-skewed, so the plain average alone is misleading. Track it in Metabase from CRM data synced into a database (HubSpot, Salesforce, Pipedrive, and others).
How is average deal size defined?
Total won value divided by the number of won deals, over a cohort. Decide:
- ACV vs. TCV — annualized contract value or total contract value? Multi-year deals differ hugely between the two.
- New vs. total — new business only, or new plus expansion?
- Currency — all values converted to one reporting currency.
Why the median matters more than the mean
Deal values are heavily right-skewed: most deals cluster low, a few whales sit far out. The mean chases those whales, so a single large deal can make "average" deal size jump even though the typical deal didn't change. Report the median (p50) as the "typical" deal and p90 to show the high end. Keep the mean for pipeline math, but never present it alone.
What data does average deal size need?
- A won-deal table with a
value(amount) column. - A single reporting currency (convert before aggregating).
- A consistent contract-value definition (ACV vs. TCV).
- Segmentation columns: segment, pipeline, source, product.
SQL patterns
SELECT
date_trunc('quarter', closed_at) AS quarter,
COUNT(*) AS won_deals,
ROUND(AVG(value), 2) AS avg_deal_size,
ROUND(
percentile_cont(0.5) WITHIN GROUP (ORDER BY value), 2
) AS median_deal_size,
ROUND(
percentile_cont(0.9) WITHIN GROUP (ORDER BY value), 2
) AS p90_deal_size
FROM modeled_deals
WHERE is_won
GROUP BY 1
ORDER BY 1;SELECT
segment,
pipeline,
COUNT(*) AS won_deals,
ROUND(AVG(value), 2) AS avg_deal_size,
ROUND(
percentile_cont(0.5) WITHIN GROUP (ORDER BY value), 2
) AS median_deal_size
FROM modeled_deals
WHERE is_won
GROUP BY segment, pipeline
ORDER BY won_deals DESC;Pitfalls
Where this metric applies
- HubSpot + Metabase — deal
amounton won deals - Salesforce + Metabase — opportunity
AmountwhereIsWon - Pipedrive + Metabase — deal
value(won) - Close + Metabase — opportunity
value(cents; won)