Instagram Reels Scraper (Pay-Per-Event) avatar

Instagram Reels Scraper (Pay-Per-Event)

Pricing

from $1.00 / 1,000 reels

Go to Apify Store
Instagram Reels Scraper (Pay-Per-Event)

Instagram Reels Scraper (Pay-Per-Event)

Scrape Instagram Reels by profile, user ID, or direct reel URL. Returns all four Instagram play counters plus a playCountSource field, so view numbers never come back silently empty. Run-level dedup means you are never billed twice for the same reel.

Pricing

from $1.00 / 1,000 reels

Rating

0.0

(0)

Developer

Arnas

Arnas

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

5

Monthly active users

10 days ago

Last modified

Share

Instagram Reels Scraper

Scrape Instagram Reels by profile, numeric user ID, or direct reel URL. HTTP-only, with no login or user-supplied cookies. Pay-per-event: you pay for reels that actually land in your dataset.

What you get

Every row carries the full reel record — engagement, media URLs, audio, music attribution, tagged users, location, paid-partnership flags, and timestamps. See the dataset schema for all 41 fields.

View counts that don't silently come back empty

Instagram deprecated view_count and now populates its play counters inconsistently depending on which surface serves the response. Scrapers that read one field return null views on a large share of reels.

This actor emits all four counters on every row —

FieldInstagram source
videoPlayCountplay_count
igPlayCountig_play_count
videoViewCountview_count (legacy, often null)
fbPlayCountfb_play_count

— plus playCountSource, which names the field the number came from. If Instagram returned no counter at all, playCountSource is null and you know it's missing rather than zero.

Highest-resolution video, explicitly

videoUrl is selected by pixel count across every rendition Instagram offers, so you get the 1080p file when one exists instead of whichever rendition happened to be listed first.

Run-level dedup and event-aware billing

Reels are deduplicated by Instagram media ID across the whole run. Pass a profile and one of its reel URLs in the same input and you are charged once. Output admission is serialized, and each row uses Apify's event-aware dataset write so budget admission, storage, and the reel charge result share one SDK operation. Failed writes remain retryable, and no later row is admitted after the charge limit is reached.

Input

FieldTypeDefaultNotes
usernamearrayRequired. Usernames, profile URLs, numeric user IDs, or direct reel URLs.
resultsLimitinteger25Reels per profile. Ignored for direct reel URLs.
onlyPostsNewerThanstringYYYY-MM-DD, a full ISO timestamp, or relative (3 days, 2 weeks). UTC.
skipPinnedPostsbooleanfalseExclude reels pinned to the top of the profile.
skipTrialReelsbooleanfalseExclude trial reels. Reels whose trial status Instagram does not report are kept.
customMapFunctionstringArrow function applied to each row before storage.
maxRequestRetriesinteger5Retries on a fresh session when blocked.
proxyConfigurationobjectApify RESIDENTIALInstagram blocks datacenter IPs.
{
"username": ["natgeo", "https://www.instagram.com/nasa/"],
"resultsLimit": 50,
"onlyPostsNewerThan": "3 months",
"skipPinnedPosts": true
}

Migrating from apify/instagram-reel-scraper

Input field names and semantics match, so most runs transfer unchanged. Differences:

  • username additionally accepts numeric user IDs.
  • includeSharesCount, includeTranscript, and includeDownloadedVideo are not implemented here, so those add-on charges do not exist. Core reel pricing is identical.
  • Extra fields on every row: playCountSource, igPlayCount, fbPlayCount, fbLikeCount, reshareCount, isTrialReel, audioUrl, scrapedAt.

Output

{
"id": "3512345678901234567",
"type": "Video",
"shortCode": "DAbCdEfGhIj",
"url": "https://www.instagram.com/reel/DAbCdEfGhIj/",
"caption": "Sunset over #Lisbon",
"hashtags": ["lisbon"],
"likesCount": 1234,
"commentsCount": 42,
"videoPlayCount": 98765,
"igPlayCount": 98765,
"videoViewCount": null,
"playCountSource": "play_count",
"videoDuration": 17.5,
"videoUrl": "https://.../1080.mp4",
"displayUrl": "https://.../thumb.jpg",
"ownerUsername": "natgeo",
"timestamp": "2026-08-12T14:20:00.000Z"
}

Pricing

Pay-per-event, identical to the reference actor's core tier schedule:

Apify planActor startPer reel
Free$0.001$0.0026
Bronze$0.001$0.0023
Silver$0.001$0.0014
Gold$0.001$0.0010
Platinum$0.001$0.0008
Diamond$0.001$0.0004

On the Free plan, 1,000 reels in one run cost $2.60 + $0.001. Rows skipped by a filter, by dedup, or by a failed push are not charged.

How it works

The actor first opens a normal public Instagram page to obtain an ephemeral logged-out session. Profile pages expose the numeric user ID in their server-rendered Relay data. In that same proxy/session, the actor pages Instagram's unified profile feed and keeps only product_type: "clips". Each page gets a fresh bootstrap, so a blocked cookie can rotate cleanly instead of poisoning every retry.

Direct reel URLs are parsed from the public page's server-rendered media object. The actor also checks the owner's current feed for richer play counters when the reel is recent enough to appear there; failure of this optional enrichment never discards the reel.

Residential proxies are required: Instagram blocks datacenter IP ranges.

Limitations

  • Public profiles only. Private accounts are skipped with a warning; there is no login.
  • A /p/ or /reel/ URL pointing at a photo rather than a reel is reported and skipped.
  • isTrialReel is null when Instagram does not report trial status; skipTrialReels then keeps the reel rather than guessing.
  • No transcript, video download, or shares-count add-ons.