Instagram Reels Search - Reels by Keyword and Hashtag
Pricing
from $0.40 / 1,000 result returneds
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
Maintained by CommunityActor stats
2
Bookmarked
33
Total users
23
Monthly active users
2 days ago
Last modified
Categories
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.
| Input | Up to 5 keywords and 5 hashtags |
| Output | One row per reel |
| Ceiling | 100 reels per run |
| Account needed | None 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}
| Field | Default | What it is |
|---|---|---|
searchQueries | none | Up to five keywords, each searched as written. |
hashtags | none | Up to five hashtags, each searched as #tag on the same surface. |
maxReels | 30 | Reels for the whole run, 1 to 100. This is also your spend cap. |
maxRunSeconds | 120 | Wall-clock ceiling for the run, 20 to 180 seconds. |
requestTimeoutSeconds | 15 | How long one search request is allowed to take, 5 to 30 seconds. |
maxAttempts | 8 | How many times a request that comes back empty or refused is retried, 1 to 12. |
sessionCookies | none | Optional, and normally not needed. Your own Instagram cookie, so the run uses your account's own rate limit. |
proxyConfiguration | Apify default | Leave 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}
| Field | What it is |
|---|---|
id, shortcode, reelUrl | Instagram's numeric media id, the short code, and the canonical reel link. shortcode is the key to join runs on. |
playCount, likeCount, commentCount, shareCount | The counters as Instagram reports them at read time. |
durationSeconds | Reel length, unrounded. |
thumbnailUrl, videoUrl | Direct links to the cover image and the video file. Signed and time limited. |
hashtags, mentions | Parsed out of the caption for you, without the # or @. |
audioTitle, audioArtist | The audio track when the reel names one, null when it does not. |
sourceQuery | Your term as searched: the keyword, or #tag for a hashtag. |
sourceHashtag | The tag for a hashtag search, and null for a keyword. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| A real reel | ok: true and recordType: "instagram_reel" | yes |
| The sample row | _sample: true | no |
| A diagnostic | ok: false and an errorCode | no |
Filter on ok == true and you have your reels.
| Code | What it means |
|---|---|
NO_RESULTS | That term came back with nothing. It may be new, misspelled or too narrow. |
PARTIAL | The run delivered some reels for that term and stopped early. What arrived is complete and correct. |
CONFIGURATION_ERROR | Something in the input stopped the run before it searched. Usually a blank or over-long term. |
PROVIDER_ERROR | The search surface answered badly. Re-running usually clears it. |
PROXY_GROUP_ADJUSTED | The 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
- Open Instagram Reels Search and click Try for free.
- Type your phrases into Keyword searches, one per line. Add tags under Hashtags if you want both.
- Set Maximum Reels. Start at 30 while you look at the output shape.
- Click Start.
- 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
traveland#travelgives 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 want | Use |
|---|---|
| Reels ranked for a keyword or a tag | This one |
| Posts and reels under a hashtag | Instagram Hashtag Scraper |
| One post or reel you already have the link for | Instagram Post Scraper |
| A profile plus the posts on its grid | Instagram Scraper |
| The spoken words inside a reel | Instagram 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.