Instagram Post & Reel Scraper (photos)
Pricing
from $1.50 / 1,000 post scrapeds
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
Maintained by CommunityActor stats
1
Bookmarked
40
Total users
4
Monthly active users
4 days ago
Last modified
Categories
Features
Share

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.

Everything visible on a post becomes a dataset field:
| On the post | Dataset field |
|---|---|
| The photo / video / thumbnail | displayUrl, videoUrl |
| The account's display name | author.username, author.fullname |
| "Red Moon over Louisiana…" | caption |
| 255.9K likes · 529 comments | likeCount, commentCount |
| "7 hours ago" | postedAt (ISO 8601) |
| A Reel's real audio track | audioUrl (when available) |
Every post type, mapped correctly

type | When | Extra fields |
|---|---|---|
image | Single photo | displayUrl |
carousel | Multi-item post | displayUrl (first slide) |
reel | Video tagged as a Reel | videoUrl, audioUrl (best-effort — see Limitations) |
video | Older / non-Reel video | videoUrl |
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
downloadMediato save each post's image or video to storage with a permanent link. - Download Reel audio as MP3 —
downloadAudiosaves 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

- Your input — one or more usernames (bare handle,
@handle, or profile URL). - 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.
- Output — a dataset row per post, classified by type, plus (optionally) the media files in the key-value store.
What data you get
| Field | Description |
|---|---|
URL / Id | Post permalink (/p/… or /reel/…) and shortcode |
type | image, carousel, reel, or video |
postedAt | Publish time, ISO 8601 |
likeCount / commentCount | Engagement counts (approximate once Instagram itself abbreviates them, e.g. "866K") |
caption | Full caption text |
displayUrl | Main image / thumbnail URL (temporary, expires) |
videoUrl | Video URL for reel / video posts, when found (expires) - see Limitations |
audioUrl | A Reel's real audio-only track, when found (expires) - see Limitations |
mediaStorageUrls | Array of permanent key-value-store links — only if downloadMedia is on |
audioStorageUrl | Permanent 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 + option | File(s) saved | Field with the link(s) |
|---|---|---|
Image/carousel + downloadMedia | <postId>.jpg | mediaStorageUrls |
Reel/video + downloadMedia | <postId>.mp4 | mediaStorageUrls |
Reel + downloadAudio | <postId>.mp3 | audioStorageUrl |
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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
usernames | Array | Yes | ["capcaprice"] | Accounts to scrape — bare handle (nasa), @handle, or full profile URL. Public accounts only. |
maxResults | Integer | No | 10 | Stop after this many posts per username, combined across all usernames in one run. |
downloadMedia | Boolean | No | false | Save each post's image/video to the key-value store. Adds mediaStorageUrls. |
downloadAudio | Boolean | No | false | Extract a Reel's audio to a standalone .mp3 in the key-value store. Adds audioStorageUrl. Reels only. |
proxyConfiguration | Object | No | Apify Residential | A 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
- Open the Actor.
- Add one or more
usernames. - To also save the files, turn on
downloadMediaand/ordownloadAudio. - Set
maxResults. - Press Start.
- 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/audioUrlexpire within hours. downloadMediaon a bigmaxResultsmeans 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/audioUrlfor that one row come backnullrather than a guess, anddownloadMedia/downloadAudiosimply 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.