Forecasting

Why Your Cash Forecast Is Always Wrong (And How to Fix It)

Why Your Cash Forecast Is Always Wrong (And How to Fix It)

Cash forecasting failure is not a technology problem. It's a data pipeline problem masquerading as a modeling problem. Most treasury teams that miss their 30-day cash position by 15% or more aren't running bad models — they're feeding those models data that was already two or three days stale before the first number was entered.

The AFP's benchmarking work on treasury operations consistently shows that forecast accuracy at the 30-day horizon hovers around 70-80% for companies that rely on manual aggregation. At the 13-week horizon, that figure drops further. Understanding why requires tracing each error back to its source — and the sources are almost always the same three.

Root Cause 1: Data Latency in Bank Aggregation

The most common error in a 30-day cash forecast is not a modeling error at all. It's a positional error. Treasury teams that manually log into 8, 10, or 14 bank portals each morning to capture opening balances are working with a snapshot that, by the time it's aggregated into a spreadsheet, is already 3 to 5 hours old. For a company running $40M in daily float across six bank accounts, that latency creates a base error of $800K to $2M before a single assumption is made.

The structural issue is that most mid-market companies use multiple banking relationships — a primary operating bank, a regional bank for a subsidiary, a separate line-of-credit bank, perhaps a Canadian bank for a northern entity. Each institution delivers balance information differently: some via next-morning BAI2 files, some via intraday MT942 messages, some only through web portals with no API at all. When treasury aggregates these manually into a master sheet on Tuesday morning, the "opening balance" row contains numbers from three different time windows.

Fixing this requires resolving the data collection problem before touching the model. Whether through bank direct-API connections, SWIFT MT940/MT942 feeds, or automated BAI2 file ingestion, the position layer has to be rebuilt on a consistent timestamp before forecast adjustments compound the error.

Root Cause 2: AR Signal Quality

The second major error source is accounts receivable timing assumptions. Most 13-week cash forecasts built in Excel use one of two approaches for AR: (a) apply a fixed DSO-derived collection lag to the AR aging, or (b) use historical averages per customer segment. Both approaches break down in practice.

Consider a mid-size industrial distributor with 200 active customers. Their top 12 customers represent 61% of AR. When two of those customers pay three days earlier than the DSO assumption — perhaps because quarter-end incentives moved their payment — the forecast shows a shortfall that isn't there. When three of those customers extend 30 days to 45 days — a behavior that their payment history actually predicts for the September-October period — the forecast shows surplus that evaporates.

The fix here is moving away from static DSO assumptions toward customer-level payment pattern modeling. For large-balance customers, actual historical payment timing (not averages, but distributions — how often does this customer pay on day 28 vs. day 34?) generates materially better 30-day predictions. This is precisely where machine learning on historical AR transaction data delivers genuine value: not by inventing new data, but by extracting timing patterns that manual analysis misses at scale.

Root Cause 3: AP Timing Misalignment

AP forecasting errors are the inverse problem: treasury typically gets AP data from a payment run schedule, not from the full AP aging. When the AP team uploads a payment batch on Thursday afternoon with 200 invoices set to ACH on Monday, treasury sees Monday's cash outflow. What treasury does not see are the 40 invoices in review, the 15 invoices with approval holds, and the $800K in early-payment discounts being evaluated. Those resolve differently — and the resolution timing affects the 30-day view by $1.5M or more.

Connecting treasury directly to the AP aging rather than to the payment run export is the structural fix. With full AP aging visibility — invoice date, due date, vendor payment terms, approval status — the forecast can model probability-weighted outflows rather than treating every approved invoice as certain and every unapproved invoice as zero.

The Compounding Effect

These three errors compound. A $1.5M base position error plus a $1.2M AR timing error plus an $800K AP visibility gap produces a 30-day forecast that's off by $3.5M on a company with $25M in average cash. That's a 14% error — consistent with what the AFP survey data describes as "average" forecast performance. It is not average performance; it's the predictable arithmetic consequence of three data problems stacking on top of each other.

We're not saying that better models are useless. Seasonal adjustment, calendar effects, and entity-level pattern recognition all improve accuracy meaningfully at the 8-to-13-week horizon where day-level timing noise averages out. But if you're missing your 30-day forecast by double-digit percentages, adding model sophistication before fixing data collection is the wrong sequence.

What Accurate Forecasting Actually Requires

The companies that achieve forecast accuracy above 90% at 30 days share three operational characteristics. First, their cash position is pulled from bank data on a same-day or intraday basis — not from manually aggregated prior-day reports. Second, their AR feed to treasury reflects actual customer payment patterns at the account level, not aggregate DSO assumptions. Third, their AP visibility covers the full aging and approval pipeline, not just the committed payment queue.

These aren't exotic requirements. They're data plumbing. The barrier has been that connecting bank data feeds, ERP AR modules, and AP pipelines into a coherent treasury data layer required integration work that most mid-market finance teams couldn't justify as a standalone project. That integration cost has come down substantially as treasury-specific platforms handle the connectivity layer directly.

The forecast model on top of clean, timely data almost writes itself. The variance that remains — the 5-8% residual error at 30 days — reflects genuinely uncertain events: customer disputes, early payments from accounts that historically don't, capex decisions that slipped a week. Those residual errors are acceptable. The errors that come from reading a 48-hour-old spreadsheet are not.

If you're building your 13-week forecast in Excel with prior-day bank exports and static DSO assumptions, the model isn't the problem. Fix the feed, then revisit the model.

Forecasting Treasury Cash Flow