Substack Clipper
approvedby gapmiss
Archive Substack posts as Markdown with images, media, and comments. - This plugin has not been manually reviewed by Obsidian staff.
Substack Clipper
Archive Substack posts as Obsidian-flavored Markdown with images, media, and threaded comments.
Features
- Saves any public Substack post as a Markdown note with YAML frontmatter
- Downloads images, videos, audio, podcast episodes, transcripts, and PDF attachments
- Fetches and renders threaded comments as a separate embeddable note
- Media files use
![[wikilink]]embeds for native Obsidian playback - Converts Substack footnotes to standard
[^N]Markdown footnotes - Strips CDN URL prefixes for clean image references
- Handles paywalled posts gracefully (saves the available preview)
- Works on desktop and mobile
Installation
Install from community.obsidian.md
From Obsidian's settings or preferences:
- Community Plugins > Browse
- Search for "Substack Clipper"
Manually:
- download the latest release archive
- uncompress the downloaded archive
- move the
substack-clipperfolder to/path/to/vault/.obsidian/plugins/ - Settings > Community plugins > reload Installed plugins
- enable plugin
or:
- download
main.js,manifest.json&styles.cssfrom the latest release - create a new folder
/path/to/vault/.obsidian/plugins/substack-clipper - move all 3 files to
/path/to/vault/.obsidian/plugins/substack-clipper - Settings > Community plugins > reload Installed plugins
- enable plugin
Usage
- Open the command palette (
Ctrl/Cmd + P). - Run Clip substack post.
- Paste a Substack post URL (must contain
/p/in the path). - The plugin fetches the post, downloads media, and creates the note.
Output structure
Substacks/
alice/
my-article.md
my-article-comments.md
my-article/
image.jpg
video.mp4
podcast.mp3
attachment.pdf
The main note includes frontmatter with title, subtitle, type, audience, date, comment count, and links to all media. Comments are embedded via ![[slug-comments]].
URI protocol
You can save a post directly via an obsidian:// URI without opening the command palette:
obsidian://substack-clipper?vault=MyVault&url=https://alice.substack.com/p/my-article
| Parameter | Required | Description |
|---|---|---|
vault | no | Target vault name (Obsidian prompts if omitted and multiple vaults exist) |
url | yes | Full Substack post URL (must contain /p/) |
open | no | true or false — override the "open after saving" setting |
Spaces in vault names should be percent-encoded (%20). This works from browsers, scripts, iOS Shortcuts, bookmarklets, and anywhere else that can open a URL.
Settings
| Setting | Default | Description |
|---|---|---|
| Save directory | Substacks | Vault-relative folder for saved posts |
| Download media | Off | Download videos, audio, podcasts, and transcripts (images and attachments always download) |
| maxFileSize | 0 | Skip media files larger than this (MB). 0 = no limit. Only visible when downloadMedia is enabled. |
| Download comments | Off | Fetch and save threaded comments |
| Comment sort order | Most recent first | Sort order for comments (most recent, oldest, or best) |
| Save raw JSON | Off | Save the raw Substack API JSON |
| Save raw HTML | Off | Save the raw article HTML |
Building from source
git clone https://github.com/gapmiss/substack-clipper.git
cd substack-clipper
npm install
npm run build
License
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.