Instagram Post & Reel Scraper (photos)
Pricing
from $0.80 / 1,000 results
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 $0.80 / 1,000 results
Rating
5.0
(2)
Developer
MrDoe
Maintained by CommunityActor stats
1
Bookmarked
4
Total users
3
Monthly active users
4 days ago
Last modified
Categories
Share

Instagram Post Scraper — scrape & download photos, carousels & Reels
Give it a username and get every post that account has published — photos, multi-image 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, dimensions, location tags, and per-Reel audio metadata included. No Instagram login, no cookies, no account needed.
This Actor is an Instagram post scraper, an Instagram photo & video downloader, an Instagram carousel scraper, and an Instagram profile scraper in one.
What does the Instagram Post Scraper do?
Point it at one or more public accounts. It walks each account's post history — as far back as you ask — and returns one row per post, mapped to the right fields for that post's type. 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 / carousel | displayUrl, videoUrl, carouselChildren[] |
| The carousel dots (● ● ●) | type: "carousel" + one entry per item |
nasa · verified badge | author.username, author.isVerified |
| "Red Moon over Louisiana…" | caption |
| 255.9K likes · 529 comments | likeCount, commentCount |
| "7 hours ago" | postedAt (ISO 8601) |
| The location tag, if the poster added one | location.name, location.id |
| A Reel's sound | audioDetails, musicUrl, audioUrl |
Every post type, mapped correctly

type | When | Extra fields |
|---|---|---|
image | Single photo | displayUrl |
carousel | Multi-item post (photos and/or videos) | carouselChildren[] — each with its own type, URL, dimensions |
reel | Video tagged as a Reel | videoUrl, videoViewCount, audioUrl, audioDetails |
video | Older / non-Reel video | videoUrl, videoViewCount |
Why use this Instagram post scraper?
- A whole account in one run — not just the first page. It paginates back through the profile's history to your
maxResults. - Every format handled — single photos, mixed photo/video carousels, Reels and legacy videos, each with the right fields.
- Download the media — turn on
downloadMediaand every image and video (all carousel items, or a Reel's full video) is saved to storage with a permanent link. - Download Reel audio as MP3 —
downloadAudiosaves a Reel's sound as a standalone.mp3; it uses the clean source track when available, otherwise the audio is taken from the video. - Reel audio metadata — track title, artist, original-audio creator, and whether it's licensed music or original audio.
- No login — no account, no cookies, nothing to connect.
- 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) or stop at metadata. This one runs fully logged-out and, on the same run, downloads the actual media — expanding a carousel into every item and pulling a Reel's audio as its own MP3.
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, anti-bot handling, rate limiting, rotating identities over residential IPs, retries, and paging back through the account to your
maxResults. - Output — a dataset row per post (classified as image, carousel, Reel or video, with the right fields for each), 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 |
caption | Full caption text |
originalWidth / originalHeight | Media dimensions |
displayUrl | Main image / thumbnail URL (temporary, expires) |
videoUrl | Video URL for reel / video posts (expires) |
videoViewCount | Play count for reel / video posts |
carouselChildren | For carousel: array of { type, displayUrl, videoUrl, width, height } |
location | { id, name, slug } when the poster tagged a place |
musicId / musicUrl | Reel audio ID and its Instagram audio-page URL |
audioUrl | Direct link to a Reel's source audio asset (expires), when Instagram exposes it |
audioDetails | { type, audioId, trackTitle, artistName } for Reels |
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, temporaryProfilePictureUrl, isVerified, isPrivate } |
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 + downloadMedia | <postId>.jpg | mediaStorageUrls |
Carousel + downloadMedia | <postId>-0.jpg, <postId>-1.mp4, … | mediaStorageUrls (one per item) |
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 | 20 | Stop after this many posts per username. Raise it for a full export. |
downloadMedia | Boolean | No | false | Save every image/video (all carousel items, or a Reel's 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": 506080,"commentCount": 3573,"caption": "With your powers combined…","originalWidth": 1280,"originalHeight": 1129,"displayUrl": "https://scontent.cdninstagram.com/...jpg","videoUrl": null,"audioUrl": null,"carouselChildren": null,"location": null,"audioDetails": null,"mediaStorageUrls": ["https://api.apify.com/v2/key-value-stores/abc123/records/DcOX3hWFiey.jpg"],"audioStorageUrl": null,"author": { "username": "nasa", "fullname": "NASA", "isVerified": true, "isPrivate": false }}
Carousel adds carouselChildren:
"carouselChildren": [{ "type": "image", "displayUrl": "https://…", "videoUrl": null, "width": 1080, "height": 1350 },{ "type": "video", "displayUrl": "https://…", "videoUrl": "https://….mp4", "width": 1080, "height": 1920 }]
Reel adds 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","videoViewCount": 3566267,"musicId": "28532324479739746","musicUrl": "https://www.instagram.com/reels/audio/28532324479739746/","audioDetails": {"type": "original_audio","audioId": "28532324479739746","trackTitle": "Original audio","artistName": "nasajohnson"},"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(per username). - 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 50 posts, data only
{ "usernames": ["nasa"], "maxResults": 50 }
Download every photo and video from an account
{ "usernames": ["natgeo"], "maxResults": 100, "downloadMedia": true }
Several accounts, with Reel MP3s
{ "usernames": ["nasa", "spacex", "esa"], "maxResults": 30, "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.
maxResultsis per username — 3 accounts atmaxResults: 20can return up to 60 rows.- Carousels mix images and videos — check each
carouselChildrenentry's owntyperather than assuming. - 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.
- Instagram rate-limits aggressively; the Actor retries, but large exports go faster with a bigger residential proxy pool.
displayUrl/videoUrl/audioUrlare temporary and expire — download promptly or use the download options.- A row is a snapshot at collection time; counts keep moving.
- When the clean source audio for a Reel isn't available, the
.mp3is taken from the video instead.
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 every image and video — each carousel item, or a Reel's full video — is saved to the key-value store, with permanent links in mediaStorageUrls.
Can I download a Reel's audio as an MP3?
Yes. Set downloadAudio: true and each Reel's sound is saved as <postId>.mp3 in audioStorageUrl. It's the clean source track when available, otherwise taken from the video.
Where are the downloaded files saved?
In the run's key-value store, keyed by post ID (<id>.jpg, <id>-0.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)?
Yes. Carousel posts return a carouselChildren array with every item's own media URL, type and dimensions.
Can I get an account's entire post history?
Yes. Raise maxResults; the Actor pages back through the profile as far as you ask.
Does it work for Reels too, or only photos? Both. Reels come back with their video URL, view count and audio metadata alongside photo and carousel posts.
Why did a run return nothing? Usually a datacenter proxy IP being rate-limited, or a private/typo'd username. Switch to a residential proxy and re-check the handle.
Support
Found a bug or need another field exposed? Open an issue on the Actor's Issues tab in the Apify Console.
Legal / responsible use
This Actor collects publicly available Instagram data and downloads publicly available media. It does not log in, access private content, or touch any account. You are responsible for how you use the Actor and its output, including compliance with Instagram's Terms of Use, copyright in the photos and videos you download, and the data-protection laws that apply to you (GDPR, CCPA, and others).