Instagram Reel Scraper avatar

Instagram Reel Scraper

Pricing

from $1.00 / 1,000 reels

Go to Apify Store
Instagram Reel Scraper

Instagram Reel Scraper

Scrape the latest reels of any public Instagram profile, or any reel URL, without an account: plays, views, likes, comments, caption, hashtags, mentions, tagged users, sponsors, music, location and the latest comments. Optional MP4 download. Pay per reel.

Pricing

from $1.00 / 1,000 reels

Rating

0.0

(0)

Developer

Badr Bouargan

Badr Bouargan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

15 days ago

Last modified

Share

Instagram Reel Scraper – Views, Likes, Comments & Music

Extract data from public Instagram reels without an account or API key. Add Instagram usernames, profile URLs or reel URLs and get, for every reel: plays, views, likes, comments, caption, hashtags, mentions, tagged users, sponsors and paid partnership, co-authors, music (artist, song, original audio), location, duration, pinned status and the 10 latest comments. Optionally add the shares count and download each reel as an MP4. Pay per reel — inputs that give nothing are never billed.

What can Instagram Reel Scraper do?

  • 🎥 Stats of the latest reels of any public profile: likes, comments, views, plays, date
  • 🧩 Metadata: caption, hashtags, mentions, tagged users, pinned status, paid partnership and sponsors, co-authors, music, location, dimensions, duration
  • 💬 The 10 latest comments of each reel, with author, likes and date
  • ⬇️ MP4 download of each reel to your run storage (add-on), before Instagram's links expire
  • 📆 Date filter and skip pinned reels
  • Export to JSON, CSV, Excel, XML or HTML, or use the API, webhooks, Make, Zapier, n8n or the Apify MCP server

Use it for influencer research, campaign tracking, competitor monitoring and content audits.

