Instagram Reels Scraper avatar

Instagram Reels Scraper

Pricing

$2.50 / 1,000 scraped records

Go to Apify Store
Instagram Reels Scraper

Instagram Reels Scraper

Scrape public Instagram Reels with no login or cookies. Get plays, likes, comments, captions, hashtags, duration, audio, and MP4 URLs. Includes account analytics (average plays, plays per follower, posting frequency) plus filters by date, plays, likes, or Reel URL.

Pricing

$2.50 / 1,000 scraped records

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Share

Answer the question every short-form team actually has: how are my competitors' reels performing, and what are they doing differently?

Give it a list of public Instagram accounts. It reads each account's Reels tab and returns every reel with its play count, likes, comments, caption, hashtags, duration, audio track and a direct MP4 URL — plus one summary row per account with average plays, median plays, plays per follower, engagement rate and reels per week.

No login. No cookies. No session tokens to paste. Nothing to configure beyond the list of accounts.

What you can do with it

  • Benchmark a competitor set. Run ten accounts and sort the summary rows by plays per follower to see who is actually punching above their audience size.
  • Find what works. Sort reels by play count and read the captions, hooks, hashtags and lengths behind the top performers.
  • Track posting cadence. reelsPerWeek and newestReelAt show who is publishing daily and who has gone quiet.
  • Spot trending audio. Every reel carries the audio asset id, so you can group reels by track and rank sounds by adoption and plays.
  • Catch sponsored reels. isSponsored flags the paid-partnership label — the single most valuable field for ad-intelligence work.
  • Build creator shortlists. Filter with minPlays to keep only accounts and reels above a performance floor.
  • Archive the media. videoUrl is a direct, publicly fetchable MP4; thumbnailUrl is the cover frame.

What you get

One row per reel, plus an optional summary row per account. Real output, abridged (long CDN URLs truncated):

{
"type": "reel",
"id": "3948507321457537241",
"shortcode": "DbL6n0ggXDZ",
"url": "https://www.instagram.com/reel/DbL6n0ggXDZ/",
"ownerUsername": "nasa",
"ownerId": "528817151",
"ownerFullName": "NASA",
"ownerIsVerified": true,
"ownerProfileUrl": "https://www.instagram.com/nasa/",
"caption": "Sound on!\n\nSonifications take images from across the universe and turn them into music…\n\n#NASA #Space #MusicLife",
"hashtags": ["NASA", "Space", "MusicLife"],
"mentions": ["nasachandraxray"],
"takenAt": "2026-07-24T18:46:42.000Z",
"takenAtTimestamp": 1784918802,
"playsCount": 11374367,
"likesCount": 429496,
"commentsCount": 1948,
"interactionsCount": 431444,
"likesPerPlayPercent": 3.776,
"videoDuration": 34.004,
"countsHidden": false,
"commentsDisabled": null,
"hasAudio": true,
"isSponsored": false,
"thumbnailUrl": "https://instagram.f…/753557824_18630272896049152_…jpg?…",
"thumbnailUrls": ["…8 renditions, largest first…"],
"videoUrl": "https://instagram.f…/AQPmdAz9D4QKeO_…mp4?…",
"videoUrls": ["…"],
"width": 1080,
"height": 1080,
"coauthors": [],
"audioAssetId": "27398485943186432",
"audioTitle": "Original audio",
"audioArtist": "nasa",
"isOriginalAudio": true,
"productType": "clips",
"mediaType": "reel",
"source": "reels-tab",
"scrapedAt": "2026-07-27T18:12:04.881Z"
}

And the account summary row that goes with it (the statistics below describe a short two-reel sample, so you can check the arithmetic against the reel above):

{
"type": "profile",
"username": "nasa",
"userId": "528817151",
"fullName": "NASA",
"followersCount": 104292683,
"followingCount": 91,
"postsCount": 4859,
"reelsCountReported": 171,
"isVerified": true,
"categoryName": "Government Agencies",
"reelsScraped": 2,
"totalPlays": 16656091,
"avgPlays": 8328046,
"medianPlays": 8328045.5,
"maxPlays": 11374367,
"avgLikes": 256666,
"avgComments": 1275,
"avgVideoDuration": 47.01,
"playsPerFollower": 0.0799,
"engagementRatePercent": 0.2473,
"reelsPerWeek": 1.8,
"newestReelAt": "2026-07-24T18:46:42.000Z",
"oldestReelAt": "2026-07-20T21:16:30.000Z",
"profileUrl": "https://www.instagram.com/nasa/",
"reelsTabUrl": "https://www.instagram.com/nasa/reels/"
}

Input

