Instagram Scraper — Profiles, Posts & Comments | from $2/1K
Pricing
from $1.99 / 1,000 profile items
Instagram Scraper — Profiles, Posts & Comments | from $2/1K
**Scrape public Instagram profiles, posts, and comments** without login. Returns followers, captions, like/comment counts, media URLs, timestamps, and `parse_confidence` drift signal in every record. Uses Instagram's stable mobile API — no doc_id rotation, no silent failures.
Pricing
from $1.99 / 1,000 profile items
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Instagram Scraper — Profiles, Posts & Comments
Scrape public Instagram profiles, posts, and comments using Instagram's stable mobile API — no doc_id rotation, no maintenance windows, no login required for profiles and posts. Returns 15+ fields per record including followers, captions, like counts, media URLs, timestamps, and parse_confidence in every record.
Most Instagram scrapers use GraphQL endpoints with doc_id parameters that rotate every 2–4 weeks, causing silent failures. This actor calls Instagram's mobile API endpoints (/api/v1/users/web_profile_info/, /api/v1/feed/user/{id}/) that have been stable for years — the same endpoints used by the official iOS app.
What you get
Profile mode (mode: "profile")
| Field | Description |
|---|---|
username | Instagram handle |
user_id | Numeric user ID |
full_name | Display name |
followers | Follower count |
following | Following count |
posts_count | Total post count |
is_verified | Blue checkmark |
is_private | Private account flag |
bio | Profile biography text |
external_url | Link in bio |
profile_pic_url | Profile picture URL |
parse_confidence | Data quality score (0.0–1.0) |
warnings | Machine-readable quality codes |
scraped_at | ISO-8601 timestamp |
Posts mode (mode: "posts" / "post_details")
| Field | Description |
|---|---|
shortcode | Post code (e.g. DYhkH24lf3j) |
media_pk | Numeric media ID |
username | Author handle |
user_id | Author numeric ID |
caption | Post caption text |
media_type | photo / video / carousel |
media_type_code | Raw code: 1=photo, 2=video, 8=carousel |
like_count | Like count |
comment_count | Comment count |
play_count | Video view count (None for photos) |
taken_at | Post timestamp (ISO-8601 UTC) |
display_url | Best image URL |
video_url | Video file URL (videos only) |
location_name | Location tag name |
location_city | Location city |
parse_confidence | Data quality score (0.0–1.0) |
warnings | Machine-readable quality codes |
scraped_at | ISO-8601 timestamp |
Comments mode (mode: "comments")
Requires
sessionId— Instagram blocks anonymous comment requests. Provide your own IGsessionidcookie. See input options below.
| Field | Description |
|---|---|
comment_pk | Numeric comment ID |
media_pk | Parent post ID |
text | Comment text |
author | Commenter handle |
author_id | Commenter numeric ID |
like_count | Comment like count |
created_at | Comment timestamp (ISO-8601 UTC) |
parse_confidence | Data quality score (0.0–1.0) |
warnings | Machine-readable quality codes |
scraped_at | ISO-8601 timestamp |
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | profile/posts/post_details/comments | posts | What to scrape |
usernames | string[] | — | Handles to scrape (profile/posts modes) |
postUrls | string[] | — | Post URLs for comments mode |
shortcodes | string[] | — | Post shortcodes for comments mode |
maxItems | integer | 50 | Max records per username/post |
sessionId | string | — | Your IG sessionid cookie (comments only) |
proxyConfiguration | object | RESIDENTIAL | Apify proxy config |
Example input — profiles
{"mode": "profile","usernames": ["natgeo", "nasa", "instagram"],"maxItems": 50}
Example input — posts
{"mode": "posts","usernames": ["natgeo"],"maxItems": 50}
Example input — comments
{"mode": "comments","postUrls": ["https://www.instagram.com/p/DYhkH24lf3j/"],"maxItems": 100,"sessionId": "YOUR_SESSIONID_COOKIE"}
How to get your sessionId cookie (for comments mode)
- Log in to Instagram in your browser (Chrome/Firefox)
- Open DevTools → Application → Cookies →
https://www.instagram.com - Find the cookie named
sessionid— copy its Value - Paste it into the
sessionIdinput field
Important: Use your own account. Sessions last ~90 days before expiring. This actor never stores or shares your cookie — it is only used for the current run.
Why RESIDENTIAL proxy is required
Instagram blocks datacenter IP ranges immediately. When running on Apify cloud
(datacenter IPs), RESIDENTIAL proxy is mandatory. The default proxy config
(useApifyProxy: true, apifyProxyGroups: ["RESIDENTIAL"]) handles this
automatically — the proxy cost is billed to your Apify account at standard rates.
Why this scraper beats the alternatives
| This scraper | @data-slayer/instagram-post-details ($2,648/mo) | @krazee_kaushik (profile+comments) | |
|---|---|---|---|
| Price | ~$1.50–2.00/1k | higher | higher |
| No doc_id rotation maintenance | ✓ | ✗ | ✗ |
parse_confidence in every record | ✓ | ✗ | ✗ |
| Graceful degradation without sessionId | ✓ | ✗ | partial |
| Both feed + profile node shapes parsed | ✓ | partial | partial |
| play_count (video views) | ✓ | partial | ✗ |
Key advantage: Most competitors use GraphQL endpoints with doc_id parameters
that rotate every 2–4 weeks, causing silent failures until manually patched.
This actor uses Instagram's stable mobile API endpoints — no doc_id rotation,
no maintenance window.
Technical notes
- Uses lightweight HTTP requests with proper browser headers (requests/httpx are blocked by Instagram)
- Profile + posts: anonymous access via
/api/v1/users/web_profile_info/and/api/v1/feed/user/{id}/ - Comments: requires
sessionidcookie via/api/v1/media/{pk}/comments/ - Proxy: Apify RESIDENTIAL (required for cloud runs; buyer-paid)
parse_confidence(0.0–1.0) in every record — schema drift is visible in the dataset- Rate-limit aware: exponential backoff on 429, retries on transient errors
- Shortcode ↔ media_pk conversion via base64url (A-Za-z0-9 +
-_)
Pricing
~$1.50–2.00 per 1,000 records (PPE — pay per result, no per-run fees).
Use with AI agents (MCP)
This scraper is callable as a tool by AI agents (Claude, Cursor, n8n, CrewAI) via Apify's MCP server. Minimal agent call:
{"mode": "posts","usernames": ["natgeo"],"maxItems": 10}
parse_confidence (0.0–1.0) in every record lets agents filter low-quality rows
without manual inspection.
Not affiliated with Instagram or Meta. For personal use and research.
Integrations
Built for social-listening and influencer-marketing teams pulling profile stats, post engagement, and comment data at scale — the JSON/dataset output drops into the tools you already run, no glue code:
- n8n / Make / Zapier — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, HubSpot, your database) with no code: n8n, Make, Zapier.
- Webhooks — fire your own endpoint the moment a run finishes, to push results straight into your pipeline (docs).
- MCP server — expose this actor as a tool to Claude, Cursor, or any MCP client so an AI agent can pull this data mid-conversation (guide).
- API & SDKs — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.
See all Apify integrations.