Instagram Reels Scraper — Profiles, Hashtags & Keywords
Pricing
from $1.50 / 1,000 reel extracteds
Instagram Reels Scraper — Profiles, Hashtags & Keywords
Scrape Instagram Reels from profiles, hashtags or Reel URLs. Each Reel has video URL, caption, likes, comments, music and tags. Works with Apify MCP and the API.
Pricing
from $1.50 / 1,000 reel extracteds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
1
Bookmarked
267
Total users
27
Monthly active users
a day ago
Last modified
Categories
Share
What is Instagram Reels Scraper — Profiles, Hashtags & Keywords?
Instagram Reels Scraper extracts public Instagram Reels from creator profiles, topic hashtags or direct Reel links and returns one dataset row per Reel. Each row carries the Reel URL, author username and display name, full caption, hashtags and mentions, likes, comments, views and plays, duration, posting time, sponsorship flag, and direct video and thumbnail links. Social media managers, brand and agency researchers, creator-marketing teams and AI agents use it to study what a profile or topic publishes in Reels, with no Instagram login.
Why marketers use it for Reels research
- Three ways in. Start from
usernames, from topic keywords inhashtags, or from exact Reel links indirectUrls. - Engagement in every row.
likes_count,comments_count,views_countandplays_countsit next to the caption, so ranking Reels takes one sort. - Caption already parsed.
hashtagsandmentionsare split out of the caption, ready for brand-partner and theme analysis. - Media links included.
video_urlandthumbnail_urlpoint straight at the Reel file and cover image. - Recent Reels only.
onlyReelsNewerThanaccepts a date or phrases like30 days, ideal for campaign windows. - Run summary for automations.
OUTPUTin the key-value store reports the runoutcomeanditemsPushed.
Best fit for this Actor
- Best fit for content and competitor research on public Reels from known accounts or topics.
- Designed for small, frequent pulls: the default of three Reels per source keeps checks fast, and
maxReelsPerSourcescales up to 500 for deeper research. - Use
directUrlswhen you already have Reel links and want one normalized row per link. - When you want the spoken words of the Reels you picked, then pass the
reel_urlvalues to Instagram Transcript Scraper. - When follower totals matter for your shortlist, continue with Instagram Profile Scraper for each
username.
Example workflow: a sportswear brand benchmarks competitor Reels
A social media manager at a sportswear brand starts with usernames set to three competitor accounts, maxReelsPerSource at 25 and onlyReelsNewerThan at 30 days. The dataset returns each competitor's recent Reels with plays, likes, duration, mentions and is_sponsored. She exports the rows to a spreadsheet, then compares average plays per account and sorts by likes_count to find the formats that land. The mentions column shows which athletes and partners each brand features. She schedules the same input weekly so the sheet keeps a rolling month of competitor Reels, then feeds the top ten reel_url values into a transcript step for script ideas.
Input
Recent Reels from two profiles:
{"usernames": ["natgeo", "https://www.instagram.com/nasa/"],"maxReelsPerSource": 10,"onlyReelsNewerThan": "30 days"}
Reels for a topic hashtag, plus one known Reel link:
{"hashtags": ["travel"],"directUrls": [{ "url": "https://www.instagram.com/reel/Ddug0K2ggYm/" }],"maxReelsPerSource": 5}
| Input | What it controls |
|---|---|
usernames | Instagram handles or profile URLs, such as natgeo or https://www.instagram.com/natgeo/ |
hashtags | Topic keywords without the #, such as travel or fitness |
directUrls | Reel links on instagram.com using /reel/ or /p/ paths, each as {"url": "..."} |
maxReelsPerSource | Reels to collect per username, hashtag or link, from 1 to 500 (default 3) |
onlyReelsNewerThan | Date filter: YYYY-MM-DD, an ISO timestamp with a timezone, or phrases like 30 days, 2 weeks, 3 months (each month means 30 days) |
proxyConfiguration | Optional. Empty uses Apify Residential proxy on your account; set it to supply your own proxy |
Fill in at least one of usernames, hashtags or directUrls.
Output
A real row from a National Geographic profile run (CDN links shortened):
{"reel_id": "Ddug0K2ggYm","reel_url": "https://www.instagram.com/reel/Ddug0K2ggYm/","username": "natgeo","display_name": "National Geographic","profile_url": "https://www.instagram.com/natgeo/","follower_count": null,"caption": "Fall looks pretty good from here. With the season officially starting, foliage will soon turn shades of yellow, orange, and red as temperatures begin to cool. 🍂\n\n#NationalParksUSA is now streaming on @DisneyPlus","hashtags": ["NationalParksUSA"],"mentions": ["DisneyPlus"],"likes_count": 75544,"comments_count": 296,"views_count": 1420342,"plays_count": 1420342,"duration_seconds": 13.93,"video_url": "https://scontent-bos5-1.cdninstagram.com/o1/v/t2/f2/m86/...mp4","thumbnail_url": "https://scontent-bos5-1.cdninstagram.com/v/t51.82787-15/...jpg","audio_title": null,"audio_artist": null,"is_sponsored": false,"is_pinned": null,"posted_at": "2026-09-25T22:17:40.000Z","scraped_at": "2026-10-02T17:42:22.805Z","source_url": "https://www.instagram.com/natgeo/reels/"}
| Field | What it contains |
|---|---|
reel_id, reel_url | Reel shortcode and its Instagram link |
username, display_name, profile_url | The account that posted the Reel |
follower_count | Account followers, filled when the source page includes it |
caption, hashtags, mentions | Full caption plus hashtags and mentioned accounts parsed from it |
likes_count, comments_count | Likes and comments at collection time |
views_count, plays_count | View and play counts at collection time |
duration_seconds | Reel length in seconds |
video_url, thumbnail_url | Direct video file and cover image links; download them soon after the run |
audio_title, audio_artist | Audio track name and artist when Instagram attaches them, such as Original audio |
is_sponsored, is_pinned | Paid-partnership flag, and the pinned flag when the profile exposes it |
posted_at, scraped_at | Publish time and collection time (ISO 8601) |
source_url | The profile, hashtag page or Reel link that produced the row |
collection_method | Present on hashtag rows gathered from indexed public Reels |
Hashtag runs return a sample of public Reels whose captions contain the hashtag. Those rows carry collection_method, and the run outcome in OUTPUT reads PARTIAL to signal a sample of the topic rather than its full feed. Profile and direct-link runs read COMPLETE when every source returns Reels, and RUN_SUMMARY holds per-source detail.
Pricing
This Actor uses Pay per event plus Apify platform usage. Each Reel saved to the dataset is one Reel Extracted event, and every run has a small Actor Start event. Platform usage, including the default Apify Residential proxy traffic, is billed to the account that runs the Actor. Open the live Pricing tab on this page for current rates.
- Three profiles at the default of three Reels each = 9 Reel Extracted events plus one Actor Start.
- Ten profiles with
maxReelsPerSourceat 50 = up to 500 Reel Extracted events, fewer whenonlyReelsNewerThantrims older Reels. maxReelsPerSourcecaps each source, so it doubles as your cost ceiling.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~instagram-reels-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"usernames": ["nike"], "maxReelsPerSource": 10, "onlyReelsNewerThan": "2 weeks"}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/instagram-reels-scraper").call(run_input={"usernames": ["natgeo"], "maxReelsPerSource": 5})for reel in client.dataset(run["defaultDatasetId"]).iterate_items():print(reel["reel_url"], reel["plays_count"], reel["likes_count"])
Use Instagram Reels Scraper with AI agents (MCP)
Connect this Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP, then ask in plain language:
Get the last 10 Reels from @nasa and @natgeo posted in the past month, then rank them by plays and tell me which topics and partner mentions perform strongest.
What the agent does and gets back:
- Calls
khadinakbar/instagram-reels-scraperwithusernames,maxReelsPerSource: 10andonlyReelsNewerThan: "30 days". - Reads the rows with
get-dataset-items; each row is one Reel with caption, hashtags, mentions and engagement counts. - Sorts by
plays_countand groups byhashtagsandmentionsbefore answering. - Checks
OUTPUTfor the runoutcomeanditemsPushed, and treats hashtag rows as a topic sample. Cost scales with Reels returned, so it keepsmaxReelsPerSourceclose to the request.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| A quick check of one account | Keep the default maxReelsPerSource of 3 | A fast, low-cost snapshot of the latest Reels |
| Competitor benchmarking | Several usernames with onlyReelsNewerThan at 30 days | Comparable recent Reels per brand |
| Topic discovery | One or two focused hashtags | A sample of public Reels that use the tag in the caption |
| A list of known Reels | Put each link in directUrls | One fresh row per Reel |
| Saving videos | Download video_url right after the run | Media files while the CDN links are active |
| Ranking content | Compare plays_count with likes_count and comments_count | A clearer picture than any single metric |
Builder's note
I built this around three entry points because Reels research usually starts from an account, a topic or a link someone shared, and each needs a different route to the same row shape. Every row keeps its source_url, so a mixed run still shows which profile or tag produced each Reel. Hashtag rows are labeled as a sample through collection_method and the PARTIAL outcome, so dashboards can treat topic pulls differently from complete profile pulls.
FAQ
Do I need an Instagram account?
No. The Actor reads public Reels and profiles without a login.
Can I search by keyword?
Use topic keywords as hashtags, such as travel or homeworkout. Each one returns public Reels whose captions include that tag.
How long do the video links last?
video_url and thumbnail_url are Instagram CDN links that refresh over time, so download media soon after the run, or re-run with directUrls for fresh links.
Why do plays and views both appear?
Instagram reports them separately. They often match; when they differ, plays_count counts every playback.
Responsible use
This Actor collects public Instagram content and profile details that accounts choose to publish. Captions, handles and mentions can still be personal data under laws such as the GDPR, so use them with a lawful basis, respect creators' rights in their videos, and follow Instagram's terms. Read Apify's guide on whether web scraping is legal for more context. Instagram is a trademark of Meta Platforms, Inc. This independent Actor is not affiliated with or endorsed by Meta. For questions, open a ticket in the Issues tab.
Provider outages and unverified responses are reported as UPSTREAM_FAILED when no usable data can be recovered. VALID_EMPTY requires a verified source response or a verified feed excluded by the date filter. Interrupted runs report PARTIAL, including when interrupted before saving rows. Invalid dates are rejected before contacting Instagram.