What is pipeline coverage, and how do you measure it in Metabase?
Pipeline coverage is open pipeline divided by the quota or target it has to cover in a period. It's the forward-looking health check for a sales team: it tells you whether there's enough in the funnel to hit the number, given a realistic win rate. Track it in Metabase from CRM data synced into a database (HubSpot, Salesforce, Pipedrive, and others).
How is pipeline coverage defined?
Coverage is a ratio, not a currency amount:
- Raw coverage = open pipeline value ÷ quota. Simple, but treats an early-stage deal the same as a late-stage one.
- Weighted coverage = Σ(deal value × stage probability) ÷ quota. More realistic because it discounts early-stage deals.
Scope the pipeline to the deals that can actually close in the period you're covering.
What coverage target should you aim for?
The "3× pipeline" rule is a heuristic, not a law. The principled target is the inverse of your win rate:
- A 33% win rate implies you need roughly 3× coverage.
- A 25% win rate implies roughly 4×.
- A 50% win rate implies roughly 2×.
Derive your target from your own win rate rather than borrowing someone else's multiplier.
What data does pipeline coverage need?
- Open deals with a
valueand an expected close period. - A quota or target table by period (and team/owner).
- Stage probabilities if you want weighted coverage.
- A consistent rule for which open deals count toward the period.
SQL patterns
SELECT
p.period,
p.quota,
ROUND(SUM(d.value), 2) AS open_pipeline,
ROUND(SUM(d.value) / NULLIF(p.quota, 0), 2) AS coverage_ratio
FROM sales_targets p
LEFT JOIN modeled_deals d
ON d.period = p.period
AND NOT d.is_closed
GROUP BY p.period, p.quota
ORDER BY p.period;-- Coverage on weighted pipeline (value x stage probability)
SELECT
p.period,
p.quota,
ROUND(SUM(d.value * s.probability), 2) AS weighted_pipeline,
ROUND(SUM(d.value * s.probability) / NULLIF(p.quota, 0), 2) AS weighted_coverage
FROM sales_targets p
LEFT JOIN modeled_deals d
ON d.period = p.period AND NOT d.is_closed
LEFT JOIN modeled_stages s ON s.id = d.stage_id
GROUP BY p.period, p.quota
ORDER BY p.period;Pitfalls
Where this metric applies
- HubSpot + Metabase — open deal amount vs. a quota table
- Salesforce + Metabase — open opportunity
Amountvs. quota - Pipedrive + Metabase — open deal
valuevs. target - Close + Metabase — active opportunity value vs. target