Substack Publication Archive Scraper
Pricing
$0.60 / 1,000 result records
Substack Publication Archive Scraper
Export a Substack publication archive with post titles, dates, URLs, audience labels, reactions, comments and word counts.
Pricing
$0.60 / 1,000 result records
Rating
0.0
(0)
Developer
Hamza
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Collect public posts from a Substack publication archive, including custom-domain publications. Export titles, dates, authors, engagement, sections, previews and every nonempty field returned with archive results. No individual-post detail pages are fetched.
Start a run
Enter the publication's HTTPS root, such as https://on.substack.com, choose Maximum results and Maximum pages, then start.
{"publicationUrl": "https://on.substack.com","maxItems": 100,"maxPages": 20}
| Input | Meaning |
|---|---|
| Publication URL | Public HTTPS publication root. Custom domains work when they serve a Substack archive. Post links, unrelated websites and private-network addresses are not valid publication roots. |
| Maximum results | Maximum unique posts to save, from 1 to 10,000. Default 100. |
| Maximum pages | Maximum archive requests, from 1 to 100. Default 20. |
An invalid URL or unavailable publication ends successfully with a clear explanation and the working example https://on.substack.com. Check the run summary if no posts were saved. An empty archive is also a valid successful outcome. A genuine service outage before any results or a storage failure can still fail the run.
What the results contain
| Fields | Contents |
|---|---|
id, url, slug | Post identifier and canonical post link. |
title, subtitle, description | Returned headings and description. A description identical to the subtitle is omitted. |
postDate, audience, type, wordcount | Publication date, audience, content type and word count. |
reactionCount, reactions, commentCount, childCommentCount, restacks | Engagement totals and reaction breakdowns. |
authors | Complete published-author information, including biography, avatar, publication links and returned account status. |
coverImage, coverImagePalette | Cover media and its returned color palette. |
sectionId, sectionSlug, sectionName | Section information. |
truncatedBodyText, bodyHtml, bodyJson | Preview text or body fields only when the archive actually provides them. |
postTags, postCountryBlocks, audience, permission fields | Tags, visibility and access metadata. |
| Podcast, video and voiceover fields | Available media URLs, upload objects, duration, episode information and flags. |
| Other archive fields | Every other nonempty field returned by the archive, including new fields. |
scrapedAt | Collection time in UTC. |
Field names use readable camelCase, including nested author/media objects. Original record IDs keep their returned numeric or string type. Null values and empty strings are omitted; zero counts, false flags and arrays remain intact. Missing data is never estimated. Internal retrieval URLs are not added to datasets, summaries or logs.
Arrays and nested objects remain structured in JSON. CSV/Excel exports may represent them as JSON strings. Full article bodies are often absent from archive responses; this actor does not fetch post pages to fill those gaps or unlock paid content.
Pagination and progress
Posts are saved individually as they arrive, with a result event for each saved unique post. Duplicate IDs within the run do not create another result. Progress lines show received and saved counts per page. Short pages are not assumed to be the end: the next offset advances by the actual number returned.
The run stops at Maximum results, Maximum pages, an empty page or a repeated page with no new records. A later-page error retains already-saved posts and ends successfully with a partial-result message. The run summary includes counts, completed pages, request count and the outcome.