Instagram Reels Scraper — Video, Audio & Thumbnail Assets avatar

Instagram Reels Scraper — Video, Audio & Thumbnail Assets

Pricing

$14.99/month + usage

Go to Apify Store
Instagram Reels Scraper — Video, Audio & Thumbnail Assets

Instagram Reels Scraper — Video, Audio & Thumbnail Assets

Scrapes Reels from Instagram by profile, hashtag, or explore feed, capturing video URLs, captions, hashtags, audio details, thumbnails, views, likes, comments, and timestamps. Ideal for trend research, influencer analysis, and large-scale Reels data extraction

Pricing

$14.99/month + usage

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

32

Total users

5

Monthly active users

3 hours

Issues response

3 days ago

Last modified

Share

Instagram Reels Scraper — Extract Video, Audio and Thumbnail Assets

Instagram Reels Scraper — Video, Audio & Thumbnail Assets scrapes public Instagram Reels by creator handle and returns typed JSON for every reel plus every media-quality asset Instagram's own payload already carries: every bitrate/resolution in video_versions, an isolated audio-only track, and the scrubber thumbnail sprite grid used for the seek bar. Unlike scraping frameworks that return raw HTML, it returns typed JSON — ready for your model, your database, or your pipeline without any parsing. No Instagram login is required. This guide covers every input and output field, plus how content, research, and archival teams deploy it in production.

🧭 What Does Instagram Reels Scraper — Video, Audio & Thumbnail Assets Do?

Instagram Reels Scraper — Video, Audio & Thumbnail Assets takes one or more Instagram creator handles, walks each creator's Reels timeline through Instagram's own logged-out clips/user endpoint, and returns one structured row per reel — caption, engagement, comments, music credit, and carousel children — plus three asset layers already sitting in the same payload: every video quality Instagram generated, the isolated original-audio track, and the scrubber/thumbnail sprite grid. No Instagram account, login, or session cookie is required; every field and every download resolves from the same public, logged-out payload the base scraper already fetches.

Key capabilities:

  • Bulk scraping by username, @handle, or full profile URL, with a per-creator result cap
  • Every bitrate/resolution Instagram already generated for the reel, ranked highest → lowest (videoVersions)
  • Selective multi-quality video download to the Key-Value Store — highest only, lowest only, or all qualities (videoQualityMode)
  • Isolated audio-only track download, independent of the video toggle (downloadAudioTrack)
  • Scrubber/thumbnail sprite-grid metadata and download (captureThumbnailGrid)
  • Optional caption/spoken-audio transcript extraction (generateCaptionTranscript)
  • Date filtering, pinned-post skipping, and share-count enrichment

⚡ Features & Capabilities

The Actor combines a standard Reels-scraping engine with an asset-harvesting layer built on fields Instagram's API already returns for free — no extra requests for the metadata, only for the actual file downloads.

Core features

  • One row per reel with shortCode, caption, hashtags, mentions, likesCount, commentsCount, videoViewCount, videoPlayCount, timestamp, and scrapedAt
  • Every video quality exposed, not just one — videoVersions is a ranked array of every resolution/bitrate Instagram generated, each with rank, isHighest, isLowest, width, height, bandwidth, and url
  • Quality-selectable downloadvideoQualityMode (highest / lowest / all) controls which tier(s) get saved to the Key-Value Store under downloadedVideoVersions, each entry carrying its own kvKey and kvUrl
  • Isolated audio-only trackaudioUrl is the raw resolved stream URL; downloadedAudioUrl is the Key-Value Store link once downloadAudioTrack is on
  • Scrubber/thumbnail sprite gridscrubberSpritesheet exposes the full grid metadata (sprite dimensions, thumbnails-per-row, per-thumbnail duration) and downloadedThumbnailGridUrl holds the saved file
  • Comment and music contextlatestComments (up to 12 per reel), firstComment, and musicInfo (artist, song name, original-audio flag)
  • Carousel supportchildPosts for sidecar/carousel items nested inside a reel-adjacent post
  • Backward-compatible input — every base field name (username, resultsLimit, includeDownloadedVideo, etc.) still works as a fallback alongside the re-expressed names (creatorHandles, maxReelsPerCreator, downloadVideoAssets)

