Sankey Diagram for Public Budgets: Show Where Money Comes From and Goes

How to draw a public budget as a Sankey diagram: revenue sources, services and cost types, the aggregation level to choose, net versus gross, and an editable example.

A public budget Sankey follows money from the sources that pay for it, through the services it funds, to the kinds of cost it becomes. Ribbon width is the amount, so the biggest commitments are visible before anyone reads a table.

The example is a fictional town with an operating budget of 1,000 million euros. Local taxes supply 550, government grants 300 and fees and charges 150. The budget is split across six services, and each service is then split into staff, contracts and purchases, transfers and benefits, capital projects and interest.

Three columns of nodes, revenue, services and cost types, are enough for most budgets. For a real municipal-style layout with its own figures, see /sankey/municipal-budget. This guide is about the choices that decide whether a budget diagram is honest: what to aggregate, what to net off and what to leave out.

The figures here are invented. A Sankey is a picture of numbers you already hold in an approved budget or an annual account; it does not audit them.

How to structure a public budget Sankey

Put revenue sources on the left, one budget node in the middle, services next and cost types on the right. The single budget node is what makes the two halves balance: everything that comes in must go out, so the diagram shows at once if a source or a service has been left off.

Keep to one unit and one period, for example millions of euros in one financial year. Name the basis in the title or the data note: adopted budget, forecast or outturn.

Choose the aggregation level before you draw

A public budget can have hundreds of lines. A Sankey with more than about fifteen nodes in a column stops being readable. Group lines into the services the public recognises, and move detail into a second diagram for the service you want to explain.

Group small items into one named node rather than dropping them. Dropping a line breaks the balance; an 'Other' node keeps it and says how much was grouped.

  • Use service names the reader would use, not internal cost-centre codes.
  • Keep every column to a similar level of detail.
  • Make a second, separate diagram for one service instead of crowding the first.

Gross or net, operating or capital

Decide whether income that a service earns, such as fees, is shown as revenue on the left or netted off the service's cost. Gross shows the full scale of the service. Net shows what taxes and grants must cover. Mixing the two in one diagram makes the totals impossible to compare.

Operating spending and capital spending behave differently from year to year. Showing capital as its own cost type, as the example does, stops a one-off project from looking like a change in running costs.

Grants that pass through

Some grants are received and paid on to someone else, for example a transfer to a school or a housing association. If you include them, they add the same amount to both sides and enlarge the diagram. If you exclude them, say so. Either choice can be right; being silent about it is the mistake.

Where a grant is earmarked, give it its own source node so the reader can see that the money was not free to allocate.

Totals or per resident

Totals suit one budget for one year. To compare with another year or another place, divide every flow by the same population figure and say which one. Do the division before you enter the numbers, so each ribbon is still its true share of the whole.

What not to claim

A budget Sankey shows allocation, not results. It cannot say whether a service is efficient, whether spending is too high or what it achieved. It also shows a plan or an account at one moment, not a forecast of what will happen next year.

Avoid ordering services by size and then reading the order as priority. Width is size, not importance.

Key points

  • 1,000 million comes in: taxes are 550, grants 300 and fees 150.
  • Schools and education take 380 and social care 300, together more than two thirds of the budget.
  • Staff is the widest cost type at 515, so most of the budget is people.
  • Debt service is the narrowest service at 50 and flows entirely to interest.
  • The figures are invented, and every node balances.

The example’s data

Invented figures in millions of euros for a fictional town and one financial year. Each service and the budget node balance. Replace them with the approved budget or the annual account you are describing, and state which.

Sankey Diagram for Public Budgets: Show Where Money Comes From and Goes (m€)
FromToAmount (m€)
Local taxesOperating budget550
Government grantsOperating budget300
Fees and chargesOperating budget150
Operating budgetSchools and education380
Operating budgetSocial care300
Operating budgetRoads and transport120
Operating budgetCulture and parks80
Operating budgetAdministration70
Operating budgetDebt service50
Schools and educationStaff260
Schools and educationContracts and purchases60
Schools and educationCapital projects60
Social careStaff140
Social careContracts and purchases90
Social careTransfers and benefits70
Roads and transportStaff25
Roads and transportContracts and purchases45
Roads and transportCapital projects50
Culture and parksStaff40
Culture and parksContracts and purchases25
Culture and parksCapital projects15
AdministrationStaff50
AdministrationContracts and purchases20
Debt serviceInterest50

The same data as CSV

source,target,value
Local taxes,Operating budget,550
Government grants,Operating budget,300
Fees and charges,Operating budget,150
Operating budget,Schools and education,380
Operating budget,Social care,300
Operating budget,Roads and transport,120
Operating budget,Culture and parks,80
Operating budget,Administration,70
Operating budget,Debt service,50
Schools and education,Staff,260
Schools and education,Contracts and purchases,60
Schools and education,Capital projects,60
Social care,Staff,140
Social care,Contracts and purchases,90
Social care,Transfers and benefits,70
Roads and transport,Staff,25
Roads and transport,Contracts and purchases,45
Roads and transport,Capital projects,50
Culture and parks,Staff,40
Culture and parks,Contracts and purchases,25
Culture and parks,Capital projects,15
Administration,Staff,50
Administration,Contracts and purchases,20
Debt service,Interest,50

How it works

  1. Choose the basis and the unit

    Decide whether you are drawing the adopted budget, a forecast or the outturn, and fix the unit and period.

  2. Group lines into services

    Collapse detailed lines into the services readers recognise. Use an 'Other' node for small items so the totals still balance.

  3. Enter revenue and the budget node

    Add each revenue source flowing into one budget node. Decide whether fees are gross or netted off.

  4. Enter services and cost types

    Flow from the budget into each service, then from each service into staff, contracts, transfers, capital and interest.

  5. Check the balance

    Each service must pay out what it receives, and the revenue total must equal the spending total. Paste the table or CSV into the editor to see it drawn.

Frequently asked questions

How many services can one budget Sankey show?

About six to twelve is readable. Beyond that, group the small ones and draw a second diagram for the service you want to explain in detail.

Should I show capital and operating spending together?

You can, if capital is its own cost type. Otherwise a single large project can make the whole budget look bigger without any change in running costs.

Can I paste my budget into the editor?

Yes. The editor takes a table of nodes and amounts, or a source, target, value list pasted as CSV. Ribbon widths follow the amounts, and you can set the unit.

Edit this public budget Sankey

Open the example as your own chart, replace the figures and rename the services.

Edit this public budget Sankey

More in Sankey diagrams