Instagram Reel Scraper - $0.18 per 1,000 Reels
DeprecatedPricing
from $0.18 / 1,000 reel scrapeds
Instagram Reel Scraper - $0.18 per 1,000 Reels
DeprecatedGive it Instagram handles and get that profile's reels feed newest-first: play count, likes, comments, duration, video URL, cover image and audio. No login, no cookies, no API key. The cheapest Instagram reel scraper on the market at $0.18 per 1,000 reels.
Pricing
from $0.18 / 1,000 reel scrapeds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Instagram Reel Scraper
Give it Instagram handles. Get back that profile's reels tab, newest first — one row per reel, with play count, likes, comments, duration, the video file URL, the cover image, and the audio track the reel was made with.
No Instagram login. No session cookie. No API key. No proxy of your own.
This is the cheapest Instagram reel scraper on the market: $0.18 per 1,000 reels.
Price
$0.18 per 1,000 reels, plus $0.0000125 to start a run (that start fee is charged once per gigabyte of run memory; at the default 1 GB it is a bit over one thousandth of a cent).
You are charged once per real reel written to the dataset, and for nothing else:
- the labelled sample row you get when you run with empty input — free
- diagnostic rows (private account, handle does not exist, Instagram refused) — free
- pages fetched, retries, proxy addresses burned — free
| Reels | Cost |
|---|---|
| 25 | $0.0045 |
| 250 | $0.045 |
| 1,000 | $0.18 |
| 10,000 | $1.80 |
| 100,000 | $18.00 |
One event, one price, every plan
$0.18 per 1,000 is the rate on the free plan and on every paid plan alike — there are no volume tiers to climb and no minimum spend, so the table above is what you pay from your very first run.
There is also only one billable event. This Actor has no paid add-ons: play counts, likes, comments, duration, dimensions, the video file URL, the cover image, the audio track and the co-author list are all fields of the same reel row, not extras metered separately. What it does not do is equally deliberate — it reads a profile's reels tab and nothing else. It does not transcribe audio, download and re-host video files, or resolve single reel URLs, so if you need those, this is the wrong tool rather than a cheaper one.
Where the money actually goes at scale. A page is always 12 reels (see Limits), so 1,000 reels
is roughly 84 requests — the cost is dominated by the per-reel event, not by run time. A daily
monitor over 30 accounts at 25 reels each is 750 reels, $0.135 a day, about $4 a month. Add
onlyPostsNewerThan: "1 day" and you pay only for reels that are genuinely new.
Input
| Field | What it does |
|---|---|
usernames | One entry per profile. "nasa", "@nasa", "https://www.instagram.com/nasa/" or a numeric profile id all work. |
resultsLimit | Reels per profile, newest first. Default 25, maximum 1000. |
onlyPostsNewerThan | Stop at a date. 2026-01-31, a full ISO timestamp, or a relative value like 3 months / 2 weeks / 7 days. UTC. |
skipPinnedPosts | Leave out reels the account pinned to the top of its reels tab — those are usually much older than the rest. |
username, startUrls | Accepted aliases for usernames. Input field names follow the common conventions used across similar Actors, so an input written for another Instagram reel Actor usually runs here without editing. |
proxyConfiguration | Optional. Leave it empty and the Actor rotates Apify datacenter addresses, which is what works best here. |
{"usernames": ["nasa", "natgeo", "nike"],"resultsLimit": 50,"onlyPostsNewerThan": "3 months","skipPinnedPosts": true}
Run it with no input at all and you get one labelled sample row, uncharged, showing the exact shape of a result before you spend anything.
Output
One row per reel. A real row from a run on nasa, trimmed only where the video URL would run off the
page:
{"type": "Video","productType": "clips","id": "3963765146907609231","shortCode": "DcCH2ZygIiP","url": "https://www.instagram.com/reel/DcCH2ZygIiP/","caption": "America's newest and most exciting aerospace technology expo and air show is landing at @NASAKennedy in Florida on Nov. 7-8. … #NASA #MaxPower #America250","hashtags": ["NASA", "MaxPower", "America250"],"mentions": ["NASAKennedy"],"videoPlayCount": 2441421,"videoViewCount": 2441421,"likesCount": 43361,"commentsCount": 429,"videoDuration": 76.69300079345703,"videoUrl": "https://scontent-ord5-2.cdninstagram.com/o1/v/t2/f2/m86/AQNh2ps9dzDCDRClcPrhnvk6…mp4","displayUrl": "https://scontent-ord5-2.cdninstagram.com/v/t51.2885-15/…jpg","dimensionsWidth": 1080,"dimensionsHeight": 1920,"timestamp": "2026-08-14T18:41:26.000Z","takenAtTimestamp": 1786737686,"ownerUsername": "nasa","ownerFullName": "NASA","ownerId": "528817151","ownerIsVerified": true,"coauthorUsernames": [],"isPinned": false,"isPaidPartnership": false,"hasAudio": true,"audioId": "37739766162335392","audioTitle": "Original audio","audioArtist": "nasa","audioIsOriginal": true,"audioDurationMs": 76676,"inputUsername": "nasa","inputUrl": "https://www.instagram.com/nasa/reels/","scrapedAt": "2026-08-15T02:12:44.318Z"}
Field coverage
Measured over a real 100-reel run on nasa, not estimated:
| Field | Present |
|---|---|
id, shortCode, url, timestamp, ownerUsername, ownerId | 100% |
videoPlayCount, videoViewCount, likesCount, commentsCount | 100% |
videoDuration, videoUrl, displayUrl, dimensionsWidth, dimensionsHeight | 100% |
audioTitle, audioArtist, audioIsOriginal | 100% |
hashtags (non-empty) | 41% |
hashtags is empty on the rest because those captions genuinely have no hashtags — an empty array is
the honest answer. Missing values are null, never a guess.
videoPlayCount and videoViewCount carry the same number — Instagram now serves a single play
count for reels, and both names are kept so a pipeline written against either one keeps working.
Output field names follow the conventions used across Instagram reel Actors, so switching over usually means changing the Actor id and nothing else.
Limits
Read this before you build on it.
- A page is always 12 reels. Instagram's clips endpoint accepts a
page_sizeparameter and then ignores it — 12, 20, 30, 50 and 100 all returned exactly 12 items and a byte-identical body. SoresultsLimit: 500is 42 requests, not 5. It still runs, it is just not instant. - Public accounts only. A private account returns a free diagnostic row saying so. There is no login here and no way around that.
- Collab reels appear. If another account posted a reel and this account is a co-author,
Instagram shows it in the reels tab and so does this Actor.
ownerUsernameis then the poster, not the account you asked for, andcoauthorUsernameslists the collaborators. That mirrors what a person sees on the page. - No single reel URLs. This scrapes a profile's reels feed. Paste a
/reel/<code>/URL and you get a free diagnostic row telling you so, not a charge. Instagram's keyless single-media endpoint is login-walled (6/6 attempts returned 429 from fresh addresses in testing). - No share counts, no transcripts, no downloaded video files. Share count is not in the payload this reads. Transcription and video downloading are deliberately out of scope — they are what makes other reel scrapers expensive.
- Video URLs expire. Instagram's CDN links are signed and time-limited, typically hours. Fetch
the file promptly if you need a copy; the reel
urlandshortCodestay valid forever. videoDurationis in seconds, as a float (76.693), not milliseconds.- Very deep history is capped at 1,000 reels per profile by
resultsLimit.
FAQ
Do I need an Instagram account, cookie or token? No. Nothing to log in to, nothing to paste, nothing to keep alive.
Does it work on any public profile? Yes — personal, creator and business accounts. Private accounts are not readable by anyone who does not follow them, so they return a free diagnostic row instead.
What does it cost to scrape 1,000 Instagram reels? $0.18, plus a start fee of $0.0000125 per gigabyte of run memory.
How fast is it? 100 reels from one profile in 31 seconds, on the platform, on default settings. A page is 12 reels, so a bigger pull is mostly page count: 12 reels across two profiles finished in 11 seconds.
Are the play counts real?
Yes, they are the numbers Instagram itself serves to the reels tab: play_count, like_count,
comment_count, straight through with no estimation.
Can I get reels published after a certain date only?
Yes — onlyPostsNewerThan. Pinned reels are handled correctly: an old pinned reel sitting at the top
of the tab does not end the walk early.
Can I export to CSV or Excel? Yes. Apify exports the dataset as JSON, CSV, Excel or XML, and the same data is on a REST endpoint.
What happens if a run finds nothing? You get an uncharged diagnostic row explaining why, and the run finishes as succeeded. You are never charged for a reel you did not receive.
Is this affiliated with Instagram or Meta? No. It reads publicly visible data. Check Instagram's terms and your own local rules before using the output commercially.
How it works
Instagram's reels tab is served by POST /api/v1/clips/user/ — the same call the website makes when
you open instagram.com/<handle>/reels/. Three things had to line up to call it without an account,
and each one was measured rather than assumed:
- TLS fingerprint. Plain Node gets
401 require_loginon the first request. The same request through a real Chrome handshake returns HTTP 200 and a full payload from the same address in the same second. The block was never about the IP. - A CSRF token. The POST answers 403 without one.
GET /data/shared_data/is a 34 KB public endpoint that hands backconfig.csrf_tokenand the cookies that go with it, so the session is built from that rather than from a login. - A fresh exit address on refusal. These endpoints are metered per IP, and a spent address is
answered with
401 "Please wait a few minutes"— not a 403, and not a 429. Waiting on it does nothing, so a refusal builds a brand-new session on a different datacenter address instead.
Datacenter addresses, not residential. The payload is about 53 KB per reel; at the $8/GB residential rate that would be $0.42 of bandwidth per 1,000 reels — more than twice this Actor's whole price. Rotating datacenter exits costs nothing per gigabyte and gives a much larger pool to hop around, which is exactly what a per-IP meter needs. That is why this can be the cheapest Instagram reel scraper on Apify and still make money.