Instagram Reel Scraper avatar

Instagram Reel Scraper

Pricing

from $0.60 / 1,000 item processeds

Go to Apify Store
Instagram Reel Scraper

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

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 maxItems to 1.
  • Batch Reel export: Paste multiple public Reel URLs and keep maxItems equal to the number of URLs you want processed.
  • Diagnostic monitoring: Keep the warnings, error, and errorDescription columns in exports so hidden or unavailable Reels are easy to review.

What data can you extract?

FieldDescription
inputUrlOriginal URL from your input.
id, shortCodeStable Reel shortcode used for deduplication.
urlCanonical Instagram Reel URL.
captionCaption text when visible in the public payload.
hashtags, mentionsTags and mentions parsed from visible public text.
ownerUsername, ownerIdOwner metadata when visible.
timestampPublished timestamp when visible.
likesCount, commentsCount, shareCountPublic engagement metrics when visible.
videoPlayCountPublic play count when Instagram labels a value as plays.
viewCountCompatibility field populated only when Instagram exposes a distinct view count; it is never copied from videoPlayCount.
thumbnailUrl, videoUrlPublic media URLs when exposed by Instagram.
warningsMissing optional fields or degraded public payload notes.
error, errorDescriptionPer-input error details for invalid, blocked, or unavailable URLs.
fetchedAtISO timestamp for the scrape.

Input configuration

SettingJSON keyUse it forExample
Instagram Reel URLsstartUrlsDirect public Reel URLs to process.https://www.instagram.com/reel/Da-2R72yymt/
Maximum reelsmaxItemsCap the number of unique Reel URLs processed.3
Maximum runtimemaxRuntimeSecsStop early, save a checkpoint, and leave cleanup time before the platform timeout.270
Proxy configurationproxyConfigurationOptionally 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

EventFreeBronzeSilverGoldPlatinumDiamondCharged when
Run start$0.005$0.005$0.005$0.005$0.005$0.005Once when the Actor starts.
Item processed$0.00115$0.00100$0.00078$0.00060$0.00040$0.00028Each 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 warnings array 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_CHECKPOINT prevents 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 ApifyClient
client = 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 null with warnings instead of guessed values.
  • Plays and views differ: videoPlayCount and viewCount preserve 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.

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/.