RevOps HQ
← BACK TO BLOG
••
HubSpot•RevOps Metrics & Forecasting

Forecast Accuracy: Bias, MAPE, WAPE, Lead Time and a HubSpot Snapshot Procedure

Forecast accuracy explained: bias, MAPE and WAPE on a sample quarter, why the forecast cutoff changes the score, and how to snapshot a HubSpot forecast.

P

Paul Maxwell, PhD

AUTHOR

GET WEEKLY REVOPS INSIGHTS

No spam. Unsubscribe anytime.

Sales forecast accuracy is reported as one percentage, which can be correct while saying nothing about how well anyone forecast. A team that submits $1,020,000 and closes $1,000,000 reports 98% accuracy, although each of its six account executives missed by $30,000 or more and the misses cancelled. At week 10 the same team scores 91.9% on a measure where misses cannot cancel, because seven-tenths of the quarter had already closed. Forecasting skill shows only in the error on revenue still open when the forecast was made, and measuring it needs a number no documented HubSpot report returns for a past date: the amount closed at that moment.

This article defines bias, absolute percentage error and its weighted form, and shows why the mean absolute percentage error breaks on small and zero actuals. Its scope, and the absence of any published benchmark, come first. After a sample quarter, the lead-time effect and HubSpot's scores and records, it gives a recording procedure, its costs and the symptoms of a misleading figure.

A forecast error is forecast minus actual, so a positive error means the forecast was high. Bias is the signed error summed across a team's reps; accuracy is the size of the error regardless of sign. Lead time, or forecast horizon, runs from the cutoff, the moment a forecast is fixed for measurement, to the end of the period it predicts. In HubSpot, a forecast submission is a user's estimate of what they will close in the month or quarter, per the forecast tool documentation.

Scope and Dated Boundaries

This article covers point forecasts of closed-won revenue, made by reps for a month or quarter. It excludes demand planning, interval forecasts and the calibration of deal-level win probabilities. How the forecast itself is produced, by stage weighting, forecast categories or a statistical model, belongs to revenue forecasting.

Tiers, settings, retention limits and API behaviour are as documented in October 2026, and the linked pages are authoritative over this text.

The sample below demonstrates arithmetic, not typical values. No source consulted publishes a benchmark for good sales forecast accuracy, and a benchmark quoted without its measure and lead time could not be compared with any team's figure.

Four Measures of Forecast Error

The measures differ in whether opposite errors cancel and how reps are weighted. The error, APE and MAPE follow section 5.8 of Hyndman and Athanasopoulos, Forecasting: Principles and Practice, which writes the error as actual minus forecast and defines neither a bias ratio nor WAPE; reversing the sign here flips only the direction of bias.

Four measures of forecast error and an open-portion variant, with the error written as forecast minus actual
MeasureBiasCalculation across repsSum of errors ÷ sum of actualsQuestion it answersWhether the forecast runs high or low; opposite errors cancel
MeasureAbsolute percentage error (APE)Calculation across repsOne rep's absolute error ÷ that rep's actualQuestion it answersOne rep's relative miss; undefined at an actual of zero
MeasureMean absolute percentage error (MAPE)Calculation across repsAverage of the reps' APEsQuestion it answersThe typical rep's relative miss, every rep weighted equally
MeasureWeighted absolute percentage error (WAPE)Calculation across repsSum of absolute errors ÷ sum of actualsQuestion it answersThe team's dollar miss against what closed
MeasureOpen-portion WAPE, a variant defined hereCalculation across repsSum of absolute errors ÷ (sum of actuals − closed won at the cutoff)Question it answersThe dollar miss on revenue still open at the cutoff

MAPE carries the defects the textbook lists for percentage errors: an extreme value near a zero actual, none at zero, and a heavier penalty on forecasts above the actual than below it. An under-forecast misses by 100% at worst while an over-forecast has no ceiling, so a rep scored on MAPE pays less for forecasting low. WAPE, dividing once by the team total, weights each rep's percentage error by that rep's actual, counts a rep who closed nothing in full, and stays defined whenever the team closed anything.

Sample Quarter: Six Reps and Two Submissions

The team below is sample data, built so that every figure can be recomputed; it describes no client. Six reps submitted a forecast at the end of week 1 of a 13-week quarter and updated it at the end of week 10. Nothing had closed by the end of week 1, so each week-1 submission forecast the whole quarter.

