Instagram Reels Search - $0.40/1k by Keyword avatar

Instagram Reels Search - $0.40/1k by Keyword

Pricing

Pay per event

Go to Apify Store
Instagram Reels Search - $0.40/1k by Keyword

Instagram Reels Search - $0.40/1k by Keyword

"home workout" as a keyword and #homeworkout as a hashtag do not return the same reels, and both are searched here on the surface the app's own Reels tab uses. Caption, views, likes, comments, video URL, creator and timestamp. No login, no cookie. $0.40 per 1,000 Reels.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

7

Monthly active users

13 hours ago

Last modified

Share

Instagram Reels Search Scraper

Search public Instagram Reels by keyword or hashtag and get back structured rows: caption, plays, likes, comments, shares, duration, thumbnail and video URL, creator, audio track and timestamp. Each term is searched directly against Instagram's own Reels search surface — the one the mobile app uses for the Reels tab — and only video or clips records are returned. There is no keyword-to-hashtag detour: a keyword gets the Reels Instagram ranks for that keyword, not whatever happens to be sitting in a hashtag it loosely matched.

Keyword-driven Reels discovery is a capability most Instagram tooling does not offer at all: it takes a hashtag or a profile and stops there. If you have ever wanted to ask Instagram "what Reels rank for home workout right now" and get a dataset back, that is what this actor is for.

$0.40 per 1,000 reels ($0.0004 each), plus $0.001 each time a run starts. Flat rate — no volume tiers, no plan gates — and you are charged only for reels actually returned.

What you can do with it

  • Search Reels by keyword. Up to five free-text keywords per run, each answered by Instagram's Reels search ranking for that exact phrase.
  • Search Reels by hashtag. Up to five hashtags per run, searched as #tag on the same surface — the same thing the app does when you type a tag into the Reels tab.
  • Find creators working a topic. Every row carries the creator's username, full name, ID and verified flag, so a keyword search doubles as creator discovery.
  • Track what is ranking. Plays, likes, comments, shares and duration on every row, with the timestamp, so you can measure a topic over time by re-running.
  • Run with zero setup. No login, no cookie, no app review, no Instagram developer account. You supply search terms and nothing else.

Output

One row per genuine Reel, deduplicated by Reel ID across the whole run. Every row carries:

FieldWhat it holds
id, shortcode, reelUrlInstagram's numeric media ID, the short code, and the canonical instagram.com/reel/... link
captionFull caption text
hashtags, mentionsArrays parsed out of the caption, without the # or @
playCount, likeCount, commentCount, shareCountEngagement counters as Instagram reports them
durationSecondsReel length
thumbnailUrl, videoUrlDirect Instagram CDN links to the cover image and the video file
authorId, authorUsername, authorFullName, authorIsVerified, authorIsPrivateCreator identity and account flags
audioTitle, audioArtistAudio track metadata, when the Reel carries it
timestampPublish time as an ISO 8601 string
sourceQuery, sourceHashtagWhich of your terms found this Reel
recordType, okinstagram_reel, and true on every genuine row

sourceQuery is the term as searched — the keyword, or #tag for a hashtag input. sourceHashtag is the hashtag for a hashtag input and null for a keyword, because keywords are searched directly rather than routed through a hashtag first.

Sample output

One dataset row from a run on the keyword home workout. Values are illustrative — the IDs, counts and CDN links below are made up for this example, but the field names and types are exactly what the actor writes.

{
"ok": true,
"recordType": "instagram_reel",
"id": "3412789045612378901",
"shortcode": "C8xKp2ROq1L",
"reelUrl": "https://www.instagram.com/reel/C8xKp2ROq1L/",
"caption": "15-minute home workout, no equipment needed. Save this for Monday #homeworkout #fitness @coach.dana",
"hashtags": ["homeworkout", "fitness"],
"mentions": ["coach.dana"],
"likeCount": 24817,
"commentCount": 331,
"playCount": 612044,
"shareCount": 1902,
"durationSeconds": 27.4,
"thumbnailUrl": "https://scontent.cdninstagram.com/v/t51.29350-15/462118093_1080x1920.jpg?_nc_ht=scontent.cdninstagram.com&oe=66F1A2C4",
"videoUrl": "https://scontent.cdninstagram.com/o1/v/t16/f1/m86/8C9F21A0_video_dashinit.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InZ0c192b2RfdXJsZ2VuIn0",
"authorId": "1789456123",
"authorUsername": "coach.dana",
"authorFullName": "Dana Ruiz",
"authorIsVerified": false,
"authorIsPrivate": false,
"audioTitle": "Original audio",
"audioArtist": "coach.dana",
"timestamp": "2026-07-28T14:06:11.000Z",
"sourceQuery": "home workout",
"sourceHashtag": null
}

Anything that is not a Reel arrives as a clearly labeled, uncharged diagnostic row instead, so an empty or partial run explains itself in the dataset rather than only in the log:

{
"ok": false,
"errorCode": "NO_RESULTS",
"error": "No Reels were returned for this search term.",
"_notice": "This record is diagnostic only and is never charged.",
"sourceQuery": "#averyobscuretag",
"sourceHashtag": "averyobscuretag"
}

