FlowParse
Guide 10 August 2026 18 min read

How to build a budget from last year’s bank data

Most budgets are built by opening last year’s spreadsheet and adding a percentage. It is quick, and it carries forward every error and every one-off that happened to be in the original. This is the longer route: start from what actually left the bank, clean it deliberately, and end up with a plan that can be defended line by line.

FlowParse
flowparse.io

What this method gives you

A budget built this way answers a question the “last year plus five percent” approach cannot: what does this organisation cost to run when nothing unusual happens? That number is the baseline, and almost nobody knows theirs, because the ordinary and the exceptional sit mixed together in every historical total.

Separating them is most of the work. Once separated, next year’s budget becomes a short list of deliberate decisions — this contract renews at a higher rate, this hire lands in April, this project does not repeat — applied to a baseline you can explain. The arithmetic is trivial. The value is in having done the separation.

The method assumes you have last year’s bank statements and not much else. If your bookkeeping is complete and your chart of accounts already reflects how you think about the business, start from the ledger instead; the steps from categorisation onwards are the same.

Before you start

Three decisions, made now, prevent most of the rework that otherwise happens halfway through.

Decide gross or net of VAT, and write it down. Bank payments are gross. If you budget net, every comparison against bank data needs adjusting, and if that adjustment is not documented, someone will spend a day investigating a variance that is just the VAT rate.

Decide cash or accruals. Bank data is cash. A cash budget is legitimate, simpler, and honest as long as it is labelled. Trying to build an accruals budget from bank data without saying so produces something that is neither.

Decide who the budget is for. A budget for a board is a page. A budget for department heads is a page each. A budget for a lender is whatever they asked for. These are different documents, and trying to make one serve all three is the reason so many budgets serve none.

FlowParse
flowparse.io

The seven steps

1 · Assemble the year

Every account, every card, every entity — one dataset, checked for gaps.

2 · Clean it

Remove internal transfers, net refunds, tie back to the accounts.

3 · Categorise

A short, stable list applied to every row.

4 · Fixed vs variable

Split each category into what recurs and what moves with activity.

5 · Strip one-offs

Remove the exceptional, and keep the list of what you removed.

6 · Build next year

Adjust the baseline for known price, volume and plan changes.

7 · Phase it

Spread each line into the months it will actually occur, then assign owners.

Then: track it

Compare monthly against actuals, and note every material variance.

Step 1 · Assemble the year

Every account, not the main one. This is where the method most often fails at the first step: the current account is easy, the card account is a separate login, the euro account is used twice a year, and the account for the dormant subsidiary is forgotten entirely.

Make the list of accounts before you make the list of statements. Twelve months across five accounts is sixty documents, and a list stops you discovering in March that August is missing from one of them.

Convert them all into one table with the same columns — date, description, counterparty, amount, account, source file. Batch processing handles up to 100 files in one pass, which is a year across eight accounts. The bank statement to Excel page covers the conversion itself, and Smart Merge is what turns sixty files into one sheet.

Check the series before going further.Each statement’s closing balance should be the next one’s opening balance. Where it is not, a statement is missing — and a missing month in a budget baseline understates a category for the whole of next year without ever announcing itself.

FlowParse
flowparse.io

Step 2 · Clean the data

Three cleaning operations, in this order. Each is mechanical, and skipping any one distorts the baseline in a way that is very hard to spot later.

Remove transfers between your own accounts.Every internal movement appears twice — out of one account, into another — and inflates both sides. In a business that sweeps cash between accounts weekly, this can be the largest single “category” in the dataset and is entirely fictional.

Net off refunds and reversals. A payment made and refunded is not spending. Left gross, it appears as a cost with a matching unexplained receipt, and the receipt usually ends up in the income side where it does real damage.

Tie the total back. Total outflow for the year, less transfers and refunds, should be recognisable as what the business spent. If it is not, something is missing or double-counted, and finding out now costs an hour instead of undermining every number that follows.

Clean-upWhy it mattersIf skipped
Internal transfersThey are not spendingBaseline inflated, sometimes enormously
Refunds and reversalsNet cost is the real costCosts and income both overstated
Duplicate importsSame statement loaded twiceA category silently doubles
Personal or drawingsNot an operating costBaseline includes something next year will not

Step 3 · Categorise

The category list is the budget’s structure, so build it deliberately rather than inheriting it. Start from how the organisation actually talks about its costs, not from the accounting system’s default list — a budget nobody recognises is a budget nobody uses.

Aim for fifteen to thirty categories. Fewer and the budget cannot guide a decision; more and nobody can remember where things go, so the same cost lands in different places in different months and comparability quietly dies.

Work through the payees by value, largest first. In most organisations twenty payees account for the large majority of spending, and categorising those twenty settles most of the dataset in half an hour. The long tail of small one-off payments matters much less and can be swept into a small number of general categories without harm.

