The CFO wants a revenue forecast for next quarter. The ops team needs demand projections for inventory planning. The board wants to see growth projections for the fundraise deck. In every case, someone opens a spreadsheet, draws a trendline, and presents it as a forecast. That trendline ignores seasonality, can't quantify uncertainty, and breaks the moment growth isn't perfectly linear. Sales forecasting software fits statistical models such as Prophet, ARIMA, and exponential smoothing to data you already have in a CSV.

A Worked Example on Made-Up Weekly Data

Question: Can a simple model use past weekly values to predict later ones?

Inputs: The script makes made-up data with seed 17. It makes 20 weekly values from a rising trend, a pattern that repeats every four weeks, and small random changes. It fits the first 16 values and saves the next 4 for a later check. The rule that made the data is printed by the script: 100 + 2 per week, offsets of -8, 0, 6 and 2 on a four-week cycle, and noise with SD 3.

Method: The script finds the best-fit straight trend and adds a code for each place in the four-week pattern. It then predicts the saved weeks. The printed error shows, on average, how far the guesses were from the real values, as a percent.

Result: The printed error is 2.37% on these 4 saved, made-up weeks (predictions 122.26, 136.16, 140.26 and 139.28 against 128.03, 134.06, 144.07 and 140.32). The script built the data from the same form the model fits, so a small error is expected. The error covers 4 held-out weeks only. This example is not proof about real sales: one made-up series cannot show how a method works on real data or other patterns.

Full script (Python with NumPy):

import numpy as np

seed = 17
n_total = 20
n_train = 16
season = np.array([-8.0, 0.0, 6.0, 2.0])
rng = np.random.default_rng(seed)
t = np.arange(n_total, dtype=float)
noise = rng.normal(0.0, 3.0, n_total)
y = 100.0 + 2.0 * t + season[(t.astype(int)) % 4] + noise

def design(idx):
    idx = np.asarray(idx, dtype=int)
    return np.column_stack([
        np.ones(len(idx)), idx,
        (idx % 4 == 0).astype(float),
        (idx % 4 == 1).astype(float),
        (idx % 4 == 2).astype(float),
    ])

train = np.arange(n_train)
future = np.arange(n_train, n_total)
beta, *_ = np.linalg.lstsq(design(train), y[:n_train], rcond=None)
pred = design(future) @ beta
mape = np.mean(np.abs((y[n_train:] - pred) / y[n_train:])) * 100

print(f"Simulated data, seed {seed}")
print(f"Input: {n_total} weekly values; fit on first {n_train}; "
      f"predict next {len(future)}")
print("Generation rule: 100 + 2*t + offsets [-8, 0, 6, 2] + normal noise "
      "(mean 0, SD 3); t starts at 0")
print("Method: least-squares fit of a linear trend and four-week "
      "seasonal indicators")
print("Week,simulated_value")
for i, value in enumerate(y, start=1):
    print(f"{i},{value:.2f}")
print("Forecast: week,prediction,simulated_actual")
for i, p, actual in zip(future + 1, pred, y[n_train:]):
    print(f"{i},{p:.2f},{actual:.2f}")
print(f"Mean absolute percentage error on the held-out weeks: {mape:.2f}%")

Output from running the script with python3:

Simulated data, seed 17
Input: 20 weekly values; fit on first 16; predict next 4
Generation rule: 100 + 2*t + offsets [-8, 0, 6, 2] + normal noise (mean 0, SD 3); t starts at 0
Method: least-squares fit of a linear trend and four-week seasonal indicators
Week,simulated_value
1,95.30
2,103.02
3,108.38
4,104.22
5,94.32
6,110.06
7,115.57
8,113.38
9,107.33
10,117.84
11,119.17
12,126.78
13,109.92
14,131.58
15,135.77
16,130.58
17,128.03
18,134.06
19,144.07
20,140.32
Forecast: week,prediction,simulated_actual
17,122.26,128.03
18,136.16,134.06
19,140.26,144.07
20,139.28,140.32
Mean absolute percentage error on the held-out weeks: 2.37%

Sources

  • Taylor, S. J., and Letham, B. (2018). Forecasting at Scale. The American Statistician. doi:10.1080/00031305.2017.1380080. Cited for who published Prophet and when.

The Problem: Spreadsheet Forecasting Doesn't Scale

Every business forecasts. Most do it badly. A basic Google Sheets trendline fits a straight line through your revenue data and calls it a prediction. On its own it won't pick up a yearly pattern in your sales. It won't tell you that a structural change happened in August when you launched a new product line. And a plain trendline gives no forecast interval, just a single line that implies false precision.

Modern sales forecasting tools close this gap. Upload a CSV with date and value columns to get a forecast with a range.

What Good Forecasting Software Actually Does

A real forecasting tool does five things that a spreadsheet cannot:

Decomposes your data into components. Every time series is a combination of trend (long-term direction), seasonality (repeating patterns), and residuals (random variation). Forecasting software separates these components so you can see each one independently. Your overall revenue might look flat, but decomposition can reveal that strong growth is being masked by seasonal decline, or vice versa.

Allows for overlapping seasonal patterns. Business data often has overlapping cycles: weekly patterns (Monday vs. Saturday sales), monthly patterns (beginning-of-month billing cycles), and annual patterns (holiday season, summer slowdown). A spreadsheet trendline ignores all of them. The practical guides cover Prophet, ARIMA models, and exponential smoothing in more detail.

