Work out who stopped giving.
Retention counted by people rather than by records — which in the worked example moves it from 47% to 58% and removes 312 names from the win-back appeal.
No account needed to start. You only pay when you like what you see.
- .xlsx. Excel workbook. Every sheet read, including the ones that are notes rather than data.
- .xls. Excel 97–2003. Read the same as a modern workbook.
- .xlsm. Excel, macro-enabled. Values and formulas are read. Macros are never executed.
- .ods. OpenDocument spreadsheet. LibreOffice and OpenOffice workbooks, read like Excel.
- .numbers. Apple Numbers. Tables are pulled out of the Numbers package sheet by sheet.
- .csv. CSV. Delimiter, quoting and encoding detected rather than assumed.
- .tsv. Tab-separated. Read as delimited text.
- .json. JSON. Nested objects are flattened into tables, keeping the path as the column name.
- .ndjson. Newline-delimited JSON. Streamed a record at a time, so an export of any size is fine.
- .xml. XML. Repeated elements become rows; attributes become columns.
- .parquet. Parquet. Read columnwise, with the file's own types kept.
- .sqlite. SQLite database. Every table read, with the foreign keys used to work out how they relate.
- .db. SQLite database. Read as SQLite when the file is one, and reported plainly when it is not.
- .txt. Plain text. Read as notes, or as data when the contents turn out to be a table.
- .md. Markdown. Markdown tables become tables; the rest becomes context for the analysis.
- .zip. Zip archive. Unpacked, and each file inside is treated as though you had uploaded it yourself.
What comes back
Your retention is 11 points better than you think, and your income is far less safe.
704 of the 6,214 constituent records are the same people entered twice, mostly by online appeals creating a new record for someone already in the postal file. Counting records, retention is 47.2%; counting people, it is 58.1% — above the sector benchmark rather than below it. The same defect has been hiding the number that matters more: eleven households give 52% of unrestricted income, and two of those eleven are one household.
The same donors, counted two ways
- 015,510 people are stored as 6,214 records, and it is depressing your retention.
- 02The win-back appeal is addressed to 312 people who are giving right now.
- 03Eleven households are 52% of unrestricted income, and one of them ends this year.
01
It resolves people before it counts them
A supporter who gives every year under three records looks like three supporters who each gave once and left. Records are matched on email, and on name with address and giving pattern, before a single retention figure is calculated. Retention measured on records is a measurement of your data entry.
02
It separates deciding to stop from failing to pay
A cancelled monthly gift and a declined card look identical in a totals report and need opposite responses. In the example, 214 of 300 lapsed monthly donors stopped within three days of a payment failure, 63 of them in one processor batch. None of this had anything to do with the rebrand it was blamed on.
03
It looks at concentration, not just the total
Income that grew while becoming dependent on eleven households is a worse year than it looks. The example finds 52% of unrestricted income in the top eleven, two of whom are one household under two records, and 14% resting on the final instalment of a pledge that ends this year.
It expects a mess.
Most files that arrive here have several tables on one sheet, a title block above the data, totals stranded in the middle of it, and dates in more than one format. That is the normal case, not the awkward one.
- Retention by person and by household, with both shown
- LYBUNT and SYBUNT lists that survive deduplication
- Recoverable failed recurring gifts, with dates
- Concentration and pledge exposure
- Deduplicated .xlsx and methodology
| Order | Date | Customer | Amt |
|---|---|---|---|
| 10241 | 07/02/26 | John Smith | $84.00 |
| 10242 | 2 July 2026 | SARAH LOPEZ | $41.00 |
| 10242 | 2 July 2026 | SARAH LOPEZ | $41.00 |
| 10243 | 45840 | s. lopez | 41 |
| Not supplied | Not supplied | SUBTOTAL | $166.00 |
| 10244 | 2026-07-03 | Amara Osei | $127.50 |

Questions it works through
- How many of my lapsed donors are giving under another record?
- Which monthly donors stopped because a card failed, not because they chose to?
- What share of unrestricted income depends on the top ten households?
- Is retention falling, or is the file getting messier?
Questions people ask
Will it merge records without asking me?
It applies merges it is confident about, lists every one, and makes each reversible. Anything below the threshold is held for a human decision — 88 pairs in the worked example, mostly two people at one address, which is a judgement no rule should make on its own.
Which CRM does it work with?
Any that exports a spreadsheet — Raiser's Edge, DonorPerfect, Bloomerang, Salesforce NPSP, Little Green Light or a hand-kept workbook. It reads the columns that are there and tells you what it could not find rather than assuming a schema.
Should I count households or individuals?
It shows both, because the answer changes the number and you should see by how much. In the example, counting households rather than individuals moves retention by 1.8 points and merges two of the top eleven donors into one.
How does it handle soft credits and DAF gifts?
A matched gift or a donor-advised-fund distribution is credited to the originating donor once. Counting both the soft credit and the hard credit would have overstated the example's year by $84,000, which is the sort of error that survives for years because it makes the chart look right.
Related
Upload donor export
No account needed to start. You only pay when you like what you see.