# Instagram Reels Search & API: Viral Reels by Keyword (`s_actors/instagram-reels-search`) Actor

Search Instagram Reels by keyword or hashtag: plays, likes, comments, date, duration, MP4 video URL, caption, hashtags and the creator. Related keywords, date and plays filters, sort by plays, only-new monitoring. No login.

- **URL**: https://apify.com/s_actors/instagram-reels-search.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** Social media, Marketing, Videos
- **Features:** Limited permissions
- **Stats:** 24 total users, 4 monthly users, 98.4% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 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

Search **Instagram Reels by keyword or hashtag** and get the top Reels for it: plays, likes, comments, posting time, duration, the **MP4 video URL**, cover, caption, hashtags, mentions and the creator, plus an engagement rate for every Reel.

```json
{ "keywords": ["home workout"], "maxReelsPerKeyword": 50 }
```

No Instagram login, no cookies, no browser. Type the phrases you would type into Instagram's search; get one row per Reel. Use it as an **Instagram Reels search API** or a **viral Reels finder**: content ideas for your niche, trend research, influencer discovery, competitor and ad creative research, or a daily feed of the best new Reels on a topic.

#### What you get

Real example, 24 October 2026 (sorted by plays, posted in the last 3 months):

| keyword | creator | posted | plays | likes | comments | engagement, % | duration, s |
|---|---|---|---|---|---|---|---|
| home workout | bigasian_fit | 2026-10-06 | 17,201,048 | 403,839 | 7,248 | 2.39 | 27.4 |
| home workout | fitpalreetesh | 2026-09-12 | 16,867,694 | hidden | 337 | | 23.5 |
| coffee recipes | adriaccopa | 2026-08-29 | 17,016,595 | 632,961 | 1,019 | 3.73 | 16.4 |
| coffee recipes | adriaccopa | 2026-09-21 | 15,381,811 | 1,106,530 | 848 | 7.20 | 19.4 |

Every row:

| Field | Example | What it is |
|---|---|---|
| `keyword`, `searchedKeyword`, `rank` | home workout, home workout plan for a week, 3 | your keyword, the keyword the Reel was found by (a related or close one) and its position in Instagram's results |
| `reelUrl`, `shortcode`, `reelId` | instagram.com/reel/DeIuGAwqJ6p/ | the Reel |
| `caption`, `hashtags`, `mentions` | "Comment HOME and I'll send you…", \["homeworkout"] | caption text, its hashtags and @mentions |
| `postedAt` | 2026-10-06T17:02:11Z | posting time (UTC) |
| `plays`, `likes`, `comments` | 17,201,048, 403,839, 7,248 | exact counts, as in the app (`likes` is empty when the creator hides them) |
| `engagementRate` | 2.39 | (likes + comments) / plays × 100 |
| `durationSeconds`, `videoWidth`, `videoHeight` | 27.4, 1080, 1920 | |
| `videoUrl`, `coverUrl` | scontent…cdninstagram.com/….mp4 | the MP4 file and the cover image; Instagram links expire after a few days |
| `ownerUsername`, `ownerId`, `ownerUrl`, `ownerVerified`, `ownerProfilePicUrl` | bigasian_fit | the creator |

The **Reels** view of the dataset shows the main table; **Video, creator, tags** shows the rest. Export to Excel, CSV, JSON or Google Sheets.

