Instagram Reels Search - Reels by Keyword and Hashtag avatar

Instagram Reels Search - Reels by Keyword and Hashtag

Pricing

from $0.40 / 1,000 result returneds

Go to Apify Store
Instagram Reels Search - Reels by Keyword and Hashtag

Instagram Reels Search - Reels by Keyword and Hashtag

Search Instagram Reels by keyword or hashtag. "home workout" and #homeworkout do not return the same reels. Both are searched here, on the surface the app's Reels tab uses. Each row has caption, views, likes, comments, video URL, creator and timestamp. No login, no cookie. $0.40 per 1,000 Reels.

Pricing

from $0.40 / 1,000 result returneds

Rating

5.0

(1)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

2

Bookmarked

33

Total users

23

Monthly active users

2 days ago

Last modified

Share

Instagram Reels Search: find reels by keyword or hashtag, no login

Type a phrase and get back the reels Instagram ranks for it, as rows. Caption, plays, likes, comments, shares, duration, thumbnail and video links, the creator, the audio track and the publish time, one row per reel.

A keyword and the same words as a hashtag are two different searches and come back with different reels, so both are here and you can run them side by side. The limit to know about before you plan around it: you get the ranked feed Instagram serves for a term, in its order, with no filters and no date range, and a run tops out at 100 reels.

InputUp to 5 keywords and 5 hashtags
OutputOne row per reel
Ceiling100 reels per run
Account neededNone from you
Price$0.40 per 1,000 reels, flat on every plan

🔍 What Instagram Reels Search does

Each term is searched against the Reels search surface, the one the app uses when you type into the Reels tab. A keyword is searched as you wrote it. A hashtag is searched as #tag. There is no keyword-to-hashtag detour, so home workout returns what Instagram ranks for that phrase rather than whatever is sitting in a tag that loosely matches it.

Only video and clip records come back. Anything else on the results page is dropped before it reaches your dataset, and reels are deduplicated by id across the whole run, so a reel that two of your terms both found arrives once.

Every row carries sourceQuery and sourceHashtag, so you always know which of your terms produced it. That makes a five-term run easy to split back apart afterwards.

📥 What you give it

{
"searchQueries": ["travel", "home workout"],
"hashtags": ["homeworkout"],
"maxReels": 30
}
FieldDefaultWhat it is
searchQueriesnoneUp to five keywords, each searched as written.
hashtagsnoneUp to five hashtags, each searched as #tag on the same surface.
maxReels30Reels for the whole run, 1 to 100. This is also your spend cap.
maxRunSeconds120Wall-clock ceiling for the run, 20 to 180 seconds.
requestTimeoutSeconds15How long one search request is allowed to take, 5 to 30 seconds.
maxAttempts8How many times a request that comes back empty or refused is retried, 1 to 12.
sessionCookiesnoneOptional, and normally not needed. Your own Instagram cookie, so the run uses your account's own rate limit.
proxyConfigurationApify defaultLeave it alone unless you have your own servers to use.

Keep every term short and non-empty. One blank entry, or one longer than 100 characters, stops the whole run before it searches anything and you get the sample row back instead of results. The valid terms in the same list are discarded with it.

Run it with the input empty and you get one labelled sample row, free, so you can look at the shape first.

📤 What you get back

A real row from a real run on the keyword travel. The caption and the media links are cut short so the block stays readable:

{
"ok": true,
"recordType": "instagram_reel",
"id": "3977969219684376600",
"shortcode": "Dc0le3auZ_T",
"reelUrl": "https://www.instagram.com/reel/Dc0le3auZ_T/",
"caption": "Devil’s Pool ...",
"hashtags": [],
"mentions": [],
"likeCount": 1045852,
"commentCount": 5543,
"playCount": 21489212,
"shareCount": 87703,
"durationSeconds": 11.003999710083008,
"thumbnailUrl": "https://scontent-lga3-1.cdninstagram.com/v/t51.82787-15/790571700_...",
"videoUrl": "https://scontent-lga3-2.cdninstagram.com/o1/v/t2/f2/m86/AQMZ-ayMVPPG6rzvgbrMI1FaGmyIaatRgownomNfC05...",
"authorId": 1003699751,
"authorUsername": "joe_hattab",
"authorFullName": "Joe Hattab",
"authorIsVerified": true,
"authorIsPrivate": false,
"audioTitle": null,
"audioArtist": null,
"timestamp": "2026-09-04T14:34:41.000Z",
"sourceQuery": "travel",
"sourceHashtag": null
}
FieldWhat it is
id, shortcode, reelUrlInstagram's numeric media id, the short code, and the canonical reel link. shortcode is the key to join runs on.
playCount, likeCount, commentCount, shareCountThe counters as Instagram reports them at read time.
durationSecondsReel length, unrounded.
thumbnailUrl, videoUrlDirect links to the cover image and the video file. Signed and time limited.
hashtags, mentionsParsed out of the caption for you, without the # or @.
audioTitle, audioArtistThe audio track when the reel names one, null when it does not.
sourceQueryYour term as searched: the keyword, or #tag for a hashtag.
sourceHashtagThe tag for a hashtag search, and null for a keyword.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itBilled
A real reelok: true and recordType: "instagram_reel"yes
The sample row_sample: trueno
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your reels.

