Instagram Reels Scraper — Profiles, Hashtags & Keywords avatar

Instagram Reels Scraper — Profiles, Hashtags & Keywords

Pricing

from $1.50 / 1,000 reel extracteds

Go to Apify Store
Instagram Reels Scraper — Profiles, Hashtags & Keywords

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

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

267

Total users

27

Monthly active users

a day ago

Last modified

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 in hashtags, or from exact Reel links in directUrls.
  • Engagement in every row. likes_count, comments_count, views_count and plays_count sit next to the caption, so ranking Reels takes one sort.
  • Caption already parsed. hashtags and mentions are split out of the caption, ready for brand-partner and theme analysis.
  • Media links included. video_url and thumbnail_url point straight at the Reel file and cover image.
  • Recent Reels only. onlyReelsNewerThan accepts a date or phrases like 30 days, ideal for campaign windows.
  • Run summary for automations. OUTPUT in the key-value store reports the run outcome and itemsPushed.

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 maxReelsPerSource scales up to 500 for deeper research.
  • Use directUrls when 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_url values 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
}
InputWhat it controls
usernamesInstagram handles or profile URLs, such as natgeo or https://www.instagram.com/natgeo/
hashtagsTopic keywords without the #, such as travel or fitness
directUrlsReel links on instagram.com using /reel/ or /p/ paths, each as {"url": "..."}
maxReelsPerSourceReels to collect per username, hashtag or link, from 1 to 500 (default 3)
onlyReelsNewerThanDate filter: YYYY-MM-DD, an ISO timestamp with a timezone, or phrases like 30 days, 2 weeks, 3 months (each month means 30 days)
proxyConfigurationOptional. 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/"
}
FieldWhat it contains
reel_id, reel_urlReel shortcode and its Instagram link
username, display_name, profile_urlThe account that posted the Reel
follower_countAccount followers, filled when the source page includes it
caption, hashtags, mentionsFull caption plus hashtags and mentioned accounts parsed from it
likes_count, comments_countLikes and comments at collection time
views_count, plays_countView and play counts at collection time
duration_secondsReel length in seconds
video_url, thumbnail_urlDirect video file and cover image links; download them soon after the run
audio_title, audio_artistAudio track name and artist when Instagram attaches them, such as Original audio
is_sponsored, is_pinnedPaid-partnership flag, and the pinned flag when the profile exposes it
posted_at, scraped_atPublish time and collection time (ISO 8601)
source_urlThe profile, hashtag page or Reel link that produced the row
collection_methodPresent 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 maxReelsPerSource at 50 = up to 500 Reel Extracted events, fewer when onlyReelsNewerThan trims older Reels.
  • maxReelsPerSource caps 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 ApifyClient
client = 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:

  1. Calls khadinakbar/instagram-reels-scraper with usernames, maxReelsPerSource: 10 and onlyReelsNewerThan: "30 days".
  2. Reads the rows with get-dataset-items; each row is one Reel with caption, hashtags, mentions and engagement counts.
  3. Sorts by plays_count and groups by hashtags and mentions before answering.
  4. Checks OUTPUT for the run outcome and itemsPushed, and treats hashtag rows as a topic sample. Cost scales with Reels returned, so it keeps maxReelsPerSource close to the request.

Best results

Starting situationHelpful actionExpected outcome
A quick check of one accountKeep the default maxReelsPerSource of 3A fast, low-cost snapshot of the latest Reels
Competitor benchmarkingSeveral usernames with onlyReelsNewerThan at 30 daysComparable recent Reels per brand
Topic discoveryOne or two focused hashtagsA sample of public Reels that use the tag in the caption
A list of known ReelsPut each link in directUrlsOne fresh row per Reel
Saving videosDownload video_url right after the runMedia files while the CDN links are active
Ranking contentCompare plays_count with likes_count and comments_countA 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.

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.