How to scrape Instagram reels in 3 steps

  1. Add usernames (natgeo), profile URLs or reel URLs (https://www.instagram.com/reel/DX7lzTOJ1p6/).
  2. Set the number of reels per profile (optional: date filter, skip pinned reels, shares count, video download).
  3. Click Start, then open the Reels table or download JSON, CSV or Excel.

The prefilled run (natgeo, 12 reels) takes about half a minute and costs about three cents on the Free plan.

Paste inputs the way you have them: @natgeo, mobile links, links with ?igsh=…, the profile's /reels/ tab, or a comma-separated list on one line. The same profile given twice is read (and billed) once. Anything that is not a profile or reel (a hashtag, an audio page, a typo) is listed in FAILED_INPUTS with the reason, never billed, and the run carries on.

Input example

{
"username": ["natgeo", "https://www.instagram.com/reel/DX7lzTOJ1p6/"],
"resultsLimit": 12,
"onlyPostsNewerThan": "2 months",
"skipPinnedPosts": true,
"includeSharesCount": false,
"includeDownloadedVideo": false
}

Output example

{
"inputUrl": "natgeo",
"id": "3889868956217334394",
"type": "Video",
"shortCode": "DX7lzTOJ1p6",
"caption": "this is your sign to stop neglecting your scalp 🤭 #ad",
"hashtags": ["ad"],
"mentions": ["dysonusa", "sephora"],
"url": "https://www.instagram.com/reel/DX7lzTOJ1p6/",
"commentsCount": 24,
"firstComment": "Yes to scalp care!! 👏🏼",
"latestComments": [{ "text": "Yes to scalp care!! 👏🏼", "ownerUsername": "travelingwithjessica", "likesCount": 1, "timestamp": "2026-05-07T23:29:01.000Z" }],
"likesCount": 286,
"videoViewCount": 4073,
"videoPlayCount": 10977,
"timestamp": "2026-05-04T21:05:19.000Z",
"ownerUsername": "lyssamariexo",
"productType": "clips",
"videoDuration": 51.15,
"isPinned": false,
"paidPartnership": true,
"sponsors": [{ "id": "23818608", "username": "sephora" }],
"taggedUsers": [{ "username": "sephora", "full_name": "Sephora", "is_verified": true }],
"musicInfo": { "artist_name": "lyssamariexo", "song_name": "Original audio", "uses_original_audio": true },
"isCommentsDisabled": false
}

Every run also writes RUN_SUMMARY (reels saved, add-ons, amount charged) and FAILED_INPUTS (inputs that gave nothing, with the reason — never billed).

How much does it cost to scrape Instagram reels?

Pay per event. Platform usage is included.

EventFreeStarterScaleBusiness
Reel$2.60 / 1,000$2.30 / 1,000$1.40 / 1,000$1.00 / 1,000
Add-on: Shares count (per reel with a count)$7.00 / 1,000$6.00 / 1,000$5.00 / 1,000$4.00 / 1,000
Add-on: Video download (per MB saved)$20.00 / 1,000$15.00 / 1,000$12.00 / 1,000$10.00 / 1,000
Actor start (per GB of run memory, once per run)$0.001$0.001$0.001$0.001

Example: 100 reels on the Free plan = $0.26, plus a start fee of a few tenths of a cent. With the video download, a typical 5 MB reel adds 5 × $0.02 = $0.10 on the Free plan. Cap any run with Maximum reels for the whole run or a maximum cost per run.

Limits (logged-out data)

The Actor reads Instagram exactly as a visitor who is not signed in. That means:

  • 12 latest reels per profile at most — Instagram does not show more to logged-out visitors;
  • profile IDs and audio pages cannot be used as input (use the username or the reel URL);
  • transcripts are not available (includeTranscript is accepted, ignored and never billed);
  • trial reels never appear on profile pages, so they are never in the results;
  • plays come from the profile's reels list: a reel given by URL alone has likes and comments but often no play count;
  • video duration is not shown to logged-out visitors (videoDuration is usually empty);
  • the shares count is only returned when Instagram includes it in the page, which is rare for logged-out visitors; you pay only for reels that have one;
  • counts can be lower than what you see signed in (Instagram hides some engagement from visitors) and keep changing after the run.

Use it via API

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("badr_xba/instagram-reel-scraper").call(run_input={
"username": ["natgeo", "https://www.instagram.com/reel/DX7lzTOJ1p6/"],
"resultsLimit": 12,
"onlyPostsNewerThan": "30 days",
})
for reel in client.dataset(run["defaultDatasetId"]).iterate_items():
print(reel["url"], reel["videoPlayCount"], reel["likesCount"])

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('badr_xba/instagram-reel-scraper').call({
username: ['natgeo'],
resultsLimit: 12,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL (runs the Actor and returns the reels in one call):

curl -X POST "https://api.apify.com/v2/acts/badr_xba~instagram-reel-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"username": ["natgeo"], "resultsLimit": 12}'

Integrations

  • Make, Zapier and n8n: use the Apify app or node with badr_xba/instagram-reel-scraper to send new reels to Google Sheets, Airtable, Slack or a database.
  • AI agents (MCP): add https://mcp.apify.com/?actors=badr_xba/instagram-reel-scraper to Claude, Cursor or any MCP client.
  • Schedules and webhooks: track a list of creators every day and get notified when each run ends.

Troubleshooting

What you seeWhat to do
Type input in FAILED_INPUTSNot a username, profile URL or reel URL (hashtags, places, audio pages and share links are not handled). The reason says which.
Type privateThe profile is private: its reels are not public.
Type notFoundThe reel was deleted or the account does not exist. Check it in a private browser window.
Type filteredEvery reel was older than your date filter, or pinned while Skip pinned reels is on.
Type blockedInstagram refused every address tried. Keep the RESIDENTIAL proxy group and run again; never billed.
videoPlayCount is emptyThe reel was given by URL: plays come from the profile's reels list. Add the profile instead.
Only 12 reels per profileThat is all Instagram shows logged-out visitors. Schedule the Actor to collect new reels as they appear.

FAQ

Can I scrape private accounts? No, only public reels.

Can I skip pinned reels? Yes, with Skip pinned reels. Combined with a date filter, pinned reels newer than the date are kept.

How is the video returned? videoUrl is Instagram's own MP4 link (it expires). With the download add-on, downloadedVideo points to a copy in your run storage.

Is it legal? The Actor only collects publicly available data. Public data can still be personal data under laws such as the GDPR: scrape it only for a legitimate purpose.

Something does not work? Open an issue on the Issues tab with the run ID and your input.