How does Instagram Reels Scraper — Video, Audio & Thumbnail Assets work inside AI coding agents?

The Actor is callable through Apify's own MCP Server, which exposes any Apify Actor as a tool an MCP-compatible agent can invoke mid-task:

npx -y @apify/actors-mcp-server --actors Scrapio/instagram-reels-scraper-video-audio-thumbnail-assets

Once registered, an agent running in Claude Desktop, Claude Code, or Cursor can call the Actor directly — passing creator handles and getting back typed reel rows with asset links — without leaving the IDE or writing a scraping script by hand.

Instagram Reels Scraper — Video, Audio & Thumbnail Assets within the Scrapio data stack

This Actor covers Reels: video/audio quality assets, thumbnail grids, captions, and comments. For a single reel looked up by URL or shortcode with a focus on creator/collaborator identity, use instagram-single-reels-scraper-with-creator-insights. For deeper comment threads beyond the 12-comment preview included here, use instagram-comments-scraper-with-engagement-analytics. For discovery by hashtag instead of known creator handles, use instagram-hashtag-engagement-scraper. For profile-level bio and contact fields to build your creator handle list, use instagram-profile-scraper-with-bio-link-email-extraction.

Why do developers and data teams scrape Instagram?

🏢 Content archiving, repurposing and creator-marketing teams

Marketing and social teams use creatorHandles to pull a client's or partner's Reels catalog on a schedule, download every video quality via downloadedVideoVersions for repurposing across other channels, and pull the isolated downloadedAudioUrl track for trend/sound sampling without re-encoding a full video file. The scrubber grid (scrubberSpritesheet, downloadedThumbnailGridUrl) feeds preview UIs that need the same seek-bar thumbnails Instagram itself generates. Output lands in the run's dataset (per-reel rows) and Key-Value Store (the actual media files), ready to sync into a DAM or content-repurposing pipeline.

📊 AI training data and RAG indexing

caption, transcript, and hashtags are the highest-information text fields for retrieval-augmented generation — a caption/transcript pair gives an LLM the actual spoken and written context of a reel, not just its metrics. For training data, the consistently structured numeric fields (likesCount, commentsCount, videoViewCount, videoPlayCount, videoDuration) and the nested musicInfo object give a stable schema across every record. Two concrete uses: (1) RAG enrichment — index caption + transcript per shortCode so an agent can answer "what did this creator say in their last five reels"; (2) training data — pair caption/hashtags with videoViewCount to model what content performs, without needing a computer-vision pass over the video file itself.

📱 Competitive and market intelligence

Track a competitor's or industry peer's creatorHandles on a recurring schedule and diff likesCount, commentsCount, and videoViewCount per shortCode between runs to see which specific reels are gaining traction after publish, and whether sharesCount (when Instagram exposes it) correlates with musicInfo.song_name choices across a content calendar.

🔬 Research and academic use

Academic and social-research projects use bulk creatorHandles input to build reel-level datasets for studying short-video content, caption/hashtag language patterns, or engagement dynamics — scoped strictly to what each creator has made public, with no login or private-account access involved.

🎥 Product and SaaS development

Teams building creator-analytics dashboards, content-moderation tooling, or media-monitoring products use this Actor as the ingestion layer — one Actor call per creator batch returns the full reel + asset schema, which a product then normalizes into its own database rather than maintaining its own Instagram scraping and asset-resolution code.

🍚 Input Parameters

No parameter is required — running with no input scrapes the prefilled example creator (natgeo). Every parameter below is read directly from .actor/input_schema.json.