Input

  • searchQueries: up to five keywords. Each is searched as-is against Instagram's Reels search.
  • hashtags: up to five direct hashtags. Each is searched as #tag on the same surface.
  • maxReels: hard run-wide limit of 1-100 genuine Reels; default 30.
  • sessionCookies: optional. Your own Instagram account cookie, for a rate limit nobody else shares. Leave it empty and a licensed data source answers the search.
  • proxyConfiguration: optional proxy configuration, applied to the requests made with your own cookie. Rotating Apify datacenter addresses are used by default; your own proxyUrls are honoured exactly as supplied. Metered groups (RESIDENTIAL, GOOGLE_SERP) are not offered and are replaced with datacenter addresses.
  • maxAttempts: 1-12 bounded attempts, used only for the cookie lane; default 8.
  • requestTimeoutSeconds: 5-30 seconds per cookie-lane request.
  • maxRunSeconds: 20-180 second hard run deadline. The one exception: if the cookie lane spends the whole budget and delivers nothing, the licensed source is given a short grace period past that deadline rather than handing you an empty run.

A minimal run is just this:

{
"searchQueries": ["home workout"],
"hashtags": ["homeworkout"],
"maxReels": 30
}

Empty or invalid input emits exactly one clearly labeled _sample record. It makes no Instagram request, proxy connection, or billing event. The sample is solely an output-shape preview.

You do not need one. If you supply one, it takes priority:

  • In Chrome: F12 → Application → Cookies → https://www.instagram.com → copy the sessionid value into sessionCookies. Pasting the whole cookie string works too.
  • Your cookie is tried first, for every term. Only the terms it cannot answer at all are bought from the licensed source, and if it returns nothing anywhere, every term falls back. Either way you are charged the same per-reel price and never twice for the same reel.
  • Use an account you own and are authorized to automate.

Cookie values, proxy URLs, and request headers are never logged or written to output. Logs contain only slot numbers, retry reasons, and result totals.

How it works

One search request per term. With no cookie supplied, each term goes straight to a licensed data source — no attempts are spent discovering that a gated request will be refused. With a cookie, that lane runs first, paired with one sticky datacenter proxy session and rotating to a fresh one on 403, 429, a login redirect, or server and network failures, within the configured bound; only what it cannot answer is bought.

Each genuine Reel is written to the dataset before it is billed. Video files are never downloaded, so you are not paying for video bandwidth.

Failures are named for what they are rather than flattened into one generic error: a rate limit reads as a rate limit, a no-result search reads as a no-result search, and a problem on our side is reported as ours instead of being dressed up as Instagram refusing you. Every run ends with a STATUS line carrying the number of Reels delivered.

Pricing

EventWhenPrice
Actor startOnce per run, per GB of run memory$0.001
Reel returnedEach genuine Reel row written to the dataset$0.0004 ($0.40 / 1,000)

You are charged per delivered Reel row, once each, and for nothing else.

Reels are deduplicated by ID across both lanes, so the same Reel is never delivered twice or charged twice no matter which lane found it. Every other outcome is free and clearly labeled: sample rows, terms that genuinely return no Reels, blocked or failed requests, problems on our own upstream, and runs that stop early all arrive as uncharged diagnostic rows carrying an errorCode and a plain-English explanation. A run that returns nothing costs nothing beyond the start fee.

Because maxReels is capped at 100 per run, a full run costs at most $0.041. A run with empty or invalid input returns one _sample row, makes no Instagram request and no proxy connection, and is charged only the start fee.

Coverage and limits

Everything below is a genuine constraint of this surface, stated so you can plan around it.

  • Runs work out of the box — because the login is carried for you. Reels search is a surface Instagram serves only to a signed-in caller; there is no logged-out route to it, at any price. Every result therefore comes either from a licensed data source or from your own cookie. You do not have to bring anything.
  • A run can stop short of the limit you asked for. The licensed source is bought per request under a per-run ceiling we set, so a run asking for a large maxReels across several terms can land on fewer reels than requested. Everything it collected is delivered and correct, and one uncharged PARTIAL row tells you it stopped and why — never a silent empty result, and never a charge for the stop. Re-run to collect more.
  • 100 reels per run, 5 keywords, 5 hashtags per run. These are hard input caps, not throttles that lift at higher volume. Split larger jobs across runs.
  • Ranked results only, no filters. You get the Reels Instagram ranks for your term, in Instagram's order. There is no date range, no minimum-views filter and no sort option — filter and sort downstream using the timestamp and count fields on each row.
  • Some fields can be null. videoUrl, shareCount, audioTitle, audioArtist and similar fields are present only when the search payload carries them for that Reel; the actor reports what the data source returns and never invents a value. sourceHashtag is null by design on keyword rows.
  • CDN links expire. thumbnailUrl and videoUrl are signed Instagram CDN URLs with a limited lifetime. Fetch or re-host what you need promptly rather than storing the links long-term.
  • Public Reels only. Nothing from private accounts, and no login is bypassed.
  • Unmetered proxy egress. The cookie lane pins one sticky datacenter session, rotating on 401, 403, 429, server or network failures, up to maxAttempts. Metered residential egress is never used.
  • Hard run deadline. maxRunSeconds (20–180) ends the run cleanly rather than letting a blocked search burn time, with the single documented grace above for a cookie lane that returned nothing.

