# Instagram Search Scraper - Public Reels & Metrics (`chronometrica/instagram-search-scraper`) Actor

Search public Instagram Reels by keyword and export ranked results, creators, captions, and public engagement metrics. No Instagram login or cookies required.

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

## Pricing

from $3.00 / 1,000 enriched instagram search results

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

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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Search Scraper - Public Reels & Metrics

### 📊 What does Instagram Search Scraper do?

Enter one keyword or phrase. Get a ranked list of public Instagram Reels. Each row can include the Reel URL, title, caption, hashtags, mentions, creator, media URL, publish time, views, plays, likes, comments, and clear metric status.

The Actor does not need an Instagram login, cookies, or account details.

Use it for public content research, trend checks, creator discovery, campaign research, and scheduled monitoring.

With Instagram Search Scraper, you can:

- 🔎 Find public Reels for one topic.
- 📊 Add public post metrics when Instagram shows them.
- ⚡ Turn metric checks off for a faster URL and rank search.
- 🧹 Remove duplicate Reels from each run.
- 📦 Export results as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
- 🚦 See why a metric was present, unavailable, or skipped.

### 📦 What Instagram data can I extract?

Each dataset row represents one public Instagram Reel found for the entered keyword.

| Data group        | Example fields                                                                                                               |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| 🔎 Search context | `searchQuery`, `searchUrl`, `searchRank`                                                                                     |
| 🔗 Reel identity  | `postUrl`, `postId`, `shortCode`, `mediaType`                                                                                |
| 🧾 Reel details   | `title`, `caption`, `hashtags`, `mentions`, `publishedAt`, `thumbnailUrl`, `downloadUrl`, `videoDurationSeconds`, `hasAudio` |
| 👤 Creator        | `profileId`, `profileName`, `profileHandle`, `profileUrl`, `profileVerified`, `profileAvatarUrl`                             |
| 📊 Public metrics | `views`, `plays`, `playsInstagram`, `likes`, `comments`                                                                      |
| 🎯 Quality        | `postMetricStatus`, `metricEnrichmentStatus`, `status`, `statusReason`                                                       |
| 🕒 Observation    | `scrapedAt`                                                                                                                  |

Missing public values stay `null`. They are not guessed and are not changed to zero.

### ⚙️ Can I use this Actor through an API?

Yes. Run it in Apify Console or connect through:

- Apify API
- Python SDK
- JavaScript SDK
- Webhooks
- Schedules
- Apify integrations

### 🎯 Why search public Instagram Reels?

| Use case               | How the data helps                                              |
| ---------------------- | --------------------------------------------------------------- |
| 📈 Trend research      | Compare public Reels and language around a topic.               |
| 🕵️ Competitor research | Find public campaign and content examples.                      |
| 👤 Creator discovery   | Find public creators posting about a topic.                     |
| 🧱 Data pipelines      | Send clean Reel rows to a sheet, database, or dashboard.        |
| ⏱️ Monitoring          | Repeat the same keyword and compare observed results over time. |

### 💵 Pricing events

The Store price uses two events, but each paid row charges only one. A fast row charges the search-result event. A row whose public post check returns useful metrics or metadata charges the enriched-result event instead.

Current price per saved row:

| Apify plan | Search-only row | Enriched row |
| ---------- | --------------: | -----------: |
| Free       |         $0.0015 |     $0.00500 |
| Bronze     |         $0.0013 |     $0.00433 |
| Silver     |         $0.0011 |     $0.00367 |
| Gold       |         $0.0010 |     $0.00300 |
| Platinum   |         $0.0010 |     $0.00300 |
| Diamond    |         $0.0010 |     $0.00300 |

Apify platform usage is separate and is paid by the user. Metric checks take longer. Turn `includeMetrics` off when you only need Reel URLs and ranks.

Empty searches and failed runs do not save or charge rows. A failed enrichment can still save and charge the cheaper search-only row. The Actor also respects the run's maximum charge by stopping before work that cannot fit.

### 🚀 How do I use Instagram Search Scraper?

