Your data
Paste a table straight from Excel or Google Sheets, or drop a CSV file. Nothing is uploaded anywhere — the whole calculation runs inside this browser tab.
CSV, TSV or plain text. Files saved in windows-1251 are detected and re-read automatically, so Cyrillic headers do not turn into garbage.
Parsing options
Columns
Result
Save and share
The drawing library is downloaded only when you press the button, and only on this page.
This page has no server side at all. The table you paste is parsed by JavaScript inside your own browser, the chart is drawn on a canvas element on your machine, and the export file is assembled locally. Nothing is uploaded, stored or written to any log. You can disconnect from the network after the page has loaded and everything will still work — which is the simplest way to verify the claim yourself.
Facts and limits of this method
| Best for | Explaining the difference between two figures through a sequence of changes |
|---|---|
| Input format | Signed changes, not absolute levels: positives add, negatives subtract |
| Total bar | Added automatically at the end, drawn from zero in the brand colour |
| Colour coding | Green for increases, red for decreases, blue for the total |
| Step limit | Around 12; beyond that the running balance becomes hard to follow |
| Output | PNG at 2× scale, plus CSV with each step and the running balance |
When it misleads you
- The order of the steps is the argument, not the data. Reordering the same costs changes which one appears to "cause" the drop below a threshold, and there is no objectively correct sequence — that choice is editorial and should be disclosed.
- Only the first and last bars sit on the zero line. Everything in between floats, so the height of a middle bar can be compared to other middle bars but its position on the axis means little on its own.
- A step that is tiny relative to the starting figure becomes an invisible sliver. Merging several small costs into one "other" step is usually more honest than a row of one-pixel bars.
- Waterfalls imply causation through sequence. Placing marketing spend right before a profit collapse suggests one produced the other even when the sequence is arbitrary.
How it is calculated
Your value column is read as a list of signed changes. The first bar starts at zero, and each subsequent bar starts where the previous one ended, so the top edge of the last change bar is the running balance at that point.
A final bar is appended automatically, drawn from zero up to the accumulated total. It is the only bar besides the first that is anchored to the axis, and it is coloured differently to mark that it is a result rather than a step.
Bars are coloured by sign: increases green, decreases red, the total blue. Because colour alone is not a reliable signal for every reader, the direction is also visible from the geometry — a decrease bar hangs below the previous top edge.
The exported CSV contains three columns: the step name, its signed change and the running balance after it. That balance column is the number people usually want and rarely get from a chart image.
Questions and answers
Should I enter absolute values or changes?
Changes, with signs. Revenue as a positive, each cost as a negative. If you enter absolute levels the chart will stack them into a meaningless growing total instead of a bridge.
Where does the final total bar come from?
It is calculated, not read from your data: it is the sum of all the changes you entered. If it does not match your expected result, the discrepancy is in the input rather than in the chart.
Does the order of steps matter?
Visually, enormously. The arithmetic is the same in any order, but the story is not — whichever step pushes the balance below zero looks like the culprit. Choose the order intentionally and say why.
Can I show a step that both adds and subtracts?
Not in one bar. Split it into two steps, one positive and one negative, which is also clearer for the reader.
Is my data uploaded?
No. Everything is computed in your browser, including the running balance.