Instagram Post & Reel Scraper (photos) avatar

Instagram Post & Reel Scraper (photos)

Pricing

from $1.50 / 1,000 post scrapeds

Go to Apify Store
Instagram Post & Reel Scraper (photos)

Instagram Post & Reel Scraper (photos)

Scrape all of an Instagram account's posts, Reels, and carousels in one run. Get captions, likes, comments, media URLs, location tags, and Reel audio/track info. Optional photo & video download. No login required. Fast, reliable, and built to keep working as Instagram changes.

Pricing

from $1.50 / 1,000 post scrapeds

Rating

5.0

(2)

Developer

MrDoe

MrDoe

Maintained by Community

Actor stats

1

Bookmarked

40

Total users

4

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

Instagram Post Scraper

Instagram Post Scraper — scrape & download photos & Reels

Give it a username and get that account's recent posts — photos, carousels, videos and Reels — as clean, structured data, with an optional download of the actual media files and Reel audio. Captions, like and comment counts, and publish time included. No Instagram login, no cookies, no account needed.

This Actor is an Instagram post scraper, an Instagram photo & video downloader, and an Instagram profile scraper in one.


What does the Instagram Post Scraper do?

Point it at one or more public accounts and get one row per recent post, with the right fields for that post's type (image, carousel, video, or Reel). Turn the download options on and it also saves the images, videos and Reel MP3s to storage with direct links.

A real Instagram post: the fields this Actor extracts

Everything visible on a post becomes a dataset field:

On the postDataset field
The photo / video / thumbnaildisplayUrl, videoUrl
The account's display nameauthor.username, author.fullname
"Red Moon over Louisiana…"caption
255.9K likes · 529 commentslikeCount, commentCount
"7 hours ago"postedAt (ISO 8601)
A Reel's real audio trackaudioUrl (when available)

Every post type, mapped correctly

Image, Reel and carousel in a profile grid

typeWhenExtra fields
imageSingle photodisplayUrl
carouselMulti-item postdisplayUrl (first slide)
reelVideo tagged as a ReelvideoUrl, audioUrl (best-effort — see Limitations)
videoOlder / non-Reel videovideoUrl

Why use this Instagram post scraper?

  • No login — no account, no cookies, nothing to connect.
  • Every format handled — single photos, carousels, Reels and legacy videos, each classified correctly.
  • Download the media — turn on downloadMedia to save each post's image or video to storage with a permanent link.
  • Download Reel audio as MP3 — downloadAudio saves a Reel's sound as a standalone .mp3.
  • Standard exports — JSON, CSV, Excel, XML, or the Apify API.

What makes this Actor different?

Most Instagram post scrapers ask for your session cookies (risky, and against Instagram's rules). This one runs fully logged-out and, on the same run, can download the actual media too.

How it works

How the Instagram Post Scraper works

  1. Your input — one or more usernames (bare handle, @handle, or profile URL).
  2. The Actor collects the data — it handles everything between your input and clean results: no login, rate limiting, rotating identities over residential IPs, and retries.
  3. Output — a dataset row per post, classified by type, plus (optionally) the media files in the key-value store.

What data you get

FieldDescription
URL / IdPost permalink (/p/… or /reel/…) and shortcode
typeimage, carousel, reel, or video
postedAtPublish time, ISO 8601
likeCount / commentCountEngagement counts (approximate once Instagram itself abbreviates them, e.g. "866K")
captionFull caption text
displayUrlMain image / thumbnail URL (temporary, expires)
videoUrlVideo URL for reel / video posts, when found (expires) - see Limitations
audioUrlA Reel's real audio-only track, when found (expires) - see Limitations
mediaStorageUrlsArray of permanent key-value-store links — only if downloadMedia is on
audioStorageUrlPermanent key-value-store link to the .mp3 — only if downloadAudio is on
author{ username, fullname }

A few fields an older version of this Actor exposed (originalWidth/originalHeight, videoViewCount, musicId/musicUrl, audioDetails, location, carouselChildren) are no longer available and are always null now — see Limitations for why.

Where do the downloaded photos, videos and audio go?

When downloadMedia and/or downloadAudio are on, files are written to this run's key-value store (the Actor's default store):

Post type + optionFile(s) savedField with the link(s)
Image/carousel + downloadMedia<postId>.jpgmediaStorageUrls
Reel/video + downloadMedia<postId>.mp4mediaStorageUrls
Reel + downloadAudio<postId>.mp3audioStorageUrl

Each link looks like:

https://api.apify.com/v2/key-value-stores/<storeId>/records/<postId>.jpg

