Donor Retention Sankey Diagram: Editable Template
Show how last year's donors by gift tier were retained, upgraded, downgraded or lost, and how new and returning donors rebuild the base. Editable template, invented figures.
A donor retention Sankey tracks people, not money: who gave last year, what happened to their giving, and which tier each donor sits in this year.
The example charity had 1,500 donors last year in four tiers, from small to major. Each tier splits into retained at the same level, upgraded, downgraded or lapsed, while donors who did not give last year arrive as new or reactivated. The outcomes then feed this year's tiers.
The columns are ordered so the diagram has no loops: last year's tier, then the outcome, then this year's tier. Counting donors rather than gift value is deliberate and the unit is donors; a major donor and a small donor are one each. The counts are invented. For where the money goes once it is given see /sankey/grant-funding-flow and /sankey/department-budget-allocation.
How to read this diagram
- 444 of last year's 1,500 donors lapsed, so retention is 70.4%.
- Small donors lapse most: 300 of 800 (37.5%) against 4 of 40 (10%) for major donors.
- 350 new and reactivated donors replace only part of the loss, so the base shrinks from 1,500 to 1,406 donors.
- 186 donors changed tier (110 up, 76 down), so upgrades outnumber downgrades by 34.
- The regular tier is the same size, 500, both years, but only 300 of those are the same people.
The data behind it
Invented donor counts for one fictional charity and year. Not data about any real organisation. Gift value is not shown.
| From | To | Amount (donors) |
|---|---|---|
| Major (last year) | Retained, same tier | 30 |
| Major (last year) | Downgraded | 6 |
| Major (last year) | Lapsed | 4 |
| Mid-level (last year) | Retained, same tier | 100 |
| Mid-level (last year) | Upgraded | 10 |
| Mid-level (last year) | Downgraded | 20 |
| Mid-level (last year) | Lapsed | 30 |
| Regular (last year) | Retained, same tier | 300 |
| Regular (last year) | Upgraded | 40 |
| Regular (last year) | Downgraded | 50 |
| Regular (last year) | Lapsed | 110 |
| Small (last year) | Retained, same tier | 440 |
| Small (last year) | Upgraded | 60 |
| Small (last year) | Lapsed | 300 |
| Did not give last year | New donors | 250 |
| Did not give last year | Reactivated | 100 |
| Retained, same tier | Major (this year) | 30 |
| Retained, same tier | Mid-level (this year) | 100 |
| Retained, same tier | Regular (this year) | 300 |
| Retained, same tier | Small (this year) | 440 |
| Upgraded | Major (this year) | 10 |
| Upgraded | Mid-level (this year) | 40 |
| Upgraded | Regular (this year) | 60 |
| Downgraded | Mid-level (this year) | 6 |
| Downgraded | Regular (this year) | 20 |
| Downgraded | Small (this year) | 50 |
| New donors | Mid-level (this year) | 10 |
| New donors | Regular (this year) | 90 |
| New donors | Small (this year) | 150 |
| Reactivated | Regular (this year) | 30 |
| Reactivated | Small (this year) | 70 |
The same data as CSV
source,target,value
Major (last year),"Retained, same tier",30
Major (last year),Downgraded,6
Major (last year),Lapsed,4
Mid-level (last year),"Retained, same tier",100
Mid-level (last year),Upgraded,10
Mid-level (last year),Downgraded,20
Mid-level (last year),Lapsed,30
Regular (last year),"Retained, same tier",300
Regular (last year),Upgraded,40
Regular (last year),Downgraded,50
Regular (last year),Lapsed,110
Small (last year),"Retained, same tier",440
Small (last year),Upgraded,60
Small (last year),Lapsed,300
Did not give last year,New donors,250
Did not give last year,Reactivated,100
"Retained, same tier",Major (this year),30
"Retained, same tier",Mid-level (this year),100
"Retained, same tier",Regular (this year),300
"Retained, same tier",Small (this year),440
Upgraded,Major (this year),10
Upgraded,Mid-level (this year),40
Upgraded,Regular (this year),60
Downgraded,Mid-level (this year),6
Downgraded,Regular (this year),20
Downgraded,Small (this year),50
New donors,Mid-level (this year),10
New donors,Regular (this year),90
New donors,Small (this year),150
Reactivated,Regular (this year),30
Reactivated,Small (this year),70How it works
Define the tiers
Set gift-size bands and use the same ones for last year and this year.
Classify every last-year donor
Send each last-year tier to retained, upgraded, downgraded or lapsed. Put people who did not give last year into new or reactivated.
Place outcomes into this year's tiers
Send each outcome to the tiers donors now sit in. A downgraded donor cannot land above their old tier.
Check the balance
Each outcome node should send out as many donors as it receives, apart from lapsed, which ends.
Frequently asked questions
Why is there no loop from this year back to last year?
A Sankey flows one way. Keep last year's tiers on the left and this year's on the right as separate nodes, so people move forward through an outcome step.
Can I use gift amounts instead of counts?
You can change the unit to a currency and enter totals, but keep one unit per diagram. Counts of donors and amounts of money answer different questions, so make two charts.
Edit this donor Sankey
Open the template as your own chart and enter your tiers, outcomes and donor counts.