Instagram API Scraper With Reel Views & Audio Tracks
Pricing
from $5.99 / 1,000 results
Instagram API Scraper With Reel Views & Audio Tracks
Scrape Instagram data through a powerful Instagram API, including profiles, posts, Reel views, audio tracks, captions, hashtags, comments, and engagement metrics. Export structured JSON for analytics, automation, lead generation, content research, and social media monitoring.
Pricing
from $5.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Instagram Reel Scraper — Views, Audio Tracks and Engagement Rates
Instagram API Scraper With Reel Views & Audio Tracks reads a public creator's reel and video-post feed and returns view counts, watch length, direct MP4 renditions, per-view engagement rates, and full audio-track attribution — the two columns most Instagram post scrapers never populate. Every row is typed JSON, ready to pass straight into an LLM, a BI dashboard, or a monitoring pipeline. It talks to Instagram's own mobile API endpoints over plain HTTP — no login, no session cookie, no headless browser — so a run needs nothing from you but a list of profiles.
What is Instagram API Scraper With Reel Views & Audio Tracks?
It is an Apify Actor that reads a public Instagram profile's reels tab (or main post feed) and returns one structured row per video: viewCount, videoDuration, direct MP4 links, and four per-view engagement rates — viewsPerSecond, likesPerView, commentsPerView, engagementPerView — computed without needing a follower count. Every video row also carries the sound behind it: audioType, audioId, audioOwnerUsername, audioTitle, and a direct audioDownloadUrl.
No Instagram account, login, cookie, or session is required. The Actor sends anonymous requests to the same endpoints Instagram's own mobile app uses and reads only what a logged-out visitor already sees.
It is built for:
- 📊 Social media analysts and creator marketing teams ranking creators by real reel performance instead of follower count
- 🎵 Sound and trend researchers tracking which audio tracks are spreading between accounts, joined on
audioId - 🤖 AI engineers grounding an agent's answers in live reel metrics rather than a stale export
- 🎬 Video archivists and rights holders pulling direct MP4 links for content they already have rights to
Query controls exposed by the input schema: which feed to read (contentFeed), how many items per profile (maxVideosPerAccount), a view-count floor (minViewCount), a post-date cutoff (postedAfter), whether to keep only video rows (videoPostsOnly), how much of Instagram's MP4 rendition list to return (videoQuality), and whether to attach the source profile to each row (attachSourceProfile).
What data can you get with this Instagram reel scraper?
The Actor extracts five result types, selected by the contentFeed parameter, plus one accounting result type that documents targets it couldn't process.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
Reels & video posts (reels, posts) | viewCount, videoDuration, videoUrl/videoVariants, viewsPerSecond, likesPerView, commentsPerView, engagementPerView, audioType, audioId, audioTitle, audioOwnerUsername, audioDownloadUrl, remixesAllowed, plus caption, hashtags, mentions, likes, comments, timestamp, owner | Reel performance analysis, sound-trend tracking, creator benchmarking |
Photo & carousel posts (posts feed, non-video rows) | Same base fields; every view/audio column returns null — Instagram publishes no view metric for a photo | Full-feed content archiving alongside video metrics |
Profile details (details) | username, fullName, biography, followersCount, followsCount, postsCount, isVerified, isPrivate, isBusinessAccount, category | Lightweight profile lookup (partial — see Limitations) |
Caption mentions (mentions) | mentionedUsername, ownerUsername, postShortCode, postUrl, timestamp | Tracking who a creator tags in their own captions |
| Skipped or blocked targets (accounting rows) | inputUrl, errorReason, errorDetail, postsScanned, postsFiltered, postsEmitted | Auditing why a target returned nothing — never charged |
Per-view engagement rates
The four rate fields — viewsPerSecond, likesPerView, commentsPerView, engagementPerView — are computed directly from each video's own viewCount, without a follower-count lookup, so they work on any public creator in one pass. viewsPerSecond measures hook strength (views accumulated per second of runtime); the three per-view ratios normalize likes, comments, and total engagement against actual views rather than an assumed audience size, which is the fairer comparison across creators of very different follower sizes. None of the three competing Instagram reel/audio scrapers reviewed for this README (checked on the Apify Store, 2026-07-26) documents a computed per-view rate field — they return raw like/comment/play counts and leave the division to you. A rate is never fabricated from an incomplete numerator: if Instagram hides a video's like counter, likesPerView and engagementPerView come back null rather than a silently understated number.
{"shortCode": "DZpQwxqimz2","viewCount": 4915147,"videoDuration": 109.056,"viewsPerSecond": 45071.31,"likesPerView": 0.027601,"commentsPerView": 0.00024,"engagementPerView": 0.027841}
Audio track attribution
Every video row carries the sound behind it, read from the same clips_metadata object Instagram already sends with the post — zero extra HTTP requests. audioType distinguishes a creator's own original sound from a licensed track; audioId is the joinable key for "which other reels use this exact sound"; audioDownloadUrl links straight to the audio asset. audioTitle is populated only when a creator actually named their sound — Instagram's generic, localized "Original audio" placeholder ("Originalton", "오리지널 오디오", and 17 other language variants) is normalized to null rather than shipped as a fabricated track name.
{"audioType": "original","audioId": "27294158883577519","audioTitle": null,"audioOwnerUsername": "natgeo","audioDurationSec": 109.04,"audioIsExplicit": false,"remixesAllowed": false}
Why not build this yourself?
Meta's official Graph API is scoped to content your own connected Business or Creator account owns — it does not offer a general endpoint for pulling an arbitrary public profile's reel views, watch length, or audio attribution, so it does not cover this use case at all.
A DIY scraper against Instagram's own web endpoints hits three real obstacles this Actor already had to solve. First, endpoint churn: /api/v1/users/web_profile_info/ (the endpoint used to resolve a profile's numeric user id) now returns HTTP 429 on every exit, and /api/v1/clips/user/ (the dedicated reels endpoint) returns HTTP 403 on direct, datacenter, and residential connections alike — both reconfirmed live in-container on 2026-07-19. Second, login walls: comments, hashtag feeds, single-post lookups, and Instagram's own search endpoint (/api/v1/web/search/topsearch/, walled since 2025) all redirect to a login prompt when called logged-out. Third, blocking: sustained pulls need a proxy escalation ladder and retry logic, not a single requests.get.
Building and maintaining working replacements for each of these — and re-verifying them every time Instagram changes a response shape — is the ongoing cost a scraper like this one absorbs so a single run doesn't have to.
What's the difference between an Instagram audio downloader and a reel scraper with audio attribution?
An audio downloader extracts the raw sound file — an M4A stream you can drop into an editor and reuse. A reel scraper with audio attribution extracts metadata about the sound — who owns it, what it's called, how many views the reel using it got — without producing a playable audio file at all.
The distinction matters because the two jobs serve different decisions. A downloader answers "give me this clip's audio to remix or sample." An attribution scraper answers "which sound is this reel using, who does it belong to, and how well is content using it performing" — a research and monitoring question, not a re-use question. Instagram's own audio-remix ecosystem (the remixesAllowed flag on every row) is precisely why the second question exists: a sound's spread across creators is now itself a trend signal.
This Actor returns the second kind of data. Every reel row carries its audio fields (audioType, audioId, audioOwnerUsername, audioTitle, audioDownloadUrl) inline in the same JSON object as that reel's view and engagement metrics — joined by audioId, not delivered as a separate downloaded file. audioDownloadUrl does link to the audio asset if you want the file too, but the Actor's job is the structured record, not the extraction pipeline.
How to scrape Instagram reels with this Actor?
- Open Instagram API Scraper With Reel Views & Audio Tracks on the Apify Store and click Try for free
- Paste one or more public profile URLs or bare handles into
videoSources— for examplenatgeoorhttps://www.instagram.com/gymshark/ - Set the query controls you need:
contentFeedto pick the feed (defaultreels),maxVideosPerAccountfor volume,minViewCountto filter low-performing videos,postedAfterfor a date cutoff - Click Start — rows stream into the dataset live as each profile finishes
- Download the dataset as JSON or CSV, or read it through the Apify API
{"videoSources": ["natgeo", "gymshark"],"contentFeed": "reels","maxVideosPerAccount": 50,"minViewCount": 100000}
How to run multiple profiles in one job
videoSources is a list — paste as many profile URLs or handles as you need, and each is processed in turn within the same run, with a randomized 1.5–3 second delay between targets. There is no configurable concurrency: profiles are worked through sequentially, not in parallel, which is what keeps the request pattern looking like a single browsing session rather than a burst. To parallelize across many accounts, split your profile list across multiple Actor runs instead.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
videoSources | No | array | One or more public Instagram profiles — a profile URL (https://www.instagram.com/natgeo/) or a bare handle (natgeo). Profile targets are what this Actor is built for; single-post and hashtag URLs are still accepted for backward compatibility but are login-walled logged-out (see Limitations below). | ["natgeo", "https://www.instagram.com/gymshark/"] |
contentFeed | No | string | Which feed to read. Enum: "reels" (the creator's reels tab, default), "posts" (main post feed — photos included), "comments" (login-walled, returns an accounting row), "details" (partial profile lookup, logged-out), "mentions" (captions mentions), "stories" (not available — falls back to reels). | "reels" |
maxVideosPerAccount | No | integer | How many items to pull per profile before moving to the next one. Minimum 1, maximum 2400. Default 20. | 50 |
videoPostsOnly | No | boolean | Drop photos and photo-carousels, keeping only rows with a view count. Default false. | true |
minViewCount | No | integer | Only keep videos with at least this many views. A video whose view counter Instagram withholds is excluded, not assumed to pass. Minimum 0. Default 0. | 100000 |
postedAfter | No | string | Stop paging once posts get older than this. Absolute (2026-01-31) or relative (7 days, 2 months, 1 year). Times are UTC. No default — leave empty for no cutoff. | "30 days" |
includeAudioTracks | No | boolean | Add the audio-attribution columns (audioType, audioId, audioOwnerUsername, audioTitle, audioDurationSec, audioIsExplicit, audioDownloadUrl, remixesAllowed). Default true. | true |
videoQuality | No | string | How much of Instagram's MP4 rendition list to return. Enum: "highest" (one videoUrl at the top resolution, default), "all" (videoUrl plus a videoVariants array with width/height/bandwidth per rendition), "none" (metrics only, no media URLs). | "highest" |
attachSourceProfile | No | boolean | Add a parentData object ({name, type, url}) naming the source profile on each row. Default false. | false |
proxyConfiguration | No | object | Apify Proxy settings. Default is no proxy ({"useApifyProxy": false}) — this Actor was verified pulling real view and audio data over a direct connection. If Instagram pushes back it escalates automatically: shared datacenter → residential (3 sticky retries). | {"useApifyProxy": false} |
Common pitfall: pasting a hashtag URL or a single post/reel URL into videoSources instead of a profile. Those surfaces are still accepted for backward compatibility, but Instagram login-walls hashtag feeds, single-post lookups, and comments logged-out — you'll get an uncharged accounting row explaining the block instead of data. Point videoSources at profile URLs or handles for view counts, watch length, and audio attribution.
Example input
{"videoSources": ["natgeo", "https://www.instagram.com/gymshark/"],"contentFeed": "reels","maxVideosPerAccount": 50,"videoPostsOnly": false,"minViewCount": 100000,"postedAfter": "30 days","includeAudioTracks": true,"videoQuality": "all","attachSourceProfile": false,"proxyConfiguration": { "useApifyProxy": false }}
⬆️ Output
Typed, normalized JSON with a consistent schema across runs. Rows are pushed to the dataset live as each video is scraped, not batched at the end. Export as JSON, CSV, Excel, or read the dataset through the Apify API.
The Apify Console renders seven preset table views over the same dataset — 🎬 Reel performance & audio (default, 25 columns), 🔊 Audio tracks, 🎞️ Video files, 📷 Base post fields, 🧾 Skipped & blocked targets, 🪪 Profile details, and 🔖 Mentions — but every view is a curated subset. A reel row actually carries roughly 45 keys; the default view surfaces 25 of them. The full field list below is read directly from the row-building code, not the view definition.
Every reel or post row carries:
id, type ("Video" / "Photo" / "Sidecar" — reels are always forced to "Video"), shortCode, caption, hashtags, mentions, url, commentsCount, firstComment, latestComments, dimensionsHeight, dimensionsWidth, displayUrl, images, alt, likesCount, timestamp, childPosts, ownerFullName, ownerUsername, ownerId, isCommentsDisabled (true/false/null — null when Instagram omits the flag rather than assuming it's off), inputUrl, section (which feed produced the row: posts, reels, details, mentions), and — only when attachSourceProfile: true — parentData.
Plus, added by this Actor's enrichment (view/watch/audio columns are null on a photo — Instagram publishes no view metric for one):
isVideo, viewCount, videoDuration, videoUrl, videoVariants (populated only when videoQuality: "all"), videoWidth, videoHeight, hasAudio, productType (Instagram's own classification — clips, feed, carousel_container), viewsPerSecond, likesPerView, commentsPerView, engagementPerView, audioType, audioId, audioTitle, audioOwnerUsername, audioDurationSec, audioIsExplicit, audioDownloadUrl, remixesAllowed, scrapedAt.
A details-mode profile row carries: id, username, fullName, biography, externalUrl, followersCount, followsCount, postsCount, isVerified, isPrivate, isBusinessAccount, profilePicUrl, profilePicUrlHD, category, inputUrl, section.
A mentions-mode row carries: type, mentionedUsername, postShortCode, postUrl, ownerUsername, timestamp, inputUrl, section.
An accounting row (pushed when a target returns nothing — see Billing) carries: type, isAccountingRow, inputUrl, errorReason, errorDetail, postsScanned, postsFiltered, postsEmitted, scrapedAt, section.
Scraped results
[{"id": "3441192837465012","type": "Video","shortCode": "DZpQwxqimz2","caption": "Photos by @thomaspeschak | Off the coast of Cabo Pulmo...","hashtags": ["oceans", "conservation"],"mentions": ["thomaspeschak"],"url": "https://www.instagram.com/p/DZpQwxqimz2/","commentsCount": 1181,"firstComment": "","latestComments": [],"dimensionsHeight": 1920,"dimensionsWidth": 1080,"displayUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/thumb1.jpg","images": ["https://instagram.fxyz1-1.fna.fbcdn.net/thumb1.jpg"],"alt": null,"likesCount": 135660,"timestamp": "2026-07-14T15:02:11.000Z","childPosts": [],"ownerFullName": "National Geographic","ownerUsername": "natgeo","ownerId": "787132","isCommentsDisabled": null,"inputUrl": "natgeo","section": "reels","isVideo": true,"viewCount": 4915147,"videoDuration": 109.056,"videoUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/reel1.mp4","videoVariants": [],"videoWidth": 1080,"videoHeight": 1920,"hasAudio": true,"productType": "clips","viewsPerSecond": 45071.31,"likesPerView": 0.027601,"commentsPerView": 0.00024,"engagementPerView": 0.027841,"audioType": "original","audioId": "27294158883577519","audioTitle": null,"audioOwnerUsername": "natgeo","audioDurationSec": 109.04,"audioIsExplicit": false,"audioDownloadUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/audio1.m4a","remixesAllowed": false,"scrapedAt": "2026-07-26T09:41:03.000Z"},{"id": "3441182736451923","type": "Video","shortCode": "DZoAbc12xyz","caption": "New drop, straight from the gym floor 💪","hashtags": ["gymshark", "training"],"mentions": [],"url": "https://www.instagram.com/p/DZoAbc12xyz/","commentsCount": 402,"firstComment": "","latestComments": [],"dimensionsHeight": 1920,"dimensionsWidth": 1080,"displayUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/thumb2.jpg","images": ["https://instagram.fxyz1-1.fna.fbcdn.net/thumb2.jpg"],"alt": null,"likesCount": 28914,"timestamp": "2026-07-12T08:15:44.000Z","childPosts": [],"ownerFullName": "Gymshark","ownerUsername": "gymshark","ownerId": "1573262","isCommentsDisabled": false,"inputUrl": "https://www.instagram.com/gymshark/","section": "reels","isVideo": true,"viewCount": 612340,"videoDuration": 24.5,"videoUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/reel2.mp4","videoVariants": [],"videoWidth": 1080,"videoHeight": 1920,"hasAudio": true,"productType": "clips","viewsPerSecond": 24993.47,"likesPerView": 0.047223,"commentsPerView": 0.000657,"engagementPerView": 0.04788,"audioType": "licensed","audioId": "1029384756192837","audioTitle": "Level Up","audioOwnerUsername": "beatlab_official","audioDurationSec": 30.0,"audioIsExplicit": false,"audioDownloadUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/audio2.m4a","remixesAllowed": true,"scrapedAt": "2026-07-26T09:41:19.000Z"},{"id": "3441173625340814","type": "Video","shortCode": "DZnZyx98wvu","caption": "Recovery day essentials","hashtags": [],"mentions": [],"url": "https://www.instagram.com/p/DZnZyx98wvu/","commentsCount": 88,"firstComment": "","latestComments": [],"dimensionsHeight": 1920,"dimensionsWidth": 1080,"displayUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/thumb3.jpg","images": ["https://instagram.fxyz1-1.fna.fbcdn.net/thumb3.jpg"],"alt": null,"likesCount": 5104,"timestamp": "2026-07-09T18:30:02.000Z","childPosts": [],"ownerFullName": "Gymshark","ownerUsername": "gymshark","ownerId": "1573262","isCommentsDisabled": false,"inputUrl": "https://www.instagram.com/gymshark/","section": "reels","isVideo": true,"viewCount": 98214,"videoDuration": 15.2,"videoUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/reel3.mp4","videoVariants": [],"videoWidth": 1080,"videoHeight": 1920,"hasAudio": true,"productType": "clips","viewsPerSecond": 6461.45,"likesPerView": 0.051968,"commentsPerView": 0.000896,"engagementPerView": 0.052864,"audioType": "original","audioId": "88192736451029384","audioTitle": null,"audioOwnerUsername": "gymshark","audioDurationSec": 15.2,"audioIsExplicit": false,"audioDownloadUrl": "https://instagram.fxyz1-1.fna.fbcdn.net/audio3.m4a","remixesAllowed": true,"scrapedAt": "2026-07-26T09:41:32.000Z"}]
How can I use the data extracted with this Actor?
- 📊 Social media analysts and creator marketing teams pull
viewCount,viewsPerSecond, andengagementPerViewacross a client's competitor list to rank creators by real reel performance instead of follower count, then useaudioIdto spot which sounds their top performers share. - 🤖 AI engineers and LLM developers ground an agent in live data: the agent calls the Actor with a profile list, receives typed JSON back, and passes
viewCount,videoDuration, and the audio fields straight into the model's context — no export, no scraping code inside the agent itself. - 🎵 Market and trend researchers group reels by
audioIdacross many profiles to watch a specific sound spread between creators over successive runs, and useaudioOwnerUsernameto trace which account originated it. - 🎬 Product and growth teams planning a content calendar diff
videoDurationagainstviewsPerSecondacross a competitor's recent reels to find the runtime range that actually holds attention, rather than guessing from raw view counts alone.
📈 How do you monitor Instagram reel engagement rate over time?
Engagement-rate monitoring is the discipline of tracking how a creator's per-view performance moves between runs, rather than reading a single snapshot. Because viewsPerSecond, likesPerView, commentsPerView, and engagementPerView are computed fresh on every run from that run's own viewCount, re-running this Actor against the same profile list on a schedule produces a genuine time series, not a static export.
The fields worth diffing between runs are viewCount and engagementPerView on the same shortCode — a rising viewCount with a falling engagementPerView tells you a reel is reaching more people but converting fewer of them, which raw view counts alone hide. audioId is worth watching too: the same sound appearing across a growing number of ownerUsername values between runs is the earliest signal a sound is starting to spread.
A concrete loop: schedule this Actor to run daily or weekly against a fixed videoSources list, keyed on shortCode for reels that persist across runs. After each run, join the new dataset against the previous one on shortCode, compute the delta in viewCount and engagementPerView, and alert when a reel's engagement rate crosses a threshold you set — a competitor's reel suddenly outperforming its own view growth is exactly the kind of change a single snapshot would never surface.
This Actor has no built-in scheduler of its own; point it at Apify's Schedules feature in the Apify Console to automate the recurring run, or trigger it from an external cron job through the Apify API.
Integrate Instagram API Scraper With Reel Views & Audio Tracks and automate your workflow
Instagram API Scraper With Reel Views & Audio Tracks works with any language or tool that can send an HTTP request, since it runs as a standard Apify Actor.
REST API with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("<YOUR_USERNAME>/instagram-api-scraper-with-reel-views-audio-tracks").call(run_input={"videoSources": ["natgeo", "gymshark"],"contentFeed": "reels","maxVideosPerAccount": 50,"minViewCount": 100000,})for reel in client.dataset(run["defaultDatasetId"]).iterate_items():if reel.get("isVideo"):print(reel["ownerUsername"], reel["viewCount"], reel["audioOwnerUsername"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request and read a JSON response.
Scheduled monitoring and delivery
The Actor has no delivery mechanism of its own — no built-in webhook, no email. Use the Apify Console's Schedules to run it on a recurring cadence, and an Apify Webhook on the run's ACTOR.RUN.SUCCEEDED event to push each run's dataset URL to your own endpoint, Slack, or a downstream pipeline.
Is it legal to scrape Instagram reels?
Scraping publicly accessible data is broadly permissible in the US and EU when no authentication is bypassed, and this Actor collects only what an anonymous, logged-out visitor already sees on a public profile — it does not access private accounts, and it never uses a login, cookie, or session.
Usernames, full names, biographies, and profile pictures are personal data about an identifiable individual, so GDPR (in the EU/UK) and CCPA-style regimes (in applicable US states) can attach to that portion of the output, even though the reel performance metrics (view counts, engagement rates) are not personal data on their own. hiQ Labs, Inc. v. LinkedIn Corp., 938 F.3d 985 (9th Cir. 2019), is the most-cited US precedent holding that scraping data a platform has made publicly accessible does not, by itself, violate the Computer Fraud and Abuse Act — though it does not resolve claims under a platform's own terms of service.
Scraping for a one-off research pull and scraping to train a model or run continuous monitoring carry different risk profiles, particularly around personal data retention. Consult your legal team for commercial use cases involving bulk storage of creator data.
❓ Frequently asked questions
Which Instagram feed can I choose, and what does each one return?
Set contentFeed. "reels" (default) reads the creator's reels tab — every row is a video with a view count. "posts" reads the main feed, where photos and carousels come back with null view/audio columns. "details", "mentions", and "comments" switch to profile lookup, caption-mention extraction, and comment collection respectively, though comments are login-walled and typically return an accounting row instead of data.
Does this Actor support region or language targeting?
No. There is no locale or country parameter in the input schema — requests are sent with a fixed Accept-Language: en-US,en;q=0.9 header, but that only affects Instagram's own UI strings (like the generic audio-title placeholder this Actor already filters out), not which content is returned. Captions, hashtags, and audio titles come back in whatever language the creator actually posted in.
How does this Actor handle Instagram's anti-bot measures?
Every run starts on a direct connection with no proxy. If Instagram responds with a blocking status (401, 403, 407, 429, 451, or 503), the Actor escalates automatically — direct → shared datacenter → residential — retrying up to 3 times once on residential, then staying there for the rest of the run. You can also force a starting tier through proxyConfiguration. The final proxy tier used is logged at the end of every run.
Does this Actor extract per-view engagement rates?
Yes. viewsPerSecond, likesPerView, commentsPerView, and engagementPerView are computed on every video row from that video's own viewCount, with no follower-count lookup needed. They come back null on photo rows (Instagram has no view metric for a photo) and whenever Instagram hides a video's like or view counter, rather than a fabricated 0.
How many results does this Actor return per profile?
Up to maxVideosPerAccount, capped at 2,400 — the schema's own published maximum, which matches the underlying engine's real paging ceiling of 200 pages × 12 items. Requesting more than 2,400 through the input schema isn't possible; the field's maximum is enforced at that number.
Is scraping public Instagram data legal in the United States?
Generally yes for data a platform has made publicly accessible without login, per hiQ Labs, Inc. v. LinkedIn Corp., 938 F.3d 985 (9th Cir. 2019) — though that case addressed the Computer Fraud and Abuse Act specifically, not a platform's own terms of service, contract law, or personal-data regulations, which can still apply. See the legal section above for the personal-data framing that applies to profile fields.
How do I use this Actor to monitor a reel's engagement rate over time?
Schedule a run against the same videoSources list on a recurring cadence through Apify's Schedules, and diff viewCount and engagementPerView on matching shortCode values between runs. A widening gap between rising views and falling per-view engagement is the signal a single snapshot can't show you.
Does this Actor work with Claude, ChatGPT, and AI agent frameworks?
Yes, as a callable HTTP endpoint through the Apify API — there is no MCP server for this specific Actor. Any agent framework that can make an HTTP request (LangChain, CrewAI, a custom tool definition) can invoke it and receive typed JSON with viewCount, audioId, and the engagement-rate fields ready to reason over, enabling a grounded answer instead of a guess from training data.
How does this Actor compare to other Instagram reel and audio scrapers?
Checked on the Apify Store, 2026-07-26: scrapers_lat/instagram-reels-scraper advertises 45+ fields per reel including follower counts, tagged users, and business contact details, and sorts/filters on likes, views, and dates before you pay — a broader creator-research field set than this Actor, but its own FAQ notes that Instagram hides the view counter on many reels, and it does not document computed per-view rate fields. kinaesthetic_millionaire/instagram-reels-audio-scraper finds reels by a given audio URL rather than by profile, and returns raw play/like/comment counts with no per-view ratios. codenest/instagram-reels-audio-downloader extracts the raw M4A audio file and its codec/bitrate metadata — a different job entirely (see the audio-downloader comparison section above), with no view counts or engagement data at all. This Actor's difference is per-view engagement rates computed on every video row, plus audio attribution that reports a missing creator title as null rather than Instagram's generic placeholder.
Can I use this Actor without managing proxies or an Instagram login?
Yes. No Instagram account, cookie, or session is ever required or accepted by this Actor's input schema — it runs fully logged-out. Proxy handling is optional and automatic: leave proxyConfiguration at its default and the Actor starts direct and escalates to Apify's own datacenter and residential proxies only if Instagram pushes back. You never create a proxy account or rotate an IP yourself.
🔗 Related scrapers
| Scraper Name | What it extracts |
|---|---|
| Instagram Reel Engagement Analyzer | Engagement rate and like-to-play ratio computed for individual reel URLs you supply, one at a time |
| Instagram Hashtag Engagement Scraper | Posts and reels by hashtag, ranked and filtered by engagement score (requires an Instagram session ID) |
| Instagram Profile Growth Monitor | Follower, following, and post-count deltas for a watchlist of profiles across scheduled runs |
| Instagram Influencer Mention Finder | Posts where other accounts tagged a target profile, ranked by the mentioning author's reach |
| Instagram Comments Scraper | Comments and threaded replies from posts and reels (requires an Instagram session ID) |
💬 Your feedback
Found a bug or missing a field this Actor could reasonably return? Open an issue on the Actor's Issues tab on Apify — reports that include the exact input JSON and the profile you ran it against are the fastest to reproduce and fix.