Looks for changepoints. When your business fundamentally changes (a new pricing model, a major product launch, a market shift) a good analysis checks where the change happened, so that behavior before and after the change is not blended together.

Quantifies uncertainty. Every forecast is wrong. The question is how wrong. A forecast can return a range, so you can see how uncertain it is. This is more useful than a single-point estimate that implies false certainty.

Compares multiple methods. No single forecasting method works best for all data. Good software fits several methods to your data, scores each on held-out values, and shows which one fits your specific pattern best.

Prophet, ARIMA, and Exponential Smoothing

These are three families of forecasting method. Prophet is one method for business time series (Taylor and Letham, 2018). ARIMA models a series using its own past values and past errors. Exponential smoothing (Holt-Winters) weights recent observations more heavily than older ones. Each handles trend and seasonality in its own way, and which one fits better depends on your data, so compare them on held-out values.

How to Read Forecast Error

MAPE (Mean Absolute Percentage Error) measures the average percentage by which forecasts miss actual values. Lower is better. In the example above, the error on 4 held-out weeks was 2.37%. That is one made-up series, so it does not show how a method does on real data.

When Forecasts Will Be Less Accurate

No forecasting method handles unprecedented events: pandemics, viral moments, supply chain disruptions, or sudden competitor moves. If your business is undergoing a fundamental transformation (new market, new business model, new product category), historical patterns are less predictive. In these cases, use forecasts as a baseline and overlay qualitative adjustments from domain experts.

Seasonal Patterns Worth Checking For

Most businesses know their big seasonal patterns, the holiday spike, the summer lull. But forecasting software can reveal subtler patterns that drive revenue variance:

Day-of-week effects. Sales can differ by day of the week. These patterns affect short-term forecasts but are invisible in monthly reporting.

Pay-cycle effects. Subscription businesses with monthly billing may see revenue cluster around billing dates. Seasonal decomposition separates these from noise.

Year-over-year shifts. Easter moves dates each year, pulling spring spending patterns with it. School schedules vary by region. A spreadsheet trendline treats these floating dates as random noise.

Growth-masked seasonality. A seasonal dip can make growth look like it slowed, and a seasonal peak can make it look like it sped up. Without decomposition, you might panic or cut marketing spend at exactly the wrong time. A model that separates trend from seasonality lets you see each clearly.

Use Cases: Revenue Planning, Inventory, Hiring

Sales forecasting software applies to any business function that needs to plan for the future based on historical patterns.

Revenue Planning and Budgeting

Set quarterly targets grounded in data instead of aspiration. The range around a forecast gives you optimistic and conservative scenarios for budget planning: you can budget for the conservative end while planning growth initiatives assuming the optimistic end.

Inventory and Demand Forecasting

Overstocking ties up cash. Understocking loses sales. A demand forecasting tool predicts unit volumes by SKU or category, accounting for seasonal demand patterns. Combined with safety stock calculations, this turns "how much should we order?" from a guess into a quantified decision.

Hiring and Capacity Planning

If revenue is projected to grow, support tickets and order fulfillment may grow with it. A forecast gives hiring managers lead time to recruit before demand exceeds capacity, not after customers start complaining.

Cash Flow Forecasting

Revenue forecasts feed directly into cash flow models. When you have a revenue range for next quarter, treasury and finance teams can plan debt, investment, and operating expenses against it.

Getting Started: Upload Your Sales CSV

Running your first sales forecast requires a CSV file.

Data format: At minimum, you need a date column and a value column (revenue, units sold, order count). Weekly data works, as in the example above, and so do daily or monthly values. Export from your source system: Shopify sales export, Stripe payment export, QuickBooks revenue report, or any time-stamped transaction data.

date,revenue
2025-01-01,4280
2025-01-02,3890
2025-01-03,5120
...

Optional enrichments: Add columns for product category, region, or channel if you want segment-level forecasts. Add a column flagging holidays or promotional events if you want the model to account for known future events.

Upload and analyze: Upload a CSV with date and value columns to get a forecast with a range. The statistical-method catalog is available for deeper analysis if needed.

Working on this for your business? See the time series forecasting tool.

Your turn

Bring your own data and the question you actually need answered.

MCP AnalyticsData science by email Send us your data and your question, and we will reply. ds@mcpanalytics.ai

Frequently Asked Questions

What is sales forecasting software?

Sales forecasting software uses statistical models to predict future revenue from historical data. It can model trends and seasonal patterns and return a forecast with a range. Unlike a spreadsheet trendline, it can include a seasonal pattern in the model.

How much historical data do I need for accurate sales forecasts?

It depends on the pattern. To fit a repeating pattern, such as the four-week cycle in the worked example, the model needs to see that pattern in your data. A held-out check, as in the example, shows whether the fit holds up.

What is the difference between Prophet, ARIMA, and exponential smoothing?

They are three families of forecasting method. Prophet is a model for business time series (Taylor and Letham, 2018). ARIMA models a series using its own past values and past errors. Exponential smoothing weights recent observations more heavily than older ones. Which one fits better depends on the data, so compare them on held-out values.

Can sales forecasting software handle seasonal businesses?

A model can include a seasonal pattern, as the four-week cycle in the worked example shows. Whether it holds for your data is checked on held-out values.

How accurate are sales forecasts from automated software?

Accuracy depends on data quality, how stable the pattern is, and how far ahead you forecast. In the worked example, the error on 4 held-out weeks was 2.37%, but that is one made-up series built to fit the model, so it does not show how a method does on real data. A forecast can return a range so you can see the uncertainty.