Revenue per recipient is the only flow metric that survives contact with a real account.
Total revenue tells you how big the list is. Revenue per recipient tells you what the program is actually doing — and in both accounts below, the flows whose entire job is producing the second order sit at the bottom of that column with the biggest audiences above them.
1,775 words · about seven minutes at 240 words a minute
The first thing I ask for is not a revenue report. It is a flow export with the send count still attached, because a send count is a denominator and a revenue report on its own is not a measurement of anything.
It happens on most calls. Somebody pulls up the flow dashboard, reads out the largest number on it, and the room treats that as a result. The welcome series did more than any other flow last quarter. Nobody asks how many people it went to.
The welcome series is almost always the largest number in an account, because it is sent to very nearly everyone who ever gave you an address. That is a fact about the size of the audience, not the quality of the program. Divide it and the picture can invert completely. In the first of the two accounts below, the welcome series earned 42 cents a recipient across 1,110,631 sends, while checkout abandonment earned $1.86 across 26,005. The flow doing four times the work per person it touched was not the one anybody read out.
That is why I ask for the export rather than the dashboard. A dashboard is built to show totals, and a total with no denominator under it is not a measurement of anything.
Here is the version of that column I am allowed to publish. It is two accounts, anonymised, with absolute revenue removed and the axis on a log scale so that a flow earning cents and a flow earning dollars can appear in the same picture without one of them becoming a stub.
The actual work
What the column is
Revenue per recipient is one division: attributed revenue for a flow, over the number of people that flow actually sent to in the same window. Not opens. Not clicks. Recipients. It is the only flow number that answers the question a CFO actually asks, which is what one more person entering this flow is worth.1
Total flow revenue answers a different question, and it is a question about list size. A post-purchase series attached to every order in a large account will out-earn a checkout-abandonment series in absolute terms while earning a fraction of it per person, and the account will read that as the post-purchase series working.
In the first account, 93,808 post-purchase sends earned 11 to 15 cents each while checkout abandonment earned $1.86.
From the caption on the homepage chart, published 22 Sep 2026
The reason is intent, not copy. Checkout abandonment reaches somebody who had a card on the page ten minutes ago. The welcome series reaches somebody who typed an address into a footer and may never have wanted the product at all. The flows that earn most per recipient are the ones sitting closest to a purchase already in motion, and they earn it because of where they sit rather than because of how well they are written.
That has two consequences, and the second one is the reason I keep writing about this. Rewriting a post-purchase series will not move it to where checkout abandonment sits, because the distance between them is a distance in intent and copy does not close it. And the flows at the bottom of the column are not failing at their job. Producing a second order from somebody who has already got what they came for is a genuinely harder problem than catching an abandoned cart — and it is the one almost nobody staffs.
Deriving it from an export you already have
Three columns and one division. If your platform gives you a flow report with recipients and attributed revenue over a fixed window, you are done in a spreadsheet. If it gives you revenue and a percentage of total, you are missing the denominator and the number cannot be built.
- Fix the window first, and use the same one for every flow. A flow that launched inside the window is not comparable to one that ran the whole of it.
- Take recipients, not sends, and not list size. A person who received three emails in a four-email series is one recipient of the series and three recipients of the messages.
- Divide attributed revenue by recipients. Keep the platform’s attribution window constant and write it down — the number is only comparable against itself.
rpr(flow, window) = attributed_revenue(flow, window)
/ unique_recipients(flow, window)
# state alongside every figure:
# window e.g. 2026-01-01 .. 2026-06-30
# attribution model e.g. 5-day click, 5-day open <- yours
# excluded e.g. marketplace revenue <- yours
| Column | What it is | Where it comes from |
|---|---|---|
| Flow | One series, not one message | Flow report |
| Recipients | Unique people who received the series in the window | Flow report — this is the column that goes missing |
| Revenue | Attributed revenue, one model, stated | Flow report |
| Window | Identical for every row, written down | You choose it. Choose once. |
The three lines under the formula are not decoration. A revenue-per-recipient figure without a window, an attribution model and an exclusion list is a number you cannot compare to next quarter’s, which means it is not a measurement.
What it does not do
It is not incrementality. A flow with a high revenue per recipient is not proven to have caused that revenue — checkout abandonment reaches people who were already most of the way to buying, and some share of them would have bought anyway. Ranking flows by this column tells you where the money is landing, not where you created it. Separating those two requires holding out a randomly assigned share of the entering audience and comparing, which is a different exercise and a longer one.
What to do with it on Monday
None of these is a rebuild. The first is an afternoon and the rest are a week between them.
- Rank every flow by the column, then read only the bottom half. The top is nearly always checkout and cart abandonment, and it is nearly always fine. Everything you can actually move is in the flows earning cents against large audiences. What tells you it worked: the per-recipient figure on your three largest-audience flows, read over the same window a quarter from now.
- Turn off anything earning less than a cent, for thirty days. A flow at $0.003 per recipient across 18,875 sends is not a program, it is a deliverability cost with a name. What tells you it worked: complaint rate and inbox placement on everything that is still sending, at thirty days — not the revenue you gave up, which will be inside the noise.
- Split post-purchase by what the person actually bought, then re-read the column. One post-purchase series across every order averages a first-time buyer and a replenishment buyer into a single number that describes neither of them. What tells you it worked: per-recipient revenue on each branch against the blended figure it replaced, over one full purchase cycle for your category.
- Put the window, the attribution model and the exclusions at the top of the report. Not a footnote. Do it once and every figure after it is comparable to itself. What tells you it worked: somebody disagrees with a number and the argument is about the business rather than about which report anyone was reading.
Notes and sources
- Recipients rather than sends, because a four-message series divided by sends understates per-person value by roughly the number of messages. Both are defensible; only one answers “what is one more person worth.” ↩