ParameterRequiredTypeDescriptionExample Value
creatorHandlesNoarrayInstagram usernames, @handles, or profile URLs whose Reels to scrape. Also accepts the base field name username.["natgeo", "@nasa", "https://instagram.com/nike"]
maxReelsPerCreatorNointegerMaximum reels to collect per creator (min 1, max 10000). Also accepts resultsLimit.25
postsSinceNostringAbsolute date (YYYY-MM-DD) or relative duration (7 days, 2 weeks, 1 month, 1 year). Empty fetches all. Also accepts onlyPostsNewerThan."30 days"
skipPinnedNobooleanIgnore pinned posts and focus on regular timeline content. Also accepts skipPinnedPosts.false
showShareCountNobooleanInclude share count for each reel when Instagram exposes it. Also accepts includeSharesCount.true
generateCaptionTranscriptNobooleanExtract and include the caption/spoken-audio transcript text. Also accepts includeTranscript.true
downloadVideoAssetsNobooleanDownload the reel's video file(s) to the Key-Value Store, per the quality mode below. Also accepts includeDownloadedVideo.true
videoQualityModeNostring (enum)Which video quality tier(s) to save when video download is on: highest, lowest, or all. Default "highest"."all"
downloadAudioTrackNobooleanSave the isolated original-audio-only stream to the Key-Value Store. Default false.true
captureThumbnailGridNobooleanSave the scrubber/thumbnail sprite-grid image to the Key-Value Store. Default false.true
proxyConfigurationNoobjectProxy settings. The Actor always uses Apify's residential proxy (3 attempts) as a safety net; custom proxyUrls are tried first if supplied.{"useApifyProxy": true}
{
"creatorHandles": ["natgeo"],
"maxReelsPerCreator": 10,
"postsSince": "30 days",
"generateCaptionTranscript": true,
"downloadVideoAssets": true,
"videoQualityMode": "all",
"downloadAudioTrack": true,
"captureThumbnailGrid": true
}

Supported URL types and input formats

creatorHandles accepts three interchangeable forms, all normalized internally to a bare username:

  • Bare username — natgeo
  • @handle@nasa
  • Full profile URL — https://instagram.com/nike or https://www.instagram.com/nike/

postsSince accepts either an absolute YYYY-MM-DD date or a relative duration matching <number> day(s)|week(s)|month(s)|year(s) (e.g. 7 days, 2 weeks, 1 month). An unparseable value is logged as a warning and treated as "fetch all."

📦 Output Format

The dataset returns one JSON object per reel, pushed to the Apify dataset as each page of results is captured (not batched to the end of the run). Field names are typed and normalized — no HTML, no manual parsing.

Output for Reels

