Get a Substack publication’s posts
Retrieve a publication’s post archive with titles, authors, publication times, engagement and media metadata. Choose newest or top sorting and continue with the returned offset.
/v1/substack/postsx-api-keyHeaders
Get your API keyYour ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.
Required HTTPS Substack publication URL, up to 1,024 characters. Tracking parameters are removed.
max 1024 chars
https://example.substack.com/Requested page size; input is optional, 1–100, default 20. The response echoes the requested size.
20Optional result offset, 0–10,000; default 0. The response echoes the requested offset.
0Optional new (default) or top sorting.
one of: new, top
newRequest correlation UUID.
Source request attempts, decoded bytes and elapsed milliseconds.
Number of upstream request attempts.
≥ 0
Decoded source bytes read during this request.
≥ 0
Elapsed request time in milliseconds.
≥ 0
True when usable data is returned; inspect status and coverage.
success or partial for usable data; failed or challenged for a failure response.
one of: success, partial
Canonical public URL for the requested publication, post or writer.
absolute HTTPS URL
UTC retrieval timestamp.
Result coverage and extraction warnings.
Public Substack web data.
Whether the returned result has no reported omissions.
Warnings that explain partial results or missing fields.
Reported result order: source_order or ranked.
one of: source_order, ranked
Post archive records in the requested order.
up to 100 items
Numeric post ID.
0 – 9007199254740991
Owning publication’s numeric ID.
0 – 9007199254740991
Post URL slug.
Post title.
Post subtitle.
Post type as reported by Substack.
Post audience label.
Canonical post URL.
Publication timestamp.
Post update timestamp.
Post summary.
Published article HTML.
Published plain-text excerpt.
Post cover image URL.
Source-reported article word count.
Post language code.
Post reaction count.
Reaction counts keyed by reaction type.
Post restack count.
Post comment count.
Nested comment count reported for the post.
Published podcast audio URL.
Source-reported podcast duration.
Podcast artwork URL.
Published video upload identifier.
Published podcast upload identifier.
Published voiceover upload identifier.
Published comment-permission label.
Publication section ID.
Publication section name.
Publication section slug.
Previous post slug when published.
Next post slug when published.
Published geoblocking flag.
Published-state flag.
Public author bylines.
up to 100 items
Numeric author ID.
0 – 9007199254740991
Public author name.
Public author handle.
Author profile image URL.
Public author biography.
Published X username.
Whether the byline is a guest author.
Author bestseller tier.
Post tags.
up to 100 items
Source tag identifier, a string or number.
Tag name.
Tag URL slug.
Published audio and video metadata.
up to 100 items
Media type: video, podcast, podcast_preview, voiceover or audio.
one of: video, podcast, podcast_preview, voiceover, audio
Published media URL.
Source-reported media duration.
Published preview image URL.
Published media upload identifier.
Published media name.
Source-reported media type.
Published media processing state.
Media creation timestamp.
Media upload timestamp.
Media width in pixels.
Media height in pixels.
Source thumbnail identifier.
Whether the source marks this as streaming media.
Published streaming playback identifier.
Published streaming preview playback identifier.
Published extracted-audio upload identifier.
Published transcript and caption link metadata.
Published transcript URL.
Published transcript CDN URL.
Published unaligned transcript URL.
Published caption tracks and temporary access URLs.
up to 100 items
Caption language code.
Published caption-track URL.
Whether Substack labels this as the original caption track.
Optional result offset, 0–10,000; default 0. The response echoes the requested offset.
≥ 0
Requested page size; input is optional, 1–100, default 20. The response echoes the requested size.
≥ 0
Offset for another page, or null when no next offset is reported.
No fields match.
HTTP 200 returns the success variant. Check status: partial means usable data with warnings, and failed or challenged requests carry a failure object described in Errors & responses.
| HTTP | failure.code | Meaning |
|---|---|---|
| 400 | invalid_request | Missing, duplicated, invalid or unsupported request parameters. |
| 401 | unauthorized | Missing or invalid service API key. |
| 404 | not_found | The requested publication, post or profile was not found. |
| 422 | restricted_page | The requested content requires additional access. |
| 422 | unsupported_page | The source did not provide the expected record. |
| 502 | upstream_challenged | The source challenged the request. |
| 502 | upstream_rate_limited | The source rate limited the request. |
| 502 | upstream_error | A source request failed. |
| 502 | response_too_large | Source data exceeded the response byte limit. |
| 502 | payload_too_complex | Source data exceeded the traversal depth or node limit. |
| 502 | unsafe_redirect | The source returned an unexpected redirect. |
| 502 | request_limit | The request exhausted its source-attempt budget. |
| 503 | busy | All worker request slots are in use. |
| 504 | timeout | The request exceeded its deadline. |
| 200 | partial | Usable data was returned with coverage warnings. |