FieldTypeDefaultWhat it does
usernamesarray["nasa"]Accounts to scrape. A username (nasa), an @handle, or a full profile URL — including a /reels/ tab URL. Any mix.
reelUrlsarray[]Individual reels to scrape, independent of the accounts above. Accepts /reel/, /p/ and /tv/ URLs or a bare shortcode.
maxReelsPerProfileinteger30Reels to keep per account. Instagram serves 12 per page, so this rounds up to whole pages. 0 returns only the summary row.
onlyReelsNewerThanstring""Keep reels published on or after this date. Absolute (2026-01-31) or relative (3 months, 6 weeks, 90 days).
minPlaysinteger0Skip reels below this play count.
minLikesinteger0Skip reels below this like count.
sortByselectnewestnewest = Instagram's own order. mostPlayed = ranked by plays, within the reels this run collected.
includeProfileRecordbooleantruePush the account summary row with the performance statistics.
maxConcurrencyinteger3Accounts worked on in parallel.
proxyCountrystringusTwo-letter country code for the requests.

Output fields

Reel rows (type: "reel")

FieldTypeNotes
idstringNumeric media id.
shortcode / urlstringDbL6n0ggXDZ and the canonical /reel/ permalink.
ownerUsername / ownerId / ownerFullName / ownerIsVerified / ownerProfileUrlThe author. On a collab reel the co-authors are in coauthors.
captionstringFull caption text, newlines intact.
hashtags / mentionsarrayParsed out of the caption, de-duplicated, no #/@.
takenAt / takenAtTimestampstring / numberISO-8601 UTC and the raw unix seconds.
playsCountnumberPlays / views. null when Instagram did not report it (see limits).
likesCount / commentsCountnumberinteractionsCount is their sum.
likesPerPlayPercentnumberLikes as a percentage of plays, 3 decimals — the standard short-form performance ratio.
videoDurationnumberSeconds, fractional.
countsHiddenbooleantrue when the creator hid likes and views, so the counts above are unreliable.
commentsDisabled / hasAudiobooleannull when the route does not report the flag.
isSponsoredbooleanPaid-partnership label. null — never false — when the route carries no such flag.
thumbnailUrl / thumbnailUrlsstring / arrayCover frame; the array is every rendition, largest first.
videoUrl / videoUrlsstring / arrayDirect MP4, no auth needed. Signed and time-limited.
width / heightnumberSource dimensions.
audioAssetIdstringGroup reels by this to rank sounds.
audioTitle / audioArtiststringTrack title and artist for licensed audio; Instagram's "Original audio" label and the creator's handle for original audio.
isOriginalAudiobooleantrue original, false licensed, null not reported.
productType / mediaTypestringAlways clips / reel for reel rows.
sourcestringWhich route produced the row: reels-tab, timeline-scan, profile-preview, single-reel or oembed-partial.

Account summary rows (type: "profile")

username, userId, fullName, profileUrl, reelsTabUrl, biography, externalUrl, profilePicUrl, followersCount, followingCount, postsCount, reelsCountReported, isVerified, isPrivate, isBusinessAccount, categoryName, businessEmail, businessPhoneNumber, plus the statistics: reelsScraped, totalPlays, avgPlays, medianPlays, maxPlays, avgLikes, avgComments, avgVideoDuration, playsPerFollower, engagementRatePercent, reelsPerWeek, newestReelAt, oldestReelAt.

Every statistic is a sample figure describing the reels this run collected — not a lifetime total. A run capped at 30 reels describes those 30. Counts Instagram declined to report are left out of the averages instead of being counted as zero.

FAQ

Do I need an Instagram account, cookies or a session id? No. Everything comes from Instagram's own public, logged-out endpoints.

How many reels can I get from one account? As many as the account has, subject to rate limiting. Pagination has no ceiling of its own — a verified run walked 9 consecutive pages with zero duplicates and no end in sight. The practical limit is Instagram's throttling, which is why the actor keeps partial results instead of discarding them.

Can I get comments on the reels? Not with this actor.

Why is playsCount null on some rows? Either the reel came from a route that does not report it (source tells you), or the creator hid their view counts (countsHidden: true). It is never a silent zero — a zero in this dataset means zero.

What happens if an account is private or does not exist? A private account gets a summary row marked isPrivate: true and no reels. A handle that does not exist is logged as a failure and skipped; one bad entry never stops the run.

Can I paste photo or carousel URLs into reelUrls? You can, but they are skipped with a warning. This actor returns reels only.

Does it work on accounts with pinned reels? Yes. Pinned reels appear first regardless of date; the date filter accounts for that and does not cut the walk short on them.