{
"id": "3412987654321098765",
"type": "Video",
"shortCode": "DO8cvGViIPu",
"caption": "A rare glimpse into the migration route no camera has captured before. #wildlife #conservation",
"hashtags": ["wildlife", "conservation"],
"mentions": [],
"url": "https://www.instagram.com/p/DO8cvGViIPu/",
"commentsCount": 1238,
"dimensionsHeight": 1920,
"dimensionsWidth": 1080,
"images": ["https://scontent.cdninstagram.com/.../cover.jpg"],
"videoUrl": "https://scontent.cdninstagram.com/.../video_101.mp4",
"likesCount": 125826,
"timestamp": "2026-06-20T14:32:05.000Z",
"ownerFullName": "National Geographic",
"ownerUsername": "natgeo",
"ownerId": "787132",
"isPinned": false,
"productType": "clips",
"videoDuration": 47.5,
"inputUrl": "https://www.instagram.com/natgeo",
"firstComment": "Absolutely stunning footage!",
"latestComments": [
{
"id": "17983456712345",
"text": "Absolutely stunning footage!",
"ownerUsername": "wildlife_fan22",
"ownerProfilePicUrl": "https://scontent.cdninstagram.com/.../pfp.jpg",
"timestamp": "2026-06-20T15:01:12.000Z",
"repliesCount": 2,
"replies": [],
"likesCount": 340,
"owner": {
"id": "998877",
"is_verified": false,
"profile_pic_url": "https://scontent.cdninstagram.com/.../pfp.jpg",
"username": "wildlife_fan22"
}
}
],
"displayUrl": "https://scontent.cdninstagram.com/.../cover.jpg",
"audioUrl": "https://video.xx.fbcdn.net/.../audio.mp4",
"alt": "Photo by National Geographic on June 20, 2026.",
"videoViewCount": 900000,
"videoPlayCount": 875342,
"childPosts": [],
"musicInfo": {
"artist_name": "natgeo",
"song_name": "Original audio",
"uses_original_audio": true,
"should_mute_audio": false,
"should_mute_audio_reason": "",
"audio_id": "1029384756"
},
"isCommentsDisabled": false,
"transcript": "In the highlands, a migration route no camera has ever followed...",
"downloadedVideo": "https://api.apify.com/v2/key-value-stores/abc123/records/video-DO8cvGViIPu",
"videoVersions": [
{ "rank": 1, "isHighest": true, "isLowest": false, "type": 102, "width": 720, "height": 1280, "bandwidth": 3245123, "url": "https://.../hd.mp4" },
{ "rank": 2, "isHighest": false, "isLowest": false, "type": 101, "width": 480, "height": 853, "bandwidth": 1543210, "url": "https://.../mid.mp4" },
{ "rank": 3, "isHighest": false, "isLowest": true, "type": 103, "width": 480, "height": 853, "bandwidth": 987654, "url": "https://.../low.mp4" }
],
"numberOfQualities": 3,
"scrubberSpritesheet": {
"fileSizeKb": 214,
"spriteWidth": 1500,
"spriteHeight": 1232,
"renderedWidth": 100,
"thumbnailWidth": 100,
"thumbnailHeight": 176,
"thumbnailsPerRow": 15,
"totalThumbnails": 105,
"thumbnailDurationSec": 0.45,
"videoLengthSec": 47.5,
"spriteUrls": ["https://scontent.cdninstagram.com/.../sprite.jpg"]
},
"downloadedVideoVersions": [
{ "rank": 1, "width": 720, "height": 1280, "isHighest": true, "isLowest": false, "kvKey": "video-DO8cvGViIPu-q1-720x1280", "kvUrl": "https://api.apify.com/v2/key-value-stores/abc123/records/video-DO8cvGViIPu-q1-720x1280" }
],
"downloadedAudioUrl": "https://api.apify.com/v2/key-value-stores/abc123/records/audio-DO8cvGViIPu",
"downloadedThumbnailGridUrl": "https://api.apify.com/v2/key-value-stores/abc123/records/thumbgrid-DO8cvGViIPu",
"scrapedAt": "2026-07-25T09:14:22.000Z",
"sharesCount": 412
}

sharesCount only appears when showShareCount is on, and it is returned as null (never a fabricated 0) on reels where Instagram doesn't expose a share count at all. numberOfQualities is a raw passthrough of Instagram's own number_of_qualities field and can be null even when videoVersions itself is populated. downloadedVideo is the base scraper's single default-quality download; downloadedVideoVersions is the new quality-selectable array — both populate together whenever downloadVideoAssets is on.

Output for Video, Audio & Thumbnail Assets

The three asset fields above have their own internal shapes, reusable independently of the full reel row:

{
"videoVersions_item": {
"rank": 1,
"isHighest": true,
"isLowest": false,
"type": 102,
"width": 720,
"height": 1280,
"bandwidth": 3245123,
"url": "https://scontent.cdninstagram.com/.../hd.mp4"
},
"downloadedVideoVersions_item": {
"rank": 1,
"width": 720,
"height": 1280,
"isHighest": true,
"isLowest": false,
"kvKey": "video-DO8cvGViIPu-q1-720x1280",
"kvUrl": "https://api.apify.com/v2/key-value-stores/abc123/records/video-DO8cvGViIPu-q1-720x1280"
},
"scrubberSpritesheet": {
"fileSizeKb": 214,
"spriteWidth": 1500,
"spriteHeight": 1232,
"thumbnailsPerRow": 15,
"totalThumbnails": 105,
"thumbnailDurationSec": 0.45,
"spriteUrls": ["https://scontent.cdninstagram.com/.../sprite.jpg"]
}
}

