Substack post stats to dashboard
Which posts actually grew the list, and which just got read.
Export post stats from your Substack dashboard and drop the CSV here. The panel that matters is new subscriptions per post, free and paid separately, because that is the only column that measures growth. Sends to only_paid are held apart from sends to everyone, since their rates are not comparable, and web_views are never folded into opens.
Prefer the full explorer? Open the app, or start from the generic dashboard builder.
Opens measure attention, subscriptions measure growth
Most newsletter analysis stops at the open rate, which is a shame, because a Substack export contains something better. The new_free_subscriptions and new_paid_subscriptions columns tell you which posts caused someone to sign up, and that is the only metric in the file with a direct line to whether the newsletter is going anywhere. A post with a mediocre open rate that brought forty new readers did more for you than a beloved post that brought two.
The trap is the audience column. Substack lets you send to everyone or to paying subscribers only, and the two go to populations of wildly different size and commitment. A paid-only post will post a spectacular open rate because it went to the people who pay you, and putting it in the same average as a public broadcast makes the average meaningless. This page splits on that column before computing anything.
How to export from Substack
- Open your Substack dashboard Sign in and go to publication.substack.com/publish/stats, or click Stats from the publishing home. This is the writer view, not the reader one.
- Choose the Posts tab Substack separates post stats from subscriber stats. Posts gives one row per published piece with sends, opens, clicks and the subscription counts attached.
- Set the period The default view is recent. A quarter or a year is more useful, because newsletter growth is lumpy and a single viral post distorts any short window.
- Export the CSV The export link sits below the stats table. The file uses snake_case headers, which is unusual for a consumer product and pleasant to work with.
- Drop it on this page type and audience become filter chips, and the growth ranking appears first rather than the open rate.
Subscriber-level exports are a separate download and contain email addresses. This page is written for the post stats file, which is aggregate and carries no personal data.
Try with sample Substack data (the same columns, 46 rows, no upload needed).
What the dashboard shows
Every panel below is built from a column that is actually in the export, named the way Substack names it.
- New subscriptions per post. Free and paid stacked, ranked. The single most decision-relevant panel in the file, and the one most dashboards leave out.
- Growth over time. Cumulative new subscriptions by post_date, which shows whether the publication is compounding or flat.
- Open rate by audience. Two series, everyone and only_paid, never merged into one line.
- Click rate against open rate. A scatter. Posts with high opens and low clicks are usually a subject line writing a check the piece did not cash.
- Web views against email sends. The ratio tells you how much of your reach is search and social rather than the list.
- Unsubscribes per post. Normalized against sends, which surfaces the post that annoyed people without punishing the big sends.
post_id,title,post_date,type,audience,email_sends,opens,open_rate,clicks,click_rate,unsubscribes,new_free_subscriptions,new_paid_subscriptions,web_views
Substack export details
- audience changes what a rate means. only_paid sends go to your most committed readers and post inflated engagement. Averaging them with everyone sends is comparing two different populations.
- open_rate is a decimal fraction. 0.4612 rather than 46.12 or a percent string. Plot it raw and every bar disappears into the axis.
- web_views are not opens. They count people reading on the site, including from search and social. Adding them to opens invents a reach number nobody can define.
- Open rates carry the same privacy caveat as everywhere else. Pixel pre-fetching by mail clients inflates them. Clicks and new subscriptions are the resistant metrics.
- Attribution for new subscriptions is same-day-ish. A subscription is credited to the post that was live when it happened, so a post that gets shared for weeks keeps accruing credit.
- type separates newsletters from other formats. Podcast episodes and threads sit in the same file with very different engagement profiles. Filter before averaging.
Rank by new subscriptions, split by audience, and treat web views as a separate channel. Do that and the export answers the only question a newsletter writer really has, which is what to write more of.
Frequently asked questions
Which column tells me whether the newsletter is growing?
new_free_subscriptions and new_paid_subscriptions, which count sign-ups attributed to each post. Opens and clicks measure how the existing list responded; subscriptions measure whether the piece reached beyond it. A post that ranks tenth on open rate and first on new subscriptions is telling you something specific about what travels, and it is worth acting on.
Why are my paid-only posts showing such high open rates?
Because they went only to people who pay you money for the privilege, which is the most engaged population you have. That is not a comparable rate. The audience column marks these as only_paid, and this page splits on it rather than blending, so you get two honest series instead of one flattering average that hides both.
Are the rate columns percentages?
No, they are decimal fractions. open_rate of 0.4612 means 46.12 percent. Substack keeps this consistent across open_rate and click_rate, which is at least predictable, but it means a raw plot looks broken. The conversion happens on load here, and the axis is labeled as a percentage so nobody misreads it later.
What is the difference between opens and web views?
An open is an email pixel loading in a mail client. A web view is somebody reading the post on your Substack page, which includes readers arriving from search, social or a shared link who may not be subscribers at all. They measure different audiences through different mechanisms. Summing them gives a reach number with no coherent definition behind it.
Can I see which post drove paid conversions?
To the extent Substack attributes them, yes: new_paid_subscriptions is per post. Bear in mind that a paid conversion usually follows weeks of free readership, so the post credited is the one that closed rather than the one that did the work. Reading it alongside new_free_subscriptions over the preceding months gives a more honest picture of the funnel.
Does this export contain subscriber emails?
The post stats export does not. It is aggregate, one row per post, with no personal data in it at all. The subscriber list export is a separate download and does contain email addresses. Either way nothing is uploaded here, since the file is parsed in your browser tab, but it is worth knowing which of the two files you are handling.
Related tools
Find the posts that actually grew the list
46 posts across a quarter, a mix of public and paid-only sends, decimal rates, and subscription counts that do not follow the open rate.
Open the sample Substack dashboard