Use case

Revenue forecasting with an explicit range for the board pack

Forecast monthly revenue from a CSV, separate recurring from one-time revenue, and present a median plan with an 80% range instead of a single number.

A revenue forecast is a communication tool as much as a planning tool. A single number invites either false confidence or an immediate argument about the assumptions. A median and a range make the assumptions visible: the plan is the median, the risk is the low band, the upside is the high band.

The sample is monthly revenue with a seasonal fourth quarter. For a subscription business, forecast recurring revenue and new bookings separately; blending them hides the churn assumption inside an average.

The sample series

The studio below is preloaded with this monthly revenue (usd) series and a 6-step horizon. It is an illustrative example, not a real company’s data. Replace it with your own CSV to run the same workflow.

Show the CSV
month,revenue
2024-01-01,93900
2024-02-01,87300
2024-03-01,82800
2024-04-01,71100
2024-05-01,67900
2024-06-01,65200
2024-07-01,66700
2024-08-01,76900
2024-09-01,84000
2024-10-01,97300
2024-11-01,127900
2024-12-01,132600
2025-01-01,107400
2025-02-01,104400
2025-03-01,89800
2025-04-01,81400
2025-05-01,77200
2025-06-01,77000
2025-07-01,78400
2025-08-01,85700
2025-09-01,101700
2025-10-01,105800
2025-11-01,152800
2025-12-01,151000

CSV forecast studio

Forecast your revenue forecasting series.

This studio is preloaded with the monthly revenue (usd) example above. Replace it with a CSV of your own history, choose a horizon, and run the forecast. The public demo is free while the Hugging Face Space is available; the API is the paid product.

1 · Paste or upload a CSV2 · Pick a horizon3 · Download the 21 quantiles
1 credit per API call · the web demo is free while the public Space is available

What to watch in the output

Keep one currency and one revenue definition

Bookings, billings and recognized revenue are different series. A currency mix can move the total without any change in the business.

Two seasonal cycles is a minimum

A single December peak is an anecdote. Two cycles give the model a repeated pattern; a third is stronger. The band should reflect the uncertainty.

Do not let a one-off dominate the history

A large one-time contract can look like a new level. If it will not repeat, mark it as an outlier or forecast the recurring base separately.

Common mistakes

  • —Mixing annual contracts recognized monthly with one-time project revenue.
  • —Using a forecast as a budget without a review cadence. Revenue forecasts need a monthly reforecast, not a set-and-forget plan.
  • —Ignoring a known price change. A price increase is a structural break; forecast the post-change period separately.

How to put it to work

  1. 1. Start with the sample. Run the preloaded series once so you see the output shape before you debug your own CSV.
  2. 2. Replace it with your history. Keep one timestamp column and one or more numeric columns. Mark outages and stockouts as empty cells, not zeros.
  3. 3. Backtest before you plan. Hold out the last few periods, compare the forecast with what happened, and check whether the actuals land inside the 80% band.
  4. 4. Move it into production. Use the REST API for a nightly job or an internal tool. One credit per successful call; failed calls are refunded.

FAQ

Can I forecast MRR instead of total revenue?

Yes, provide MRR as the series. It is usually smoother than total revenue and easier to compare with a retention model.

Does the model know my sales pipeline?

No. It forecasts the history you provide. Pipeline conversion is a separate model; you can combine the two by treating the pipeline as a scenario on top of the baseline.

What range should I show the board?

Show the median and the 80% band, and state what the band means. If the board needs a downside case, use the low band as a starting point, not a guarantee.

Need this as an API?

The same forecast is available as a metered REST endpoint with JSON and a downloadable quantile CSV.

See the API