CodeWhat it means
NO_RESULTSThat term came back with nothing. It may be new, misspelled or too narrow.
PARTIALThe run delivered some reels for that term and stopped early. What arrived is complete and correct.
CONFIGURATION_ERRORSomething in the input stopped the run before it searched. Usually a blank or over-long term.
PROVIDER_ERRORThe search surface answered badly. Re-running usually clears it.
PROXY_GROUP_ADJUSTEDThe run adjusted a network setting you supplied so it could carry on.

A diagnostic row never fails the run and is never billed. One case has no row at all: a term whose reels were all delivered by an earlier term in the same run is simply not repeated.

▶️ How to run it

  1. Open Instagram Reels Search and click Try for free.
  2. Type your phrases into Keyword searches, one per line. Add tags under Hashtags if you want both.
  3. Set Maximum Reels. Start at 30 while you look at the output shape.
  4. Click Start.
  5. Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.

💰 How much does it cost?

$0.40 per 1,000 reels. Flat on every Apify plan, no volume tiers.

You pay per reel delivered. A reel that two of your terms both found is billed once. The sample row, every diagnostic row, and a term that returns nothing cost you nothing. maxReels caps both the rows and the spend.

💡 What people use it for

  • Asking what actually ranks for a phrase this week, then re-running it next week to see the churn.
  • Finding creators working a topic. Every row carries the creator, so a keyword search doubles as a shortlist.
  • Comparing a keyword against its hashtag, since the two return different sets and the gap is often the interesting part.
  • Pulling video and thumbnail links for a swipe file of hooks and openings.

🚧 What it does not do

  • No filters and no sorting. You get the ranked feed for a term as Instagram orders it. There is no date range, no minimum play count, no country.
  • 100 reels per run. Five keywords and five hashtags is the other ceiling. Split a bigger job across runs.
  • No transcripts and no comment text. The caption and the counters only. Transcripts are a separate actor, linked below.
  • One bad term stops the run. A blank entry or a term over 100 characters returns the sample row instead of results, and takes the valid terms with it.
  • A keyword is not its hashtag. Searching travel and #travel gives you two different sets, and both cost the same.
  • Media links expire. They are signed, short-lived links, so fetch anything you want to keep.
  • Counts are a snapshot at read time, and a ranked feed moves, so two runs an hour apart will not match exactly.

🧭 Which Instagram scraper do you need?

If you wantUse
Reels ranked for a keyword or a tagThis one
Posts and reels under a hashtagInstagram Hashtag Scraper
One post or reel you already have the link forInstagram Post Scraper
A profile plus the posts on its gridInstagram Scraper
The spoken words inside a reelInstagram Transcript Scraper

❓ Questions people ask

Do I need an Instagram account? No. Searches run with no cookie at all. The cookie field is optional and exists so you can run on your own account's rate limit.

Is maxReels per term or per run? Per run. Ask for 30 across three terms and you get 30 reels in total, not 90.

Why did two terms return the same reel once? Rows are deduplicated by reel id across the run, so you are not charged twice for it. sourceQuery shows the term that found it first.

Can I get reels from a specific account? Not here. Use the profile-level actor above, which returns an account's grid.

Is scraping Instagram legal? This reads public reels only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

Can I run it on a schedule? Yes. The same terms every week is the point of it. Nothing is held between runs.

🆘 If something breaks

Open the Issues tab on the actor page. Include the search terms you used and the run ID, and the log is enough for us to see what happened.