Instagram Search Scraper: Reels, Users, Hashtags avatar

Instagram Search Scraper: Reels, Users, Hashtags

Pricing

from $0.37 / 1,000 reels

Go to Apify Store
Instagram Search Scraper: Reels, Users, Hashtags

Instagram Search Scraper: Reels, Users, Hashtags

Instagram search by keyword, no login: reels, user accounts and hashtags in one run. Reels carry plays, likes, comments and music; accounts carry followers, bio, links and engagement; hashtags carry exact post counts and related tags. Filters, JSON, CSV or API; pay per result.

Pricing

from $0.37 / 1,000 reels

Rating

0.0

(0)

Developer

Automation Craft

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Instagram Search Scraper: Reels, Users, Hashtags

Search Instagram by keyword for public reels, user accounts and hashtags in one Actor, without an Instagram account, cookies or login. Give your words ("coffee roaster", "wedding photographer miami", "nail art") and pick what to look for: reels with their plays, likes and comments, accounts with their followers, bio and engagement, hashtags with their exact post counts, or all three in one run. Every result is a row of your dataset, with a free row per keyword that says what was searched, found and left out.

  • Three search types, one run. Reels (Instagram's own reels search for your words), profiles (Threads' user search, Meta's Ad Library and the creators of matching reels, each account then read on Instagram) and hashtags (Instagram's own hashtag search, up to 55 hashtags a keyword). Ask for one, two or all three: they run in the order you list them, and every row says which search made it (searchType).
  • Deep rows. Reels with plays, likes, comments, date, length, music, location, collaborators and the video and audio links; accounts with exact followers, following, posts, bio, links, category, account type, the 6 newest posts and engagement; hashtags with Instagram's tag id, the exact post count and a popularity band.
  • Filters that cost nothing. Dates, plays, likes and caption language for reels; 24 account filters for profiles (followers, account type, words in the bio, category, place words, a contact shown, engagement and more); post count bounds, keyword match and the exact hashtag for hashtags. Results a filter leaves out are never charged.
  • Add-ons when you need them. Creator details and comments on reels; reel figures, profile info and the linked Facebook Page's public contact on accounts; related hashtags (the hashtags used most with each one in its top reels) with their post counts where Instagram lists them, and those top reels on hashtags.
  • Fair billing. Each reel, account and hashtag is charged once per run, even when several keywords find it. Searches that find nothing, failed calls, repeats and refused entries are free rows.

Quick start

  1. Open the Actor's Input tab and pick the Search types: Reels (default), Profiles, Hashtags, or several.
  2. Type your keywords, one per line (coffee roaster, wedding photographer miami, nail art). For profiles you can also paste usernames or post links.
  3. Set Max results per keyword (counted per search type: reels, profiles and hashtags each get that many per keyword).
  4. Optional: open the section of each search type for its filters and add-ons.
  5. Click Start. Results arrive as rows of the dataset, followed by one free row per keyword and a summary per search type.
  6. Download the dataset as JSON, CSV or Excel (the Output tab has a view per search type), or read it through the Apify API, a schedule, Make, n8n or Zapier.

What you get

