Substack Scraper — Publication Posts | $3/1K avatar

Substack Scraper — Publication Posts | $3/1K

Pricing

from $2.91 / 1,000 listings

Go to Apify Store
Substack Scraper — Publication Posts | $3/1K

Substack Scraper — Publication Posts | $3/1K

Extract post metadata from a Substack publication's official public REST API. Get titles, dates, audience, engagement, and podcast URLs. Run with a publication identifier; no Substack authentication. Pricing: $0.003 per result event on the Free plan.

Pricing

from $2.91 / 1,000 listings

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

Substack Publication Posts Scraper

Extract structured post metadata from a Substack publication’s official public REST API, including titles, dates, audience, engagement, and podcast URLs. Run it from your Apify account without Substack authentication; live Free-plan rates are listed below.

  • Research publication archives with titles, subtitles, dates, URLs, and audience labels.
  • Monitor competitor newsletters by filtering post_date; use maxPosts=20 for incremental runs.
  • Extract podcast episode lists by selecting records where type is podcast and podcast_url is not null.
  • Check field quality with the per-record parse_confidence score and warnings list.
  • Export structured results without providing a Substack API key, cookies, or proxy credentials.

What you get

FieldTypeDescription
titlestring or nullPost title
subtitlestring or nullDeck or tagline shown under the title
canonical_urlstring or nullFull canonical URL to the post
slugstring or nullURL slug
post_datestring or nullPublished timestamp, normally ISO 8601 UTC
audiencestring or nulleveryone for free posts or only_paid for paywalled posts
typestring or nullPost type such as newsletter, podcast, or video
podcast_urlstring or nullDirect audio file URL for podcast posts
reactions_countintegerTotal reactions, calculated from the available reactions data
comment_countintegerNumber of comments
restacksintegerSubstack repost count
cover_imagestring or nullCover image URL
wordcountinteger or nullApproximate word count
publication_slugstring or nullShort publication identifier, such as on or platformer.news
parse_confidencenumberData-quality score from 0.0 to 1.0
warningsarray of stringsMachine-readable missing-field or parsing warning codes

Note: The listing API returns post metadata, not full post bodies. Paywalled posts return metadata only; body content is not scraped.

Sample output

{
"title": "New on Substack: chat channels, lists, freewalls, discounts, podcast updates, and more",
"subtitle": "More ways to connect with your audience, get paid for your work, and be in control of your feed",
"canonical_url": "https://on.substack.com/p/new-on-substack-chat-channels-lists",
"slug": "new-on-substack-chat-channels-lists",
"post_date": "2026-10-30T17:03:17.633Z",
"audience": "everyone",
"type": "newsletter",
"podcast_url": null,
"reactions_count": 822,
"comment_count": 0,
"restacks": 92,
"cover_image": "https://substack-post-media.s3.amazonaws.com/public/images/4be31bf5-e657-46bf-b998-79e7cb8f0306_2398x1342.png",
"wordcount": 1115,
"publication_slug": "on",
"parse_confidence": 1,
"warnings": []
}

Pricing

You pay per event for this Actor.

The primary result event is apify-default-dataset-item, shown as listing: one scraped result with all fields. It costs $0.003 per event on the Free plan, or $3.00 per 1,000 results on the Free plan.

The apify-actor-start event is charged when the Actor starts. The number of start events depends on Actor memory, with one event per GB and a minimum of one event. It costs $0.00005 per event on the Free plan.

Planapify-actor-startapify-default-dataset-item (listing)
Free$0.00005 per event on the Free plan$0.003 per event on the Free plan
Silver$0.000049 per event on the Silver plan$0.00294 per event on the Silver plan
Gold$0.0000485 per event on the Gold plan$0.00291 per event on the Gold plan
Platinum$0.000048 per event on the Platinum plan$0.00288 per event on the Platinum plan
Diamond$0.0000475 per event on the Diamond plan$0.00285 per event on the Diamond plan
Bronze$0.0000495 per event on the Bronze plan$0.00297 per event on the Bronze plan

