# Instagram Reels Search - $0.40/1k by Keyword (`dami_studio/instagram-reels-search-scraper`) Actor

Search Instagram Reels by keyword and export the results - shortcode, caption, view and like counts, author and direct URL. Reels search is login-gated, so bring your own session cookie. $0.40 per 1,000 reels, matching the lowest per-reel price on Apify.

- **URL**: https://apify.com/dami\_studio/instagram-reels-search-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** Social media, Videos, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Instagram Reels Search Scraper

Discover public Instagram Reels by keyword or hashtag using the authenticated Instagram web endpoints. The actor resolves a keyword to a small bounded set of matching hashtags, reads their Reels-capable media feeds, and returns only video or `clips` records.

**$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. No Reels scraper on the market bills less per reel, and keyword-driven Reels discovery of the kind this Actor does normally costs several times more.

### Authentication and account rotation

Real Reels discovery requires one or more authorized `sessionid` cookies from dedicated Instagram accounts. Provide them as a secret array through `sessionCookies`, or configure the private actor environment variable `INSTAGRAM_SESSION_COOKIES`.

The environment value accepts either a JSON array or newline-delimited cookie values. Input `sessionCookies` take precedence. Cookie values, proxy URLs, and request headers are never logged or written to output. Logs contain only account-slot numbers, retry reasons, and result totals.

Use only accounts you own and are authorized to automate. Manage and revoke their sessions through your secure account process. Do not put cookie values in source files, README text, task descriptions, or support messages.

### Input

- `searchQueries`: up to five keywords, each resolved to up to `hashtagsPerQuery` authenticated Instagram hashtags.
- `hashtags`: up to five direct hashtags. These skip keyword discovery.
- `maxReels`: hard run-wide limit of 1-100 genuine Reels; default 30.
- `hashtagsPerQuery`: 1-5 hashtag candidates per keyword; default 3.
- `sessionCookies`: secret array of dedicated-account session cookies.
- `proxyConfiguration`: optional proxy configuration. 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 account/IP attempts; default 8.
- `requestTimeoutSeconds`: 5-30 seconds per authenticated request.
- `maxRunSeconds`: 20-180 second hard run deadline.

Empty input, invalid input, or an unavailable credential 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.

### Transport and charging

One dedicated account is paired with one sticky datacenter proxy session. On `401`, `403`, `429`, server, or network failures, the actor rotates together to the next configured account and a fresh sticky proxy session, within the configured bound. It uses direct Instagram web endpoints only after authentication; a direct unauthenticated path is not attempted.

Each genuine Reel is written to the dataset before it is billed. Samples, empty responses, blocks, and diagnostics are never charged. Video files are never downloaded, so you are not paying for video bandwidth.

### Output

Each genuine Reel includes its ID, shortcode and URL, caption, parsed hashtags and mentions, play/like/comment counts, duration, thumbnail and video URLs, creator information, available audio metadata, timestamp, and the source keyword and hashtag that found it.

### Pricing

| Event | When | Price |
|---|---|---|
| Actor start | Once per run, per GB of run memory | $0.001 |
| Reel returned | Each genuine Reel row written to the dataset | $0.0004 ($0.40 / 1,000) |

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

### Limits, stated plainly

- **You bring the credential.** Instagram's Reels search is login-gated; without a `sessionid` from an account you own and are authorized to automate, the actor returns the labelled sample and stops.
- **100 reels per run, 5 keywords, 5 hashtags per run.** These are hard input caps, not throttles that lift at higher volume.
- **Unmetered proxy egress.** One account is pinned to one sticky datacenter session, rotating together 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.

# Actor input Schema

## `searchQueries` (type: `array`):

Up to five keyword searches. The actor resolves each keyword to matching Instagram hashtags, then returns Reels from those authenticated hashtag feeds.

## `hashtags` (type: `array`):

Optional direct hashtags. They bypass keyword-to-hashtag discovery and fetch matching authenticated hashtag Reels feeds.

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

Hard run-wide maximum of genuine Reels written and charged.

## `hashtagsPerQuery` (type: `integer`):

Bounded number of matching hashtags fetched for each keyword search.

## `sessionCookies` (type: `array`):

Secret array of authorized dedicated-account sessionid cookies. Input values override the secure INSTAGRAM\_SESSION\_COOKIES environment fallback. Values are never logged.

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

Rotating Apify datacenter addresses are used for authenticated Instagram web requests, with a sticky session retained until a bounded account/IP rotation is necessary. Your own proxy servers (proxyUrls) are used exactly as supplied. Metered proxy groups (RESIDENTIAL, GOOGLE\_SERP) are not offered and are replaced with datacenter addresses.

## `maxAttempts` (type: `integer`):

Bounded retries across rotating configured accounts and sticky datacenter proxy sessions.

## `requestTimeoutSeconds` (type: `integer`):

Timeout for each Instagram authenticated web request.

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

Hard wall-clock bound for authenticated discovery and Reels extraction.

## Actor input object example

```json
{
  "searchQueries": [
    "travel",
    "home workout"
  ],
  "hashtags": [
    "travel",
    "fitness"
  ],
  "maxReels": 30,
  "hashtagsPerQuery": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  },
  "maxAttempts": 8,
  "requestTimeoutSeconds": 15,
  "maxRunSeconds": 120
}
```

# Actor output Schema

## `dataset` (type: `string`):

One row per authenticated Instagram Reel. Samples and diagnostics are never charged.

# 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 = {
    "searchQueries": [
        "travel"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/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 = { "searchQueries": ["travel"] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/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/YMo6ifi3cIkOKDAe2/builds/j0slhQSQFcY8q4feo/openapi.json