FAQ

Is it legal to scrape Instagram? This actor reads only publicly visible Reels from Instagram's own search surface. It does not bypass a login wall, defeat a CAPTCHA, or reach private accounts, private messages, or anything behind a follow request. Whether a particular collection is lawful depends on your jurisdiction, your purpose and how you handle the data afterwards — captions, usernames and profile details are personal data under GDPR, CCPA and similar regimes, and you are the controller of anything you collect and keep. This is a description of what the tool does and does not do, not legal advice; if your use case is sensitive, take your own advice on it. Instagram's own Terms of Use apply to you as a user of their service.

Do I need an Instagram account or a cookie? No. Runs work with nothing supplied — that is the default path and what most people use. A cookie is purely optional: put one in sessionCookies if you would rather run on your own account's rate limit. If you do, use an account you own and are authorized to automate.

How much does it cost, and what exactly am I charged for? $0.0004 per Reel row delivered (that is $0.40 per 1,000), plus the $0.001 actor start fee per run. Nothing else. Diagnostic rows, sample rows, empty searches, blocked requests and early stops are all free, and a duplicate Reel is never charged twice. A full 100-Reel run is at most $0.041.

What happens if it returns nothing? You get one or more uncharged diagnostic rows instead of silence, each with an errorCode (NO_RESULTS, RATE_LIMITED, PARTIAL, PROVIDER_ERROR and so on) and a plain-English error message saying what happened. The run costs nothing beyond the start fee. If a term genuinely has no Reels ranking for it, that is what NO_RESULTS means — try a broader keyword.

Can I really search by free-text keyword, or is it hashtags only? Free-text keywords are the point of this actor. searchQueries goes straight to Instagram's Reels search for that phrase — home workout, sourdough starter, berlin apartment tour — with no hashtag in the middle. hashtags is there as well if you want the exact #tag search instead.

Why is sourceHashtag null on some rows? Because those rows came from a keyword. The field is on every row for schema stability, and it is filled in only when the term that found the Reel was a hashtag input. Keyword terms are searched directly, so there is no hashtag to record.

Why did my run return fewer Reels than maxReels? Two reasons, and both announce themselves. Either the term genuinely has fewer Reels ranking for it, or the run hit the per-run request ceiling on the licensed source and landed softly — in which case there is an uncharged PARTIAL row saying so. Everything delivered is complete and correct; re-run to collect more.

How many search terms can one run take? Five keywords and five hashtags, up to 100 Reels total per run. For a bigger sweep, run it several times — for example on a schedule, one topic cluster per run.

Does it download the video files? No, deliberately: video bandwidth would cost far more than the per-Reel price. You get videoUrl and thumbnailUrl as direct CDN links and can fetch whichever ones you actually want. Those links are signed and expire, so do not warehouse them.

Can I get the spoken words in a Reel? Not from this actor — it returns the caption, not the audio transcript. Use the Instagram Transcript Scraper below on any reelUrl from these results.

Can I pull all Reels from one specific creator? No. This actor searches by term, not by account. For a named profile's Reels use the general Instagram Scraper, and for one known Reel URL use the Instagram Reel Scraper — both linked below.

Can I run it on a schedule or from my own code? Yes. It is a standard Apify actor: start it from the API, the JavaScript or Python client, the CLI, or an Apify schedule, and read results from the dataset in JSON, CSV, Excel or XML. Webhooks and the usual integrations work as they do for any actor.

Need other Instagram data?

This actor is built for one surface: Reels discovered by keyword or hashtag search. If you need a different Instagram surface, use the dedicated actor for it:

ActorWhat it returnsPrice
Instagram Reel ScraperA single reel by URL, full payload$0.35 / 1,000
Instagram Reel ScraperA single reel by URL, lean payload$0.18 / 1,000
Instagram Transcript ScraperSpoken-word transcript of a reel or video$2.50 / 1,000
Instagram Hashtag ScraperPosts under any hashtag, top feed$0.40 / 1,000
Instagram ScraperProfiles, posts and reels from usernames or URLs — the general-purpose one$0.45 / 1,000
Instagram Profile ScraperProfile stats and account flags, full payload$0.70 / 1,000
Instagram Profile ScraperProfile stats and account flags, lean payload$0.55 / 1,000
Instagram Comments ScraperComments on a specific post or reel$0.40 / 1,000
Instagram Mentions ScraperPosts that tagged or mentioned an account$0.44 / 1,000
Instagram Location ScraperPosts tagged at a place, ranked and recent tabs$0.40 / 1,000
Instagram Post ScraperA single post by URL, full payload$0.18 / 1,000
Instagram Post ScraperA single post by URL, lean payload$0.09 / 1,000
Instagram Stories ScraperStories a public account has live right now$0.40 / 1,000
Instagram Followers & Following ScraperFollower and following lists from a public profile$0.60 / 1,000
Instagram Reel UploaderPublishes a reel to your own account$0.35 per upload