Substack Posts Scraper Pro avatar

Substack Posts Scraper Pro

Pricing

from $2.00 / 1,000 post rows

Go to Apify Store
Substack Posts Scraper Pro

Substack Posts Scraper Pro

Extract posts from any Substack publication (custom domain or substack.com) as clean JSON: title, subtitle, publish date, paywall status, reaction and comment counts, word count and cover image, plus a full-body-text mode. Server-side search with exact pagination. No API key needed.

Pricing

from $2.00 / 1,000 post rows

Rating

0.0

(0)

Developer

AutomateLab

AutomateLab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Extract posts from any Substack publication as clean JSON: title, subtitle, publish date, paywall status, reaction and comment counts, word count and cover image. Works with custom-domain publications (newsletter.pragmaticengineer.com, noahpinion.blog) and substack.com publications alike. Optionally fetch complete body text per post. No API key needed.

Why this actor

The most-used Substack actor on the Store has no public reviews yet, and the best-rated one sits at 2.6 stars. This actor covers what buyers actually ask for:

  • Search within a publication with server-side filtering, so non-matching posts are never returned or billed
  • Custom-domain support: works on any Substack publication, whether it lives on substack.com or its own domain
  • Engagement on every row: reaction totals, comment counts and word counts on archive rows
  • Exact pagination: results stop precisely at your max count
  • Full body text mode for single posts, with paywall status flagged

Input

FieldTypeDescription
modeselectposts (archive metadata rows, default) or post (full text for specific slugs)
publicationUrltextPublication address, e.g. https://newsletter.pragmaticengineer.com or https://heathercoxrichardson.substack.com
searchQuerytextOptional keyword filter applied within the publication (posts mode)
postSlugslistPost slugs for post mode, e.g. the-pulse-new-trend-of-building-internal
maxItemsnumberHard cap on dataset items (1-1000, default 10)

Output

One JSON row per post:

FieldDescription
typepost (archive) or post_full (single mode)
publicationPublication host
postIdNumeric post ID
title, subtitle, slug, urlPost identity and link
publishDateISO publish date
audienceeveryone or only_paid
isPaidTrue when the post is for paid subscribers
isPaywalledSingle mode only: full body is paywalled
reactionsTotal, commentCount, wordCountEngagement and size metrics
section, coverImage, descriptionSection name, cover image URL, text preview
bodyTextSingle mode only: complete body text as plain text
podcastDurationPodcast episode length in seconds, when present

Pricing

Pay per event:

  • $0.005 per actor start
  • $0.002 per post row saved to the dataset

Filtering happens before rows are saved, so you are never charged for rows you did not ask for. A 10-post test run costs about $0.025.

Use cases

  • Content intelligence: track publishing cadence, topics and engagement for any publication or competitor newsletter
  • Creator research: measure reaction and comment volume across a publication's archive before sponsoring or partnering
  • LLM training data: clean full-text posts with titles, dates and metadata
  • Lead generation: find high-engagement publications in a niche, with contact-ready publication URLs

FAQ

Does it work with custom-domain publications? Yes. Pass the domain as the publication URL. A small number of custom domains do not answer archive requests; the actor reports that clearly instead of returning empty results.

Can I get the full text of every post in a publication? Run posts mode first to get slugs, then re-run in post mode with the slugs you need.

Is scraping Substack allowed? Only publicly accessible content is returned. Paid posts are flagged as paid and are not unlocked.

Does it need cookies, keys or a logged-in account? No. It runs keyless.