Instagram Reel Scraper — Captions, Likes & Hashtags
Pricing
from $2.00 / 1,000 video scrapeds
Instagram Reel Scraper — Captions, Likes & Hashtags
Scrape Instagram Reel data from reel and post URLs: caption, hashtags, owner username and name, publish time, like and comment counts and thumbnail. Export JSON, CSV or Excel. No login and no video download. $0.002 per reel and $0.002 per run.
Pricing
from $2.00 / 1,000 video scrapeds
Rating
0.0
(0)
Developer
Sergey Andronik
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
13 hours ago
Last modified
Categories
Share
Scrape Instagram Reel data from reel URLs into clean JSON. For each public reel, Instagram Reel Scraper returns the caption and its hashtags, the owner, the publish time, the like and comment counts and the thumbnail. It reads only the reel's public data: the video itself is never downloaded and no AI is run, so results are fast and cost $0.002 per reel. Use the output for spreadsheets, dashboards, content research, influencer reports or LLM prompts. No Instagram login, cookies or API key are needed.
What Instagram Reel data you get
| Field | Content |
|---|---|
url, shortcode | The URL you submitted and the reel's shortcode. |
caption, hashtags | The text the owner wrote under the reel and the hashtags parsed from it. |
author_username, author_name, author_id, author_url | The owner. |
published_at, upload_date | Publish time (UTC, ISO 8601) and date. |
like_count, comment_count | Engagement counts as Instagram shows them. |
thumbnail_url, width, height | Cover image link, and the size in pixels of the best video stream. |
billing | Whether this row was charged. |
Not returned: view or play counts and the reel's duration. Instagram's responses to logged-out requests did not include them in our tests; the data has no duration field, and its video formats carry none either. For the duration and the spoken words, use Instagram Reel Transcript.
The Dataset has two views: Videos (caption, owner, date and counts) and Hashtags.
How to scrape Instagram Reels
- Paste your reel URLs.
instagram.com/reel/…links work, and so do the/<user>/reel/…,/reels/…,/p/…and/tv/…forms, up to 1,000 per run. - Set a run budget in the run options if you want a hard cap on the spend.
- Start the run and open the Dataset. One row per URL. Export it as JSON, CSV or Excel, or read it through the API.
Input
{"urls": ["https://www.instagram.com/reel/DZpQwxqimz2/"]}
| Field | What it does |
|---|---|
urls | Up to 1,000 public Instagram Reel or post URLs. Required unless you set datasetId. |
datasetId | Read URLs from another run's dataset. See Chain from another Actor. |
datasetUrlField, maxItems | The dataset field that holds the URL (detected when empty), and how many rows to read (default 100, at most 1,000). |
Scheduled runs: only new items
Turn on Skip items processed by earlier runs (skipPreviouslyProcessed) and run the
Actor on a schedule to get only what is new
since the last run.
- The Actor keeps a key-value store named
polyglot-processed-instagram-scraperin your Apify account, orpolyglot-processed-instagram-scraper--<memoryKey>when you set Memory name (memoryKey), so separate schedules can keep separate memories. Other Actors keep their own stores, even with the samememoryKey. It records each item after the item is delivered and charged; failed items are tried again next time. - It applies to every URL in the run: listed ones and dataset rows.
- When nothing is new, the run ends without any charge. Only error rows appear then, for sources or dataset rows that could not be used.
- If the store cannot be opened or read, the run stops before any charge, and the next scheduled run tries again. If an item's record cannot be written, the item is still delivered and the log says so; a later run may process and charge it again.
- Delete the store in Apify Console (Storage → Key-value stores) to start over. Do not run two runs with the same memory at the same time: both would process the same new items.
Chain from another Actor
Run an Instagram scraper such as apify/instagram-reel-scraper first, then paste the dataset ID of that run into Dataset ID
(datasetId) to refresh the data of every one of its Reels:
{ "datasetId": "<dataset ID from the other run>", "maxItems": 200 }
- The Actor reads up to
maxItemsrows (default 100) with your own run's Apify token and takes each row's URL fromwebVideoUrl,url,postUrl,videoUrl,inputUrl,linkorshortCode, or from the field you name indatasetUrlField. - Dataset URLs run after any
urlsyou list, in dataset order; a dataset URL that is already in the run is skipped. A run takes at most 1,000 URLs in total. - A row without a usable URL becomes an error item with its
dataset_rowindex, and it is not charged. Items from the dataset also carrydataset_row, so you can join the results back to the source rows. - The example link in the URL list is processed and charged too: remove it when you want only the dataset's items.
Output example
A real result from an Apify run on 2026-10-30; only the thumbnail link is shortened.
{"url": "https://www.instagram.com/reel/DZpQwxqimz2/","shortcode": "DZpQwxqimz2","caption": "There's more to the story of Pompeii than just destruction. Join Tom Hiddleston as he traces the stories of those who experienced the eruption and those who survived.\n\n#PompeiiOutOfTime with @twhiddleston premieres July 22 on @NatGeoTV. Streaming on @DisneyPlus and @hulu.","hashtags": ["PompeiiOutOfTime"],"author_username": "natgeo","author_name": "National Geographic","author_id": "787132","author_url": "https://www.instagram.com/natgeo/","published_at": "2026-06-16T16:00:07Z","upload_date": "2026-06-16","like_count": 146711,"comment_count": 1362,"thumbnail_url": "https://scontent-iad6-1.cdninstagram.com/…","billing": {"status": "paid","events": [{ "event": "video-scraped", "requested_count": 1, "charged_count": 1, "state": "confirmed" }]}}
- A field is left out when Instagram does not show it for that reel. Owners can hide like counts.
hashtagsis parsed from the caption;@mentions stay in the caption text.thumbnail_urlis a signed link that expires, so download the image soon if you need it.- A URL that fails returns a row with
urlanderror.
How much does it cost to scrape Instagram Reels?
Pay per event, with no subscription. The Pricing tab shows the current prices.
| Event | Price | When |
|---|---|---|
| Run setup | $0.002 | Once per run. |
| Video scraped | $0.002 | Per reel whose data was returned. |
| Reels in one run | Cost |
|---|---|
| 1 | $0.002 + $0.002 = $0.004 |
| 100 | $0.002 + 100 × $0.002 = $0.202 |
| 1,000 | $0.002 + 1,000 × $0.002 = $2.002 |
Reel length does not change the price. URLs that fail or are rejected, including photo posts, are not charged the per-reel fee. Apify's own small run-start event is separate and is shown on the Pricing tab.
Use it from the API
Start a run with the Apify API client for JavaScript and read the results:
import { ApifyClient } from 'apify-client'const client = new ApifyClient({ token: process.env.APIFY_TOKEN })const run = await client.actor('andronixmd/instagram-reel-scraper').call({ urls: ['https://www.instagram.com/reel/DZpQwxqimz2/'] },{ maxTotalChargeUsd: 0.1 },)const { items } = await client.dataset(run.defaultDatasetId).listItems()for (const item of items) console.log(item.url, item.error ?? item.like_count)
Or start one run over HTTP:
curl -X POST \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"urls":["https://www.instagram.com/reel/DZpQwxqimz2/"]}' \'https://api.apify.com/v2/actors/andronixmd~instagram-reel-scraper/runs?maxTotalChargeUsd=0.1'
The Actor also works from n8n and other automation tools through Apify's integrations. Schedule a run with the same URLs to track how the counts change over time.
Use it from an AI agent (MCP)
Connect your agent to https://mcp.apify.com. It can find this Actor with search-actors, or
call it by name, andronixmd/instagram-reel-scraper, with call-actor. Use fetch-actor-details first for the
input schema and pricing. Every call starts a new paid run, so always set
callOptions.maxTotalChargeUsd and keep the urls list short:
{ "actor": "andronixmd/instagram-reel-scraper", "input": { "urls": ["https://www.instagram.com/reel/DZpQwxqimz2/"] }, "callOptions": { "maxTotalChargeUsd": 0.1 } }
call-actor returns the run status and storage IDs, not the results. Read the rows with
get-dataset-items and the run's dataset ID. The fields to use are caption, like_count, comment_count and error.
With an Apify account, use your API token or MCP OAuth. Without one, an agent can buy a prepaid token from Apify AGI over x402 or MPP and use it as the Bearer token. It starts at $1, the balance is a hard spending cap, and the token expires after 14 days. This is experimental; see agentic payments.
Limitations
- Public reels only. Reels from private accounts, stories, and anything that needs a login are not supported. The Actor uses no accounts or cookies and does not try to get around Instagram's access checks.
- Reel and post URLs only. Profile, story, hashtag, location and search URLs are
not accepted, and the Actor does not discover reels by itself. One URL in a wrong
format rejects the whole input before the run starts.
/p/…post links are accepted; a photo post returns an error row and is not charged. - Not every public reel returns data. Instagram changes how it serves pages to
logged-out visitors and can refuse some requests, so some URLs return an error row.
Check each row's
errorfield and retry failed URLs later. - Reel data only. No view counts, duration, comment text, follower counts or profile data, and no video or audio files. The caption is what the owner wrote, not a transcript of what is said.
FAQ
Can I get the transcript of the reel?
Not here. The caption field is the text the owner wrote under the reel. For the
spoken words, use
Instagram Reel Transcript,
which transcribes the audio with AI speech-to-text. Submit the same URLs to both and
join the results on url.
Why are there no view counts? Instagram's responses to logged-out requests did not include play or view counts in our tests, and this Actor does not log in.
Does it return comments, followers or profile data?
No. It takes individual reel URLs and returns the fields above. comment_count is the
number of comments, not their text.
Are the numbers live? They are what Instagram shows at the moment of the run. Run it again later for new numbers.
Where is my data kept? In your Apify run storage, under your account's access and retention settings. Use the data in line with Instagram's terms and the law that applies to you.
Related Actors
- Instagram Reel Transcript: the spoken words of the same reels as text, SRT and VTT, with the reel duration.
- TikTok Video Scraper: the same kind of data for TikTok, including views, shares, saves and the music track.
- YouTube Video Scraper: YouTube video data and captions.
- Audio & Video Transcriber: transcripts of podcasts, audio and video files and other sites.