What is substack2md?
Convert any Substack post to clean, Obsidian-friendly Markdown — using your own authenticated browser session via Chrome DevTools Protocol (CDP). No API keys, no passwords stored, no scraping hacks.
Features
- Authenticated via CDP — uses your already-logged-in browser, so paywalled posts just work
-
- Batch processing — pass a single URL or a text file with hundreds of URLs
-
- Obsidian wikilinks — internal cross-references are automatically rewritten as
[[slug]]links
- Obsidian wikilinks — internal cross-references are automatically rewritten as
-
- Rich frontmatter — title, author, publication, dates, tags, canonical URL, and more
-
- Publication folders — output is organized by publication with configurable name mappings
-
- Transcript cleaning — strips timestamps and speaker labels from podcast transcripts
-
- Polite by default — configurable sleep between requests
Supported Browsers
- Brave (recommended)
-
- Chrome (Intel & Apple Silicon)
Requirements
- Python 3.8+
-
- Dependencies:
websocket-client,beautifulsoup4,readability-lxml,markdownify
- Dependencies:
Quick Start
git clone https://github.com/snapsynapse/substack2md.git
cd substack2md
pip install -r requirements.txt
python substack2md.py https://example.substack.com/p/some-postSee the README for full setup instructions including how to launch your browser with remote debugging enabled.