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).
What does a pipeline coverage chart look like in Metabase?
Chart open pipeline divided by quota per quarter with the coverage target as a goal line: the climb from about 2× to comfortably past the 3× mark is pipeline generation catching up to a growing number. A dip like Q4 2024's often follows a strong close-out quarter — winning deals drains the funnel — so pair the ratio with pipeline-creation volume before sounding the alarm.
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