1. Open the Actor in Apify Console.
2. Enter one keyword or phrase.
3. Choose the maximum number of unique Reels to save.
4. Keep metric checks on when you need public metrics.
5. Click **Start**.
6. Open **Output** to inspect the rows and run summary.

### ⬇️ Input

```json
{
  "query": "sports news",
  "maxResults": 10,
  "includeMetrics": true
}
````

| Setting          | What it controls                                                                                                              |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `query`          | One keyword or phrase. Required. From 1 to 100 characters after spaces are cleaned.                                           |
| `maxResults`     | Maximum unique Reel rows saved after duplicate removal. From 1 to 64. Default: 25. This is a cap, not a promised count.       |
| `includeMetrics` | Checks every saved Reel for public metrics and creator details. Default: `true`. Turn it off for a faster, lower-cost search. |

### ⬆️ Output sample

```json
{
  "platform": "instagram",
  "searchQuery": "sports news",
  "searchUrl": "https://www.instagram.com/popular/sports-news/",
  "searchRank": 1,
  "postUrl": "https://www.instagram.com/reel/ABC123/",
  "postId": "123456789",
  "shortCode": "ABC123",
  "mediaType": "reel",
  "title": "A public Reel title",
  "caption": "A public Reel caption",
  "hashtags": ["sports", "news"],
  "mentions": ["example"],
  "publishedAt": "2026-07-20T12:00:00.000Z",
  "thumbnailUrl": "https://example.cdn.invalid/image.jpg",
  "downloadUrl": "https://example.cdn.invalid/video.mp4",
  "videoDurationSeconds": 18.4,
  "hasAudio": true,
  "profileId": "987654321",
  "profileName": "Example Creator",
  "profileHandle": "example",
  "profileUrl": "https://www.instagram.com/example/",
  "profileVerified": false,
  "profileAvatarUrl": null,
  "views": 1200,
  "plays": 1300,
  "playsInstagram": null,
  "likes": 90,
  "comments": 4,
  "postMetricStatus": [
    {
      "metric": "views",
      "status": "present",
      "reason": null,
      "precision": "exact",
      "source": "public_post"
    },
    {
      "metric": "plays",
      "status": "present",
      "reason": null,
      "precision": "exact",
      "source": "public_post"
    },
    {
      "metric": "playsInstagram",
      "status": "unavailable",
      "reason": "Instagram did not expose this metric publicly for this Reel at collection time.",
      "precision": "unavailable",
      "source": "public_post"
    },
    {
      "metric": "likes",
      "status": "present",
      "reason": null,
      "precision": "exact",
      "source": "public_post"
    },
    {
      "metric": "comments",
      "status": "present",
      "reason": null,
      "precision": "exact",
      "source": "public_post"
    }
  ],
  "metricEnrichmentStatus": "partial",
  "scrapedAt": "2026-07-20T12:01:00.000Z",
  "status": "ok",
  "statusReason": null
}
```

The real `postMetricStatus` array always contains five entries in this order: `views`, `plays`, `playsInstagram`, `likes`, and `comments`.

#### 📌 Run summary

The `OUTPUT` and `RUN_SUMMARY` records contain the same public summary:

```json
{
  "actorName": "instagram-search-scraper",
  "schemaVersion": "1.1.0",
  "resultType": "instagram_public_keyword_reel",
  "rowGrain": "one_public_instagram_reel_per_keyword_result_row",
  "status": "succeeded",
  "statusReason": null,
  "query": "sports news",
  "maxResults": 10,
  "includeMetrics": true,
  "candidatesSeen": 12,
  "uniqueCandidatesSeen": 12,
  "duplicatesSkipped": 0,
  "savedRows": 10,
  "usefulRows": 10,
  "billableRows": 10,
  "enrichmentAttempted": 10,
  "enrichmentSucceeded": 7,
  "enrichmentPartialOrFailed": 3,
  "searchAttemptCount": 1,
  "searchRetryCount": 0,
  "searchRecoveredByRetry": false,
  "stopReason": "limit_reached",
  "startedAt": "2026-07-20T12:00:00.000Z",
  "finishedAt": "2026-07-20T12:01:00.000Z"
}
```

### 🎯 Status and quality fields

- `present`: Instagram exposed the metric publicly.
- `unavailable`: Instagram did not expose the value, or the public check could not finish. Read `reason`.
- `skipped`: `includeMetrics` was turned off.
- `exact`: the public source returned a full number.
- `rounded`: the public source showed a rounded number.
- `metricEnrichmentStatus`: `succeeded`, `partial`, `failed`, or `skipped` for the whole Reel.

### 🔒 Data scope

This Actor collects public Instagram Reels. Private content is not supported.

### ⚠️ Limits and interpretation

- `maxResults` is a maximum. Instagram may expose fewer public Reels.
- Metrics can be missing even when the Reel itself is public.
- Repeated runs are new observations. Instagram can change results and metrics between runs.

### 🔗 Related Actors

- [Instagram Metrics Scraper](https://apify.com/chronometrica/instagram-metrics-scraper) for known post URLs.
- [Instagram Channel Scraper](https://apify.com/chronometrica/instagram-channel-scraper) for public profile discovery.
- [TikTok Search Scraper](https://apify.com/chronometrica/tiktok-search-scraper) for TikTok keyword discovery.

### ❓ FAQ

#### Does this Actor need an Instagram login, cookie, or API key?

No.

#### Why did I get fewer rows than `maxResults`?

The field is a cap. Instagram may return fewer public Reels for that phrase.

#### Why is a metric `null`?

Instagram did not expose it publicly, the public check could not finish, or you turned metric checks off. Read the matching `postMetricStatus` entry.

#### How are duplicates removed?

Rows are deduplicated by Instagram Reel shortcode before metric checks and saving.

### ⚖️ Legal note

Use public data responsibly. Follow applicable laws, Instagram's terms, and the rights of people whose public content you collect. This Actor does not grant rights to reuse Instagram content.

### 🛟 Support

When asking for help, include the Apify run ID, input, expected result, one bad or missing row, and the time of the run. Do not send Instagram passwords, cookies, or private account material.

# Actor input Schema

## `query` (type: `string`):

One word or phrase to search on public Instagram pages.

## `maxResults` (type: `integer`):

The most unique Reel rows to save after duplicates are removed. Choose 1 to 64. Instagram may expose fewer public results, so this is a cap rather than a promised count.

## `includeMetrics` (type: `boolean`):

Check every saved Reel for public metrics and creator details. This takes longer and uses more paid platform resources. Turn it off for a faster URL and rank search.

## Actor input object example

```json
{
  "query": "sports news",
  "maxResults": 25,
  "includeMetrics": true
}
```

# Actor output Schema

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

No description

## `summary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("chronometrica/instagram-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 = {}

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

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

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

```

## CLI example

```bash
echo '{}' |
apify call chronometrica/instagram-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=chronometrica/instagram-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Search Scraper - Public Reels & Metrics",
        "description": "Search public Instagram Reels by keyword and export ranked results, creators, captions, and public engagement metrics. No Instagram login or cookies required.",
        "version": "1.0",
        "x-build-id": "8M0L0OovMdhuMZVLD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/chronometrica~instagram-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-chronometrica-instagram-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/chronometrica~instagram-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-chronometrica-instagram-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/chronometrica~instagram-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-chronometrica-instagram-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "query"
                ],
                "properties": {
                    "query": {
                        "title": "Search keyword",
                        "minLength": 1,
                        "maxLength": 100,
                        "type": "string",
                        "description": "One word or phrase to search on public Instagram pages.",
                        "default": "sports news"
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "maximum": 64,
                        "type": "integer",
                        "description": "The most unique Reel rows to save after duplicates are removed. Choose 1 to 64. Instagram may expose fewer public results, so this is a cap rather than a promised count.",
                        "default": 25
                    },
                    "includeMetrics": {
                        "title": "Include post metrics",
                        "type": "boolean",
                        "description": "Check every saved Reel for public metrics and creator details. This takes longer and uses more paid platform resources. Turn it off for a faster URL and rank search.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
