Building an Engine That Updates Itself
The customer data from Parts 1 and 2 had to become a real 13-week forecast. The first version needed every number typed in by hand, every single week. That was slow, and it caused mistakes. Here is what I built instead: change one date, and the whole forecast updates. Add one row of new data, and it appears in the correct week with no typing required.
Part 1 and Part 2 covered the customer data — country, industry, payment terms, and the revenue findings. This part covers a different problem: how to turn that data into an actual 13-week forecast, without typing every number in by hand every week.
Where this went wrong the first time
The first version of this forecast required a lot of manual work every week. I started with an accounts receivable report showing only the customer name and total outstanding balance. Then I examined the individual invoices that made up each balance. For every customer, I created a table listing each invoice amount together with its expected payment date. Finally, I manually entered each amount into the correct week of the cash flow forecast.
This process was slow and produced a dataset that was difficult to read, verify, and maintain. Every weekly update required reviewing the same information again instead of simply adding new data.
It also introduced unnecessary risk. A mistyped date, a misplaced decimal point, or one skipped invoice could make an entire week's forecast incorrect. These errors often remained unnoticed until the forecast no longer matched reality.
Here is an example of what the source data actually looked like for one customer:
| Before: one packed cell | After: one row per payment |
|---|---|
| "29,600 (16 Jul 2026), 9,400 (6 Sep 2026), 35,300 (30 Oct 2026), 1,200 (12 Nov 2026)" | 4 separate rows — one customer, one amount, one expected payment date per row |
Extracting four amounts and four dates from a single text field every week is exactly the kind of repetitive task that leads to mistakes. It also made maintaining the forecast unnecessarily time-consuming. Advancing the forecast by one week meant reviewing and re-entering much of the existing data instead of updating only the new information.
What I built instead
The rebuild happened in stages. Each one fixed a specific problem with the version before it.
-
Attempt 1 — typing by handEvery payment amount and date got typed into the forecast directly, read from the source data each week. Slow, and prone to mistakes, as shown above.
-
Fix 1 — one table for every paymentEvery payment — confirmed invoices, confirmed open orders — now goes into one table first. One row per expected payment: customer, amount, and date. The 13-week forecast itself never gets typed into directly. Formulas read this table and place each payment into the correct week automatically, based on its date. Add a new row to the table, and it appears in the right week with no manual placement.
-
Fix 2 — one date controls the whole forecastOne date controls the entire 13-week forecast: the date Week 1 ends. Change that one date, and every week column, every total, and every formula updates to match it, automatically. A dropdown list of valid dates is placed next to that cell, so there is no need to search for the right Sunday, and no risk of typing the date in the wrong format.
-
Fix 3 — a record that does not make the forecast longerEvery forecast that updates each week has the same problem. Keep every old week, and the file keeps growing larger. Remove old weeks to stay short, and there is no record left to check later. The fix: keep two separate things. A 13-week forecast that always shows the next 13 weeks from today. And a separate list that adds one new row every week, recording what was forecast, what actually came in, and the difference between the two numbers.
Here is a closer look at the real sheets — the same four sheets used to build this forecast, with real numbers pulled directly from the file.
How the Forecast Is Built
The forecast is built in four steps. Each sheet prepares the data for the next one. All numbers below are real, taken directly from the actual file, with cents removed for easier reading.
Step 1 — Payment Schedule
Every payment I know about in advance gets one row: a customer, an amount, and the date I expect the money. This sheet holds nothing else.
| Customer | Type | Amount | Expected date |
|---|---|---|---|
| Customer 11 | Existing A/R | €600 | 6 Jun 2026 |
| Customer 34 | Open Orders | €37,500 | 5 Jul 2026 |
| Customer 38 | Open Orders | €40,700 | 5 Jul 2026 |
If a payment date changes, only this one row needs updating. Nothing else in the forecast needs to be touched by hand.
Step 2 — Historical Transactions
This sheet holds real past payments — the ones that did not come from a known invoice or a known open order. Each row is one payment, tagged as either "Recurring" (a normal, small, repeat-style payment) or "Large" (a big, one-time payment).
| Date | Amount | Type |
|---|---|---|
| 3 Jun 2025 | €8,700 | Recurring |
| 4 Jun 2025 | €21,917 | Recurring |
| 17 Jun 2025 | 109,100 | Large |
This list is where the "Recurring" and "Large" split, covered later in this series, actually comes from. Every row here is a real, individual payment — not a summary.
Step 3 — Historical Weekly
This sheet adds up every row from Step 2, one week at a time. It answers one question: in a typical past week, how much of this kind of cash actually came in?
| Week ending | Recurring total | Large total | Combined total |
|---|---|---|---|
| 8 Jun 2025 | €90,444 | €0 | €90,444 |
| 15 Jun 2025 | €5,979 | €0 | €5,979 |
| 22 Jun 2025 | €2,725 | €109,100 | €111,825 |
Only the Recurring Total column gets averaged to make the trailing average in Step 4. The Large Total column, like the €109,100 above, is left out of that average completely. There are too few large, one-time payments in a year for an average of them to be useful. Instead, future large deals get tracked a different way — by asking sales managers directly what deals they expect. That becomes the Large Deal Pipeline number, covered later in this series.
Step 4 — 13-Week Forecast
This is the sheet a business owner actually reads. Every number here comes from one of the three sheets above, pulled in automatically by formulas. Nothing on this sheet gets typed in by hand.
| Cash-in category | Week ending 7 Jun | Week ending 14 Jun | Week ending 21 Jun | Week ending 28 Jun | Week ending 5 Jul |
|---|---|---|---|---|---|
| Existing A/R | €600 | €0 | €0 | €0 | €0 |
| Open Orders | €0 | €0 | €0 | €0 | €37,500 |
| Recurring (trailing average) | €27,141 | €27,141 | €27,141 | €27,141 | €27,141 |
| Large Deal Pipeline | €0 | €0 | €0 | €0 | €0 |
| Total incoming | €27,741 | €27,141 | €27,141 | €27,141 | €64,641 |
Each week, only new information gets added — a new row in Payment Schedule, a new week of actuals in Historical Transactions. Every number already in the forecast stays correct on its own.
Keeping the 13-week forecast at exactly 13 weeks, always starting from today, means it stays fast to read and fast to update. Growing it to hold every past week too would make it slower to open and harder to read, for no real benefit. Past weeks get recorded somewhere else instead: a separate sheet called Actuals & History. That sheet holds every past forecast next to what actually happened. The 13-week forecast sheet never needs to hold that information itself.
Why this matters to a client
The real value here is not the spreadsheet mechanics by themselves. The real value is what they make possible. A forecast that takes ten minutes to update each week actually gets kept current. A forecast that takes half a day is far more likely to be skipped. After being skipped a few times, people stop using it. By the time a real cash problem happens, nobody trusts the forecast anymore.
This part of the work is not something a business owner sees directly. But it is the difference between a forecast that keeps getting used, and a report that was accurate once and became wrong within a month.
This is Part 3 of a 5-part case study. Part 4 — forecasting the cash that is not from customers — publishes soon.
Custom Excel vs Dedicated 13-Week Cash Flow Forecasting Software
| Area | Custom Excel | Dedicated 13-Week Cash Flow Software |
|---|---|---|
| Initial cost | Very low | Subscription or license cost |
| Implementation | Immediate | Weeks or months |
| Flexibility | Excellent | Limited to vendor design |
| Custom calculations | Unlimited | Often limited |
| Data integration | Mostly manual unless custom-built | Automatic ERP and bank integration |
| Multiple users | Difficult | Designed for collaboration |
| Audit trail | Weak unless carefully designed | Usually strong |
| Security | Depends on workbook protection | Enterprise security and permissions |
| Scenario analysis | Excellent if built well | Usually built in |
| Maintenance | Your responsibility | Vendor responsibility |
| Reporting | Whatever you build | Standard dashboards |
| Scalability | Eventually becomes difficult | Handles larger organizations |