Instagram Reels Search Scraper: Reels by Keyword
Pricing
from $0.37 / 1,000 reels
Instagram Reels Search Scraper: Reels by Keyword
Instagram reels search by keyword, no login: the public reels Instagram lists for each phrase, #hashtag or Boolean keyword, plus related searches. Rows carry plays, likes, comments, date, length, music, location and creator. Filters on plays and dates. JSON, CSV or API; pay per reel.
Pricing
from $0.37 / 1,000 reels
Rating
0.0
(0)
Developer
Automation Craft
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Instagram Reels Search Scraper: Reels by Keyword
Search Instagram reels by keyword and get every public reel Instagram shows for your words, with its plays, likes,
comments, posting time, length, music, location and creator, without an Instagram account, cookies or login. Give one keyword
or 500, a #hashtag, an instagram.com/popular/ or /explore/tags/ link or a Boolean keyword such as ("latte art" OR barista) -giveaway, and get one
row per reel plus a free row per keyword that says what Instagram listed and why the search stopped.
- Reels by keyword, no login. The Actor reads Instagram's own public reel search for each keyword (about 96 reels a search) and, when you ask, the related searches Instagram lists next to it, close variants of broad words, and more reels from the creators it found.
- Every number Instagram shows logged out. Plays, likes (or that the creator hides them), comments, posting time, length, width and height, the song or original sound, the tagged location with coordinates, collaborators, the paid partnership label, Instagram's AI label, and links to the video file and its audio only track with the time they expire.
- Filters that cost nothing. Minimum plays, likes and comments, a posting date window, words that must appear, Boolean keywords and the caption's language. Reels a filter leaves out are never charged.
- Your order. Instagram's own order, newest first or most played first.
- Add-ons when you need them. Each creator's followers, following, post count, category, account type, links and bio, and up to 50 comments per reel.
- Fair billing. Each reel is charged once per run, even when several keywords find it. Searches that find nothing, failed calls, repeats and refused entries are free rows. A reel whose details could not be read is delivered free.
Quick start
- Open the Actor's Input tab and type your keywords, one per line (for example
nail art,home bakery,dubai hotels). - Set Max reels per keyword (about 96 is the most one Instagram search lists; related searches find more).
- Optional: add filters (minimum plays or likes, posted since), an order, or the creator details and comments add-ons.
- Click Start. Each reel arrives as a row of the dataset, followed by one keyword row per keyword and a run summary.
- Download the dataset as JSON, CSV or Excel, or read it through the Apify API, a schedule, Make, n8n or Zapier.
What you get
One reel row per reel. The fill rates below were measured on 534 distinct reels with details read on the platform on
2026-10-27 (21 test runs).
| Field | What it holds | Filled |
|---|---|---|
keyword, searchedAs, foundVia, rank, searchPage | your keyword, the text sent to Instagram, how the reel was found (search, related, variant, creator), its place in Instagram's list | 100% |
code, id, url | the reel's code, id and link | 100% |
caption, hashtags | the caption as Instagram serves it, and its hashtags | 99.3%, 85.8% |
playCount | plays | 100% |
likeCount, likesHidden | likes, or likesHidden: true when the creator hides them (likeCount is then null, never 0) | 92.7% shown, 7.3% hidden |
commentCount, commentsDisabled | comments, and whether comments are off where Instagram says so | 100%, rarely set |
postedAt, postedAtTimestamp, createdAtFromId | when the reel was posted, and when it was created (read from its id) | 100% |
durationSeconds, width, height, hasAudio | the video's length and size | 99.6%, 100% |
videoUrl, videoUrlExpiresAt | the MP4 file link and when Instagram's signed link expires | 100% |
audioUrl | the audio only track | 94.9% |
audio | type (music or original), title, artist, audioId, isExplicit | 93.8% (music 41.0%) |
location | id, name, lat, lng, url of the tagged place | 33.0% |
coauthors, isPaidPartnership | collaborators and the paid partnership label, as creators set them | 9.9%, 0.9% |
aiLabel, fbLikeCount | Instagram's "AI content" label, likes of the reel's Facebook cross post | 6.0%, 7.7% |
owner | the creator's username, id, fullName, isVerified, isPrivate, profilePicUrl, url | 100% (full name 97.8%) |
keywordMatch, matchedTerms | how the caption, hashtags and username match your keyword: all, some or none | 100% (all 71.3%) |
captionLanguage | the caption's language, our own estimate (see the FAQ) | 32.8% |
viewCount | the reel's view counter from its embed page, a counter apart from plays (opt in) | when asked |
creator | add-on: followerCount, followingCount, postsCount, category, accountType (personal, business or creator), externalUrl, bioLinks, biography; links to Instagram, Facebook, Messenger, Threads or WhatsApp only with Include personal data | when asked |
comments | add-on: up to 50 comments with text, createdAt, likeCount, ownerUsername | when asked |
mentions, taggedUsers | the @usernames in the caption and the accounts tagged in the reel: empty unless you turn on Include personal data | when asked |
Example row (from a run on home bakery; caption and links cut short):
{"type": "reel","keyword": "home bakery","searchedAs": "home bakery","foundVia": "search","rank": 2,"code": "DeevznutHxo","url": "https://www.instagram.com/reel/DeevznutHxo/","caption": "5 things I learned building a cookie business from scratch...","hashtags": ["montrealcookies", "montrealdessert", "mtldesserts", "montrealfoodie", "griffintown"],"keywordMatch": "all","matchedTerms": ["home", "bakery"],"playCount": 72589,"likeCount": null,"likesHidden": true,"commentCount": 52,"postedAt": "2026-10-14T15:52:19.000Z","durationSeconds": 5.455,"videoUrl": "https://scontent-iad3-2.cdninstagram.com/o1/v/t2/f2/m86/...mp4","videoUrlExpiresAt": "2026-10-29T02:33:01.000Z","audio": { "type": "music", "title": "Dracula (Instrumental) [feat. JENNIE]", "artist": "Tame Impala" },"location": { "name": "Montreal, Quebec", "lat": 45.5038, "lng": -73.5744 },"owner": { "username": "obsession.cookies", "isVerified": false },"creator": { "followerCount": 1615, "followingCount": 193, "postsCount": 66, "category": "Bakery", "accountType": "creator", "externalUrl": "https://flavrr.ca/order/obsessioncookies" },"comments": [{ "text": "Cookie", "createdAt": "2026-10-27T14:22:38.000Z", "likeCount": 0 }]}
The keyword row (free). One per keyword: its status (ok, no_reels, no_matching_reels, failed, stopped), finished,
stopReason, how many reels were listed, delivered and left out by each check (reelsLeftOut), every search read with its
pages and whether it reached Instagram's end, the related keywords Instagram lists for it, and Instagram's own short
description of the keyword with its sources (keywordSummary). The last row of every run is a free summary row with the
run's counts.
How much does it cost to scrape Instagram reels?
You pay per result (pay per event). Prices per 1,000 events:
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| Reel (one reel delivered as a row, with its details) | $0.51 | $0.46 | $0.42 | $0.365 |
| Reel search (one search that delivered at least one charged reel) | $0.42 | $0.38 | $0.34 | $0.30 |
| Creator profile (add-on, once per creator per run) | $1.33 | $1.21 | $1.10 | $0.95 |
| Comment (add-on, per comment delivered) | $0.27 | $0.24 | $0.22 | $0.19 |
Platinum and Diamond plans pay the Gold price. Each run also pays the Actor start event of $0.0075 (256 MB), which has no plan discount. The Store pricing card shows these same prices per 1,000 events: "$0.365 / 1,000" on the Reel row means one reel costs about four hundredths of a cent.
Examples at the Gold price: 50 reels of one keyword (one search) cost $0.0075 + 50 x $0.000365 + $0.0003 = $0.026; 500 reels of ten keywords, 50 each, cost $0.0075 + 500 x $0.000365 + 10 x $0.0003 = $0.193. A keyword whose reels come from more than one search (Boolean branches, related searches, variants) pays one Reel search for each search that delivered a charged reel.
Free: keyword rows, status rows, the summary, reels another keyword of the run already delivered, reels a filter leaves out, carousel posts, searches that list nothing, failed calls, refused entries, invalid input, and reels whose details could not be read (delivered free). An invalid input charges only the run's start fee.
Input
| Setting | What it does | Default |
|---|---|---|
keywords | one keyword per entry, up to 500 (see below) | required |
maxReelsPerKeyword | the most reels delivered for one keyword, its related, variant and creator reels included (1 to 1,000) | 50 |
maxReels | stop the run after this many reels in all (keywords are read in the order given) | none |
sortBy | relevance (Instagram's order), newest or mostPlayed | relevance |
searchRelatedKeywords | also search this many of Instagram's related keywords per keyword (0 to 10) | 0 |
tryVariantsWhenEmpty | for a keyword without reels, also try " | off |
includeCreatorReels, maxReelsPerCreator | add the newest reels of the creators found that match your keyword (1 to 12 per creator) | off, 2 |
requireKeywordMatch | keep only reels whose caption, hashtags or username hold every word of the keyword | off |
postedSince, postedUntil | a posting window: a day as 2026-10-01 or 30 days (from the run's start), and an end day | none |
minPlays, minLikes, minComments | minimum counts (reels with hidden likes fail a likes minimum) | none |
captionLanguages | keep only captions estimated in these languages (44 two letter codes) | any |
includeDetails | read each reel's details (likes, comments, date, music, location and more); off delivers what the search lists, faster | on |
includeViewCount | add the reel's view counter from its embed page (one more read per reel, included in the Reel price) | off |
includeCreatorDetails | the Creator profile add-on | off |
maxCommentsPerReel | the Comment add-on: up to this many comments per reel (0 to 50) | 0 |
includePersonalData | fill mentions and taggedUsers, and keep links to Instagram, Facebook, Messenger, Threads or WhatsApp in the creator's website and bio links and in the keyword description's sources | off |
maxRunSeconds, requestTimeoutSecs, maxRetries | a time limit, the request timeout (5 to 60 s) and retries per request (0 to 5) | none, 30, 2 |
proxyConfiguration | Apify Proxy setting (see below) | Apify Proxy |
Keywords. A phrase (nail art), a #hashtag (searched as its word: Instagram itself redirects logged out visitors of tag pages
such as /explore/tags/travel/ to the same popular search, and a tag page link is searched the same way), a link to an
instagram.com/popular/<words>/ or instagram.com/explore/tags/<tag>/ page, or a Boolean keyword: AND, OR, NOT in capitals,
parentheses, "quoted phrases" and -word; a space means AND; at most 10 OR branches. Each OR branch is searched, and a reel is delivered only when its
caption, hashtags or username match the whole expression (whole words; a phrase also matches the same words run together, as in
#nailart). Keywords are searched in Instagram's lower case form. Specific phrases ("wedding photographer", "keto recipes",
"paris bakery") list more reels than single broad words; Instagram shows no public reels for some broad words ("coffee",
"fitness") and screened words, and such a keyword gets a free no_reels row (turn on tryVariantsWhenEmpty to search "coffee
ideas" and the like instead). An entry that is empty, a link of another kind, holds an @ (an e-mail address or a handle), looks like a token or API key, or
repeats an earlier keyword is refused with one free row per reason that names its position (the value is never shown); the
other keywords run.
Proxy. By default the Actor reads from its own server address first and moves a request type to Apify's datacenter proxy when Instagram refuses that address. Choose a proxy group or country to read only through Apify Proxy, or give your own proxy links. A residential group is read through the datacenter pool instead, at no extra cost, and a free status row says so.
Work that earns nothing. Searches that list nothing, filters no reel passes and calls Instagram answers badly cost time but
deliver nothing. A run spends at most a small fixed amount of such work before its first charged reel, and more as it delivers;
when it is spent the run stops with a free skipped row naming the keywords not searched (a test list of 150 keywords that all
found nothing stopped after 31). A details read that Instagram keeps failing (half the reads of two rounds in a row) stops
the run as instagram_failing, and the run's status message names Instagram as the failing side.
API examples
curl -X POST "https://api.apify.com/v2/acts/automation_craft~instagram-reels-search-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["nail art", "home bakery"], "maxReelsPerKeyword": 24, "minPlays": 10000}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('automation_craft/instagram-reels-search-scraper').call({ keywords: ['latte art'], sortBy: 'newest', postedSince: '30 days' });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((row) => row.type === 'reel').length);
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("automation_craft/instagram-reels-search-scraper").call(run_input={"keywords": ["dubai hotels"], "includeCreatorDetails": True})for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row["type"] == "reel":print(row["url"], row["playCount"], row["creator"])
What this Actor does NOT do
- No share counts. Instagram shows a reel's share count only to logged in viewers; this Actor reads logged out only.
- No transcripts or subtitles. Instagram serves no subtitle track to a logged out reader, and this Actor runs no speech to text and no outside AI service (no AI video descriptions either).
- No hashtag feeds, stories, photo posts by keyword, or user, place and hashtag search. Hashtag feeds and stories need a login; a #hashtag is searched as its word on the popular search. Photo and carousel posts are left out (they are rare in the reel search). Accounts by keyword are a separate product.
- No monitoring across runs. There is no memory of earlier runs and no "new reels only" mode; each run reads what Instagram
lists at that moment. Schedule runs and deduplicate on
codein your sheet or workflow. - No delivery into other apps and no custom code. The Actor writes only to its own dataset: it has no input that pushes rows into Notion, Todoist or other apps through connectors (Apify's integrations, webhooks and the API deliver the dataset anywhere), and it runs no mapping function you send (map the dataset in your own tool).
- No logins, cookies or accounts of yours, and no Facebook play counts or paid partnership sponsors (Instagram serves neither to a logged out reader: the sponsor list was empty on all 20 paid partnership reels of our test runs).
- No more than Instagram lists. About 96 reels per search; related searches, variants and creator reels widen a keyword.
FAQ
Can I search Instagram Reels by keyword?
Yes. Give your keywords and the Actor returns the public reels Instagram's own reel search lists for each one (about 96 per search), with plays, likes, comments and date on every row; related searches, variants and creator reels find more.
Can you search Instagram without an account?
This Actor does. It reads Instagram's public reel search and each reel's public page data without an account, cookies or login, so your own Instagram account is never involved.
Is there an Instagram search API?
Meta's official API offers hashtag search only to Business or Creator accounts, limited to 30 hashtags in 7 days, and no keyword reel search. This Actor works as a keyword reel search API: call it through the Apify API, a schedule, Make, n8n or Zapier.
How do I find Instagram reels with a minimum number of views?
Set Minimum plays (and Minimum likes or Minimum comments); reels under them are left out and never charged. Add Most played first to get the biggest reels of a keyword first.
How accurate is the caption language filter?
Instagram serves no language for a caption, so the Actor estimates it from the caption text with the franc library. It names a language only when the caption holds 40 letters or more and the result is clear: on 95 captions read by hand it named 94, and 90 of those right. About a third of captions get a language; the filter leaves out the others (short or mixed captions).
Why does this Actor run with limited permissions?
It needs no more: it reads Instagram's public pages and writes only to its own run's dataset and key-value store. Limited permissions keep it from touching anything else in your Apify account.
More data tools by Automation Craft
- Instagram Posts Scraper: Profiles, Reels, No Login
- Threads Search Scraper: Keywords, Hashtags, Dates
- Facebook Search Scraper: Keyword Posts, No Login
- Facebook Video Search Scraper: Reels, No Login
- Facebook Reels Scraper: Views, Likes, No Login
- Meta Branded Content Scraper: Paid Partnerships
- Instagram Ads Library Scraper - Creatives, Video
- TikTok Hashtag Scraper: Posts, Free Date Filter
Changelog
See the Changelog tab: 0.1 (2026-10-27) is the first release.