Those links are permanent (they live as long as the run's storage) and need no auth for a public run. You can also browse every file under the run's Storage → Key-value store tab in the Apify Console, or list them via the API.

displayUrl, videoUrl and audioUrl point straight at Instagram's CDN and expire after a few hours — use them only if you're downloading immediately; otherwise turn the download options on and use the storage links.

Input parameters

ParameterTypeRequiredDefaultDescription
usernamesArrayYes["capcaprice"]Accounts to scrape — bare handle (nasa), @handle, or full profile URL. Public accounts only.
maxResultsIntegerNo10Stop after this many posts per username, combined across all usernames in one run.
downloadMediaBooleanNofalseSave each post's image/video to the key-value store. Adds mediaStorageUrls.
downloadAudioBooleanNofalseExtract a Reel's audio to a standalone .mp3 in the key-value store. Adds audioStorageUrl. Reels only.
proxyConfigurationObjectNoApify ResidentialA residential proxy is strongly recommended — Instagram rate-limits datacenter IPs.

Example output

Image post

{
"URL": "https://www.instagram.com/p/DcOX3hWFiey/",
"Id": "DcOX3hWFiey",
"type": "image",
"postedAt": "2026-08-19T10:00:00.000Z",
"likeCount": 506000,
"commentCount": 3573,
"caption": "With your powers combined…",
"displayUrl": "https://scontent.cdninstagram.com/...jpg",
"videoUrl": null,
"audioUrl": null,
"mediaStorageUrls": ["https://api.apify.com/v2/key-value-stores/abc123/records/DcOX3hWFiey.jpg"],
"audioStorageUrl": null,
"author": { "username": "nasa", "fullname": "NASA" }
}

Reel adds real video/audio fields and uses a /reel/ URL:

{
"URL": "https://www.instagram.com/reel/DcMXl1IPNtB/",
"type": "reel",
"videoUrl": "https://scontent.cdninstagram.com/….mp4",
"audioUrl": "https://scontent.cdninstagram.com/….mp4",
"audioStorageUrl": "https://api.apify.com/v2/key-value-stores/abc123/records/DcMXl1IPNtB.mp3"
}

How to use the Instagram Post Scraper

  1. Open the Actor.
  2. Add one or more usernames.
  3. To also save the files, turn on downloadMedia and/or downloadAudio.
  4. Set maxResults.
  5. Press Start.
  6. Read the rows in the Dataset tab (export JSON / CSV / Excel / XML) and find the media in the Key-value store tab.

Usage examples

An account's last 20 posts, data only

{ "usernames": ["nasa"], "maxResults": 20 }

Download every photo and video from an account

{ "usernames": ["natgeo"], "maxResults": 30, "downloadMedia": true }

Several accounts, with Reel MP3s

{ "usernames": ["nasa", "spacex", "esa"], "maxResults": 15, "downloadMedia": true, "downloadAudio": true }

Tips for best results

  • Use a residential proxy. A good residential proxy pool is the single biggest reliability factor. Datacenter IPs get rate-limited fast.
  • Use *StorageUrl / mediaStorageUrls, not the raw URLs, for anything you keep — displayUrl / videoUrl / audioUrl expire within hours.
  • downloadMedia on a big maxResults means a lot of files — start small and scale up.

Limitations

  • Public accounts only. Private or nonexistent profiles return no data.
  • Every post's caption, like/comment counts, publish time and main image are reliable. A Reel's real video and audio URL are found most of the time but not every single run - Instagram's player needs a moment to start before the real file becomes visible, and that occasionally doesn't happen in time. When it doesn't, videoUrl/audioUrl for that one row come back null rather than a guess, and downloadMedia/downloadAudio simply have nothing to save for that post.
  • Carousel posts return their first image only — later slides in a multi-photo post aren't collected in this version.
  • Exact view counts, location tags, and Reel audio track/artist metadata are not available in this version and are always null.
  • Like/comment counts are exact for lower numbers; once Instagram itself shows an abbreviated count (e.g. "866K"), the figure returned is that same approximation, not a hidden exact number.
  • Instagram rate-limits aggressively; the Actor retries, but large exports go faster with a bigger residential proxy pool.
  • A row is a snapshot at collection time; counts keep moving.

Export formats & integrations

Export the dataset as JSON, CSV, Excel, or XML from the Dataset tab or the Apify API. Connect results to Google Sheets, Make, Zapier, Slack, or your own systems via the API and webhooks, and schedule runs to track an account over time.

Frequently asked questions

Can I download Instagram photos and videos with this Actor?

Yes. Set downloadMedia: true and each post's image or video is saved to the key-value store, with a permanent link in mediaStorageUrls.

Can I download a Reel's audio as an MP3?

Yes, most of the time. Set downloadAudio: true and a Reel's sound is saved as <postId>.mp3 in audioStorageUrl when its real audio track was found during that run — see Limitations.

Where are the downloaded files saved?

In the run's key-value store, keyed by post ID (<id>.jpg, <id>.mp4, <id>.mp3). The dataset rows carry the links, and you can browse or download everything from the Storage tab in the Apify Console.

Do I need an Instagram account or login?

No. It works fully logged out — no account, no cookies, no sessionid or csrftoken.

Does it scrape Instagram carousels (multi-photo posts)?

It detects and labels carousel posts (type: "carousel") and returns the first slide's image - later slides aren't collected in this version.

Can I get an account's entire post history?

Raise maxResults to collect more of an account's recent posts in one run.

Does it work for Reels too, or only photos?

Both. Reels come back with a real video URL and (most of the time) a real audio URL alongside photo and carousel posts.