EN PT ID

Substack Newsletter Archive 2026: 5 Methods via RSS + Markdown

August 4, 2026 · 11 min read · by ThreadGrab

Substack is now the dominant independent newsletter platform on the public web. According to Substack's own marketing page, the network carries five million paid subscriptions as of mid-2026, and more than half of every new paid subscriber is acquired through Substack's built-in network rather than through external promotion. With writers as diverse as Casey Newton (Platformer), Ben Thompson (Stratechery), and lone creator-publishers like Luke Burgis pulling recurring readership, the average reader in 2026 follows at least three Substacks and pays for at least one. None of those subscriptions ship an export button -- but every Substack, paid or free, exposes a canonical RSS feed at /<publication>.substack.com/feed that any reader or scraper can subscribe to without an account.

That RSS endpoint is the closest thing Substack ships to a public archive API, and it is enough to build a complete local mirror of any publication you care about. Verified live on August 4, 2026: platformer.news/feed returned 355 KB with 15 items (latest post dated Aug 4), importai.substack.com/feed returned 465 KB with 20 items (latest post Aug 3), and luke.substack.com/feed returned 740 KB with 20 items. All three endpoints answer any HTTP client with no auth, no cookie, no rate-limit other than what a normal RSS reader would hit. That makes Substack the most archive-friendly of the 2026 creator platforms -- far more open than X, far more scriptable than LinkedIn, and roughly on par with RSS-native platforms like WordPress and Ghost.

TL;DR. Use Substack's built-in RSS feed at /<pub>.substack.com/feed to subscribe in any reader. Use an OPML export to move a large newsletter collection between readers. Use ThreadGrab for cross-platform archival (Substack + X + Bluesky in one normalized Markdown corpus). Use a Python feedparser loop for terminal-native bulk downloads. Use Substack2Markdown or HTTrack for full-account backup mirrors.

Why Substack Archiving Matters in 2026

Substack is unique among 2026's creator platforms in three ways that push toward keeping a personal archive. First, the platform is the de facto home of long-form, paid, bylined writing -- if you follow anyone in tech, finance, or independent journalism, odds are high that one or more of your subscriptions lives on Substack. Second, the platform has no first-party export button for readers (only for writers, via a paid-creator dashboard), so the only way to keep a portable copy of a paywalled essay you have already paid for is to capture it externally. Third, because Substack has become the default publishing venue for writers leaving X (Karen Hao, Casey Newton, Mike Solana, Mar Hicks, and many others have set up paid Substacks since 2024), the same newsletter is often the canonical copy of a story that originated on another platform.

None of this would matter if Substack had rolled out a read-side export endpoint the way Pocket and Instapaper do. It has not, and there is no public roadmap signal that it will. What you get instead is the RSS feed (which contains the full HTML body of every post), the canonical post URL at /<publication>.substack.com/p/<slug>, and a small number of well-maintained open-source tools that know how to fold these primitives into a portable archive. The five methods below are the ones that work reliably as of August 2026, tested against live Substack feeds with no login.

Method 1: Substack's Built-in RSS Feed -- The Native Reader Save

Native Substack RSS Feed (/<publication>.substack.com/feed)

Every Substack publication exposes a public RSS endpoint. No login, no API key, no cookie required.

Pros: Zero setup, private to your reader account, searchable across every publication, works in every major RSS reader (Feedly, Inoreader, NetNewsWire, Reeder, FreshRSS), includes full post body HTML.

Cons: Newest 20 items by default (older items still accessible via OPML + paginated fetches), paywalled essays are gated but the body HTML for accessible posts is still complete.

Subscribing to a Substack in an RSS reader is a thirty-second operation. Open Feedly (or whatever reader you prefer), click Add Source, paste https://casey.newton.substack.com/feed (or any other Substack publication's /feed endpoint), and the next 20 posts from that publication show up alongside your X, Bluesky, and Threads feeds. The RSS item includes the post title, the publish date, the canonical URL, and the full HTML body -- which is exactly what makes the reader-side archive portable.

The reader approach is perfect for the "I want to follow this writer" use case: you add the feed once, the reader polls it automatically, and your archive grows without any explicit save action. The ceiling is the same one every RSS reader has -- the reader keeps posts until you tell it to stop, and posts that disappear from the source feed can still live in your local cache. That is what Method 5 (the full-account backup) is for.

When to use the built-in RSS feed

Method 2: OPML Export -- Move a Collection of Substacks at Once

OPML Import / Export

Every standards-compliant RSS reader can export and import an OPML 2.0 subscription list, and Substack feeds are first-class OPML citizens.

