Instagram Post Comments Scraper – Data Export avatar

Instagram Post Comments Scraper – Data Export

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Instagram Post Comments Scraper – Data Export

Instagram Post Comments Scraper – Data Export

Scrape public Instagram post and Reel comments with pagination. Export one row per comment with text, author, likes, reply counts, timestamps, and post context.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

ScrapingMonkey

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Scrape public comments from Instagram posts and Reels with page-based pagination. Instagram Comments Scraper saves one dataset row per unique comment and includes comment text, author, likes, reply count, timestamps, and complete available context for the original post.

Add full Instagram media URLs, choose comment pages, and start. No Instagram login or cookies are required. Invalid links, unavailable posts, and exhausted pagination failures remain visible as failed dataset rows.

At a glanceDetails
📥 InputFull Instagram post or Reel URLs plus pages per post
📤 OutputOne row per comment with author and nested parent-post details
📄 PaginationPublic embedded page 1; up to 15 comments per additional page
🔐 Login requiredNo
⚡ ProcessingUp to 5 requests concurrently with automatic retries
💾 DeliveryApify dataset for JSON, CSV, Excel, XML, APIs, and integrations

What the Instagram comments scraper extracts 💬

The Actor is designed for public discussion research around selected posts and Reels. It first resolves the public media, reads the comments exposed on the initial page, and follows the comment cursor for the requested number of pages.

Each success row can include:

  • Comment ID, PK, text, GIF URL, Unix timestamp, and ISO publication time
  • Comment like count and the number of replies reported by Instagram
  • Parent comment ID and reply flag when returned
  • Translation, coverage, and restriction fields
  • Comment author's ID, PK, username, profile URL, picture, verification, and unpublished state
  • Parent post IDs, URL, caption, timestamps, engagement, image or video media, dimensions, and state flags
  • Parent post author, location, audio, image variants, video variants, carousel children, tags, coauthors, and sponsors

replies_count reports child comments known to Instagram. This Actor does not open and paginate every reply thread separately, so it should not be described as a complete comment-replies scraper.

How to scrape Instagram post comments 🚀

  1. Copy full public Instagram post or Reel URLs.
  2. Add them to inputList.
  3. Set pagesPerPost to the total comment pages to attempt.
  4. Start the Actor.
  5. Open the Comments dataset view and export or integrate the rows.
{
"inputList": [
"https://www.instagram.com/p/EXAMPLE_POST/",
"https://www.instagram.com/reel/EXAMPLE_REEL/"
],
"pagesPerPost": 3
}

Bare shortcodes and profile URLs are not accepted. Duplicate post shortcodes and duplicate comment IDs are removed within the run.

Comment and parent-post output 📦

Field groupIncluded data
Comment identityid, pk, type, post_url, post_code
Content and timetext, gif_url, timestamp, published_at
Engagement and replieslike_count, replies_count, parent_comment_id, is_reply
Comment stateis_covered, has_translation, restricted_status
Comment authorPublic IDs, username, URL, picture, verification, unpublished flag
Parent postIdentity, caption, engagement, media, author, location, audio, carousels, tags, collaborators

Complete representative success item:

{
"input": "https://www.instagram.com/reel/EXAMPLE_REEL/",
"status": "success",
"type": "comment",
"post_url": "https://www.instagram.com/reel/EXAMPLE_REEL/",
"post_code": "EXAMPLE_REEL",
"id": "18000000000000000",
"pk": "18000000000000000",
"text": "Great campaign!",
"timestamp": 1787229000,
"published_at": "2026-08-20T12:30:00Z",
"like_count": 14,
"replies_count": 2,
"parent_comment_id": null,
"is_reply": false,
"is_covered": false,
"has_translation": false,
"restricted_status": null,
"gif_url": null,
"author": {
"id": "2002",
"pk": "2002",
"username": "public_user",
"profile_url": "https://www.instagram.com/public_user/",
"profile_picture_url": "https://instagram.example/comment-author.jpg",
"is_verified": false,
"is_unpublished": false
},
"post": {
"id": "1234567890123456789_13460080",
"pk": "1234567890123456789",
"code": "EXAMPLE_REEL",
"url": "https://www.instagram.com/reel/EXAMPLE_REEL/",
"type": "reel",
"product_type": "clips",
"media_type": 2,
"caption": "Public Reel caption",
"caption_id": "987654321",
"caption_timestamp": 1787200000,
"caption_published_at": "2026-08-20T04:26:40Z",
"caption_is_edited": false,
"timestamp": 1787200000,
"published_at": "2026-08-20T04:26:40Z",
"like_count": 12000,
"comment_count": 420,
"view_count": 180000,
"play_count": 192000,
"instagram_play_count": 190000,
"facebook_play_count": 0,
"facebook_like_count": 0,
"facebook_comment_count": 0,
"repost_count": 65,
"image_url": "https://instagram.example/post-image.jpg",
"thumbnail_url": "https://instagram.example/post-thumbnail.jpg",
"video_url": "https://instagram.example/post-video.mp4",
"video_duration": 15.2,
"width": 1080,
"height": 1920,
"accessibility_caption": null,
"has_audio": true,
"comments_disabled": false,
"counts_hidden": false,
"is_paid_partnership": false,
"can_reshare": true,
"is_pinned": false,
"author": {
"id": "13460080",
"pk": "13460080",
"username": "nike",
"name": "Nike",
"profile_url": "https://www.instagram.com/nike/",
"profile_picture_url": "https://instagram.example/nike.jpg",
"profile_picture_url_hd": "https://instagram.example/nike-hd.jpg",
"is_verified": true,
"is_private": false
},
"location": null,
"audio": {
"id": "5005",
"type": "music",
"title": "Example Track",
"artist": "Example Artist",
"url": "https://instagram.example/audio.m4a",
"duration_ms": 15200,
"is_original_audio": false
},
"tagged_users": [],
"coauthors": [],
"sponsors": [],
"image_versions": [
{
"url": "https://instagram.example/post-image-1080.jpg",
"width": 1080,
"height": 1920
}
],
"video_versions": [
{
"url": "https://instagram.example/post-video-1080.mp4",
"width": 1080,
"height": 1920,
"type": 101
}
],
"carousel_media_count": 0,
"carousel_media": []
}
}

