1. Your members export
Needs an email column and at least one of created_at, stripe_customer_id, email_count or subscribed_to_emails. Used when present: complimentary_plan, tiers, labels, email_opened_count, email_open_rate and deleted_at. Everything else is ignored. Engagement needs Ghost's email open tracking to have been on.
Left blank, the latest signup or removal date in the file is used, so an old export is measured at the time it was taken.
2. Your price and costs (edit these)
Assumptions, not Ghost's terms. A judged member is one who was sent at least the minimum number of emails. Leave the plan cost at 0 if you self-host or do not want a member-pricing estimate. Check every figure against your own invoices.
Choose a file or paste the text, then click Analyze.
Result
Engagement (members sent enough emails to judge)
| Open rate | Members | Of them paid |
|---|
Clean-up estimate (monthly)
| Line | Amount |
|---|
By label (largest 12)
| Label | Members | Paid | Conversion | Never opened |
|---|
Paid members by tier
| Tier | Paid members |
|---|
Growth by month (last 12 months in the file)
| Month | New members | Of them paid | Removed |
|---|
The model, and what it leaves out
- Paid means a member who has a Stripe customer id or a named tier and is not complimentary. Comp members are counted but never as revenue or in conversion. Everyone else is free. Members with a deleted_at date on or before the as-of date are counted as removed.
- Reconciles. Free, paid and complimentary members add up to total members, and revenue minus estimated processing equals net.
- Revenue is paid members times the one price you type. Tiers, discounts, annual plans, coupons and price changes are not in the export and are not modelled. A Stripe customer id also exists for someone whose subscription has since ended, so the paid count can run high.
- Engagement uses opened over sent when both are in the file, otherwise the open rate column. Members sent fewer than the minimum are not judged. Open tracking undercounts when a mail app blocks it, so never opened means “no open recorded”.
- Quiet members are free, still subscribed, sent at least the minimum, no open recorded and joined at least your number of days before the file's latest date. Paid and complimentary members are never listed.
- Savings are the flagged members times your sends per month times your cost per 1,000 emails, plus flagged members times your plan cost per covered member if you entered both. Ghost's real pricing may not scale that way; check your invoice.
- Labels usually record where a member came from. Labels with under five members are shown but not used for suggestions.
- Not modelled: taxes, refunds, chargebacks, payout fees, churn history (the export shows each member's latest state only) and anything not in the file.
Common questions
How do I find inactive members on my Ghost newsletter?
Export your members from Ghost Admin (Members, then the export button) and drop the CSV here. The tool uses each member's email_count and email_opened_count to split members into never opened, low, some and engaged, and lists the free, still-subscribed members who were sent plenty of email and opened none. The file is read in your browser and never uploaded.
Should I remove members who never open my emails?
Often it helps, but carefully. Open tracking can undercount because some mail apps block it, so send one re-engagement email first and only then remove people who still show nothing. The tool never lists paid or complimentary members for removal, and the decision is yours.
How much can cleaning my list save?
It depends on what you pay. Type your cost per 1,000 emails (for example your Mailgun rate if you self-host) and, if your Ghost(Pro) plan is priced by member count, your plan cost and its member limit. The tool multiplies those by the members it flags. Both are assumptions you enter, not Ghost's actual pricing.
Why do I have to type my price?
Ghost's members export shows whether a member has a Stripe customer and which tier they hold, but not what they pay. Enter one average monthly price; every revenue figure is a rough estimate built from it, and the page says so.
Are the column names right for my export?
They are matched by alias from memory of Ghost member 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, subscribed_to_emails, stripe_customer_id, labels, email_count and email_opened_count always works.
Is this legal, tax or financial advice?
No. It applies arithmetic to your file and the assumptions you enter. It is independent of Ghost and is not affiliated with or endorsed by the Ghost Foundation.