1. Your subscribers export
Needs an email column and at least one of created_at, active_subscription or plan. Used when present: first_payment_at, expiry, email_disabled and activity_rating. Everything else is ignored.
Left blank, the latest signup or first-payment date in the file is used, so an old export is measured at the time it was taken.
2. Your prices and fees (edit these)
Assumptions, not Substack's terms. Defaults: $8 a month, $80 a year, $200 founding, a 10% Substack fee and 2.9% plus $0.30 Stripe processing per charge. Founding is treated as a yearly payment. Check the fees against your own payout statement.
Choose a file or paste the text, then click Analyze.
Result
Revenue by plan (monthly estimate)
| Plan | Paid subscribers | Monthly revenue |
|---|
Paid retention
| Paid for at least | First paid that long ago | Still there | Kept |
|---|
Annual and founding renewals due
| Expiring within | Subscribers | Revenue up for renewal |
|---|
Time from signup to first payment
| Took | Paid subscribers |
|---|
Growth by month (last 12 months in the file)
| Month | New subscribers | Became paid |
|---|
Free subscribers by activity rating
| Rating | Free subscribers |
|---|
Fees and net to you (monthly estimate)
| Line | Amount |
|---|
The model, and what it leaves out
- Paid means a subscriber who has paid (a first-payment date, a paid plan or a paid type) and whose subscription is still active. Former is a paid subscriber whose subscription is no longer active. Comp subscriptions and gifts are counted but never as revenue or in conversion. Everyone else is free.
- Reconciles. The plan rows add up to total monthly revenue, and revenue minus estimated fees equals net to you.
- Revenue multiplies each plan's subscribers by the price you enter, with yearly and founding plans divided by 12. Discounts, coupons, grandfathered prices and price changes are not in the export and are not modelled.
- Conversion is subscribers who have ever paid over everyone who is not complimentary. Paid retention counts only subscribers who first paid long enough ago to be measured, and groups under five are shown but not used for suggestions.
- Renewals use the expiry date of active yearly and founding plans; monthly plans renew continuously and are not listed.
- Engaged free subscribers are those at or above 60% of the highest activity rating found among free subscribers in the file.
- Not modelled: taxes, currency conversion, refunds, chargebacks, payout fees, pauses and re-subscriptions (a current export shows each subscriber's latest state only), and anything not in the file.
Common questions
How do I see how many paid subscribers my Substack is losing?
Export your subscribers from Substack (Subscribers, then Export) and drop the CSV here. The tool separates paid, free, complimentary and former paid subscribers, works out monthly revenue from your plan mix and the prices you enter, and shows how many paid subscribers stay one, three, six and twelve months. The file is read in your browser and never uploaded.
What is my free-to-paid conversion rate?
Subscribers who have ever paid divided by everyone who is not complimentary. Substack's export marks paid subscribers and gives the date of the first payment, so the tool also shows how long readers take to upgrade after signing up.
Why do I have to type my prices?
The Substack export shows a plan (monthly, yearly, founding) but not what you charge, and prices change over time. Enter your current monthly, annual and founding prices and the fee percentages; every revenue figure is an estimate built from them.
Are the fee figures exact?
No. They apply the percentages you enter (defaults: 10% Substack fee and 2.9% plus $0.30 Stripe processing per charge) to monthly-equivalent revenue. Currency conversion, taxes, refunds, discounts and payout timing change the real figure, so check it against your own payout statement.
Are the column names right for my export?
They are matched by alias from memory of Substack subscriber exports, and no real export was available when this was built. If your file is not read, the page names the rows it skipped and why; a sheet with the headers email, created_at, active_subscription, plan, expiry and first_payment_at always works.
Is this tax or financial advice?
No. It applies arithmetic to your file and the assumptions you enter. It is independent of Substack and is not affiliated with or endorsed by Substack, Inc.