Every row a search makes carries searchType (reels, profiles or hashtags; the run's own rows below carry null) and type (reel, profile, hashtag, or a free row: keyword, subject, status, summary). The fill rates below were measured on the platform on 2026-10-28, on the distinct rows of the 26 checking runs of this Actor's final build that delivered rows (247 reels, 23 accounts, 172 hashtags).

Reels (searchTypes holds reels)

One reel row per reel found by your keyword on Instagram's own reels search (24 reels on its first page, about 96 a search when every page is read).

FieldWhat it holdsFilled
keyword, searchedAs, foundVia, rank, searchPageyour keyword, the text sent to Instagram, how the reel was found (search, related, variant, creator), its place in Instagram's list100%
code, id, urlthe reel's code, id and link100%
caption, hashtagsthe caption as Instagram serves it, and its hashtags98.4%, 82.2%
playCountplays99.2%
likeCount, likesHidden, commentCountlikes (null, never 0, when the creator hides them), comments86.2%, 89.5%
postedAt, durationSecondswhen the reel was posted, and its length90.3%, 89.9%
videoUrl, videoUrlExpiresAt, audioUrl, coverUrlthe MP4 link and when Instagram's signed link expires, the audio only track, the cover100%, audio 86.6%, cover 100%
audiotype (music or original), title, artist, audioId84.2%
locationid, name, lat, lng, url of the tagged place35.2%
coauthors, isPaidPartnership, aiLabelcollaborators, the paid partnership label, Instagram's AI content label8.5%, 89.5% read
ownerthe creator's username, id, fullName, isVerified, isPrivate, profilePicUrl, url100%
keywordMatch, matchedTermshow the caption, hashtags and username hold your keyword's words: all, some or none100% (all 58.7%)
viewCount, creator, commentsthe reel's view counter (opt in), creator details and comments (add-ons)when asked
mentions, taggedUsersthe @usernames in the caption and the accounts tagged in the reel: empty unless you turn on Include personal datawhen asked

Rows read without details (includeDetails off) hold what the search listed: code, caption, plays, creator, video and cover. A reel whose details could not be read is delivered free (detailsStatus failed); the fill rates above count those rows too.

Profiles (searchTypes holds profiles)

One profile row per account. Each keyword runs Threads' user search (about 100 accounts a search), Meta's Ad Library search (up to 15 businesses with a Facebook Page) and Instagram's reels search (the creators of matching reels), merged, and every account is read on Instagram.

FieldWhat it holdsFilled
keyword, searchedAs, foundVia, rankyour keyword, the text searched, how the account was found (threads, ad_library, reel_creator, threads_variant, related_profile, username, commenter), its place in the keyword's merged list100%
username, id, url, fullName, biographythe account's username, Instagram id, link, name and bio as Instagram serves it100%
followerCount, followingCount, postsCountexact followers, following and posts100%, posts 95.7%
accountType, category, isVerified, isPrivatepersonal, business or creator, the category the account shows, the badges100%, category 60.9%
externalUrl, bioLinks, threadsUsername, facebookPagethe website, the bio links, the Threads profile, the linked Facebook Page87.0%, 91.3%, 39.1%, 39.1%
recentPosts, avgLikes, avgComments, engagementRate, engagementGrade, postsPerWeek, lastPostAtthe 6 newest posts and the engagement and posting pace computed from them95.7%, engagement 91.3%
biographyLanguage, keywordMatchthe language of the bio and captions (our own estimate), how the username, name and bio hold your keyword87.0%, 87.0%: every account a keyword found, none for a username list (all 65.2%)
hasEmail, hasPhone; emails, phoneswhether the bio, bio links or captions show an e-mail or phone; the addresses and numbers only with Include personal dataflags always
reelStats, profile info fields, facebookPageContact, relatedProfilesadd-ons: reel figures, the business address and more, the Facebook Page's public contact, suggested accounts (needs Include personal data)when asked

Hashtags (searchTypes holds hashtags)

One hashtag row per hashtag Instagram's hashtag search lists for your keyword (up to 55 a keyword, in Instagram's order).

FieldWhat it holdsFilled
name, hashtag, idthe hashtag as Instagram stores it (styled letters, accents and emoji kept), with its #, and Instagram's tag id100%
postsCount, postsCountTextthe exact number of posts using it, and Instagram's own rounded text ("2.1M posts")100%
popularityvery_high (10 million posts or more), high (1 million), medium (100,000), low (10,000), very_low: our own bands100%
url, popularReelsUrlthe tag's page and its public popular reels page100%
keyword, keywordPosition, searchedAs, rankyour keyword, the text searched and the hashtag's place in Instagram's list100%
keywordMatch, matchedTerms, isExactKeywordwhether the name holds every word of your keyword (all, some, none), and whether it IS your keyword's words run together100% (all 98.8%)
relatedHashtags, topReels, topReelsMedianPlays, relatedReelsRead, relatedHashtagsStatusadd-on: the hashtags used most often with this one in its top public reels (up to 10, each with how many of those reels use it, its exact post count and band when Instagram lists it), those reels (link and plays) and their median playswhen asked

Example row (from a run on coffee roaster, related hashtags on):

{
"type": "hashtag",
"searchType": "hashtags",
"name": "coffeeroaster",
"hashtag": "#coffeeroaster",
"id": "17842356424066679",
"postsCount": 2161276,
"postsCountText": "2.1M posts",
"popularity": "high",
"url": "https://www.instagram.com/explore/tags/coffeeroaster/",
"keyword": "coffee roaster",
"rank": 1,
"keywordMatch": "all",
"isExactKeyword": true,
"relatedHashtags": [
{ "name": "coffee", "hashtag": "#coffee", "reels": 9, "postsCount": 185545143, "popularity": "very_high" },
{ "name": "specialtycoffee", "hashtag": "#specialtycoffee", "reels": 8, "postsCount": 9313995, "popularity": "high" }
],
"topReelsMedianPlays": 18808,
"relatedHashtagsStatus": "read"
}

The free rows

