Instagram Comments Scraper - Cheaper
Under maintenancePricing
from $0.80 / 1,000 results
Instagram Comments Scraper - Cheaper
Under maintenanceFetch comments for any public Instagram post / reel / IGTV — author, text, like count, reply count, timestamp — with automatic pagination. No login required, Fast Http only scraper.
Pricing
from $0.80 / 1,000 results
Rating
0.0
(0)
Developer
Xtractoo
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Instagram Post Comments Scraper
Pull all public comments from any Instagram post, reel, or IGTV in bulk — comment text, author, like count, reply count, timestamp — with automatic pagination through hundreds of comments. No login or API key required.
Why use this actor
- No account / no login required — just give it a shortcode or post URL.
- Far beyond the 12-comment web preview — paginates through the full comments section via cursor, so you can pull hundreds or thousands of comments per post.
- Bulk input — pass a list of posts in one run; each comment streams in as its own dataset row, tagged with the post shortcode for easy joining.
- Stable JSON output — every row carries
_input,_mediaId,_source, and_scrapedAtenvelope fields so you can join results back to your input list. - Rich author info — comment author username, full name, verified status, and profile picture URL included inline.
- Datacenter proxy friendly — works from cheap DC IPs, no residential proxy needed.
- Automatic retries — transient failures retry with exponential backoff; private posts or deleted posts return structured
_errorrecords.
How it works
- You provide a list of Instagram posts (shortcode like
DYSM8J5yzSjor full URL likehttps://www.instagram.com/p/DYSM8J5yzSj/). - The actor decodes each shortcode to its internal media ID, then walks the post's comments via cursor pagination, streaming each comment as its own dataset row.
- Pagination stops when
maxCommentsis reached or the post runs out of comments.
You do not need to manage scrapers, browsers, or rotating IPs — all handled internally.
Input
{"posts": ["https://www.instagram.com/p/DYSM8J5yzSj/","DYP-BHSPCfn"],"maxComments": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["DATACENTER"]}}
| Field | Type | Description |
|---|---|---|
posts | array | List of Instagram posts. Each entry can be a shortcode (e.g. DYSM8J5yzSj) or a full URL on /p/, /reel/, or /tv/. Bulk input is supported. |
maxComments | integer | Max top-level comments per post. Pagination is automatic. Default 50. Set to 0 for unlimited (walks the entire comments section). |
proxyConfiguration | object | Apify Proxy settings. Datacenter proxy works fine. |
Output
Input: DYSM8J5yzSj
One dataset row per comment:
{"_input": "DYSM8J5yzSj","_mediaId": "3896233537988932771","_source": "S1-primary","_scrapedAt": "2026-05-18T18:27:08.557199+00:00","id": "18125377714533878","text": "Incredible!","createdAt": 1779128299,"likeCount": 0,"replyCount": null,"hasMoreHeadChildren": null,"user": {"id": "80110440628","username": "canadianstudentliving","fullName": null,"isVerified": false,"profilePicUrl": "https://scontent.cdninstagram.com/v/t51.82787-19/..."}}
| Field | Type | Description |
|---|---|---|
_input | string | The post shortcode or URL exactly as you supplied it. |
_mediaId | string | Instagram's internal media ID (decoded from the shortcode). Stable; use it to join comments to a post detail record. |
_source | string | Internal tag for the path used (S1-primary). |
_scrapedAt | string | ISO-8601 UTC timestamp when this comment was scraped. |
id | string | Comment's stable numeric ID. |
text | string | The comment body. Plain text including emojis (no HTML). |
createdAt | integer | Unix epoch seconds when the comment was posted. |
likeCount | integer | Number of likes the comment has received. |
replyCount | integer|null | Number of replies to this comment. null when not exposed by Instagram. |
hasMoreHeadChildren | boolean|null | true if Instagram has trimmed nested replies (more available than shown). |
user | object | Comment author profile: id, username, fullName, isVerified, profilePicUrl. |
Error envelope
Posts that don't exist, are private, or fail to fetch return a structured error instead of crashing the run:
{"_input": "https://www.instagram.com/p/this-does-not-exist/","_mediaId": "0","_error": "fetch_failed","_errorDetail": "NotFound graphql PolarisPostCommentsContainerQuery","_source": "S1-primary","_scrapedAt": "2026-05-18T18:30:00.000000+00:00"}
_error value | When |
|---|---|
invalid_input | The shortcode could not be parsed from the input string. |
fetch_failed | The post does not exist, is private, or Instagram rate-limited the request. Retry with proxy rotation. |
Pricing
This actor is billed per result: $6.00 per 1,000 comments (Tier 4 — Instagram requires warm-page token harvesting and the GraphQL query ID rotates every 2–4 weeks, so the actor needs active maintenance). Each comment returned = 1 result. Error envelope records are not billed.
Other Sosmed Actors
| Platform | Actor | Best for |
|---|---|---|
| Instagram Post Detail Scraper | The post itself — caption, media URLs, like count, owner | |
| Instagram Account Scraper | Profile metadata for an IG handle | |
| Instagram Account Posts Scraper | Paginated post timeline for a user | |
| YouTube | YouTube Video Comments Scraper | Comments tree for any YouTube video |
| Reddit Post Detail Scraper | Reddit post body + comment thread | |
| Facebook Post Detail Scraper | FB post text + reactions + share counts | |
| Threads | Threads Account Replies Scraper | A user's reply chain on Threads |
Browse the full catalog at apify.com/xtracto.
Notes
- Top-level comments only. Each row is a top-level comment. The
replyCountfield tells you how many replies a comment has, but the replies themselves are not flattened into the dataset. - Pagination is automatic via Instagram's cursor. The actor stops when it hits
maxCommentsor the post has no more comments. - Rate limiting. Heavy concurrent runs against one IP can trigger Instagram's anti-abuse. Use Apify Proxy and keep concurrency modest (≤ 5 parallel posts) for best reliability.
- Private posts return
_error: "fetch_failed". The actor cannot bypass account privacy settings. - Deleted posts return the same error envelope. Filter on
_errorto triage failures. - Comments disabled posts return zero rows (no error). If you got
0comments on a known-popular post, the author likely disabled comments. - Counters are eventually-consistent. Like counts on individual comments may lag the live UI by a few minutes.