Instagram Reel Scraper
Pricing
from $0.60 / 1,000 item processeds
Instagram Reel Scraper
Extract public Instagram Reel rows from direct Reel URLs, including visible metadata and warning fields when Instagram hides logged-out data.
Pricing
from $0.60 / 1,000 item processeds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Extract structured rows from public Instagram Reel URLs. This Actor is built for social listening, creator research, UGC campaign checks, and workflow automation where you need a repeatable dataset with one row per Reel.
At a glance
- Primary job: Turn public Instagram Reel links into CSV, JSON, Excel, or API-ready dataset rows.
- Input: Direct public Reel URLs such as
https://www.instagram.com/reel/Da-2R72yymt/. - Output: Reel shortcode, canonical URL, caption/hashtags/mentions when visible, public metrics when visible, media URLs when visible, warnings, and per-input errors.
- Best for: Brand monitoring, creator/content research, short-video trend tracking, UGC QA, and enrichment pipelines.
Input recipes
- Single Reel smoke test: Paste one public Reel URL and set
maxItemsto1. - Batch Reel export: Paste multiple public Reel URLs and keep
maxItemsequal to the number of URLs you want processed. - Diagnostic monitoring: Keep the
warnings,error, anderrorDescriptioncolumns in exports so hidden or unavailable Reels are easy to review.
What data can you extract?
| Field | Description |
|---|---|
inputUrl | Original URL from your input. |
id, shortCode | Stable Reel shortcode used for deduplication. |
url | Canonical Instagram Reel URL. |
caption | Caption text when visible in the public payload. |
hashtags, mentions | Tags and mentions parsed from visible public text. |
ownerUsername, ownerId | Owner metadata when visible. |
timestamp | Published timestamp when visible. |
likesCount, commentsCount, shareCount | Public engagement metrics when visible. |
videoPlayCount | Public play count when Instagram labels a value as plays. |
viewCount | Compatibility field populated only when Instagram exposes a distinct view count; it is never copied from videoPlayCount. |
thumbnailUrl, videoUrl | Public media URLs when exposed by Instagram. |
warnings | Missing optional fields or degraded public payload notes. |
error, errorDescription | Per-input error details for invalid, blocked, or unavailable URLs. |
fetchedAt | ISO timestamp for the scrape. |
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| Instagram Reel URLs | startUrls | Direct public Reel URLs to process. | https://www.instagram.com/reel/Da-2R72yymt/ |
| Maximum reels | maxItems | Cap the number of unique Reel URLs processed. | 3 |
| Maximum runtime | maxRuntimeSecs | Stop early, save a checkpoint, and leave cleanup time before the platform timeout. | 270 |
| Proxy configuration | proxyConfiguration | Optionally use Apify Proxy when direct public access is limited. | Apify Proxy |
Example input
{"startUrls": [{ "url": "https://www.instagram.com/reel/Da-2R72yymt/" }],"maxItems": 1}
Example output
{"inputUrl": "https://www.instagram.com/reel/Da-2R72yymt/","id": "Da-2R72yymt","shortCode": "Da-2R72yymt","type": "reel","url": "https://www.instagram.com/reel/Da-2R72yymt/","caption": null,"hashtags": [],"mentions": [],"ownerUsername": null,"likesCount": null,"commentsCount": null,"videoPlayCount": null,"viewCount": null,"thumbnailUrl": null,"warnings": ["Caption was not visible in the public response.","Direct-URL availability does not prove that this Reel is visible in the owner profile grid."],"error": null,"errorDescription": null,"fetchedAt": "2026-07-14T10:22:26.244Z"}
Pricing
| Event | Free | Bronze | Silver | Gold | Platinum | Diamond | Charged when |
|---|---|---|---|---|---|---|---|
| Run start | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | Once when the Actor starts. |
| Item processed | $0.00115 | $0.00100 | $0.00078 | $0.00060 | $0.00040 | $0.00028 | Each successful Reel row saved to the dataset. |
Status rows for blocked, unavailable, or failed URLs are diagnostic output and do not trigger the item charge. The run-start event is charged only after input validation succeeds.
Who is this for?
- Social media teams checking public Reel links from campaigns or creators.
- Creator researchers building a repeatable list of Reels for review.
- Automation builders who need one structured dataset row per Reel URL.
- Analysts who prefer explicit warnings over silent skips when public fields are hidden.
Tips for best results
- Use direct public Reel URLs: Canonical
/reel/SHORTCODE/and profile-prefixed/USERNAME/reel/SHORTCODE/links are accepted. Profile listing, hashtag, audio, location, and private routes are outside V1 scope. - Start small: Test 1-3 URLs before larger batches.
- Expect nullable fields: Instagram frequently hides captions, metrics, owner details, or media URLs from logged-out public payloads.
- Use warnings: The
warningsarray explains degraded payloads without dropping the row. - Resume safely: If the Actor reaches its runtime cutoff, resurrect the same run with the same input and storage.
RUN_CHECKPOINTprevents already completed shortcodes from being processed twice.
API usage
Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("fetch_cat/instagram-reel-scraper").call({startUrls: [{ url: "https://www.instagram.com/reel/Da-2R72yymt/" }],maxItems: 1});console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("fetch_cat/instagram-reel-scraper").call(run_input={"startUrls": [{"url": "https://www.instagram.com/reel/Da-2R72yymt/"}],"maxItems": 1,})print(run["defaultDatasetId"])
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~instagram-reel-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls":[{"url":"https://www.instagram.com/reel/Da-2R72yymt/"}],"maxItems":1}'
MCP and AI agents
Use this Actor from MCP-compatible tools through the official Apify MCP Server.
$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/instagram-reel-scraper"
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/instagram-reel-scraper"}}}
Example prompt: "Run Instagram Reel Scraper on this Reel URL and summarize warnings and visible metrics."
Limits and caveats
- Public data only: No login cookies, private accounts, private APIs, DMs, or paid source credentials are used.
- Instagram can hide fields: Missing optional fields are returned as
nullwith warnings instead of guessed values. - Plays and views differ:
videoPlayCountandviewCountpreserve Instagram's visible labels. The Actor does not alias plays into views. - Direct and profile visibility differ: A Reel can be available by direct URL without appearing in the owner's profile grid.
- Bounded retries: Transient blocks and server failures are retried up to three times within the shared run deadline. Per-URL failures are isolated so other Reel URLs can still complete.
- No video downloads in V1: The Actor returns URLs when visible, not binary media files.
Every run writes RUN_SUMMARY to the default key-value store. A deadline-limited run also retains RUN_CHECKPOINT; resurrecting that run with the same storage resumes pending URLs. An unexpected all-error workload fails the run after saving uncharged diagnostic rows.
FAQ
Does this Actor log in to Instagram?
No. It only processes public Reel URLs and returns warning fields when Instagram hides optional data.
Why are some fields null?
Instagram can hide captions, metrics, media URLs, or owner details from public logged-out pages. The Actor keeps the row and explains the missing data in warnings.
Can I scrape profile reels?
Not in V1. Use direct public Reel URLs for the most predictable output.
Related Actors
- Instagram Profile Posts Scraper — collect public profile post rows when profile pages are the source.
- Instagram Stories Highlights Scraper — extract public story highlight rows.
- TikTok Video Scraper — short-form video data from TikTok URLs.
Legality and responsible use
Process only data you are allowed to access. Follow Instagram's terms, Apify's terms, and applicable laws.
Support
Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or URL, input JSON, expected output, actual output, and a reproducible public URL such as https://www.instagram.com/reel/Da-2R72yymt/.