Complete failed dataset item:

{
"input": "https://www.instagram.com/p/DELETED_OR_INVALID/",
"status": "failed",
"type": null,
"post_url": null,
"post_code": null,
"id": null,
"pk": null,
"text": null,
"timestamp": null,
"published_at": null,
"like_count": null,
"replies_count": null,
"parent_comment_id": null,
"is_reply": null,
"is_covered": null,
"has_translation": null,
"restricted_status": null,
"gif_url": null,
"author": null,
"post": null
}

Nested media and audio URLs come from Instagram's CDN and can expire. Download authorized assets promptly when permanent retention is required.

Input and comment pagination ⚙️

ParameterTypeRequiredDefaultRules
inputListarray of stringsYesNoneFull Instagram /p/, /reel/, or /tv/ media URLs
pagesPerPostintegerNo1Total comment pages to attempt; minimum 1

Page 1 contains however many comments Instagram exposes in the public post page. Each additional page requests up to 15 comments when a next cursor exists. Pagination stops early when Instagram reports no next page or no new cursor.

Pages are saved incrementally. If a later page exhausts its retries, earlier comment rows remain available and the failed page can add one visible failed row.

Instagram comment data use cases 🎯

Sentiment and feedback analysis

Classify public reactions to products, campaigns, creators, releases, or events while retaining parent-post context.

Community research

Compare recurring questions, topics, language, engagement, and visible reply counts across posts.

Campaign monitoring

Connect comments with the post's caption, media type, author, audio, collaborators, sponsors, and visible performance.

Moderation support

Export public comments to an authorized human-review or policy-research workflow.

AI and retrieval datasets

Create structured comment-and-post pairs for lawful classification, summarization, search, or retrieval applications.

Pricing and billable comment rows 💰

The Actor's Pricing tab shows the current charging model and rate. It is the authoritative source because Store pricing can change.

Under dataset-item pricing:

  • Each unique comment saved as success is one billable result.
  • An invalid URL, inaccessible post, post with no returned comments, or pagination page that exhausts retries can save one billable failed result.
  • Duplicate comments returned on another page do not create additional rows.
  • Retry attempts do not create rows by themselves.
  • An empty later page after earlier comments can finish normally without adding a failed row.

A post with 100 saved comments therefore creates 100 result rows, plus any explicitly saved failed page rows.

Instagram comments API 🔌

Replace $ACTOR_ID with the Actor ID from the API tab and $APIFY_TOKEN with your token.

curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"inputList":["https://www.instagram.com/reel/EXAMPLE_REEL/"],"pagesPerPost":2}'

For large comment jobs, start the Actor asynchronously and retrieve the default dataset after completion. Use schedules, webhooks, Apify client libraries, Google Sheets, Make, Zapier, n8n, cloud storage, or custom data pipelines.

Reliability, retries, and comment limits ⚠️

The Actor handles up to five requests concurrently. Temporary timeouts, transport failures, throttling, selected HTTP errors, and login redirects are retried automatically. Invalid URL syntax is classified without wasting network attempts.

One bad post does not intentionally stop other inputs. A whole Actor run can still fail because of startup problems, unavailable Apify dataset storage, or an unrecoverable error while saving results.

Instagram controls logged-out comment availability, order, and pagination. Private, deleted, restricted, age-gated, region-limited, or login-walled posts may fail. The public response may omit comments, authors, counts, or parent-post fields.

This Actor does not separately paginate every reply thread. replies_count can be larger than the number of reply rows present in the dataset.

Frequently asked questions ❓

How many comments are returned per page?

The first page contains the comments embedded in public post data. Each additional request asks for up to 15 comments, but Instagram can return fewer.

Are comment replies included?

Reply identifiers and flags are preserved when replies appear in the returned data. The Actor does not issue separate pagination requests for every reply thread.

Can I submit a bare shortcode?

No. Submit the full Instagram post, Reel, or legacy TV URL.

Why does every comment contain a post object?

Keeping parent-post context on each row makes CSV exports, database ingestion, analytics, and AI pipelines usable without a separate join.

What happens when a post has zero public comments?

If processing ends with no saved comments, the Actor records one failed result for that input.

Does it require Instagram credentials?

No login, password, cookies, or session input is required.

For a reproducible issue, share the run ID, approximate time, requested page count, and a safe public post URL through the support channel. Never disclose tokens or proxy credentials.

Public comments can contain personal information. Use the Actor lawfully and proportionately, minimize stored data, and follow applicable privacy, data-protection, copyright, anti-spam, contractual, and platform requirements.