Instagram Post & Reel Scraper (photos) avatar

Instagram Post & Reel Scraper (photos)

Pricing

from $0.80 / 1,000 results

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 $0.80 / 1,000 results

Rating

5.0

(2)

Developer

MrDoe

MrDoe

Maintained by Community

Actor stats

1

Bookmarked

4

Total users

3

Monthly active users

4 days ago

Last modified

Share

Instagram Post Scraper

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.

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 / carouseldisplayUrl, videoUrl, carouselChildren[]
The carousel dots (● ● ●)type: "carousel" + one entry per item
nasa · verified badgeauthor.username, author.isVerified
"Red Moon over Louisiana…"caption
255.9K likes · 529 commentslikeCount, commentCount
"7 hours ago"postedAt (ISO 8601)
The location tag, if the poster added onelocation.name, location.id
A Reel's soundaudioDetails, musicUrl, audioUrl

Every post type, mapped correctly

Image, Reel and carousel in a profile grid

typeWhenExtra fields
imageSingle photodisplayUrl
carouselMulti-item post (photos and/or videos)carouselChildren[] — each with its own type, URL, dimensions
reelVideo tagged as a ReelvideoUrl, videoViewCount, audioUrl, audioDetails
videoOlder / non-Reel videovideoUrl, 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 downloadMedia and 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 MP3downloadAudio saves 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

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, anti-bot handling, rate limiting, rotating identities over residential IPs, retries, and paging back through the account to your maxResults.
  3. 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

FieldDescription
URL / IdPost permalink (/p/… or /reel/…) and shortcode
typeimage, carousel, reel, or video
postedAtPublish time, ISO 8601
likeCount / commentCountEngagement counts
captionFull caption text
originalWidth / originalHeightMedia dimensions
displayUrlMain image / thumbnail URL (temporary, expires)
videoUrlVideo URL for reel / video posts (expires)
videoViewCountPlay count for reel / video posts
carouselChildrenFor carousel: array of { type, displayUrl, videoUrl, width, height }
location{ id, name, slug } when the poster tagged a place
musicId / musicUrlReel audio ID and its Instagram audio-page URL
audioUrlDirect link to a Reel's source audio asset (expires), when Instagram exposes it
audioDetails{ type, audioId, trackTitle, artistName } for Reels
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, 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 + optionFile(s) savedField with the link(s)
Image + downloadMedia<postId>.jpgmediaStorageUrls
Carousel + downloadMedia<postId>-0.jpg, <postId>-1.mp4, …mediaStorageUrls (one per item)
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.
maxResultsIntegerNo20Stop after this many posts per username. Raise it for a full export.
downloadMediaBooleanNofalseSave every image/video (all carousel items, or a Reel's 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": 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

  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 (per username).
  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 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.
  • maxResults is per username — 3 accounts at maxResults: 20 can return up to 60 rows.
  • Carousels mix images and videos — check each carouselChildren entry's own type rather than assuming.
  • 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.
  • Instagram rate-limits aggressively; the Actor retries, but large exports go faster with a bigger residential proxy pool.
  • displayUrl / videoUrl / audioUrl are 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 .mp3 is 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.

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).