Sample data for six reps: two submissions each, closed won at the week-10 cutoff, and the actual
RepAWeek-1 submission$270,000Week-10 submission$318,000Closed won at week 10$210,000Actual closed won$300,000
RepBWeek-1 submission$322,000Week-10 submission$259,000Closed won at week 10$196,000Actual closed won$280,000
RepCWeek-1 submission$180,000Week-10 submission$255,000Closed won at week 10$168,000Actual closed won$240,000
RepDWeek-1 submission$132,000Week-10 submission$156,000Closed won at week 10$120,000Actual closed won$165,000
RepEWeek-1 submission$60,000Week-10 submission$21,000Closed won at week 10$6,000Actual closed won$15,000
RepFWeek-1 submission$56,000Week-10 submission$12,000Closed won at week 10$0Actual closed won$0
RepTeamWeek-1 submission$1,020,000Week-10 submission$1,021,000Closed won at week 10$700,000Actual closed won$1,000,000

At week 1 the errors for reps A to F are −$30,000, +$42,000, −$60,000, −$33,000, +$45,000 and +$56,000. They sum to +$20,000, a bias of +2.0% and the 98% that the team total reports. The absolute errors sum to $266,000, a WAPE of 26.6%, because $143,000 of over-forecasts and $123,000 of under-forecasts net to $20,000 only while their signs are kept.

MAPE cannot be computed for the team, because Rep F's actual is zero, and dropping that row removes the team's largest over-forecast, $56,000. Without Rep F, MAPE is 74.0%, and Rep E supplies 60 of those points: a $45,000 miss on a $15,000 actual is 300%. That weights Rep E's miss at twelve times Rep C's larger miss of $60,000, which is 25% of $240,000. Dropping Rep E as well leaves 17.5%, so one quarter yields MAPEs of undefined, 74.0% and 17.5%, against one WAPE of 26.6%.

Lead Time and the Closed Share of a Submission

The week-10 submissions score a WAPE of 8.1% on $81,000 of absolute error, a gain that does not come from forecasting. A HubSpot submission estimates everything a user will close in the period, so $700,000 of the team's $1,021,000 week-10 call was revenue already booked.

The finding is an identity any team can check on its own figures. Against the whole period, a submission's weighted error equals its weighted error on revenue still open at the cutoff, multiplied by the open share of the period's actual. Each rep's dollar error is the same either way, since subtracting the closed amount from both forecast and actual leaves their difference unchanged; only the denominator moves.

Divided by the $300,000 still open at the cutoff, the same $81,000 is 27.0%, against 26.6% at week 1: on open deals the reps were no more accurate at week 10. The 8.1% is that 27.0% multiplied by the 30% still open. Bias scales alike, from +2.1% of the quarter to +7.0% of open revenue, so whole-period figures from different cutoffs are not comparable. Open-portion WAPE has its own limit: its denominator shrinks toward zero as a period closes, making it unstable late in a period as MAPE is near a zero actual. It is therefore read at team level and at an early, fixed cutoff.

The same week-10 error divided by the whole quarter and by the revenue still openThree bars on one dollar scale show the sample quarter scored three ways, each with the sum of the reps' absolute errors drawn beneath it to the same scale, and a heavy outline around the revenue each measure divides by. Week 1, scored against the whole quarter: the outline spans the whole $1,000,000 of actual closed won, and $266,000 of error divided by $1,000,000 is 26.6%. Week 10, scored against the whole quarter: the bar is split into $300,000 still open and $700,000 already closed by the cutoff, shown hatched, and the outline still spans the whole $1,000,000, so $81,000 of error divided by $1,000,000 is 8.1%. The hatched revenue is in the denominator and carries no forecasting error. Week 10, scored on the open portion only: the $700,000 already closed is left out, drawn as a dashed empty segment, the outline spans only the $300,000 still open, and the same $81,000 divided by $300,000 is 27.0%. The second and third rows carry the same error; only the denominator changes, and 27.0% multiplied by the 30% of the quarter still open is 8.1%. The figures are sample data.ONE QUARTER'S ERROR, TWO DENOMINATORS · SAMPLE DATASum of absolute rep errorsRevenue the measure divides byClosed by the cutoff: in the whole-quarter denominator, carrying no forecasting errorWeek 1whole quarterActual closed won for the quarter: $1,000,000$266,000 ÷ $1,000,000 = 26.6%Week 10whole quarterOpen: $300,000Closed by the cutoff: $700,000$81,000 ÷ $1,000,000 = 8.1%Week 10open portion onlyOpen: $300,000Closed revenue, left out of the denominator$81,000 ÷ $300,000 = 27.0%Rows two and three carry the same $81,000 of error; only the denominator changes.27.0% on the open $300,000, multiplied by the 30% of the quarter still open, is 8.1% on $1,000,000.
The same $81,000 of week-10 error over two denominators: 8.1% of the whole quarter is 27.0% of the 30% still open at the cutoff