The mechanics are on the categorisation page, and the step-by-step method — including how to keep the list stable as new payees appear — is in the categorisation guide.

Step 4 · Separate fixed from variable

This is the step most budgets skip, and it is the one that makes the result useful when something changes. A budget that does not distinguish fixed from variable cannot answer the only question anyone urgently asks: what happens if revenue falls twenty percent?

Fixed costs occur whether or not anything happens — rent, core salaries, insurance, the accounting subscription. They are predictable and, in the short term, largely immovable.

Variable costs move with activity — materials, delivery, payment processing fees, contractor time. They scale with the business in both directions.

Discretionary costs are the honest third category most frameworks omit. Marketing, training, travel and equipment are neither fixed nor strictly variable; they are chosen. Naming them as such is what makes a downturn plan possible without pretending they are contractually fixed.

Tag each category once. The tag rarely changes year to year, and it converts the budget from a list of numbers into something you can run scenarios against.

Step 5 · Strip the one-offs

Now the central operation. Go through each category and identify what happened once and will not recur: the office move, the legal dispute, the equipment replacement, the consultant engaged for a specific project.

Remove them from the baseline — and keep the list. The list is as valuable as the baseline, for two reasons. It is the evidence for why next year’s budget is lower than last year’s actual, which someone will certainly question. And it is a reminder that one-offs happen every year, just different ones, which is what the contingency line is for.

The judgement call is what counts as one-off. A useful test: would this have happened if the year had been entirely ordinary? Equipment replacement usually fails that test in the year it occurs but passes across a five-year view, which argues for a small annual allowance rather than a zero.

Be suspicious of removing too much. Every removal makes next year’s budget lower and more comfortable, and that pressure is real. A baseline stripped of everything inconvenient produces a budget that is missed in month two.

FlowParse
flowparse.io

Step 6 · Build next year

You now have a clean recurring baseline. Next year’s budget is that baseline plus a short list of named changes, and the discipline is that every change has a reason attached to it.

Change typeExampleEvidence to attach
Known price changeLease renews at a higher rateThe renewal letter
Contractual indexationContract rises with an indexThe contract clause
Volume changeMore units, more materialsThe sales plan
Planned additionA hire landing in AprilThe approved headcount
Planned removalA service being cancelledThe termination date
AssumptionGeneral inflation on the restOne stated rate, applied once

The last row is the dangerous one. A general inflation assumption is necessary, but it should apply only to what is left after the specific changes, and it should be a single stated number that appears once in the document. An inflation rate quietly embedded in every line cannot be changed when circumstances change, which is precisely when you will want to change it.

Step 7 · Phase it

An annual number divided by twelve is not a budget; it is an annual number divided by twelve. It will produce a variance in almost every month and useful information in none.

Phase each line into the shape it will actually take. Annual payments go in the month they are paid. Seasonal costs follow the season. A hire starting in April costs nothing in the first quarter and full salary thereafter. Most lines are genuinely flat, and phasing them evenly is correct — but the exceptions are where all the monthly noise comes from.

Last year’s cleaned data gives you the shape for free. If a category was heavy in September and light in February last year, and nothing structural has changed, that is your phasing. This is the point at which the effort of steps 1 to 5 pays off a second time.

Finally, assign an owner to every line. One person, named, who will be asked about the variance. Lines without owners are the ones that drift, and the drift is never noticed until the year is nearly over.

A worked example

A small consultancy, four accounts, one card. Last year’s outflow totalled a figure that felt too high, and nobody could say why. Working through the steps produced this on the software line.

StageWhat happened
Raw totalEverything coded to software across all accounts
Less transfersUnchanged — no transfers were in this category
Less one-offsA migration consultant and two annual licences bought for a project that ended
Found: duplicatesTwo tools paid for on both the card and the current account after a switch
Found: unusedThree subscriptions with no owner anyone could name
Clean baselineMaterially below the raw total, and explainable line by line
Next yearBaseline, plus one known price rise, plus one planned tool

The two findings in the middle are typical, and neither was visible in an annual total. They only appeared once a year of transactions sat in one table sorted by payee — which is the actual argument for doing this work rather than adding a percentage.

The income side

Everything above is about costs, because costs are where bank data is strongest. Income needs more care, for one reason: money received is not the same as revenue earned, and the gap is the length of your payment terms.

For a business paid immediately — retail, most e-commerce, subscription services — the bank view is close enough to be used directly. For a business invoicing on thirty or sixty days, the bank shows last month’s sales, and a budget built on it will be permanently one cycle behind reality.

The workable approach is to build the income budget from the sales side — pipeline, contracts, planned volume — and use bank receipts to validate the pattern rather than to set the level. If receipts and invoiced revenue diverge over a year by more than the terms explain, that is a collections problem worth knowing about independently.

Where cash timing rather than earned revenue is the concern, the cash flow page covers building a forward view from the same transactions.

People costs deserve their own treatment