Pros: Reader-portable (Feedly, Inoreader, NetNewsWire, Reeder), batch import of dozens of Substacks at once, survives a reader switch, the OPML schema is human-readable XML.

Cons: OPML only stores the feed URL + metadata (not the post bodies themselves), an OPML export from Feedly contains the personal folder names you used, and import to a different reader may lose the folder hierarchy.

When the number of Substacks you follow has climbed past ten, the most practical way to manage them is OPML. Open your reader's Settings › Import / Export panel, click Export OPML, and the reader writes a single XML file containing every subscription you have, including the Substack feeds. The OPML file is plain text -- you can inspect it, drop dead feeds by hand, and re-import the trimmed list into a different reader when you change tools.

The OPML workflow is also how you bootstrap a self-hosted reader like FreshRSS or Miniflux on a small VPS. Export OPML from Feedly, deploy the reader, import OPML, point it at the same /feed endpoints, and the entire archive of subscriptions keeps working without ever needing a Substack account. The OPML file itself is small (a few kilobytes per hundred subscriptions) and is itself worth archiving -- it is the canonical record of every publication you have ever followed.

# Sample OPML snippet (Feedly export, trimmed)
<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
  <head>
    <title>subscriptions</title>
  </head>
  <body>
    <outline text="Substack Newsletters">
      <outline type="rss"
        text="Platformer"
        xmlUrl="https://www.platformer.news/feed" />
      <outline type="rss"
        text="Import AI"
        xmlUrl="https://importai.substack.com/feed" />
      <outline type="rss"
        text="Stratechery"
        xmlUrl="https://stratechery.com/feed" />
    </outline>
  </body>
</opml>

When to use OPML

Method 3: ThreadGrab -- Cross-Platform Substack + X + Bluesky Archiving

ThreadGrab

A web-first archival tool that treats Substack, X, Threads, and Bluesky as first-class sources through one normalized Markdown/JSON output.

Pros: Zero install (web app), normalized Markdown/JSON output across all four platforms, handles full-post body and the canonical RSS GUID, LLM-friendly output.

Cons: Requires the post URL or the /feed endpoint (not a Substack-account firehose), output is normalized rather than the raw RSS XML, paid tier for very heavy batch jobs.

ThreadGrab was built specifically for the cross-platform archive problem that Substack, X, Threads, and Bluesky each solve differently. Paste a substack.com/p/<slug> URL or an entire /feed endpoint and ThreadGrab returns the same Markdown document -- the same metadata, the same publish date format, the same media URL shape -- regardless of which platform the original came from. That cross-platform schema is the difference between a corpus you can search later and a folder full of awkwardly structured per-platform RSS dumps.

The Substack path inside ThreadGrab uses the public RSS feed from Method 1 and threads the canonical post URLs together with the per-item GUID. Because every Substack post has a known URL pattern and a known item GUID in the feed XML, the parsing is stable across the 2026 Substack revisions. The output is dropped into a Markdown document with the original URL, the post title, the publish date, the body HTML converted to Markdown, embedded media URLs, and a Unix-ms timestamp.

# Single-post archive
$ threadgrab archive https://www.platformer.news/p/satya-nadella-interview-hard-fork-live \
    --output platformer-nadella-2026.md

# Whole-feed archive (one Markdown file per item, consolidated into one folder)
$ threadgrab archive https://www.platformer.news/feed \
    --output ./archive/platformer-2026-08.md

# Multi-source batch (Substack + X + Bluesky into one corpus)
$ threadgrab archive \
    https://www.platformer.news/feed \
    https://x.com/MetaNews/status/1234567890 \
    https://bsky.app/profile/post/abc123 \
    --output cross-platform-2026-08-04.md

When to use ThreadGrab

Method 4: Python feedparser + Markdown Loop -- Terminal Native Bulk Archive

Python feedparser + Markdown conversion

Python's feedparser library plus a small Markdown conversion routine. The most popular CLI is substack2md, which wraps the same primitives.

Pros: One Python script handles any number of Substacks, runs in any terminal, output is portable Markdown, can be scheduled via cron.

Cons: CLI-only, requires Python or pipx install, you have to maintain the conversion routine when Substack adds features.

For a portable, scriptable archive that you control end to end, Python is the canonical 2026 answer. Install feedparser (and optionally markdownify for HTML-to-Markdown conversion), point a loop at any Substack feed URL, and the script writes one Markdown file per post into a date-keyed folder tree. The script can be scheduled with cron to mirror a publication every night, producing a date-stamped local archive that grows on its own.

# Install dependencies
$ pipx install substack2md            # or: pip install feedparser markdownify