HubSpot Accuracy Scores and Forecast Records

The forecast tool needs Sales Hub or Service Hub Professional or Enterprise, an assigned Sales or Service seat and Forecast permissions, and changing its settings needs Super Admin, per the setup documentation. Tracking the accuracy of forecasts scores a user or team, per pipeline and period, as one minus |Actual − Forecast| ÷ Actual, floored at zero, beside Closed won and a Submission average, the mean of every submission for the period. The AI projections page names that average as the forecast term. The score therefore blends lead times and lets a rep's opposite errors cancel: Rep A's $270,000 and $318,000 average $294,000, scoring 98.0% against $300,000. The documentation does not say what a rep with no closed won is shown. Beta AI projections, whose accuracy table requires a monthly forecast cadence, are scored on the same formula and averaged across the five issued on days 1, 7, 14, 21 and 28 of each month. HubSpot forecasting examines the submission score further.

Submissions are kept: the forecast tool's History tab shows past submissions and their deals up to one year back. A read-only Forecasts API in HubSpot's 2026-09 API version, the current release, returns every submission action, newest first, from /forecast-submissions/2026-09/events, filterable by occurredBefore. The documentation does not state how long those events are retained. Editing the forecast period resets forecastable revenue goals and forecast submissions for all pipelines, according to the setup documentation, which does not say whether past history survives.

The closed amount at the cutoff is the one number no documented report returns as it stood. The forecast tool's Closed Won column sums closed-won deals as they stand now. Deal property history keeps the inputs, stage, amount, close date, owner and pipeline, as up to 20 timestamped revisions per property, API edits included. Replaying five exports deal by deal rebuilds the figure within that limit; the procedure below avoids the work and the limit by capturing it at the cutoff. The Historical snapshots report counts deals at points in time by stage, amount or forecast category. Its documentation does not say whether it can sum Amount by owner at a past date; where it can, it replaces the cutoff file.

Three numbers per rep, captured at the cutoff and at the freezeA timeline runs from the start of a 13-week quarter to the seventh day of the following quarter. Two capture moments are marked on it: the cutoff, at 12:00 on day 7 of the quarter, and the freeze, on day 7 of the next quarter. Two numbers are taken at the cutoff. The first is the submission of record, the latest submission event before the cutoff for each rep, which HubSpot keeps: the forecast tool's History tab pages back one year, and the Forecasts API returns submission events with no stated retention limit. The second is closed won at the cutoff, which no documented HubSpot report returns as it stood at the time; a report email sent two hours after the cutoff captures it, because report data is taken two hours before the send. The third number, actual closed won, is frozen on day 7 of the next quarter by the last-quarter report in that day's email, filtered to last quarter's close dates, so later edits to closed deals do not move it. Beneath, the arithmetic: per rep, the error is number one minus number three and the open actual is number three minus number two; for the team, open-portion WAPE is the sum of absolute errors divided by the sum of open actuals.WHAT TO CAPTURE IN HUBSPOT, AND WHENDay 1Quarter ends13-week quarterCutoff: 12:00, day 7Freeze: day 7, next quarter1Submission of recordLatest submission eventbefore the cutoff, per repHistory tab: one year backAPI events: retention unstated2Closed won at the cutoffNo report returns it as it stoodCaptured by a report emailsent two hours after cutoff:data is taken two hours early3Actual closed wonFrozen on day 7 of the nextquarter by the last-quarterreport in the day-7 email;later edits do not move itPer rep: error = (1) − (3); open actual = (3) − (2)Team: open-portion WAPE = sum of absolute errors ÷ sum of open actuals
Three numbers per rep: the submission of record and closed won, captured at the cutoff, and the actual, frozen after the quarter ends

