# Instagram Reels Search Scraper: Reels by Keyword (`automation_craft/instagram-reels-search-scraper`) Actor

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.

- **URL**: https://apify.com/automation_craft/instagram-reels-search-scraper.md
- **Developed by:** [Automation Craft](https://apify.com/automation_craft) (community)
- **Categories:** Social media, Marketing, Automation
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.37 / 1,000 reels

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 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

1. Open the Actor's **Input** tab and type your keywords, one per line (for example `nail art`, `home bakery`, `dubai hotels`).
2. Set **Max reels per keyword** (about 96 is the most one Instagram search lists; related searches find more).
3. Optional: add filters (minimum plays or likes, posted since), an order, or the creator details and comments add-ons.
4. Click **Start**. Each reel arrives as a row of the dataset, followed by one keyword row per keyword and a run summary.
5. 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):

```json
{
  "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 "<keyword> ideas", "tips", "inspiration" | 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

```bash
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}'
```

```javascript
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);
```

```python
from apify_client import ApifyClient
client = 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 `code` in 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](https://apify.com/automation_craft/instagram-posts-scraper)
- [Threads Search Scraper: Keywords, Hashtags, Dates](https://apify.com/automation_craft/threads-search-scraper)
- [Facebook Search Scraper: Keyword Posts, No Login](https://apify.com/automation_craft/facebook-search-scraper)
- [Facebook Video Search Scraper: Reels, No Login](https://apify.com/automation_craft/facebook-video-search-scraper)
- [Facebook Reels Scraper: Views, Likes, No Login](https://apify.com/automation_craft/facebook-reels-scraper)
- [Meta Branded Content Scraper: Paid Partnerships](https://apify.com/automation_craft/meta-branded-content-scraper)
- [Instagram Ads Library Scraper - Creatives, Video](https://apify.com/automation_craft/instagram-ads-library-scraper)
- [TikTok Hashtag Scraper: Posts, Free Date Filter](https://apify.com/automation_craft/tiktok-hashtag-scraper)

### Changelog

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

# Changelog

This Actor's version history is a separate document: https://apify.com/automation_craft/instagram-reels-search-scraper/changelog.md

# Actor input Schema

## `keywords` (type: `array`):

What to search, one keyword per line (up to 500). A phrase ("nail art", "home bakery"), a #hashtag (searched as its word), a link to an instagram.com/popular/ or instagram.com/explore/tags/ page, or a Boolean keyword with AND, OR, NOT in capitals, parentheses, "quoted phrases" or -word, for example ("latte art" OR barista) -giveaway. Each OR branch is searched and every reel must match the whole expression. Specific phrases find more reels than single broad words.

## `maxReelsPerKeyword` (type: `integer`):

The most reels delivered for one keyword, its related searches, variants and creator reels included. Instagram lists about 96 reels for one search at most; related searches find more.

## `maxReels` (type: `integer`):

Stops the run once this many reels were delivered across all keywords (keywords are read in the order given). Empty means no run limit.

## `sortBy` (type: `string`):

Most relevant keeps Instagram's own order for the keyword. Newest first and Most played first list every search of the keyword before delivering, then deliver in that order (newest by the reel's creation time).

## `searchRelatedKeywords` (type: `integer`):

Also search this many of the related keywords Instagram lists next to your keyword (0 to 10). Their reels are delivered under your keyword with foundVia "related". 0 searches only your keyword.

## `tryVariantsWhenEmpty` (type: `boolean`):

Instagram lists no reels for some broad single words ("coffee", "fitness"). When on, such a keyword is searched again as "<keyword> ideas", then "tips", then "inspiration", and the first that lists reels is read (foundVia "variant").

## `includeCreatorReels` (type: `boolean`):

After a keyword's reels are delivered, read the newest reels of each creator found and add those whose caption, hashtags or username match the keyword (foundVia "creator"), up to the number below per creator. Needs the reel details.

## `maxReelsPerCreator` (type: `integer`):

With creator reels on: the most reels added from one creator's newest reels (1 to 12).

## `requireKeywordMatch` (type: `boolean`):

Keep only reels whose caption, hashtags or creator username hold every word of the keyword (or the words run together, as in #nailart). Off delivers every reel Instagram lists for the keyword. Boolean keywords always apply their expression.

## `postedSince` (type: `string`):

Keep only reels posted on or after this day (UTC), as 2026-10-01, or in the last N days, as "30 days" (counted back from the run's start). Needs the reel details.

## `postedUntil` (type: `string`):

Keep only reels posted on or before this day (UTC), as 2026-10-20. Needs the reel details.

## `minPlays` (type: `integer`):

Keep only reels with at least this many plays.

## `minLikes` (type: `integer`):

Keep only reels with at least this many likes. Reels whose creator hides the like count are left out. Needs the reel details.

## `minComments` (type: `integer`):

Keep only reels with at least this many comments. Needs the reel details.

## `captionLanguages` (type: `array`):

Keep only reels whose caption is in one of these languages, as estimated from the caption text (a caption is read only with 40 letters or more and a clear result; other reels have no language and are left out). Empty keeps every language.

## `includeDetails` (type: `boolean`):

On (default): each reel also carries its likes, comments, posting time, length, music, location, collaborators, the paid partnership label and audio link, read from the reel's own page data. Off: only what the search lists (code, caption, plays, creator, video and cover links), faster.

## `includeCreatorDetails` (type: `boolean`):

Add each creator's followers, following, post count, category, account type, links and bio to their reels. Billed once per creator per run as a Creator profile event.

## `maxCommentsPerReel` (type: `integer`):

Add up to this many of each reel's public comments (text, time, likes, author) to its row, in the order Instagram shows them. Each comment delivered is billed as one Comment event. 0 adds none.

## `includeViewCount` (type: `boolean`):

Add each reel's view count as its own embed page shows it (viewCount), a separate counter from plays. One more page read per reel, included in the Reel price.

## `includePersonalData` (type: `boolean`):

Off (default): the dedicated fields that name other people are empty: taggedUsers (accounts tagged in the reel) and mentions (usernames written with @ in the caption), and links to Instagram, Facebook, Messenger, Threads or WhatsApp are left out of the creator's website and bio links and of the keyword description's sources. On: they are filled. Captions, bios and comments are always delivered as Instagram serves them. You are responsible for a lawful use of personal data, GDPR included.

## `maxRunSeconds` (type: `integer`):

Stop starting new work after this many seconds from the run's start and end with the summary (30 to 86400). Empty means the run's own timeout.

## `requestTimeoutSecs` (type: `integer`):

How long one request may take before it is retried (5 to 60).

## `maxRetries` (type: `integer`):

How often a failed request is tried again on a fresh connection (0 to 5).

## `proxyConfiguration` (type: `object`):

Default: Apify Proxy without a group or country, which reads from the run's own address first and moves a request type to Apify's datacenter proxy when Instagram refuses that address. Choose a group or a country to read only through Apify Proxy, or give your own proxy links. A residential group is read through the datacenter pool instead (no extra cost); a country is used as given.

## Actor input object example

```json
{
  "keywords": [
    "nail art"
  ],
  "maxReelsPerKeyword": 12,
  "sortBy": "relevance",
  "searchRelatedKeywords": 0,
  "tryVariantsWhenEmpty": false,
  "includeCreatorReels": false,
  "maxReelsPerCreator": 2,
  "requireKeywordMatch": false,
  "includeDetails": true,
  "includeCreatorDetails": false,
  "maxCommentsPerReel": 0,
  "includeViewCount": false,
  "includePersonalData": false,
  "requestTimeoutSecs": 30,
  "maxRetries": 2,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `items` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "nail art"
    ],
    "maxReelsPerKeyword": 12,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/instagram-reels-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["nail art"],
    "maxReelsPerKeyword": 12,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automation_craft/instagram-reels-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "nail art"
  ],
  "maxReelsPerKeyword": 12,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automation_craft/instagram-reels-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_craft/instagram-reels-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qr2RFmpeneapsDwPt/builds/XEATZxU7uZh8EcY4w/openapi.json