The **KEYWORDS** record (in the run's storage, linked in the Output tab) lists each searched keyword with its Instagram page, the number of Reels found, **~30 related keywords** Instagram suggests for it and the short summary Instagram shows for the topic: a free list of Reels content ideas and long-tail keywords.

#### How to use it

1. Add keywords, one per line: a phrase (`home workout`, `dubai real estate`), a hashtag (`#homeworkout`) or an Instagram search link (`https://www.instagram.com/popular/home-workout/`).
2. Set **Max Reels per keyword** (Instagram shows up to ~90 per keyword).
3. Optional: **Also search related keywords** (each adds its own Reels), **Sort** by plays, likes, comments or newest, and the filters **Posted after**, **Minimum plays / likes / comments**. Reels that do not pass are free.
4. Run, then open the dataset or call it from the API.

**Which keywords work?** Instagram has a Reels search page for most phrases, but not for some broad one-word topics (`coffee`, `fitness`). For those the Actor looks up close keywords that have a page (`coffee` → `coffee trends`, `coffee types`...) with one Google search and returns their Reels. When nothing close exists, the run log says so: a more specific phrase (`coffee recipes`, `home workout`) works.

#### Why this Actor

| | This Actor | Typical Reels search scrapers |
|---|---|---|
| Login, cookies | none | some need your session |
| Counts | plays, likes, comments and posting time in every row | varies |
| Engagement | engagement rate per Reel | rarely |
| More Reels per topic | related keywords Instagram suggests, one switch | you find the keywords yourself |
| Broad keywords | close keywords found automatically | empty result |
| Monitoring | only-new mode for scheduled runs | rarely |

#### Monitor a topic for new viral Reels

Save your input as a task, schedule it every day or week and turn on **Only new Reels since the previous run**: each run returns only the top Reels it has not returned before (the first run returns everything and remembers it). Add **Minimum plays** to get only Reels that took off. Send new rows to Google Sheets, Slack, email or a webhook with an Apify integration.

#### Pricing

Pay per result, no subscription:

| Event | Price | When |
|---|---|---|
| Reel | $1.29 per 1,000 ($1.09 on Scale, $0.99 on Business) | each Reel in the results |
| Close keywords found by Google | $0.01 | only for a keyword without its own Instagram page, when close keywords are found; turn it off in the input |
| Run start | $0.001 | |

Examples: 50 Reels for one keyword = **$0.07**; 10 keywords × 90 Reels = **$1.16**; a daily only-new check of 5 keywords ≈ $0.60 a month.

#### FAQ

**Do I need an Instagram account?** No. The Actor reads Instagram's public Reels search pages, the way a logged-out visitor sees them.

**How many Reels per keyword?** Up to ~90: the top Reels Instagram shows for the keyword, popular and recent ones mixed. For more Reels on a topic, turn on related keywords or add more phrases.

**Is it the same as the search in the Instagram app?** It is Instagram's own keyword search for logged-out visitors. The app's results are personal and change with your account; these are the same for everyone.

**Hashtags?** A hashtag is searched as its keyword (`#homeworkout` → home workout Reels). For every post with a hashtag, use a hashtag scraper.

**Photos and carousels?** No: the results are Reels.

**Can I download the videos?** Each row has `videoUrl`, the MP4 file. Instagram's links expire after a few days, so download them soon after the run.

#### Use with the API and AI agents

Run it from your code or an AI agent with the Apify API, the Apify MCP server or the Python and JavaScript clients; read the results from the dataset (`?view=reels` for the main table) and the related keywords from the `KEYWORDS` record.

#### Other social media tools

| Tool | What it does |
|---|---|
| [Instagram Reels Scraper](https://apify.com/s_actors/instagram-reels-scraper) | All Reels of any profile with plays, likes, comments, MP4 links and engagement rate |
| [Instagram Influencer Finder](https://apify.com/s_actors/instagram-influencer-email-finder) | Instagram creators and local businesses by keyword and city, with emails from the bio and website, phones and engagement |
| [Instagram Profile Scraper](https://apify.com/s_actors/instagram-profile-scraper) | Bio, followers, posts count, emails and phones from the bio, engagement rate and follower change of any profile |
| [Instagram Trending Audio](https://apify.com/s_actors/instagram-trending-audio) | Reels sounds trending right now in any country, with Reels counts and daily growth |
| [Instagram Audio Scraper](https://apify.com/s_actors/instagram-audio-scraper) | The Reels using any sound or song, with its exact Reels count, growth per day and Spotify link |
| [Instagram Post Scraper](https://apify.com/s_actors/instagram-post-scraper) | Any post, Reel or carousel by link with the exact posting time, likes, comments and plays |
| [Instagram Video Downloader](https://apify.com/s_actors/instagram-video-downloader) | Reels, videos and carousels as MP4 files in 1080p from links or whole profiles, one ZIP |
| [Instagram Reel Transcript](https://apify.com/s_actors/instagram-reel-transcript) | Reels and videos to text by link or profile: AI transcript in 99 languages, hook, SRT and VTT |
| [TikTok Profile Scraper](https://apify.com/s_actors/tiktok-profile-scraper) | All videos of TikTok creators with exact stats and MP4 links |
| [YouTube Shorts Scraper](https://apify.com/s_actors/youtube-shorts-scraper) | Shorts of any YouTube channel with views and likes |

# Actor input Schema

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

What to search, one per line: a phrase (home workout, dubai real estate, coffee recipes), a hashtag (#homeworkout) or an Instagram search link (https://www.instagram.com/popular/home-workout/). Specific phrases work best: Instagram has a Reels search page for most of them, but not for some one-word topics (coffee, fitness).

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

Instagram shows up to ~90 Reels per keyword (the top Reels for it, popular and recent). For more Reels on a topic, add related keywords below or more phrases above.

## `relatedKeywords` (type: `integer`):

For each keyword, also search the first N related keywords Instagram suggests (home workout → home workout plan for a week, dumbbell workout routine for home...). Each one adds up to Max Reels per keyword. 0 = only your keywords. The full list of related keywords is saved in the KEYWORDS record either way.

## `similarKeywordsWhenMissing` (type: `boolean`):

When Instagram has no Reels search page for a keyword (often one-word topics like coffee), look up close keywords that have one with a Google search (coffee → coffee trends, coffee types...) and return their Reels. Charged once per keyword, only when close keywords are found.

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

Order of the Reels of each keyword. Other than Instagram's order, all ~90 Reels of the keyword are read and the top Max Reels per keyword are returned.

## `postedAfter` (type: `string`):

Only Reels posted after this date (2026-10-01) or within this period (7 days, 2 weeks, 3 months, 1 year).

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

Only Reels played at least this many times (100000 = viral Reels only). Empty = every Reel.

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

Only Reels with at least this many likes. Empty = every Reel.

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

Only Reels with at least this many comments. Empty = every Reel.

## `onlyNew` (type: `boolean`):

Return only Reels not returned by your earlier runs with the same monitor name. The first run returns everything and remembers it.

## `monitorName` (type: `string`):

Separate memory for separate schedules (for example 'fitness' and 'travel'). Empty = default.

## `maxConcurrency` (type: `integer`):

How many keywords are searched in parallel.

## `debugLog` (type: `boolean`):

Log every retried request.

## Actor input object example

```json
{
  "keywords": [
    "home workout"
  ],
  "maxReelsPerKeyword": 50,
  "relatedKeywords": 0,
  "similarKeywordsWhenMissing": true,
  "sortBy": "relevance",
  "onlyNew": false,
  "maxConcurrency": 3,
  "debugLog": false
}
```

# Actor output Schema

## `reels` (type: `string`):

One row per Reel with plays, likes, comments and engagement.

## `details` (type: `string`):

MP4 link, hashtags, mentions and the creator of each Reel.

## `all` (type: `string`):

Every field of every row.

## `keywords` (type: `string`):

Each searched keyword: its Instagram page, Reels found, ~30 related keywords and the summary Instagram shows for the topic.

# 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": [
        "home workout"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/instagram-reels-search").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": ["home workout"] }

# Run the Actor and wait for it to finish
run = client.actor("s_actors/instagram-reels-search").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": [
    "home workout"
  ]
}' |
apify call s_actors/instagram-reels-search --silent --output-dataset

```

## MCP server setup

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

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/FEHYk4FVxyOUQNcaX/builds/4H0nAmfqNQiKZcKTP/openapi.json
