Templates › Business and freelance
Cash Flow Forecast
Made for small businesses worried about the next few months.
Enter your expected money in and money out by category, and see the closing bank balance for each of the next twelve months, including the worst month. The summary carries a chart that redraws itself as you type.
- Tabs
- 4
- Columns
- 24
- Fill themselves in
- 26
£7one payment, yours to keep
- Opens in Excel, Google Sheets and Numbers
- Delivered straight away
- No macros, nothing to install
- Change it free before you buy
Payment is handled by Stripe. Your card details go to them and never to us. Sales are final, which is why every tab, column and calculation is shown on this page first.
Everything inside, before you pay
This is the whole design: every tab, every column and how each calculated one is worked out. White cells are yours to fill in; the shaded ones work themselves out and are locked so a formula cannot be overwritten by accident. There is room for 275 rows.
Starting Position
| Column | Type |
|---|---|
| Balance In The Bank Now | currency |
| Balance As At | date |
| Low Balance Warning Level | currency |
| Notes | text |
Cash Items
| Column | Type | Worked out as |
|---|---|---|
| Item | text | |
| In Or Out | choice (list) | |
| Category | choice (list) | |
| Amount Per Month | currency | |
| First Month | choice (from Monthly Forecast › month_label) | |
| Last Month | choice (from Monthly Forecast › month_label) | |
| Start Key | number | IF(ISBLANK([amount]), "", IFERROR(INDEX([Monthly Forecast!month_key], MATCH([start_month], [Monthly Forecast!month_label], 0)), 0)) |
| End Key | number | IF(ISBLANK([amount]), "", IFERROR(INDEX([Monthly Forecast!month_key], MATCH([end_month], [Monthly Forecast!month_label], 0)), 999999)) |
| Months In Forecast | number | IF(ISBLANK([amount]), "", COUNTIFS([Monthly Forecast!month_key], ">=" & [start_key], [Monthly Forecast!month_key], "<=" & [end_key])) |
| Total Over Forecast | currency | IF(ISBLANK([amount]), "", ROUND([amount] * [months_applied], 2)) |
| Notes | text |
Monthly Forecast
| Column | Type | Worked out as |
|---|---|---|
| Month Starting | date | |
| Month | text | IF(ISBLANK([month_start]), "", TEXT([month_start], "MMM YYYY")) |
| Month Key | number | IF(ISBLANK([month_start]), "", YEAR([month_start]) * 12 + MONTH([month_start])) |
| Money In | currency | IF(ISBLANK([month_start]), "", SUMIFS([Cash Items!amount], [Cash Items!direction], "Money in", [Cash Items!start_key], "<=" & [month_key], [Cash Items!end_key], ">=" & [month_key])) |
| Money Out | currency | IF(ISBLANK([month_start]), "", SUMIFS([Cash Items!amount], [Cash Items!direction], "Money out", [Cash Items!start_key], "<=" & [month_key], [Cash Items!end_key], ">=" & [month_key])) |
| Net For Month | currency | IF(ISBLANK([month_start]), "", [income] - [outgoings]) |
| Opening Balance | currency | IF(ISBLANK([month_start]), "", SUM([Starting Position!opening_balance]) + SUMIFS([Monthly Forecast!net], [Monthly Forecast!month_key], "<" & [month_key])) |
| Closing Balance | currency | IF(ISBLANK([month_start]), "", SUM([Starting Position!opening_balance]) + SUMIFS([Monthly Forecast!net], [Monthly Forecast!month_key], "<=" & [month_key])) |
| Notes | text |
Forecast Summary
| Measure | Worked out as |
|---|---|
| Balance in the bank now | SUM([Starting Position!opening_balance]) |
| Months in the forecast | COUNT([Monthly Forecast!month_key]) |
| Total money in over the forecast | SUM([Monthly Forecast!income]) |
| Total money out over the forecast | SUM([Monthly Forecast!outgoings]) |
| Net change over the forecast | SUM([Monthly Forecast!net]) |
| Balance at the end of the forecast | IFERROR(INDEX([Monthly Forecast!closing_balance], MATCH(MAX([Monthly Forecast!month_key]), [Monthly Forecast!month_key], 0)), 0) |
| Worst month | IFERROR(INDEX([Monthly Forecast!month_label], MATCH(MIN([Monthly Forecast!closing_balance]), [Monthly Forecast!closing_balance], 0)), "") |
| Lowest closing balance | MIN([Monthly Forecast!closing_balance]) |
| Shortfall to cover in the worst month | IF(MIN([Monthly Forecast!closing_balance]) < 0, ABS(MIN([Monthly Forecast!closing_balance])), 0) |
| Months ending below zero | COUNTIF([Monthly Forecast!closing_balance], "<0") |
| Months ending below your warning level | COUNTIF([Monthly Forecast!closing_balance], "<" & SUM([Starting Position!low_balance_alert])) |
| Average money in each month | IFERROR(SUM([Monthly Forecast!income]) / COUNT([Monthly Forecast!month_key]), 0) |
| Average money out each month | IFERROR(SUM([Monthly Forecast!outgoings]) / COUNT([Monthly Forecast!month_key]), 0) |
| Tightest month for spending | IFERROR(INDEX([Monthly Forecast!month_label], MATCH(MAX([Monthly Forecast!outgoings]), [Monthly Forecast!outgoings], 0)), "") |
| Committed outgoings each month | SUMIF([Cash Items!direction], "Money out", [Cash Items!amount]) |






