🎬Instagram Single Reels Scraper with Video Hashtag Extractor
Pricing
$19.99/month + usage
🎬Instagram Single Reels Scraper with Video Hashtag Extractor
🚀Instagram Single Reels Scraper with Video Hashtag Extractor comprehensive data from Instagram reels including media information, comments, engagement metrics, and user details. Perfect for social media analysis, content research, and competitive intelligence.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
ScraperX
Maintained by CommunityActor stats
0
Bookmarked
20
Total users
7
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Reel Hashtag Scraper — Hashtags, Captions, Engagement
Paste any public Instagram Reel URL and get its hashtags, @mentions, caption text, creator identity, like/comment/view counts, video/thumbnail URLs and music metadata back as structured JSON — no Instagram login required. Hashtags and mentions are parsed straight out of the reel's own caption, with optional filters to keep only reels matching a specific hashtag or mention. Start a run from the Apify Store and read results as JSON or CSV.
What is the Instagram Single Reels Scraper with Video Hashtag Extractor?
It's an Apify Actor that takes one or more Instagram Reel links (full URL, username/shortcode, or a bare shortcode) and returns each reel's caption-derived hashtags and mentions alongside its creator identity, engagement counts, media URLs and music metadata as one JSON row per reel. No Instagram account or login is required — the actor authenticates its requests with tokens read from a public profile page shell, not a session cookie. It's built for social media analysts, growth marketers, and developers building AI/RAG pipelines who need structured data from specific reels rather than a full-account crawl.
What Instagram Reel data is publicly available to scrape?
Every field below is visible to any logged-out visitor on the reel's public page; only two surfaces need an authenticated Instagram session.
| Data Category | Publicly available (no login) | Requires login/session |
|---|---|---|
| Caption, hashtags, mentions | Yes | — |
| Creator username, full name, verified badge | Yes | — |
| Like, comment and view counts | Yes | — |
| Video/thumbnail URLs, music metadata | Yes | — |
| Tagged users, co-authors, paid-partnership flag | Yes | — |
| First-page comment preview | Yes (small sample) | — |
| Full comment reply threads | No | Authenticated session |
| Creator's follower count | No — not in the reel response | Separate profile scrape |
This actor only returns publicly visible data — what any visitor sees. Nothing behind a login wall.
What data can I extract with this Reel scraper?
Every run returns one JSON row per reel covering caption/creator identity, engagement and hashtag metrics, and media/music/run metadata.
Creator, reel and caption identity fields
| Field Name | Description |
|---|---|
url | The Reel URL that was scraped |
shortcode | Instagram's short media code (e.g. DOEMHa6iPoz) |
mediaId | Instagram's internal numeric media ID |
ownerUsername | Creator's username |
ownerFullName | Creator's display name |
ownerId | Creator's internal Instagram user ID |
ownerIsVerified | Whether the creator has a verified badge |
ownerIsPrivate | Whether the creator's account is private |
ownerProfilePicUrl | Creator's profile picture URL |
captionText | The reel's full caption text |
takenAtIso | Original post timestamp, ISO-8601 |
mediaType | Instagram's internal media type code |
productType | Instagram's internal product type (e.g. clips for reels) |
Engagement, hashtag and mention metrics
| Field Name | Description |
|---|---|
likeCount | Like count at scrape time |
commentCount | Comment count at scrape time |
viewCount | View count; falls back to Instagram's play_count when view_count is absent |
isPaidPartnership | Brand-partnership flag |
sponsorTags | Sponsor/brand tag objects, when present |
hashtags | Hashtags extracted from the caption text via regex, deduplicated |
hashtagCount | Count of hashtags |
mentionedUsernames | Union of caption @mentions and any matching tagged-user/co-author accounts |
mentionCount | Count of mentionedUsernames |
structuredMentions | Caption mentions cross-matched against real tagged-user/co-author objects (username, id, isVerified, source) |
externalLinks | Bare URLs found in the caption (bio/CTA links) |
Media, music and run metadata
| Field Name | Description |
|---|---|
videoUrlBest | Best-quality direct video URL |
thumbnailUrl | Best-quality thumbnail/cover image URL |
videoWidth / videoHeight | Video dimensions in pixels |
hasAudio | Whether the video has an audio track |
coauthors | Collab/co-author account objects (username, id, fullName, isVerified, profilePicUrl) |
taggedUsers | Tagged account objects (username, id, fullName, isVerified, position) |
musicAudioType | Audio type reported by Instagram (e.g. original_sounds) |
musicAssetId | Internal audio-track asset ID |
musicArtistUsername | Username of the audio track's original artist |
musicIsOriginalAudio | Whether the audio is the creator's own original sound |
proxy_used | residential or none |
success | Whether the reel's data was retrieved |
errorReason | Typed failure reason when success is false (e.g. login_required, challenge_required, graphql_error, media_not_found) |
attempts | Number of fetch attempts made for this URL |
scrapedAt / scraped_at | ISO-8601 timestamp of the scrape |
media_info | Full raw Instagram media JSON object (unflattened), in the "Raw Media & Comments" dataset view |
comments | The reel's inline preview_comments sample, unflattened, in the same raw view |
🤖 Add-on: Need additional Instagram data?
Need reels by username instead of by URL, at volume? Scraper Engine's Instagram Reels Scraper pages a whole account's reels with filters like results limit and post age. For hashtag-first discovery, Instagram Hashtag Scraper searches by hashtag or keyword instead of a specific reel link. For profile-level stats, Instagram Profile Scraper returns bio, follower and post counts.
How does this scraper differ from the official Instagram API?
Meta's Instagram Graph API is restricted to Professional (Business/Creator) accounts and has no endpoint for an arbitrary public Reel URL or shortcode; this scraper works on any public reel link with no Instagram account at all (Meta Instagram Platform docs, checked 2026-07-25).
| Feature | Instagram Graph API | This scraper |
|---|---|---|
| Account type required | Professional (Business/Creator) only — no consumer accounts | None |
| Access to an arbitrary reel by URL | Not available | Native — paste a URL, username/shortcode, or shortcode |
| Other accounts' content | Business Discovery gives only basic profile fields for other Business/Creator accounts | Full caption, hashtag, mention, engagement and music data per reel |
| Hashtag/mention discovery | Hashtag Search/mentions endpoints scoped to your own linked account | Regex extraction on every reel's caption, with filterByHashtag / filterByMention |
| Approval process | Requires Meta App Review | No approval step — run from the Apify Store |
| Setup | Business verification, account conversion, App Review | Paste a URL and click Start |
Use the Graph API when you manage the account and only need your own content or insights. Use this scraper for caption, hashtag and engagement data from public reels you don't own, without Business verification or App Review.
How to use this Instagram Reel scraper
Run it from its Apify Store listing — no signup flow or catalog beyond the standard Apify console/API.
- Open the Actor on Apify and paste one or more links into Instagram Reel URLs / Shortcodes (
reelUrls) — full URL,username/shortcode, or bare shortcode. - (Optional) Set Filter By Hashtag to keep only reels whose caption contains a specific hashtag.
- (Optional) Set Filter By Mention to keep only reels mentioning, tagging, or co-authoring a specific username.
- Click Start.
- Export results as JSON, CSV or Excel, or read them via the Apify API/client.
How to scale to bulk Instagram single-Reel extraction
reelUrls is an array, so one run accepts a full list of reel links, username/shortcode pairs, or bare shortcodes — there's no separate "bulk mode" to enable. Each URL is processed sequentially with its own retry budget, so a single run scales from one reel to a large batch just by adding more entries to the list.
What can you do with Instagram Reel hashtag data?
- A social listening analyst monitoring a campaign uses
hashtagsandfilterByHashtagto pull every reel tagged with a branded hashtag and track adoption. - A growth marketer auditing collabs uses
coauthors,taggedUsersandisPaidPartnershipto see which accounts a creator partners with and which posts are sponsored. - A content researcher building a keyword dataset uses
captionText,hashtagsandmentionedUsernamesto label reels for topic and trend analysis. - An audio/trend tracker uses
musicArtistUsernameandmusicIsOriginalAudioto identify which reels ride a trending sound versus original audio. - An AI engineer building a RAG pipeline or agent tool feeds
captionText,hashtagsandstructuredMentionsas typed JSON directly into a vector store or LLM context window, with no HTML parsing step.
How does this scraper handle rate limits and blocking?
Every request routes through Apify's residential proxy, which the actor forces regardless of the proxy setting supplied in the input. On a failed request, a blocked response, or a 200-status page with no usable tokens (a soft block), the actor rotates to a freshly-issued residential proxy URL and retries, up to 8 attempts per URL, before giving up on that URL. A genuinely missing/deleted/private reel (media_not_found) is not retried, since a different proxy IP won't change that outcome. When a URL exhausts its retries or hits an unhandled exception, the actor still writes an uncharged dataset row with a typed errorReason instead of silently producing nothing, so a multi-URL run always gives honest per-URL accounting.
⬇️ Input
All 5 input parameters are optional — no field is required to start a run, though reelUrls must contain at least one entry for the actor to do anything.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
reelUrls | No | array | Instagram reel inputs to scrape: full URL, username/shortcode, or a bare shortcode. (A base-shaped input using the key urls is still accepted for backward compatibility.) | ["https://www.instagram.com/cristiano/reel/DOEMHa6iPoz/"] |
filterByHashtag | No | string | Only keep reels whose caption contains this hashtag (with or without #). Leave empty to keep all reels. | "StayedForMore" |
filterByMention | No | string | Only keep reels whose caption mentions, tags, or co-authors this username (with or without @). Leave empty to keep all reels. | "visitsaudi" |
sessionId | No | string | Optional Instagram sessionid cookie. Not required — the actor fetches reel data fully logged out by default. Used only for this run's requests, never stored. | "" |
proxyConfiguration | No | object | Proxy settings. The actor automatically uses RESIDENTIAL proxy for all requests regardless of this selection. | {"useApifyProxy": true} |
Example input
{"reelUrls": ["https://www.instagram.com/cristiano/reel/DOEMHa6iPoz/"],"filterByHashtag": "","filterByMention": "","sessionId": "","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
⬆️ Output
Every run writes typed, normalized JSON to the default dataset with a consistent field set across runs — no post-processing needed. Export as JSON, CSV, Excel, or read it through the Apify API/client. The default dataset view surfaces the flattened fields below; the raw media_info/comments blobs live in the separate "Raw Media & Comments" view.
Example output
{"url": "https://www.instagram.com/cristiano/reel/DOEMHa6iPoz/","shortcode": "DOEMHa6iPoz","mediaId": "3712145279353944627","ownerUsername": "cristiano","ownerFullName": "Cristiano Ronaldo","ownerIsVerified": true,"ownerIsPrivate": false,"captionText": "I came here to do what I love, but I #StayedForMore. The people, the energy, and...","hashtags": ["StayedForMore"],"hashtagCount": 1,"mentionedUsernames": [],"mentionCount": 0,"structuredMentions": [],"externalLinks": [],"likeCount": 1806539,"commentCount": 20505,"viewCount": null,"isPaidPartnership": false,"coauthors": [],"taggedUsers": [],"videoUrlBest": "https://instagram.ftun10-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQN4j-akK4-Os0...mp4","thumbnailUrl": "https://instagram.ftun10-1.fna.fbcdn.net/v/t51.71878-15/539543640_1700...jpg","musicAudioType": "original_sounds","musicAssetId": null,"musicArtistUsername": "cristiano","musicIsOriginalAudio": true,"takenAtIso": "2025-09-01T15:01:00Z","proxy_used": "residential","attempts": 1,"success": true,"errorReason": null,"scrapedAt": "2026-07-25T00:00:00Z"}
How does it work?
Each reel URL is normalized to a shortcode, then the actor fetches a public Instagram profile page over a residential proxy using a Chrome-TLS-fingerprinted client, logged out. That page's shell still embeds an APP_ID and csrf_token, which the actor extracts and uses to POST directly to Instagram's own GraphQL endpoint for that shortcode — the same data Instagram's reel page used to pre-embed before it switched to a data-free SPA shell. Hashtags, mentions and every flattened field are derived from that one response, so no extra requests are made. Only publicly visible reel data is returned, and the output schema stays stable regardless of Instagram front-end changes, since the actor targets Instagram's underlying API responses rather than parsing rendered HTML.
Integrations
This actor runs on the Apify platform, so it works with anything that can call the Apify API — no separate SDK required.
Calling this scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run_input = {"reelUrls": ["https://www.instagram.com/cristiano/reel/DOEMHa6iPoz/"],"filterByHashtag": "",}run = client.actor("scraper-engine/instagram-single-reels-scraper-with-video-hashtag-extractor").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["shortcode"], item["hashtags"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
No-code tools (n8n, Make, LangChain)
In n8n, use the Apify node's "Run Actor" action (or a plain HTTP Request node) pointed at this Actor's run endpoint, then read results from the resulting dataset. In Make, the Apify app's "Run an Actor" module does the same, letting you chain reel data straight into a scenario. In LangChain or any custom agent framework, call the Actor's run endpoint as a tool and pass the returned dataset items straight into your chain — the JSON is already typed and doesn't need HTML parsing.
Is it legal to scrape Instagram Reels?
Scraping publicly available data — the kind any logged-out visitor can see on a reel's page — is generally permitted, but legality depends on your jurisdiction and how you use the data. This actor only returns publicly available data: hashtags, captions, engagement counts and media that Instagram serves to anonymous visitors, nothing behind a login wall. Because that data includes creator usernames, names and other identifiers, it can qualify as personal data under regimes like GDPR and CCPA, which govern how you may store and reuse it, not whether you may view it. Consult legal counsel if your use case involves bulk storage of personal data.
Frequently asked questions
What Instagram Reel fields does this scraper return?
It returns captionText, hashtags, mentionedUsernames, likeCount and viewCount among 40+ flattened fields per reel — see the full fields tables above for creator identity, engagement, and media/music metadata.
Does this scraper require an Instagram account or login?
No. It runs fully logged out by default, authenticating its request with tokens read from a public profile page shell rather than a session cookie. The optional sessionId field only lets you attach your own sessionid cookie on top of that default behavior; it is never required and never stored.
How many reels can I extract in one run?
reelUrls accepts an array of any length — one run processes each entry sequentially, so a single run scales from one reel to a full list just by adding more entries.
What happens if a reel is deleted, private, or doesn't exist?
The actor returns media_not_found in errorReason and does not retry that URL, since a different proxy IP won't change a genuinely missing/private reel. The row is still written to the dataset, uncharged, with success: false.
Does the hashtag extractor analyze video content or just the caption text?
It parses the caption text only — hashtags and mentions are pulled from the reel's caption with a regex (#word / @username), then cross-referenced against Instagram's structured tagged-user and co-author data for verified matches. There is no frame-by-frame video or audio content analysis; a hashtag that only appears as on-screen text in the video itself, and not in the caption, is not captured.
Can I filter reels by hashtag or mention?
Yes. filterByHashtag keeps only reels whose caption contains a specific hashtag, and filterByMention keeps only reels that mention, tag, or co-author a specific username. Both are applied after a reel is successfully scraped, so filtered-out reels are never billed.
Does this scraper work with Claude, ChatGPT, and other AI agent tools?
Yes, as an HTTP endpoint. Any agent framework that can call an API — LangChain, a custom Claude tool, a ChatGPT plugin/action — can trigger a run and read back typed JSON dataset items.
Does this scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with consistent field names across runs — no HTML parsing, no selectors. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.
What happens when Instagram changes its layout or blocking system?
The actor targets Instagram's underlying GraphQL response rather than parsed HTML, and is maintained against changes to that response and to Instagram's anti-bot behavior; the output schema stays stable across those updates. No specific update turnaround is guaranteed.
Can I use this scraper without managing proxies or browser infrastructure?
Yes. The actor always routes requests through Apify's residential proxy and handles retries and proxy rotation on blocks internally — you don't configure or run any proxy or browser infrastructure yourself.
Which fields work best for AI training data and RAG indexing?
For RAG, index captionText alongside hashtags and structuredMentions as high-information text/metadata. For training data, likeCount, commentCount, viewCount, hashtagCount and mentionCount return as consistent typed numbers across every row, with null (never a fabricated value) when Instagram omits a counter.
Related scrapers
| Scraper | What it extracts |
|---|---|
| Instagram Reels Scraper | Bulk reels for one or more usernames, with results limit, date filter, and optional transcript/video download |
| Instagram Hashtag Scraper | Posts and reels discovered by hashtag or keyword search |
| Instagram Mentions Scraper | Inbound posts where other accounts tag or @-mention a target handle |
| Instagram Profile Scraper | Profile bio, follower/following/post counts, and verification status |
| Instagram Tagged & Mentions Posts & Location Scraper | Tagged/mentioned posts enriched with location and full carousel media |
Your feedback
Found a bug or missing a field? Let us know through the Actor's Issues tab on Apify or by contacting Scraper Engine support — reports like these get triaged directly against this actor's source.