Skip to content

Writer plan · read-only

Automatic backups

Every Substack post, with images, backed up as Markdown and HTML to GitHub, Google Drive, Dropbox or S3.

In one paragraph

Automatic backups keep a versioned copy of every post you publish on Substack, with images re-hosted, as Markdown and HTML in your own GitHub, Google Drive, Dropbox or S3. You connect by pasting your publication URL; new posts are picked up from your public RSS feed, and your full archive and subscriber list come from the Substack export you upload, with a weekly email reminder to upload a fresh one. If you are ever locked out, your writing and your list are already somewhere you control.

Why people want this

“I was locked out of even downloading my subscribers.”
r/DeclineIntoCensorship, 2026-10-20
“If your account gets suspended, you cannot run an export until the suspension is lifted.”
r/Substack, 2026-08-27
“I’ve been doing this for 20 years… one simple rule… export your subscribers weekly.”
r/Substack, 2026-06-06
“Substack has become a roach motel but they pretend otherwise”
Hacker News, 2026-07-28

How it works

  1. Paste your publication URL and pick a destination: a GitHub repo, a Google Drive or Dropbox folder, or an S3 bucket.
  2. Upload your Substack export once. We back up the full archive, including paid posts, as Markdown and HTML, and copy every image so the backup doesn't depend on Substack's image links.
  3. From then on, each new post in your public RSS feed is backed up automatically, and edits create a new version instead of overwriting the old one.
  4. Every week we email you a reminder to export your subscriber list and upload it. Each upload is stored as a dated, versioned snapshot.
  5. Restore any post or snapshot from the dashboard or the API, or just open the files in your own storage.

Endpoints

Example responses are illustrative.

GET/v1/publications/{publication}/backups

List backup runs and their destinations.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
limitqueryinteger1–100, default 20
{
  "data": [
    {
      "id": "bk_20261021_0900",
      "trigger": "rss",
      "destination": "github:yourname/substack-backup",
      "posts": 1,
      "images": 4,
      "status": "completed",
      "finished_at": "2026-10-21T09:01:12Z"
    },
    {
      "id": "bk_20261014_0800",
      "trigger": "export_upload",
      "destination": "github:yourname/substack-backup",
      "posts": 214,
      "images": 1290,
      "subscribers_snapshot": true,
      "status": "completed",
      "finished_at": "2026-10-14T08:07:40Z"
    }
  ]
}
POST/v1/publications/{publication}/destinations

Add a backup destination.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
type*body"github" | "gdrive" | "dropbox" | "s3"Where backups are written
target*bodystringRepo, folder path or bucket/prefix
formatsbodystring[]Any of markdown, html; default both
{
  "id": "dst_9a1",
  "type": "github",
  "target": "yourname/substack-backup",
  "formats": [
    "markdown",
    "html"
  ],
  "status": "connected"
}
GET/v1/publications/{publication}/posts/{slug}/versions

List the saved versions of one post.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
slug*pathstringThe post slug
{
  "slug": "why-we-moved-our-blog",
  "versions": [
    {
      "version": 2,
      "saved_at": "2026-10-02T10:20:00Z",
      "source": "rss",
      "change": "body edited",
      "files": [
        "posts/2026-09-30-why-we-moved-our-blog.md",
        "posts/2026-09-30-why-we-moved-our-blog.html"
      ]
    },
    {
      "version": 1,
      "saved_at": "2026-09-30T14:05:00Z",
      "source": "rss",
      "change": "first seen"
    }
  ]
}
POST/v1/publications/{publication}/subscriber-snapshots

Upload a subscriber CSV from your Substack export to store a dated snapshot.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
file*bodymultipart file (.csv)The subscriber CSV you exported from your Substack dashboard
{
  "id": "snap_2026_10_21",
  "rows": 4790,
  "paid": 251,
  "added_since_last": 63,
  "missing_since_last": 11,
  "stored_to": [
    "github:yourname/substack-backup/subscribers/2026-10-21.csv"
  ]
}
GET/v1/publications/{publication}/subscriber-snapshots

List stored subscriber snapshots.

ParamInTypeDescription
publication*pathstringYour publication's subdomain or custom domain, e.g. yourpub.substack.com
{
  "data": [
    {
      "id": "snap_2026_10_21",
      "rows": 4790,
      "uploaded_at": "2026-10-21T08:00:00Z"
    },
    {
      "id": "snap_2026_10_14",
      "rows": 4738,
      "uploaded_at": "2026-10-14T08:00:00Z"
    }
  ]
}

MCP tools for your AI agent

get_backup_status

When the last backup ran, what it saved and whether a subscriber snapshot is overdue.

Try: “Is my Substack backup up to date?”

list_post_versions

Show the saved versions of a post.

Try: “Show me the earlier version of my pricing post before I edited it.”

What people will build with it

Ban and lockout insurance

Keep your posts and a recent subscriber list outside Substack, so a suspension or locked account doesn't cost you your audience.

Git history for your writing

Every edit becomes a commit in your GitHub repo, so you can diff and restore any version.

Ready to move anytime

Markdown and HTML with local images are the raw material for moving to another platform or your own site.

Questions

Why not just use Substack's export?
You should, and our backups are built on it. The export is a manual, one-off file. We turn it into a versioned, scheduled backup in storage you own, add new posts from RSS as they publish, and remind you to refresh your subscriber list weekly.
Does it back up my subscriber list automatically?
Partly. We can't download your list for you without your login, and we won't ask for it. Instead we email you a weekly reminder; you export the CSV from your dashboard and upload it, and we store it as a dated snapshot.
Are paid posts included?
Yes, from the export you upload. The public RSS feed only carries a truncated version of paid posts.
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