Snapshot Procedure for a HubSpot Forecast

  1. Settle the forecast period under Settings → Objects → Forecast, per the setup documentation, before the first measured quarter, and leave it: an edit resets goals and submissions in every pipeline.
  2. Set the cutoff, for example 12:00 on the seventh day of each quarter, as the due time of a submission schedule: under Sales → Forecast, a Super Admin opens Actions → Set submission schedule and sets its start date, due time, repeat, teams and reminder, per the forecast tool documentation. The submission standing then is the forecast of record.
  3. Under Reporting → Reports → Create report → Single-object report → Deals, build three single object reports as tables of Deal name, Deal owner, Amount, Close date and Forecast category, each filtered to the submissions' pipeline unless they cover All pipelines: closed-won deals with a close date this quarter, closed-won deals with a close date last quarter, and open deals with a close date this quarter. Single object reports, on Professional and Enterprise, query the live CRM database; custom report builder reports refresh about every two hours. A custom forecast type replaces Amount and Close date with its own properties. With deal splits on, a Sales Hub Enterprise feature, a rep's forecast counts only the rep's split share, as the Forecasts API documentation describes; that share comes from a custom report on Deal splits, exported by hand at the cutoff. A multi-currency account uses Amount in company currency.
  4. Share all three as monthly recurring emails with an XLSX attachment at 14:00 on the seventh. Report data is captured two hours before the send, so the files hold closed won at the cutoff, the frozen actual for the quarter just ended, and the open pipeline behind each call. Recurring emails go only to HubSpot users, and only single-object, event-based and customer journey reports attach as files.
  5. Record each rep's submission of record from the History tab, or from the events endpoint with occurredBefore set to the cutoff, keeping the latest event per owner and period whose hs_deal_pipeline_id matches the reports' pipeline, null for All pipelines.
  6. Compute, per rep, the error as submission minus actual and the open actual as actual minus closed won at the cutoff, then team bias, WAPE and open-portion WAPE.
  7. Verify the first quarter before reporting it: trace one rep's three figures to an event dated before the cutoff, the cutoff file and the frozen file, and confirm that no rep's open actual is negative. A negative value means closed won in the cutoff file later shrank for that rep: a deal was reopened, lost, reduced, reassigned to another owner, moved to another pipeline or redated outside the quarter; the histories of dealstage, amount, hubspot_owner_id, pipeline and closedate on that deal show which.

The Business Case for Accuracy Measurement

Measurement buys a forecast whose error is known before the next one is used: a finance team holding several quarters of week-1 WAPE can plan against a range, and rep-level bias that persists across quarters shows which calls to adjust before they are summed.

Beyond the forecast tool's subscription and seats, it costs a discipline held at a fixed moment: every rep submits by the cutoff, three files arrive each month, and someone owns the spreadsheet. The larger cost is behavioural, because a forecast can be made accurate by making it late. A deal held out of the call until signature cannot miss, and the lead time that made the forecast worth having goes with it.

The case is strongest where each rep closes enough deals that errors reflect judgement rather than one contract's timing, and where the forecast feeds hiring plans or external guidance. It is weakest for a team closing a few large deals a quarter, where one slipped contract moves every measure, and for new reps with small actuals.

Symptoms of a Misleading Accuracy Figure

Accuracy improves every quarter while win rates and deal sizes stay flat. Submissions drifting later produce this with no change in forecasting, because the whole-period figure rises with the closed share; a fixed cutoff and open-portion WAPE separate the two.

The team total lands within 2% while individual reps miss by 25%. The total measures bias, in which over-forecasts and under-forecasts cancel, and WAPE reported beside it shows the size of the misses.

HubSpot's accuracy score for a rep sits near 100% while the rep's first call of the quarter missed widely. The score averages every submission in the period, so late resubmissions that already contain closed revenue pull the average toward the actual; scoring the submission of record removes the effect.

Calls fall below results after accuracy enters performance reviews. Percentage measures charge less for forecasting low, so a persistent negative bias is the visible trace. Bias reported beside WAPE at the fixed early cutoff counts each deal withheld until signature as an under-forecast, and keeping the percentage score out of rep reviews removes the reward for withholding.

In Summary

A single forecast accuracy percentage conflates bias, the signed error in which offsetting misses cancel, with the size of the misses, which WAPE measures in dollars against what closed. MAPE is dominated by small actuals and broken by zeros.

Lead time decides what any of these figures means, because a submission's whole-period error is its open-portion error multiplied by the open share. HubSpot's own score averages every submission and so blends lead times, and no documented report returns closed won as it stood at a past cutoff. Scoring the submission that stood at one fixed cutoff, every quarter, gives the only trend that separates better forecasting from later forecasting.

HubSpot services

Onboarding, implementation, integration, migration, administration and training, each scoped and priced before the work begins

WEEKLY PROGRAM

RevOps Office Hours

A recurring weekly RevOps operating program. Live support plus hands-on HubSpot implementation work.

$1,500/mo
Monthly Operating Program
  • →1 live Office Hours session per week
  • →4 hours of hands-on implementation work per month
  • →Hours allocated against priorities agreed at the start of each period
  • →Recurring monthly cadence