In most organisations payroll is the largest line and the one most often budgeted worst — usually as a single number that grows by a percentage, which hides everything that actually drives it.

Build it from a headcount list instead: each role, its cost, and the month it starts or ends. That turns the largest line in the budget into arithmetic over a list of decisions, and it makes a hiring delay something you can quantify in an afternoon rather than discover in the year-end.

Remember the parts that are not salary: employer contributions, insurance, equipment for new starters, recruitment fees. They are a meaningful uplift on the salary line, they are frequently forgotten, and they arrive at exactly the moment the headcount grows.

Watch the pay-date timing too. Where a pay run falls near a month end, one month can carry two runs and another none — a phasing artefact that looks alarming in a monthly report and means nothing at all.

Budgeting for growth without inventing it

A baseline describes the business as it is. Growth requires adding things that have no history, and this is where budgets become fiction most easily.

The safeguard is to build each new item from components rather than from a feeling. A new market entry is a headcount, a set of tools, a travel figure and a marketing number — each of which can be estimated from something. A single line saying “expansion” cannot be challenged, which sounds convenient and means it will never be managed.

Mark these lines as estimates and expect them to be wrong. The point is not accuracy on a new activity; it is that the first variance teaches you something specific, and a line built from components tells you which component was wrong.

Contingency, held in one place

Every year has one-offs. Next year will too — different ones, but a similar total. Stripping them from the baseline and adding nothing back produces a budget that is systematically too low.

Hold the allowance as a single visible line rather than as padding spread through the categories. Padding is invisible, so it cannot be allocated deliberately, cannot be reported on, and quietly grows every year as each budget holder adds their own. A named contingency line can be released with a decision and reported like anything else.

A reasonable starting point is the average of the one-offs you stripped out over the last two years. That is not a rule, but it is evidence, and it is a great deal better than a round percentage chosen because it sounded prudent.

Getting it agreed

A budget nobody has agreed to is a forecast. The difference matters in month three, when someone exceeds a line they never accepted.

Send each owner their own lines, not the whole document. People engage with what they are accountable for and skim the rest, and a fifteen-page pack sent to everyone produces less scrutiny than one page sent to each.

Include last year’s actual next to the proposed number for every line. Almost every challenge is really a question about what happened last year, and answering it in advance removes an entire round of correspondence.

Then freeze it. Record the version, the date and who agreed to it. A budget that is edited after approval loses the property that makes it useful — being a fixed reference point that reality can be compared against.

A timetable that works

WhenWhatWho
10 weeks outAssemble and clean the year to dateFinance
8 weeks outCategorise, split fixed and variable, strip one-offsFinance
6 weeks outSend each owner their baseline and last year's actualFinance → owners
4 weeks outCollect known changes with evidenceOwners
3 weeks outBuild, phase, add contingencyFinance
2 weeks outReview, challenge, adjustLeadership
1 week outFreeze, version, distributeFinance

Ten weeks looks generous and is not. Six of those weeks are spent waiting for people, and the finance work compresses into perhaps five working days. Starting later does not shorten the waiting; it just moves it past the deadline.

Common mistakes

Last year plus a percentage

Carries forward every one-off and every error, and makes the budget impossible to defend line by line.

Using only the main bank account

The card account is where the subscriptions live, and they are exactly what the exercise is meant to find.

Leaving transfers in

Inflates the baseline, sometimes by more than any real category.

Stripping every inconvenient cost as a one-off

Produces a comfortable budget that is missed in month two.

Dividing annual figures by twelve

Guarantees a variance in nearly every month and information in none.

Budgeting payroll as one growing number

Hides the headcount decisions that actually drive the largest line you have.

Hiding contingency as padding

It cannot be allocated, cannot be reported, and grows every year unchecked.

Approving with no owners

A line without a named owner drifts, and the drift surfaces too late to act on.

Best practices worth keeping

Write the assumptions on the budget

Inflation rate, volume growth, headcount timing. When reality diverges, you can see which assumption failed instead of arguing about the whole document.

Keep the category list stable

Change it once a year, at the rebuild, and restate the prior year when you do. Mid-year changes destroy comparability for a benefit that lasts one meeting.

Keep the one-off list

It justifies next year's lower baseline and sizes next year's contingency, both of which will be questioned.

Phase from last year's shape

The data already tells you which months are heavy. Using it costs nothing and removes most monthly noise.

One owner per line

Never a committee. A line with two owners has none, and the variance discussion goes nowhere.

Freeze and version

The budget's usefulness comes from being fixed. Reforecast in a separate column and leave the original visible.

Once the budget exists, tracking it is the other half of the job — the method is on the budget versus actual page, the comparison mechanics are in period comparison, and writing the monthly commentary so that people read it is covered in variance analysis that people actually read.

FlowParse
flowparse.io

Frequently asked questions

Start with one account, one year

Convert twelve months of your main account, sort by payee, and read the top twenty rows. Most people find something in the first ten minutes that changes what next year’s budget should say.

Related