Skip to content
scrapeatlas.Dashboard

Get a Substack post’s comments

Try in Playground

Retrieve comment text, author details, reaction counts and replies. Parent IDs and depth link each reply to its discussion.

GET/v1/substack/post/commentsx-api-key
x-api-keystringrequiredheader

Your ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.

Query parameters
3
urlstringrequiredquery

Required HTTPS Substack post URL in the /p/slug form, up to 1,024 characters. Tracking parameters are removed.

max 1024 chars

Examplehttps://example.substack.com/p/example-article
limitstringquery

Optional maximum comment records, 1–100; default 50.

Example50
depthstringquery

Optional maximum comment levels including top-level comments, 1–8; default 3.

Example3
Response fields
39
requestIdstring

Request correlation UUID.

Source request attempts, decoded bytes and elapsed milliseconds.

accounting.upstreamRequestsinteger

Number of upstream request attempts.

≥ 0

accounting.responseBytesinteger

Decoded source bytes read during this request.

≥ 0

accounting.durationMsnumber

Elapsed request time in milliseconds.

≥ 0

successboolean

True when usable data is returned; inspect status and coverage.

statusenum

success or partial for usable data; failed or challenged for a failure response.

one of: success, partial

sourceUrlstring

Canonical public URL for the requested publication, post or writer.

absolute HTTPS URL

fetchedAtstring

UTC retrieval timestamp.

Result coverage and extraction warnings.

coverage.sourcestring

Public Substack web data.

coverage.completeboolean

Whether the returned result has no reported omissions.

coverage.warningsstring[]

Warnings that explain partial results or missing fields.

coverage.orderenumoptional

Reported result order: source_order or ranked.

one of: source_order, ranked

postIdinteger

Numeric post ID.

0 – 9007199254740991

Comment and reply records with parentId and depth for rebuilding the conversation.

up to 100 items

comments.idinteger

Numeric comment ID.

0 – 9007199254740991

comments.bodystringnullable

Published comment text.

comments.body_jsonobjectnullable

Published rich-text document with formatting and links.

comments.publication_idintegernullable

Publication ID.

comments.post_idintegernullable

Post ID.

comments.user_idintegernullable

Comment author’s numeric user ID.

comments.ancestor_pathstringnullable

Source-reported ancestor path.

comments.typestringnullable

Comment type reported by Substack.

comments.deletedbooleannullable

Published deletion flag.

comments.datestringnullable

Comment publication timestamp.

comments.edited_atstringnullable

Comment edit timestamp.

comments.namestringnullable

Public commenter name.

comments.photo_urlstringnullable

Commenter image URL.

comments.handlestringnullable

Public commenter handle.

comments.user_slugstringnullable

Public commenter profile slug.

comments.reaction_countintegernullable

Comment reaction count.

comments.reactionsobject

Reaction counts keyed by reaction type.

comments.restacksintegernullable

Comment restack count.

comments.children_countintegernullable

Source-reported reply count.

comments.parentIdintegernullable

Parent comment ID, or null for a top-level comment.

comments.depthinteger

Reply depth; top-level comments have depth zero.

≥ 0

commentCountinteger

Number of comment records returned.

≥ 0

maxDepthinteger

Maximum reply depth in the returned records.

≥ 0

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.

Error codes
15
HTTPfailure.codeMeaning
400invalid_requestMissing, duplicated, invalid or unsupported request parameters.
401unauthorizedMissing or invalid service API key.
404not_foundThe requested publication, post or profile was not found.
422restricted_pageThe requested content requires additional access.
422unsupported_pageThe source did not provide the expected record.
502upstream_challengedThe source challenged the request.
502upstream_rate_limitedThe source rate limited the request.
502upstream_errorA source request failed.
502response_too_largeSource data exceeded the response byte limit.
502payload_too_complexSource data exceeded the traversal depth or node limit.
502unsafe_redirectThe source returned an unexpected redirect.
502request_limitThe request exhausted its source-attempt budget.
503busyAll worker request slots are in use.
504timeoutThe request exceeded its deadline.
200partialUsable data was returned with coverage warnings.