How to build a cash flow statement
The method, in short
- Start from a complete, balanced set of financials: P&L and balance-sheet movements, your trial balance, or your general ledger.
- Derive cash from everything that isn't: the non-cash movement × −1, turning each item into a cash flow driver.
- Map those drivers to your own cash flow structure.
We were all taught the recipe: net income, add back depreciation, adjust for the non-cash items, subtract capex. It sounds simple, but turning that into a cash flow statement that actually reconciles with the change in cash is surprisingly hard, let alone one tailored to your business. Here's the logic behind a customizable cash flow underneath. Let's walk through it in full.
Start from a balanced set of financials
Method: You need a complete, balanced set of financials: your P&L and balance-sheet movements, your trial balance, or your general ledger. Cash flow drivers (and non-drivers) can only be derived accurately when the data captures all of it.
The logic: All three are the same data at different levels of detail, and each balances to zero before any sign conversion:
General ledger: every debit + credit = 0
Trial balance: grouped per account = 0
P&L + balance-sheet movements: grouped into line items = 0
Example: One month as a trial balance: every account's movement, which nets to zero.
| Account | Name | Movement |
|---|---|---|
| 3000 | Revenue | −800 |
| 4000 | Cost of sales | 250 |
| 5000 | Marketing | 90 |
| 6000 | Personnel costs | 140 |
| 7001 | Depreciation | 15 |
| 7002 | Amortisation | 5 |
| 8000 | Financial items | 10 |
| 1000 | Tangible assets | 500 |
| 1100 | Intangible assets | 200 |
| 1500 | Accounts receivable | 300 |
| 1900 | Cash and bank | 300 |
| 2000 | Equity | −560 |
| 2100 | Loans | −200 |
| 2400 | Accounts payable | −250 |
| Trial balance | 0 |
Derive cash from everything that isn't
Method: Cash flow is the movement in everything that isn't cash, multiplied by −1. Take cash out of the financials, and everything else becomes a cash flow driver.
The logic: From the assumption that financial movements sum to zero, a few algebraic simplifications derive the formula:
Financial movements = 0
Financial movements = Cash + Non-cash
Cash + Non-cash = 0
Cash = − Non-cash
Cash = Non-cash × −1
Example: From our trial balance, we take out account 1900 (cash) and multiply every other account by −1. The result is a simple cash flow statement where every account is a driver.
| Account | Name | Movement × −1 |
|---|---|---|
| 3000 | Revenue | −800 × −1 = 800 |
| 4000 | Cost of sales | 250 × −1 = −250 |
| 5000 | Marketing | 90 × −1 = −90 |
| 6000 | Personnel costs | 140 × −1 = −140 |
| 7001 | Depreciation | 15 × −1 = −15 |
| 7002 | Amortisation | 5 × −1 = −5 |
| 8000 | Financial items | 10 × −1 = −10 |
| 1000 | Tangible assets | 500 × −1 = −500 |
| 1100 | Intangible assets | 200 × −1 = −200 |
| 1500 | Accounts receivable | 300 × −1 = −300 |
| 2000 | Equity | −560 × −1 = 560 |
| 2100 | Loans | −200 × −1 = 200 |
| 2400 | Accounts payable | −250 × −1 = 250 |
| 1900 | Cash flow | 300 |
Map it to your own cash flow structure
Method: Define the lines your business needs, then map every driver onto them.
The logic: Any grouping still sums to the same cash movement, as long as every driver lands on exactly one line. But the detail you can reach is capped by your data: when one driver lumps together what belongs on different lines, you can't split it without going a level deeper. This limit isn't unique to the method. Your cash flow is never better than the data behind it. The difference is that seeing it as logic makes the limit visible, and tells you exactly what would lift it: finer rules on the transactions, or a richer chart of accounts.
Example: Here we build a basic statement that shows the gap between EBITDA and cash flow, split across operating, investing and financing. The line items and account groupings are our own, chosen to show the most relevant cash flow, and since every driver is included, the total always equals the period's change in cash.
| Line item | Accounts | Amount |
|---|---|---|
| EBITDA | 3000400050006000 | 320 |
| Changes in working capital | 15002400 | −50 |
| Operating cash flow | 270 | |
| Investments / disposals of tangible assets | 70011000 | −515 |
| Investments / disposals of intangible assets | 70021100 | −205 |
| Investing cash flow | −720 | |
| Dividends / new shares issued | 2000 | 560 |
| Interest on loans | 8000 | −10 |
| New loans / repayments | 2100 | 200 |
| Financing cash flow | 750 | |
| Cash flow | 300 |
Frequently asked questions
The article deliberately doesn't say. It treats cash flow as an effect of every non-cash movement, which leans toward the common definition of the indirect method, but without its fixation on specific line items and prescribed steps. The point here is the underlying logic, which leaves the structure dynamic and yours to shape.
That flexibility is also why it doesn't sit neatly in either camp. Add further rules to the same logic, such as classifying each entry by whether its counter-entry is a cash account and on which side it falls, and you get something close to the direct method instead.
The method needs your P&L and your balance-sheet movements to balance against each other, the same way the ledger does. The closing entry that moves the result to equity has two legs: a debit in the P&L and a credit to equity. In the ledger both are there and it balances. In most reports only the equity side is kept, and the P&L is shown without the leg that zeroed it. Drop one leg of an entry and nothing downstream reconciles, cash flow included, almost regardless of method.
The fix is to put the missing leg back. Picture a line in your P&L, outside the bottom line, that represents the result being transferred out. Map it to a cash flow line the same way you map its counterpart on the equity side, and the two cancel exactly as they did in the ledger. You don't have to show that line in your published P&L, but quietly ignoring one side of an entry creates more problems in financial reporting than it ever solves.
Because nothing needs adding back. Depreciation is a debit in the P&L and a credit to the asset it reduces. Removing the debit without removing the credit is exactly the kind of one-sided move that throws the statement out of balance, which is what "adding it back" quietly risks.
With this method you can group the two together instead. Put the depreciation account and its asset on the same cash flow line, and the debit and the credit cancel on their own. What's left on that line is only the part that actually moved cash. If the asset changed by more or less than the depreciation, something other than depreciation touched it, an investment or a disposal, and that is precisely the cash movement the line should show.
It's a question you rarely notice until you build a cash flow this way. Seen as logic rather than a fixed template, it becomes plain: one account holds two kinds of movement, and you want them on two different lines.
The method doesn't make you pick one line for the account. You go a level deeper and split its transactions instead, as long as every one of them still lands somewhere. The rule can be as simple as the account's debits going to one line and its credits to another, or dimension tags on the transactions routing some to one line and the rest to another. What can't break is completeness: the whole ledger for the period stays in, and no account, line or transaction is counted twice or left out.