videoVersions ranks every bitrate/resolution Instagram generated by resolution (width × height) descending, with bandwidth as a tiebreak. downloadedVideoVersions is only populated for the tier(s) selected by videoQualityMode once downloadVideoAssets is on. downloadedAudioUrl and downloadedThumbnailGridUrl are plain Key-Value Store URL strings (not objects), populated only once downloadAudioTrack / captureThumbnailGrid are on and Instagram exposed the underlying asset for that reel.

Schema stability and export options

Every base-scraper field keeps its original name and value; the asset fields (videoVersions, numberOfQualities, scrubberSpritesheet, downloadedVideoVersions, downloadedAudioUrl, downloadedThumbnailGridUrl, scrapedAt) are purely additive on top, so existing integrations built against the base field set keep working unchanged. The dataset exports as JSON, CSV, or Excel (XLSX) directly from the Apify platform; downloaded media files live in the run's Key-Value Store and are fetched via the kvUrl/downloaded*Url links or the Apify API.

💡 Instagram Reels Scraper — Video, Audio & Thumbnail Assets Strategy Guide

🎯 Strategy 1: Real-time enrichment pipeline

Trigger a run whenever a creator is added to a watchlist: pass their handle in creatorHandles, run the Actor, then append videoViewCount, likesCount, numberOfQualities, and downloadedVideoVersions[].kvUrl to that creator's record in your CRM or content-ops database. Because results push to the dataset page-by-page rather than only at the end of the run, a downstream consumer polling the dataset sees new reels appear before the full creator batch finishes.

🎯 Strategy 2: Scheduled monitoring and alerting

Use an Apify Schedule to rerun the same creatorHandles list on a recurring cadence with postsSince set to a rolling window (e.g. "7 days"), then diff the new run's likesCount, commentsCount, and videoViewCount per shortCode against the previous run's values. Alert when the delta on videoViewCount or sharesCount crosses a threshold you define — the Actor itself has no built-in alerting, so the diff and threshold logic live in your own pipeline.

🎯 Strategy 3: Bulk dataset build

