Get a Substack post’s comments
Retrieve comment text, author details, reaction counts and replies. Parent IDs and depth link each reply to its discussion.
/v1/substack/post/commentsx-api-keyHeaders
Get your API keyYour ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.
Required HTTPS Substack post URL in the /p/slug form, up to 1,024 characters. Tracking parameters are removed.
max 1024 chars
https://example.substack.com/p/example-articleOptional maximum comment records, 1–100; default 50.
50Optional maximum comment levels including top-level comments, 1–8; default 3.
3Request 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
Numeric post ID.
0 – 9007199254740991
Comment and reply records with parentId and depth for rebuilding the conversation.
up to 100 items
Numeric comment ID.
0 – 9007199254740991
Published comment text.
Published rich-text document with formatting and links.
Publication ID.
Post ID.
Comment author’s numeric user ID.
Source-reported ancestor path.
Comment type reported by Substack.
Published deletion flag.
Comment publication timestamp.
Comment edit timestamp.
Public commenter name.
Commenter image URL.
Public commenter handle.
Public commenter profile slug.
Comment reaction count.
Reaction counts keyed by reaction type.
Comment restack count.
Source-reported reply count.
Parent comment ID, or null for a top-level comment.
Reply depth; top-level comments have depth zero.
≥ 0
Number of comment records returned.
≥ 0
Maximum reply depth in the returned records.
≥ 0
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. |