One keyword row per keyword of the reels and hashtags searches, and one subject row per keyword, account list or post link of the profile search: its status (ok, nothing found, nothing matching, failed, stopped), finished, stopReason, what each search listed, delivered and left out and why. The hashtag search's keyword row also lists every hashtag Instagram listed for the keyword with its post count and band (listedHashtags), before your filters. Every search type ends with a free summary row of its counts and charges; when the run stops before a search type you asked for, a free search_types_skipped row names it. When the input is refused, nothing is searched: the run writes one free entries_refused row per list and reason (the positions of the entries, never their text), the invalid row naming each problem and a summary, all with searchType null.

How much does it cost to scrape Instagram search results?

You pay per result (pay per event). Prices per 1,000 events:

EventFreeBronzeSilverGold
Reel (one reel delivered as a row, with its details)$0.51$0.46$0.42$0.365
Reel search (one reels search that delivered at least one charged reel)$0.42$0.38$0.34$0.30
Creator profile (reels add-on, once per creator per run)$1.33$1.21$1.10$0.95
Comment (reels add-on, per comment delivered)$0.27$0.24$0.22$0.19
Profile (one account delivered as a row, with its details)$1.86$1.70$1.54$1.33
Basic profile (one account without details, when details are off)$0.40$0.36$0.32$0.28
Facebook Page contact (profiles add-on, a linked Page that shows contact details)$2.10$1.92$1.74$1.50
Re-filtered profile (a profile of an earlier run that passes this run's filters)$0.10$0.09$0.08$0.07
Hashtag (one hashtag delivered as a row, with its post count)$1.65$1.51$1.36$1.18
Related hashtag list (hashtags add-on, a hashtag where related hashtags were found)$1.40$1.28$1.16$1.00

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, and "$1.18 / 1,000" on the Hashtag row means one hashtag costs about a tenth of a cent.

Examples at the Gold price: 50 reels of one keyword cost $0.0075 + 50 x $0.000365 + $0.0003 = $0.026; 30 hashtags of one keyword cost $0.0075 + 30 x $0.00118 = $0.043; one keyword searched for 20 reels, 20 profiles and 20 hashtags costs $0.0075 + 20 x $0.000365 + $0.0003 + 20 x $0.00133 + 20 x $0.00118 = $0.065.

Free: keyword, subject and status rows, the summaries, results another keyword of the run already delivered, results a filter leaves out, searches that list nothing, failed calls, refused entries and invalid input; reels whose details and accounts whose recent posts could not be read are delivered free; a related hashtags read that finds no public reels is free. An invalid input charges only the run's start fee.

Input

Shared settings

SettingWhat it doesDefault
searchTypesone to three of reels, profiles, hashtags, run in the order givenreels
keywordswords or phrases, up to 500 (see below)none
maxResultsPerKeywordthe most results one keyword delivers in EACH search type (1 to 1,000; Instagram lists about 96 reels a search and up to 55 hashtags a keyword)50
maxResultsstop a search type once it delivered this many results across all keywords (counted per search type)none
requireKeywordMatchkeep only results that hold every keyword word (a reel's caption, hashtags or username; an account's username, name or bio; a hashtag's name)off
includeDetailsread each reel's details and each account on Instagram (reels and profiles; off is faster and leaner)on
includePersonalDatafill the fields that name or reach a person: a reel's mentions and taggedUsers, an account's emails, phones and relatedProfiles, and links to Instagram, Facebook, Messenger, Threads or WhatsApp and contact links in websites and bio linksoff
maxRunSeconds, requestTimeoutSecs, maxRetriesa time limit, the request timeout (5 to 60 s) and retries per request (0 to 5)none, 30, 2
proxyConfigurationApify Proxy setting (see below)Apify Proxy

A setting of a search type you did not pick is ignored when it holds nothing or its default, and refuses the run otherwise (it would ask for work this run does not do); the refusal names the setting and charges only the run's start fee.

Reels search settings

SettingWhat it doesDefault
sortByrelevance (Instagram's order), newest or mostPlayedrelevance
searchRelatedKeywordsalso search this many of Instagram's related keywords per keyword (0 to 10)0
tryVariantsWhenEmptyfor a keyword without reels, also try "off
includeCreatorReels, maxReelsPerCreatoradd the newest reels of the creators found that match your keyword (1 to 12 per creator)off, 2
postedSince, postedUntila posting window: a day as 2026-10-01 or 30 days (from the run's start), and an end daynone
minPlays, minLikes, minCommentsminimum counts (reels with hidden likes fail a likes minimum)none
captionLanguageskeep only captions estimated in these languages (44 two letter codes)any
includeViewCountadd the reel's view counter from its embed page (one more read per reel, included in the Reel price)off
includeCreatorDetailsthe Creator profile add-onoff
maxCommentsPerReelthe Comment add-on: up to this many comments per reel (0 to 50)0

Profile search settings

SettingWhat it doesDefault
usernamesaccounts to read directly: usernames, @handles, profile links or numeric ids, up to 5,000none
postUrlspost or reel links: the authors of their public comments are read, up to 100 linksnone
maxCommentersPerPostthe most distinct comment authors collected from one post50
searchThreads, searchAdLibrary, searchReelCreatorswhich searches a keyword runsall on
reelSearchPagespages of the reels search read for its creators (1 to 8)1
adLibraryCountrythe country the Ad Library search favours (ALL or a two letter code in capitals)ALL
searchVariantsalso search Threads for the keyword's joined, underscored and dotted formsoff
expandWithRelatedProfiles, expansionDepthalso deliver the accounts Instagram suggests next to each profile delivered, one level or twooff, 1
includeRecentPostsput the 6 newest posts on the row (engagement is computed either way)on
includeReelStats, includeProfileInfothe reel figures and the profile info (one more read per account each, included in the Profile price)off
includeFacebookPageContactthe Facebook Page contact add-onoff
includeRelatedProfilesthe suggested accounts on the row (needs Include personal data)off
minFollowers, maxFollowers, minPosts, maxPostsfollower and post count bandsnone
verified, accountTypes, influencersOnly, includePrivateverified only or not verified, account types (professional = business or creator), creators and influencer categories only, private accounts in or outany, any, off, in
mustContain, mustContainIn, excludeWordswords that must appear and where (username, name or bio by default; bio; name; recent captions; anywhere), words that leave an account outnone
categories, combineCategoryAndWordsInstagram categories to keep, and whether categories and mustContain must both pass or eithernone, both
languages, locationMustContainbio and caption languages (44 codes), place words in the bio, business address or Facebook Page countryany, none
contactFilter, requireWebsitea contact shown (an e-mail or a phone, an e-mail, a phone, both) and a websiteany, off
minEngagementRate, activeWithinDays, minRecentPosts, recentPostsDaysengagement rate floor (percent), newest post within days, at least N of the 6 newest posts within daysnone, none, none, 30
minMedianReelPlays, reelPostedWithinDays, minPlaysToFollowersPercent, maxPlaysToFollowersPercentreel filters (need the reel figures)none
excludeUsernamesaccounts never to deliver, up to 10,000none
minMatchRatePercentstop once 100 accounts were judged and fewer than this percent passed your filtersnone
includeLeftOutAccountsa free row for every account read and left out, with the reasonoff
refilterDatasetIdcheck an earlier run's profiles again with this run's filters, without reading Instagram (Re-filtered profile)none

Hashtag search settings

SettingWhat it doesDefault
minHashtagPosts, maxHashtagPostskeep hashtags used on at least, or at most, this many postsnone
exactHashtagOnlykeep only the hashtag that is your keyword's words run together ("coffee roaster" keeps #coffeeroaster): the stats of hashtags you nameoff
includeRelatedHashtagsthe related hashtags add-on (one more read per hashtag, and one hashtag search per related hashtag the run does not know yet); when the run's work allowance for add-on reads is spent, the remaining hashtags come without the list (relatedHashtagsStatus allowance, not charged for it, counted in the keyword row and the status message)off

Keywords. A word or phrase in any language; a leading # is dropped and keywords are searched lower cased. The reels search also takes a link to an instagram.com/popular/<words>/ or instagram.com/explore/tags/<tag>/ page, and Boolean keywords (AND, OR, NOT in capitals, parentheses, "quoted phrases", -word): each OR branch is searched and a reel must match the whole expression. The hashtag search takes a tag page link too but no Boolean keyword (a free row says so; a run whose keywords the hashtag search can use none of is refused). The hashtag search matches your words run together: "fat loss" lists #fatloss, and hashtags hold no spaces or punctuation (letters, marks, digits, underscores and emoji), so a word with a hyphen lists nothing. Specific phrases find more reels than single broad words: Instagram shows no public reels for some broad words ("coffee") and such a keyword gets a free no_reels row, while the hashtag search answers broad words in full. An entry that is empty, a link of another kind, holds an @, 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 it is refused there. 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 nothing passes and calls that are answered badly cost time but deliver nothing. A run spends at most a small fixed amount of such work before its first charged result, and more as it delivers; when it is spent the run stops with the stop reason work_allowance and a free skipped row naming the keywords not searched (a test list of 200 made up hashtag keywords that all found nothing stopped after 44 of them, for $0.0075, the start fee). The search types after it do not run (a search_types_skipped row names them), and so it is for the caller's charge limit and a time limit. Add-on reads (creator details, comments, a Facebook Page's contact, related hashtags) draw on an allowance of their own that grows with the add-ons delivered: when it is spent, the next rows come without the add-on and are not charged for it (for related hashtags: relatedHashtagsStatus allowance, counted in the keyword row's relatedHashtagsLeftOut and named in the status message). Three hashtag searches in a row that Instagram answers badly stop the hashtag search as source_failing; the run's status message names the failing side.

API examples

curl -X POST "https://api.apify.com/v2/acts/automation_craft~instagram-search-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTypes": ["reels", "hashtags"], "keywords": ["nail art", "latte art"], "maxResultsPerKeyword": 30}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('automation_craft/instagram-search-scraper').call({ searchTypes: ['profiles'], keywords: ['wedding photographer miami'], requireKeywordMatch: true, minFollowers: 1000 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((row) => row.type === 'profile').map((row) => row.username));
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation_craft/instagram-search-scraper").call(run_input={"searchTypes": ["hashtags"], "keywords": ["sourdough"], "includeRelatedHashtags": True})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row["type"] == "hashtag":
print(row["hashtag"], row["postsCount"], [r["name"] for r in row["relatedHashtags"] or []])

What this Actor does NOT do

  • No place search. Instagram answers its place search only to logged in viewers; this Actor reads logged out only. Put the place in your keyword and use the place filter of the profile search instead.
  • No latest posts of a hashtag, no posts per day. Instagram's hashtag feed needs a login; the top public reels of a hashtag are read (related hashtags add-on).
  • No Instagram search box results. Instagram's own account and top search need a login; accounts come from Threads' user search, Meta's Ad Library and the creators of matching reels.
  • No posts or carousels by keyword, no audio search. Reels only, and no reels of a sound.
  • No share counts, subtitles or transcripts of reels, no stories. A logged out reader does not get them.
  • No follower or following lists, no likers, no business e-mail or phone of Instagram's contact button, no account country. Instagram shows them only to logged in viewers; the bio, bio links, recent captions and the linked Facebook Page's contact are read instead.
  • No search engine results and no AI. The Actor reads only Meta's own pages: no Google or other search engine, and no outside AI service.
  • No pages outside Meta. The website a bio links to is not opened, and no e-mail address is verified against its mail server.
  • No monitoring across runs. There is no memory of earlier runs, no "new results only" mode and no follower tracking; pass the accounts you already have in Accounts to leave out and schedule runs as you like.
  • No delivery into other apps and no custom code. The Actor writes only to its own dataset (Apify's integrations, webhooks and the API deliver it anywhere), and it runs no mapping function you send.
  • No logins, cookies or accounts of yours.
  • No more than Instagram lists. About 96 reels per reels search (related searches and variants widen a keyword), about 100 accounts per Threads search and 15 per Ad Library search, 55 hashtags per hashtag search.

FAQ

Can you search Instagram without an account?

This Actor does. It reads Instagram's public reels search and hashtag search, Threads' user search and Meta's Ad Library, and each account's public profile data, without an account, cookies or login, so your own Instagram account is never involved.

Is there an Instagram search API?

Instagram's search endpoints for developers were retired, and Meta's official API offers hashtag search only to Business or Creator accounts, 30 hashtags a week. This Actor works as an Instagram search API through the Apify API, schedules, Make, n8n or Zapier, for reels, accounts and hashtags.

Can I search Instagram reels by keyword?

Yes: pick Reels, type your words, and get the reels Instagram's own search shows for them, with plays, likes, comments, date and music, sorted by relevance, newest or most played, with date and plays filters.

How do I find Instagram accounts by keywords in their bio?

Pick Profiles and give the keywords: the Actor finds accounts on Threads' user search, Meta's Ad Library and the creators of matching reels, then reads every account's bio. Must contain any of keeps the accounts whose bio (or name, or recent posts) holds your words.

How many posts does an Instagram hashtag have?

Pick Hashtags and type the hashtag's words: every hashtag Instagram lists for them comes with its exact post count, and Only the exact hashtag keeps just the one you named. Turn on related hashtags to see the hashtags used most with it and, where Instagram lists them, their post counts.

Why does this Actor run with limited permissions?

It needs no more: it reads Meta's public pages and writes only to its own run's dataset and key-value store, so it cannot touch anything else in your Apify account. Filtering an earlier run's profiles again reads that run's dataset, in your own account, by its id.

More data tools by Automation Craft

Changelog

See the Changelog tab: 0.1 (2026-10-28) is the first release.