Instagram Account Posts Scraper - Cheaper avatar

Instagram Account Posts Scraper - Cheaper

Under maintenance

Pricing

from $0.30 / 1,000 results

Go to Apify Store
Instagram Account Posts Scraper - Cheaper

Instagram Account Posts Scraper - Cheaper

Under maintenance

Scrape 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

Xtractoo

Maintained by Community

Actor 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, _scrapedAt so you can join results back to your input list and feed pipelines, spreadsheets, or databases.

How it works

  1. You provide a list of Instagram usernames (e.g. nasa) or full profile URLs.
  2. The actor walks the account's post timeline page by page, newest-first, until maxPosts is reached or the timeline ends.
  3. Each post is emitted as one dataset row with media URLs, caption, counters, and the poster's user record.
  4. 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"]
}
}
FieldTypeDescription
usernamesarrayList of Instagram usernames or full profile URLs. Both nasa and https://www.instagram.com/nasa/ are accepted.
maxPostsintegerMax posts returned per account, paginated newest-first. 0 = unlimited. Default: 30.
proxyConfigurationobjectApify 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"
]
}
]
FieldTypeDescription
_inputstringThe username or URL exactly as you supplied it. Use this to join results back to your input list.
_sourcestringInternal tag for the path used to fetch the post. S1-primary means the fastest, richest path; S2-* would indicate a fallback.
_scrapedAtstringISO-8601 UTC timestamp when the row was captured.
pkstringInstagram's internal numeric media ID. Stable across edits.
idstringComposite <pk>_<user_pk> id used in Instagram's mobile responses.
codestringShortcode visible in the post URL (instagram.com/p/<code>/ or /reel/<code>/).
taken_atintegerUnix epoch (seconds) when the post was uploaded.
media_typeinteger1 = single photo, 2 = single video / Reel, 8 = carousel container (children are in carousel_media).
product_typestringfeed for grid photos, clips for Reels, carousel_container for multi-slide posts, igtv for long video.
caption.textstringFull caption text (may contain emoji and line breaks). null if the post has no caption.
like_countintegerNumber of likes at fetch time. Some accounts hide this; null when hidden.
comment_countintegerNumber of comments at fetch time.
play_countintegerPlays for video / Reels posts; absent for photos.
video_durationnumberLength in seconds for video / Reels posts.
original_width / original_heightintegerNative resolution of the post (or the first carousel child).
userobjectPoster's profile snippet: pk, username, full_name, is_verified, profile_pic_url.
image_versions2.candidatesarrayMulti-resolution image URLs (largest first). Each entry: { width, height, url }.
video_versionsarrayMulti-resolution video URLs (Reels and single videos). Each entry: { type, width, height, url }.
carousel_mediaarrayFor carousel posts (media_type: 8) — one entry per slide, each with its own image_versions2 / video_versions.
carousel_media_countintegerNumber of slides in a carousel post.
locationsarrayTagged 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

PlatformActorBest for
InstagramInstagram Account ScraperBio, follower / following counts, post count for any handle
InstagramInstagram Account Reels ScraperReels-only timeline with play counts and durations
InstagramInstagram Post Detail ScraperFull single-post detail by shortcode or URL
ThreadsThreads Account Threads ScraperPosts timeline for a Threads handle
FacebookFacebook Page Posts ScraperPosts timeline for any public Facebook Page
Twitter / XX Account Tweets ScraperTweets timeline for any handle
BlueskyBluesky Account Posts Scraperatproto 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_found error 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_count and comment_count are eventually-consistent and may lag the live UI by a few minutes.
  • maxPosts: 0 means unlimited — a multi-year account can return thousands of posts; budget your run accordingly.
  • For batches over ~30 accounts, switch proxyConfiguration to RESIDENTIAL to avoid per-IP rate limits.