Instagram Account Posts Scraper - Cheaper
Under maintenancePricing
from $0.30 / 1,000 results
Instagram Account Posts Scraper - Cheaper
Under maintenanceScrape all posts from any public Instagram account: caption, media URLs, engagement counts, etc. HTTP-only, fast, supp pagination, and no cookies required.
Pricing
from $0.30 / 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 Account Posts Scraper
Fetch the post timeline of any public Instagram account in bulk — captions, image and video URLs, like and comment counts, carousel children, timestamps, and the poster's profile data — as clean structured JSON.
Why use this actor
- No account, no login, no API key — give it a username and you get the same feed the Instagram app shows.
- Paginated timeline — pulls the full grid newest-first, dozens to thousands of posts per account, in a single run.
- All post formats — single photos, single videos, Reels, and multi-slide carousels with every child media included.
- Rich engagement — like count, comment count, view / play count, video duration, and the original capture timestamp.
- Full media — multi-resolution image and video URLs straight from Instagram's CDN, plus alt-friendly metadata.
- Stable JSON envelope — every row carries
_input,_source,_scrapedAtso you can join results back to your input list and feed pipelines, spreadsheets, or databases.
How it works
- You provide a list of Instagram usernames (e.g.
nasa) or full profile URLs. - The actor walks the account's post timeline page by page, newest-first, until
maxPostsis reached or the timeline ends. - Each post is emitted as one dataset row with media URLs, caption, counters, and the poster's user record.
- Results stream into your Apify dataset, ready to download as JSON, CSV, or Excel.
You do not manage scrapers, browsers, sessions, or rotating IPs — all handled internally.
Input
{"usernames": ["nasa","natgeo"],"maxPosts": 30,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["DATACENTER"]}}
| Field | Type | Description |
|---|---|---|
usernames | array | List of Instagram usernames or full profile URLs. Both nasa and https://www.instagram.com/nasa/ are accepted. |
maxPosts | integer | Max posts returned per account, paginated newest-first. 0 = unlimited. Default: 30. |
proxyConfiguration | object | Apify Proxy settings. Datacenter works for most accounts; switch to Residential for large batches. |
Output
Input: nasa, maxPosts: 30 (first 2 posts shown, long URLs truncated).
[{"_input": "nasa","_source": "S1-primary","_scrapedAt": "2026-05-18T10:54:19.253080+00:00","pk": "3895560746578059612","id": "3895560746578059612_528817151","code": "DYPz9wEvaFc","taken_at": 1778607257,"media_type": 1,"product_type": "feed","caption": {"text": "Percy is roving the “Western Frontier” of Mars 🤠\n \nIt's the farthest west our Perseverance rover has explored since landing in Jezero Crater in 2021, and it's an ancient landscape that may predate the crater itself…"},"like_count": 227972,"comment_count": 936,"play_count": null,"video_duration": null,"original_width": 2500,"original_height": 2123,"user": {"pk": "528817151","username": "nasa","full_name": "NASA","is_verified": true,"profile_pic_url": "https://instagram.fcgk52-1.fna.fbcdn.net/v/t51.2885-19/29090066_159271188110124..."},"image_versions2": {"candidates": [{ "width": 2500, "height": 2123, "url": "https://instagram.fcgk52-1.fna.fbcdn.net/v/t51.82787-15/689446779_18608299801049152..." }]},"locations": []},{"_input": "nasa","_source": "S1-primary","_scrapedAt": "2026-05-18T10:54:19.253080+00:00","pk": "3891942993783911519","id": "3891942993783911519_528817151","code": "DYC9YhOj3Rf","taken_at": 1778175780,"media_type": 8,"product_type": "carousel_container","caption": {"text": "Don't let anyone dull your shine 💫\n \nThe heart of galaxy M77 is shining so brightly in this Webb telescope image, it nearly outshines the galaxy itself…"},"like_count": 678128,"comment_count": 1549,"user": {"pk": "528817151","username": "nasa","full_name": "NASA","is_verified": true},"image_versions2": {"candidates": [{ "width": 1060, "height": 1288, "url": "https://instagram.fcgk52-1.fna.fbcdn.net/v/t51.82787-15/672396587_18606926689049152..." }]},"carousel_media_count": 3,"carousel_media": [{"id": "3891940960318236431_528817151","media_type": 1,"image_versions2": {"candidates": [{ "width": 1060, "height": 1288, "url": "https://instagram.fcgk52-1.fna.fbcdn.net/v/t51.82787-15/672396587_18606926689049152..." }]}},{"id": "3891940963992441227_528817151","media_type": 1,"image_versions2": {"candidates": [{ "width": 1440, "height": 1743, "url": "https://instagram.fcgk52-1.fna.fbcdn.net/v/t51.82787-15/688674294_18606926698049152..." }]}},"... 1 more"]}]
| Field | Type | Description |
|---|---|---|
_input | string | The username or URL exactly as you supplied it. Use this to join results back to your input list. |
_source | string | Internal tag for the path used to fetch the post. S1-primary means the fastest, richest path; S2-* would indicate a fallback. |
_scrapedAt | string | ISO-8601 UTC timestamp when the row was captured. |
pk | string | Instagram's internal numeric media ID. Stable across edits. |
id | string | Composite <pk>_<user_pk> id used in Instagram's mobile responses. |
code | string | Shortcode visible in the post URL (instagram.com/p/<code>/ or /reel/<code>/). |
taken_at | integer | Unix epoch (seconds) when the post was uploaded. |
media_type | integer | 1 = single photo, 2 = single video / Reel, 8 = carousel container (children are in carousel_media). |
product_type | string | feed for grid photos, clips for Reels, carousel_container for multi-slide posts, igtv for long video. |
caption.text | string | Full caption text (may contain emoji and line breaks). null if the post has no caption. |
like_count | integer | Number of likes at fetch time. Some accounts hide this; null when hidden. |
comment_count | integer | Number of comments at fetch time. |
play_count | integer | Plays for video / Reels posts; absent for photos. |
video_duration | number | Length in seconds for video / Reels posts. |
original_width / original_height | integer | Native resolution of the post (or the first carousel child). |
user | object | Poster's profile snippet: pk, username, full_name, is_verified, profile_pic_url. |
image_versions2.candidates | array | Multi-resolution image URLs (largest first). Each entry: { width, height, url }. |
video_versions | array | Multi-resolution video URLs (Reels and single videos). Each entry: { type, width, height, url }. |
carousel_media | array | For carousel posts (media_type: 8) — one entry per slide, each with its own image_versions2 / video_versions. |
carousel_media_count | integer | Number of slides in a carousel post. |
locations | array | Tagged location(s); empty array when none was attached. |
Error envelope
Accounts that don't exist, are deactivated, or fail to fetch return a structured error instead of crashing the run:
{"_input": "this-account-does-not-exist-xyz","_error": "not_found","_errorDetail": "NotFound feed/user this-account-does-not-exist-xyz","_source": "S1-primary","_scrapedAt": "2026-05-18T10:54:19.253080+00:00"}
Filter on _error to triage failed rows.
Pricing
This actor is billed per result: $6.00 per 1,000 posts. Each post in the dataset = 1 result. Error rows (not-found, fetch-failed) are not billed.
Other Sosmed Actors
| Platform | Actor | Best for |
|---|---|---|
| Instagram Account Scraper | Bio, follower / following counts, post count for any handle | |
| Instagram Account Reels Scraper | Reels-only timeline with play counts and durations | |
| Instagram Post Detail Scraper | Full single-post detail by shortcode or URL | |
| Threads | Threads Account Threads Scraper | Posts timeline for a Threads handle |
| Facebook Page Posts Scraper | Posts timeline for any public Facebook Page | |
| Twitter / X | X Account Tweets Scraper | Tweets timeline for any handle |
| Bluesky | Bluesky Account Posts Scraper | atproto posts timeline by handle or DID |
Browse the full catalog at apify.com/xtracto.
Notes
- Instagram returns a rich record per post (carousel children with their own resolutions, video manifests, music metadata, paid-partnership flags, etc.). This actor preserves the full envelope so you can pick the fields you need.
- Pagination is handled internally — you do not need to manage cursors. To page externally, simply re-run with a larger
maxPosts. - Private accounts return zero posts and a single
not_founderror row. - Media CDN URLs are signed and time-bound (valid for a few hours). If you need permanent copies, mirror the bytes shortly after the run finishes.
like_countandcomment_countare eventually-consistent and may lag the live UI by a few minutes.maxPosts: 0means unlimited — a multi-year account can return thousands of posts; budget your run accordingly.- For batches over ~30 accounts, switch
proxyConfigurationtoRESIDENTIALto avoid per-IP rate limits.