For a research or training dataset, pass a large creatorHandles list with maxReelsPerCreator set high (up to the schema's 10000 cap) and export the finished dataset as CSV or JSON. Internally, the Actor fans out comment, transcript, and media-asset fetches with limited concurrency (comment and transcript fetches run up to 8 at a time; video/audio/thumbnail downloads up to 4 at a time) to balance throughput against block risk — these are fixed properties of the Actor's own code, not user-configurable rate limits.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time enrichmentAppending fresh reel/asset data to an existing recordOne run per creator/event, triggered on demandDataset rows polled or pushed downstream
Scheduled monitoringTracking engagement or new-reel changes over timeApify Schedule (cron), rolling postsSince windowDataset diffed run-over-run
Bulk dataset buildResearch or training-data corporaOne large run across many creator handlesFull dataset export (CSV/JSON)
Scraper NameWhat it extracts
Instagram Single Reels Scraper With Creator InsightsSingle reel lookup by URL/shortcode, focused on creator identity and collaborator signals
Instagram Comments Scraper With Engagement AnalyticsFull comment threads beyond this Actor's 12-comment preview
Instagram Hashtag & Engagement ScraperReel/post discovery by hashtag instead of known creator handles
Instagram Profile Scraper With Bio Link & Email ExtractionProfile bio and contact fields to build a creator handle list
Facebook Reels & Engagement Analytics ScraperCross-platform Reels equivalent, with derived engagement metrics, on Facebook
Facebook Posts Scraper & Video TranscriptCross-platform video-post and transcript equivalent on Facebook
Facebook Photos & Album Extraction ScraperPhoto/album asset harvesting, adjacent to this Actor's video/audio/thumbnail asset focus

How to integrate Instagram Reels Scraper — Video, Audio & Thumbnail Assets with your stack

Instagram Reels Scraper — Video, Audio & Thumbnail Assets works with any language or tool that can make an HTTP request to the Apify API.

Python

import csv
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
creator_handles = ["natgeo", "nasa", "nike"]
rows = []
for handle in creator_handles:
run = client.actor("Scrapio/instagram-reels-scraper-video-audio-thumbnail-assets").call(
run_input={
"creatorHandles": [handle],
"maxReelsPerCreator": 15,
"generateCaptionTranscript": True,
"downloadAudioTrack": True,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
rows.append({
"shortCode": item.get("shortCode"),
"ownerUsername": item.get("ownerUsername"),
"likesCount": item.get("likesCount"),
"videoViewCount": item.get("videoViewCount"),
"numberOfQualities": item.get("numberOfQualities"),
"downloadedAudioUrl": item.get("downloadedAudioUrl"),
})
with open("reels_export.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)
print(f"Exported {len(rows)} reels to reels_export.csv")

Node.js

import { ApifyClient } from 'apify-client';
import { writeFileSync } from 'fs';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('Scrapio/instagram-reels-scraper-video-audio-thumbnail-assets').call({
creatorHandles: ['natgeo', 'nasa'],
maxReelsPerCreator: 15,
downloadVideoAssets: true,
videoQualityMode: 'all',
captureThumbnailGrid: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const rows = items.map((r) => ({
shortCode: r.shortCode,
ownerUsername: r.ownerUsername,
videoViewCount: r.videoViewCount,
downloadedVideoVersions: r.downloadedVideoVersions,
downloadedThumbnailGridUrl: r.downloadedThumbnailGridUrl,
}));
writeFileSync('reels.json', JSON.stringify(rows, null, 2));
console.log(`Saved ${rows.length} reels to reels.json`);

MCP for AI agents

Register the Actor with Apify's MCP Server (npx -y @apify/actors-mcp-server --actors Scrapio/instagram-reels-scraper-video-audio-thumbnail-assets) and an MCP-compatible client — Claude Desktop, Claude Code, or Cursor — can call it as a tool: "pull the last 10 reels from natgeo with the audio track and thumbnail grid" resolves to a direct Actor call, with typed JSON returned straight into the agent's context.

Async and scheduled pipelines

For large creator batches, start the run asynchronously via the Apify API and poll the run's status or the dataset item count until it finishes, rather than blocking on a synchronous call — reels appear in the dataset page-by-page as the run progresses. For recurring jobs, use an Apify Schedule (cron-based) to rerun the Actor automatically; Apify's platform-level webhooks can notify your system when a run succeeds or fails instead of polling.

🎯 Who Needs Instagram Reels Scraper — Video, Audio & Thumbnail Assets? (Use Cases & Industries)

🏢 Content archiving, repurposing and creator-marketing teams

A marketing team managing a brand's own or a partner's Reels catalog runs the Actor against creatorHandles, downloads every quality tier via downloadedVideoVersions, and repurposes the highest-resolution file for other channels while archiving the lowest as a lightweight backup copy.

📊 AI training and RAG teams

Teams building retrieval or fine-tuning datasets index caption and transcript per shortCode, giving an LLM the actual spoken and written content of a reel rather than metrics alone, paired with the stable numeric fields for supervised signal.

📱 Competitive intelligence analysts

Analysts track a competitor's creatorHandles on a schedule and diff likesCount, commentsCount, and videoViewCount per shortCode run-over-run to flag which specific reels are outperforming the account's baseline.

🔬 Researchers

Academic and social-research projects use bulk creatorHandles input to assemble reel-level datasets for studying short-video engagement or caption/hashtag language, scoped to what each creator has made public.

🎥 Product and SaaS builders

Teams building creator-analytics dashboards or media-monitoring products use this Actor as their Instagram ingestion layer, normalizing the returned reel + asset schema into their own database instead of maintaining custom scraping and asset-resolution code.

Scraping publicly accessible data is generally lawful in the United States — in hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019, reaffirmed on remand in 2022), the court held that scraping data a platform makes publicly viewable does not violate the Computer Fraud and Abuse Act. That ruling addressed LinkedIn specifically, but its reasoning is widely applied to public data on other social platforms, including Instagram. Separately, scraping in violation of Instagram's Terms of Service can expose a user to civil claims (such as breach of contract) from Meta — this is a private civil risk, not a criminal one, and is distinct from the CFAA question. Because this Actor returns personal data about real people — creator usernames and full names, and commenter usernames and profile pictures — data protection law (such as GDPR or CCPA) can apply depending on your jurisdiction and use case; the lawful basis for storing and using that data is yours to establish. Instagram Reels Scraper — Video, Audio & Thumbnail Assets returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.

❓ Frequently asked questions

Does Instagram Reels Scraper — Video, Audio & Thumbnail Assets work without an Instagram account?

Yes. No Instagram login, session cookie, or app-review process is required — every field and every downloadable asset resolves from the same public, logged-out clips/user payload the Actor fetches for each creator.

How does it handle Instagram's anti-scraping measures?

Every request runs through Apify's residential proxy with up to three attempts by default. If you supply your own custom proxy URLs, the Actor tries those first (one attempt) and falls back to residential automatically on failure or a block response (HTTP 429/401/403, or 5xx), retrying with backoff before giving up on that request.

Can I run it at scale without getting blocked?

The Actor processes creator handles sequentially, with internal concurrency limits on comment, transcript, and media-asset enrichment (independent of the main scraping loop) to spread out request volume. No uptime or success-rate figure is published for this Actor — behavior depends on Instagram's own response to the traffic pattern at the time of the run.

How fresh is the data it returns?

Live — every run fetches directly from Instagram at request time and stamps each row with scrapedAt; nothing is served from a cache.

Which fields work best for AI training and RAG indexing?

For RAG, index caption and transcript per shortCode — these carry the actual spoken and written content of the reel. For training data, the consistently structured fields (likesCount, commentsCount, videoViewCount, videoPlayCount, videoDuration, musicInfo) hold the same shape across every record. All fields return as typed primitives, arrays, or objects — no string-parsing needed before use.

Does this Actor collect personal data, and who's responsible for its use?

Yes — creator usernames/full names and commenter usernames/profile pictures are personal data, but all of it is data the account owner or commenter made publicly visible on Instagram. The Actor does not authenticate or access anything private. Lawful basis for storing, processing, or redistributing that data — under GDPR, CCPA, or any other applicable regime — is the user's responsibility to establish.

Does it work with Claude, ChatGPT, and other AI agent tools?

Yes. It's registrable through Apify's MCP Server (npx -y @apify/actors-mcp-server --actors Scrapio/instagram-reels-scraper-video-audio-thumbnail-assets) for MCP-compatible clients like Claude Desktop or Claude Code, and callable as a standard HTTP/API Actor by any agent framework that can invoke the Apify API — every response is typed JSON, requiring no HTML parsing before it enters an LLM's context window.

What determines "highest" vs "lowest" video quality?

Resolution (width × height) descending, with Instagram's own reported bandwidth as a tiebreak, and the original array order as a final tiebreak — since Instagram tends to list its intended default/best version first.

Can I download only the audio track, without any video?

Yes — downloadAudioTrack is independent of downloadVideoAssets. Turning it on alone downloads just the isolated original-audio stream to the Key-Value Store.

What happens on reels Instagram doesn't have a transcript for?

The transcript request returns a 404 in that case (logged at debug level, not as an error), and the reel's transcript field stays an empty string rather than failing the whole run.

ℹ️ Disclaimer

Instagram Reels Scraper — Video, Audio & Thumbnail Assets extracts only publicly available data from Instagram. This tool is intended for lawful use cases only. Users are responsible for complying with Instagram's terms of service and applicable data protection laws in their jurisdiction.