Skip to content

Writer plan · read-only

Subscriber analytics from your export

Upload your Substack export and get growth, cohorts, engagement segments and source quality, via dashboard, API or MCP.

In one paragraph

Subscriber analytics from your export turns the subscriber CSV and export zip you download from Substack into growth-over-time charts, signup cohorts, engagement segments and source-quality reports. You connect by pasting your publication URL and uploading your export, then upload new ones on a schedule we remind you about. Results are available as a JSON/CSV API and through the get_growth tool in our MCP server, including an inactive-subscriber list you can use to clean your list for deliverability.

Why people want this

“Want to segment subscribers by opens and clicks to protect email deliverability? You can't do that either.”
@BelangerTrading on X, 2026-10-08
“It shows opens and clicks, and that is about it.”
r/Substack, 2025-11-21
“Substack does not flag which paid subscribers are going quiet.”
r/Substack, 2026-04-01
“better analytics to figure out where subscribers come from”
r/Substack, 2025-07-18

How it works

  1. Paste your publication URL, then export your subscribers (all columns) from your Substack dashboard and upload the CSV, or upload the full export zip.
  2. We compute growth over time, monthly signup cohorts, engagement segments (active, cooling, inactive) and how subscribers from each source behave.
  3. Choose a reminder cadence (weekly or monthly). Each new upload extends your history and shows who joined, upgraded or left since the last one.
  4. Read the results in the dashboard, pull them as JSON or CSV, or ask your AI agent through the MCP get_growth tool.

Endpoints

Example responses are illustrative.

POST/v1/publications/{publication}/imports

Upload a subscriber CSV or export zip to analyse.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
file*bodymultipart file (.csv or .zip)Your Substack subscriber export
{
  "id": "imp_2026_10_21",
  "status": "processing",
  "rows": 4790,
  "columns_detected": [
    "email",
    "subscription_type",
    "created_at",
    "last_opened",
    "source"
  ]
}
GET/v1/publications/{publication}/growth

Totals and net change over time, by free and paid.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
fromquerydateStart date
toquerydateEnd date
intervalquery"week" | "month"Bucket size, default month
formatquery"json" | "csv"Response format, default json
{
  "interval": "month",
  "series": [
    {
      "period": "2026-07",
      "total": 4310,
      "paid": 221,
      "new": 240,
      "lost": 50
    },
    {
      "period": "2026-08",
      "total": 4555,
      "paid": 236,
      "new": 290,
      "lost": 45
    },
    {
      "period": "2026-09",
      "total": 4790,
      "paid": 251,
      "new": 281,
      "lost": 46
    }
  ],
  "source": "exports"
}
GET/v1/publications/{publication}/cohorts

Signup cohorts with how many are still subscribed, still opening and paying.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
byquery"month" | "quarter"Cohort size, default month
{
  "cohorts": [
    {
      "cohort": "2026-04",
      "joined": 310,
      "still_subscribed": 271,
      "opened_last_30d": 164,
      "paid": 14
    },
    {
      "cohort": "2026-05",
      "joined": 268,
      "still_subscribed": 246,
      "opened_last_30d": 151,
      "paid": 9
    }
  ]
}
GET/v1/publications/{publication}/segments

Engagement segments; inactive returns a cleanup list for deliverability.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
segmentquery"active" | "cooling" | "inactive" | "paid_quiet"Which segment; omit for counts of all
inactive_daysqueryintegerDays without an open to count as inactive, default 90
formatquery"json" | "csv"Use csv to download the list
{
  "counts": {
    "active": 2380,
    "cooling": 1020,
    "inactive": 1390,
    "paid_quiet": 17
  },
  "inactive_days": 90,
  "as_of_export": "2026-10-21"
}
GET/v1/publications/{publication}/sources

Source quality: subscribers, engagement and paid conversion by signup source.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
{
  "sources": [
    {
      "source": "substack-network",
      "subscribers": 1840,
      "open_rate_30d": 0.41,
      "paid_rate": 0.031
    },
    {
      "source": "direct",
      "subscribers": 1210,
      "open_rate_30d": 0.58,
      "paid_rate": 0.072
    }
  ]
}

MCP tools for your AI agent

get_growth

Growth over a window from your exports, or Publisher API counts if you add a key.

Try: “Summarise my subscriber growth this year, month by month.”

get_segments

Engagement segment counts and lists.

Try: “How many subscribers haven't opened in 90 days, and how many of them are paid?”

get_cohorts

Retention and conversion by signup cohort.

Try: “Which signup month has the best paid conversion?”

get_source_quality

Engagement and paid conversion by source.

Try: “Which subscriber source is worth the most to me?”

What people will build with it

Deliverability cleanup

Download the inactive segment as CSV and decide who to re-engage or remove, so your emails keep landing in inboxes.

Save quiet paid subscribers

See paid subscribers who stopped opening and reach out before renewal.

Know which sources pay off

Compare open and paid rates by signup source to decide where to spend time and money.

Growth in your own reports

Pull monthly growth as JSON or CSV into a spreadsheet, Notion or an investor update.

Questions

Where does the data come from?
From the subscriber export you download from your own Substack dashboard and upload to us. Optionally, if your publication has Substack's Publisher API enabled, you can add your key for daily subscriber counts.
How current are the numbers?
As current as your last upload. We email you a reminder on the schedule you choose so your history stays fresh.
Do you contact my subscribers?
No. We analyse the file and give you segments and lists. What you do with them, inside Substack or your own tools, is your decision.
Does it need my password?
No. We never ask for your Substack login or session. We read your public RSS feed and the export files you download from your own Substack settings and upload to us.
Is this affiliated with Substack?
No. newsletterapi.io is an independent tool for Substack writers. It is not made, endorsed or approved by Substack, Inc.
How do I get access?
Email hello@newsletterapi.io or use the Get access form, and we set up your account.

Read more