---
name: sales_forecasting
description: "Build a sales forecast you can defend: weighted pipeline method, commit categories with evidence gates, slippage tracking, scenario ranges, coverage math, and a weekly forecast call routine. Use when someone asks to build or review a forecast, call a quarter, set commit or best case, check pipeline coverage, explain a forecast miss, or improve forecast accuracy."
---

# Sales Forecasting

## Purpose

Build a forecast as a range with evidence behind it, not a single number with hope behind it. The method runs three views at once and forces them to agree: a stage weighted pipeline, a category range (floor, target, ceiling), and a coverage check against quota. When the views disagree, the disagreement points at the deal, category, or probability that is wrong.

Works from any CRM. Salesforce and HubSpot both ship the same category set (Pipeline, Best Case, Commit, Closed, Omitted) and a weighted amount defined as amount times probability, so the export maps cleanly from either system, and from a spreadsheet.

## Workflow

1. **Export the period.** Pull every deal with a close date inside the forecast period, plus closed won deals for the period. Required fields and the full schema are in `references/worksheet.md`. One currency per file. If a field is missing for many deals, fix the export first. A forecast built on guessed amounts or dates is worse than no forecast.
2. **Gate the categories.** Score every open deal against the category gates in `references/worksheet.md` before any math. Commit needs an engaged economic buyer, a mapped decision and paper process, agreed price and scope, and a dated close plan. A deal that fails a Commit gate is Best Case at most. A deal with no quantified pain and no champion action is Pipeline. Category changes happen here, on evidence, not in the call to make the total look right.
3. **Run the calculator.** `python3 scripts/forecast.py deals.csv --quota 500000 --as-of 2026-10-14 --best-case-rate 0.40 --win-rate 0.25` prints JSON with the weighted pipeline, the range, gaps, coverage, slippage flags, and the exclusion list. Add `--accuracy snapshots.csv` (columns label, forecast, actual) to score past calls, and `--json-out forecast.json` to save the run. Every number in the forecast pack comes from this output. Do not recompute by hand.
4. **Cross check the three views.** Weighted total should sit between the floor and the ceiling. Coverage should sit at or above required coverage (1 divided by the win rate). The target should be a number the team can explain deal by deal. If any check fails, go back to step 2 and find the specific deals behind it. Do not adjust the total directly.
5. **Work the slippage list.** The calculator flags close dates in the past on open deals, close dates pushed twice or more, no buyer activity in 14 days or more, and missing activity dates. Each flagged deal gets one call: revive with a dated buyer step, move out of the period on purpose, or qualify out. Flagged Commit deals get reviewed first, because a slipped Commit deal moves the floor.
6. **Run the weekly call.** Follow `references/forecast-call.md`: waterfall first, then Commit inspection, slippage, Best Case promotion, and the gap plan. Snapshot the range every week in the same format. Record every override with a reason.
7. **Score the call after the period closes.** Use the accuracy section of the calculator output. Report accuracy and bias together, at fixed horizons (for example week 1, week 6, week 11). Feed what you learn back into stage probabilities and category gates, per the calibration steps in `references/worksheet.md`.

## Output Contract

Every forecast delivers, in this order:

1. The range: floor (Closed Won plus Commit), target (floor plus Best Case at its measured conversion rate), ceiling (floor plus all Best Case). State the Best Case rate used and whether it was measured or the uncalibrated default.
2. The weighted pipeline, open and including closed won, as a cross check.
3. Coverage: open pipeline over remaining quota, the required coverage from the team's win rate, and the gap in dollars from floor, target, and ceiling to quota.
4. The slippage list: every flagged deal, its flags, and the call made on it.
5. The exclusion list: deals left out and why. Missing data is reported, never filled in.
6. The inspection list: Commit deals that fail a gate, with the missing gate named as the next action.

## Operating Rules

- Accuracy rule: every factual claim and every number comes from the input data, the calculator output, or a cited primary source. Never invent a probability, a conversion rate, or a benchmark. Unverifiable means cut it or label it as the team's own operating rule.
- No universal benchmarks. There is no agreed slippage or accuracy benchmark that fits every team, because cycle length and deal mix change the numbers. Thresholds in this skill (14 days with no activity, two close date pushes) are starting rules for the team to calibrate against its own history, not facts about other teams.
- Probabilities come from the team's own stage to close history once there is enough of it. CRM default probabilities are a starting placeholder. Always state the sample size behind a calibrated rate.
- Categories are evidence claims. Seller confidence, a good call, or a verbal yes with no paper process in motion does not earn Commit. If the evidence is not in the CRM record or a linked note, it does not count.
- Snapshot before you score. Accuracy is measured against a forecast recorded at a fixed date, on the same revenue basis. Comparing a late, edited forecast to actuals proves nothing.
- Bias and accuracy are different reports. A team can land near its number on average while calling high every single quarter. Report both, every time.
- One deal can be the forecast. If a single deal is a large share of the target, name that concentration risk in the pack and give the range with and without it. Do not hide it inside the total.
- Never move a close date, stage, or category just to improve the forecast. Changes happen because buyer evidence changed, and the reason goes in the log the same day.

## Worked Example

Quarter quota 500000, as of 2026-10-14. Closed won so far 80000. Six open deals: Commit 170000 (120000 at Negotiation and a 50000 Globex deal at Negotiation), Best Case 150000 (90000 and 60000, both at Proposal), Pipeline 190000 (150000 at Qualification, 40000 at Discovery). Measured Best Case conversion rate 0.40, team win rate 0.25.

Calculator output, verified by running `scripts/forecast.py` on this data:

- Weighted open pipeline: 251500. Weighted total including closed won: 331500.
- Floor: 250000. Target: 310000. Ceiling: 400000.
- Gap to quota: 250000 from the floor, 190000 from the target, 100000 from the ceiling.
- Coverage: 1.21x open pipeline over remaining quota, against 4.0x required at a 25 percent win rate. The quarter is short on pipeline, not just short on closing.
- Slippage: one flagged deal, the 50000 Commit deal, pushed twice with no buyer activity in 21 days. It holds up 50000 of the floor. The honest floor, if that deal drops to Best Case in inspection, is 200000, and the call should say so.

The read to deliver: even the ceiling misses quota by 100000, so no amount of inspection saves this quarter. The work is pipeline creation now and an early, honest call to leadership, while the slipped Commit deal gets a revive or qualify out decision this week.

## Sources

- Salesforce Collaborative Forecasts implementation guide, for the category set and cumulative rollups: http://resources.docs.salesforce.com/202/5/en-us/sfdc/pdf/forecasts.pdf
- HubSpot Knowledge Base, forecast and AI forecasting docs, for weighted pipeline value as amount times probability: https://knowledge.hubspot.com/forecast/improve-forecasting-with-ai-projections
- Outreach summary of the APQC method, for percentage error and MAPE: https://www.outreach.ai/resources/blog/forecast-accuracy-sales-alignment
- Revenue.io glossary, deal slippage definition and tracking signals: https://www.revenue.io/inside-sales-glossary/what-is-deal-slippage