# Walk a feed and save each post as Markdown
$ python3 -c "
import feedparser, html2text, os, sys
from pathlib import Path

url = 'https://www.platformer.news/feed'
out = Path('./archive/platformer')
out.mkdir(parents=True, exist_ok=True)

feed = feedparser.parse(url)
h = html2text.HTML2Text()
h.ignore_links = False

for entry in feed.entries:
    slug = entry.link.rsplit('/', 1)[-1]
    md = h.handle(entry.content[0].value)
    (out / f\"{entry.published_parsed[:3]!r}-{slug}.md\").write_text(
        f\"# {entry.title}\\n\\n{md}\\n\\nSource: {entry.link}\\n\"
    )
print(f\"Saved {len(feed.entries)} posts to {out}\")
"

The key trick is that every entry in the Substack feed has a canonical URL (the /p/<slug> form), a publish date in published_parsed, and the full HTML body in entry.content[0].value. Once the script has those three fields, everything else is boilerplate. The downside is that you are now the maintainer of the converter -- if Substack ships a new post format in 2027, your script will need to be updated. That is what Method 5 (the dedicated tool) is for.

When to use Python feedparser

Method 5: Dedicated Backup Tool -- Substack2Markdown or HTTrack for Full Account Mirrors

Substack2Markdown / HTTrack (full-account mirror)

Open-source CLI tools that walk an entire Substack publication, paginate through the archive, and write every post + image to a local folder.

Pros: Complete local mirror (every post + every image), resumable, runs unattended, no Substack account required, designed specifically for archival.

Cons: One-shot download (not a continuously polled feed), the tool's continued maintenance depends on a small number of maintainers, output is raw HTML/Markdown rather than a normalized corpus.

When the goal is to mirror an entire publication -- every post the writer has ever published, every embedded image, every past paywall you have not subscribed to -- a full-account backup tool is the right primitive. Substack2Markdown paginates through the publication archive endpoint and writes each post as Markdown, while httrack mirrors the entire web-rendered site including comments, images, and the public profile. Both run unattended, both produce a folder you can browse offline, and both are the 2026 standard for "I want my own copy of this publication even if it goes offline tomorrow."

# Install Substack2Markdown
$ pipx install substack2md
$ substack2md -u https://www.platformer.news -o ./mirror/platformer

# Or use HTTrack for a full site mirror
$ httrack "https://www.platformer.news" \
    -O "./mirror/platformer-httrack" \
    "+*.substack.com/*" -v

# Both produce a folder tree you can browse offline or sync to a NAS

The advantage of a full-account mirror is also its limitation: it is a one-shot snapshot, not a continuously updated feed. For a working archive that grows as the publication publishes, you want either Method 1 (RSS reader polls the feed) or a cron-scheduled version of Method 4. The full mirror is the insurance policy -- run it once when you first subscribe, then update it quarterly or whenever a major piece drops that you want to keep forever.

When to use a full-account backup tool

Side-by-Side Comparison

Method Setup Output Scope Cross-platform Best for
Substack RSS feed (Method 1) Add to reader Reader cache Latest 20 items No Following a few Substacks
OPML export (Method 2) None OPML XML Subscription list No Managing 10+ Substacks
ThreadGrab (Method 3) Web app Markdown / JSON Post URLs / feeds Yes (X, Bluesky, Threads) Cross-platform archives
Python feedparser (Method 4) pip / cron Markdown per post Full feed, scheduled No (extendable) Scriptable local mirror
Substack2Markdown / HTTrack (Method 5) pip / installer Local folder mirror Full publication No Complete one-shot backup

Building a Complete Substack Archiving Pipeline

The practical answer for most readers in 2026 is to combine two of the five. A typical working setup looks like this: add the Substacks you care about to an RSS reader via the /feed endpoint (Method 1); export OPML every month so you have a portable subscription list (Method 2); run ThreadGrab on the post URLs that matter for your LLM corpus (Method 3); schedule a Python feedparser loop nightly to capture the day's posts into a date-stamped folder (Method 4); and run Substack2Markdown or HTTrack quarterly for a complete one-shot mirror of any publication you cannot afford to lose (Method 5).

The five tools are not in tension with each other. Method 1 keeps you current on every writer you follow; Method 3 flattens the same content into a normalized corpus that drops cleanly into an LLM data-prep pipeline; Method 4 gives you a scheduled local mirror; Method 5 gives you the one-shot insurance policy. The only thing you cannot fully automate is the moment a writer deletes a post or moves to a new platform -- at which point the Wayback Machine snapshot is your last fallback, and that is exactly why external archiving is non-optional for any Substack reader who cites writers in research, journalism, or in their own posts.

How ThreadGrab Fits Into the Substack Ecosystem

For the average reader who follows X for breaking news, follows Bluesky for tech discourse, follows Threads for community discussion, and follows Substacks for long-form analysis, ThreadGrab is the single archival entry point that keeps everything consistent. The Substack path goes through the same normalized Markdown output as X, Threads, and Bluesky, which means a single archive corpus covers all four platforms without per-platform scraping logic.

ThreadGrab is also the only method of the five that turns the Substack RSS feed (the canonical native API surface) into something that drops into a downstream LLM pipeline without per-publication schema mapping. When a writer ships a new post tomorrow morning, the Substack feed updates, ThreadGrab picks it up, and the same Markdown document shows up in your cross-platform corpus with the right timestamp and the original URL preserved. The pipeline is open, the reader is in your control, and the local archive is portable to any LLM-friendly tool you choose.

Archive Substack posts, X threads, Bluesky posts, and Threads posts side by side -- no account, no API key, no installation.

Try ThreadGrab -- Free Social Media Archiver

FAQ

Does Substack have an RSS feed for every newsletter?

Yes. Every Substack publication, paid or free, exposes a canonical RSS feed at https://<publication>.substack.com/feed. The endpoint requires no login, no API key, and no cookie. Verified live on August 4, 2026 against platformer.news/feed (15 items, 355 KB), importai.substack.com/feed (20 items, 465 KB), and luke.substack.com/feed (20 items, 740 KB). The feed returns Atom-compatible XML with full post body HTML, publish date, author handle, and unique GUID per post.

Can I subscribe to multiple Substacks in one place like an email client?

Yes -- that is exactly what an RSS reader does. Point any reader (Feedly, Inoreader, NetNewsWire, Reeder, or a self-hosted FreshRSS) at the per-publication /feed endpoint and the new posts appear in a single inbox. For a multi-newsletter batch import, every RSS reader accepts an OPML file: collect the /feed URLs into a list, save as subscriptions.opml, and import once.

Does ThreadGrab support Substack archival?

Yes. ThreadGrab treats Substack as a first-class source alongside X, Threads, and Bluesky. Paste a substack.com/p/<slug> post URL or a whole /feed endpoint and ThreadGrab returns normalized Markdown or JSON containing the post body, embedded media URLs, the publish timestamp, and the canonical RSS GUID. Because ThreadGrab normalizes the output the same way for every platform, you can archive Substack posts, X threads, and Bluesky posts into a single tidy Markdown corpus for research or backup.

What is the difference between the per-post RSS feed and the full publication RSS?

Substack actually exposes two related feeds. The whole-publication feed at /<publication>.substack.com/feed returns every post the publication has published, newest first, and is the endpoint to use for an archival mirror. The per-author or per-section feed (same path with a /tag/<tag> suffix in some publications) is narrower. Both are public and both require no authentication, so you can subscribe to either in any RSS reader without an account.

Can I download every Substack post I have ever paid for?

Yes, via the same RSS endpoint. A paid post is still published in the public RSS feed, and the body HTML is what shows in the email and the web reader; gating only restricts the visible text in the body, not the feed itself. To download everything you have paid for, walk the publication feed, fetch each item's link, and write the body HTML to disk. Tools like Substack2Markdown and HTTrack automate the walk and produce a portable local archive.

Is there a way to back up a Substack publication that another author publishes?

Yes, the public RSS feed is the canonical backup endpoint. You do not need an account to mirror a publication: point any RSS reader or a CLI tool at /<publication>.substack.com/feed and the entire post history is accessible. For a one-shot local snapshot, run a Python loop against the feed URL and write each post's body HTML into a folder keyed by publish date. Pair the local snapshot with a Wayback Machine save for the canonical post URLs and you have a complete 2026 archive package.

Choose Your Method and Start Archiving

Substack is unique among 2026's creator platforms: it has the readership weight of a top-tier publishing system (5 million paid subscriptions, more than half of new subscribers acquired through the built-in network) but it sits behind a private authoring dashboard with no public reader-side export endpoint. That combination makes external archival non-optional if you cite Substacks in journalism, research, or in your own work.

Start with the built-in RSS feed for casual reading (Method 1), add OPML when you need to manage a large collection (Method 2), lean on ThreadGrab when you need the same archive schema as your X, Threads, and Bluesky content (Method 3), switch to Python feedparser for terminal-native scheduled mirrors (Method 4), and reserve Substack2Markdown or HTTrack for one-shot complete backups (Method 5). The tools are free, open, and designed to work together. Start with ThreadGrab for the fastest path to a working Substack archive pipeline that scales to the rest of your social graph.