For the result event alone, 1,000 result events cost $3.00 on the Free plan, and 10,000 result events cost $30.00 on the Free plan. A worked example is 1,600 results = $4.80 on the Free plan. After one Free-plan Actor Start event, the Apify Free plan’s $5 monthly platform usage credit covers 1,666 result events, based on the listed Free-plan event prices.

The post-item event has no price, so the buyer is not charged for it.

Actor charges are separate from platform usage. For this Actor, platform usage such as compute, Apify Proxy traffic, and storage is included in the event prices and paid by the Actor developer; you do not pay for that platform usage.

How to use

  1. Enter a Substack slug such as on, a full publication URL, or a custom domain.
  2. Set maxPosts to a positive integer for a capped result set, or use 0 to fetch the complete archive.
  3. Run the Actor; it requests the publication’s public /api/v1/posts endpoint without authentication, a browser, or a proxy.
  4. Collect the dataset records, then filter by fields such as post_date, audience, type, or podcast_url.
  5. Inspect parse_confidence and warnings when you need to identify records with missing fields.
  6. Schedule the run through Apify Schedules and use daily as a starting point for newsletter monitoring.
{
"publication": "on",
"maxPosts": 20
}

Export the dataset as JSON or CSV, or read it through the Apify dataset API.

Input parameters

ParameterWhat it doesDefault
publicationRequired publication identifier. Accepts a slug such as on, a full URL such as https://on.substack.com, or a custom domain such as https://www.platformer.news.on in the input form
maxPostsMaximum number of posts to return. 0 means no limit and fetches the complete archive.100 in the input form; 0 when omitted from the Actor input
disableUsageStatsDisables the usage-statistics record described in the Usage statistics section.false

Limits and edge cases

ConditionWhat the buyer seesWhat to do
maxPosts is a positive integerThe Actor stops after returning up to that many posts.Increase the value or use 0 when you need the full available archive.
A publication has many postsRequests are made in pages of up to 50 posts, and the API cursor is followed until the limit or archive end is reached.Leave pagination to the Actor; set maxPosts to control the total returned.
The publication has no published postsThe run returns no post records and reports emptyReason as NO_POSTS in its run output.Check the publication identifier and try a publication with published posts.
The first API page fails, including a publication-level 403 responseThe run records an error output and fails before any post records are pushed or charged. Some publications restrict API access.Check the identifier and try another publication, such as a publication whose public listing endpoint is available.
A later API page fails after earlier pages were fetchedThe fetched posts are returned as a partial result, and the run output includes a partialReason.Review the partial result and run the Actor again if you need to retrieve the remaining pages.
The API returns no next cursor or repeats a cursorPagination stops and the posts collected so far are returned.Review the returned count and retry if the archive appears incomplete.
A post is paywalledMetadata is returned, but the full body is not scraped.Use the available metadata fields; this Actor does not retrieve paid body content.
A post has missing fieldsThe field can be null, while parse_confidence and warnings indicate data-quality information.Check warnings before using optional fields in downstream processing.

FAQ

How much does it cost to scrape a Substack publication?

The result event costs $0.003 per event on the Free plan, or $3.00 per 1,000 results on the Free plan. The Actor Start event costs $0.00005 per event on the Free plan. For example, 1,600 results = $4.80 on the Free plan. The post-item event has no price, so the buyer is not charged for it.

Why did the Actor return no posts?

A publication may have no published posts, or its public listing endpoint may return an empty response. The run reports NO_POSTS for an empty publication. Verify the slug or URL and try another publication if needed.

What happens if the publication returns a 403?

A first-page failure causes the run to fail before post records are pushed. Some publications restrict API access at the publication level. Check the identifier or try another publication whose public listing endpoint is available.

Do I need a Substack account, API key, or proxy?

No Substack authentication is required. The Actor uses the official public REST API and does not require a browser or proxy. You only need your own Apify account to run it.

The Actor collects metadata from Substack’s official public REST API. Source terms and applicable law depend on your use case, so review the relevant terms and legal requirements before using the results.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields