# Instagram Trending Reels Research Scraper (`muhammadafzal/instagram-trending-reels-research-scraper`) Actor

Research public Instagram trending Reels. Export captions, links, creator names, timestamps, engagement counts, and a sample trend rank.

- **URL**: https://apify.com/muhammadafzal/instagram-trending-reels-research-scraper.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 reel research results

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 Trending Reels Research Scraper

Collect public Reels from Instagram's trending Reels sample, then rank and filter the returned records for content research. The Actor uses the owner's configured ScrapeCreators public-data API key; users do not need Instagram login or cookies.

### What you get

Each record has a canonical Reel link, caption, caption hashtags, creator username, publish time, available like/comment/play counts, source position, and an engagement-per-hour research rank. Missing source values remain `null`. `SUMMARY` reports `data`, `empty`, `blocked`, `rejected`, or `failed`, along with the delivered count and warnings.

```json
{"maxResults":20,"batches":1,"minLikes":0,"maxAgeDays":30,"captionContains":""}
```

`maxResults` ranges from 1–100; verified free-plan runs deliver at most five. `batches` is 1–3 provider requests and each request consumes one provider credit. Repeated samples are deduplicated. `minLikes`, `maxAgeDays`, and `captionContains` filter only the fetched sample. A text filter does not perform a full Instagram search. The provider's trending endpoint can return duplicate or changing Reels between calls; no global completeness or stable ordering is promised. Engagement per hour uses public likes plus comments divided by age in hours, with a one-hour floor. When counts or timestamp are missing, the rank falls back to the source position.

Example record shape (illustrative):

```json
{"id":"123","permalink":"https://www.instagram.com/reel/ABC/","caption":"A travel idea #travel","hashtags":["travel"],"creatorUsername":"creator","publishedAt":"2026-09-25T10:00:00.000Z","likeCount":100,"commentCount":5,"playCount":1000,"engagementsPerHour":52.5,"sourceRank":1,"researchRank":1,"collectedAt":"2026-09-25T12:00:00.000Z"}
```

### Pay per event pricing

These tier prices are enabled in the private Actor. Platform usage pass-through is not enabled. The result event is synthetic and fires for each default-dataset item; the start event is synthetic and fires once per run.

| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---:|---:|---:|---:|---:|---:|
| Run start | $0.015625 | $0.015235 | $0.014844 | $0.012500 | $0.012500 | $0.012500 |
| Reel record | $0.005000 | $0.004875 | $0.004750 | $0.004000 | $0.004000 | $0.004000 |

A 20-record FREE-tier run would cost $0.115625 in events; a five-record run would cost $0.040625. Empty or blocked runs have no result events, though the start event applies. Provider cost is one credit per `batches` request, whether or not filters find a match. The start fee reserves room for up to three provider credits plus bounded platform usage on a no-match run; external credit costs depend on the owner's provider plan.

The operator must bind the existing private `SCRAPECREATORS_API_KEY` secret in the Actor version. Treat the provider response as public data only. Use and store Reel information according to applicable privacy law and platform rules.

# Actor input Schema

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

Unique Reel records to return, 1–100. Free-plan runs stop at 5.

## `batches` (type: `integer`):

Number of fresh trending samples to request, 1–3. Each request consumes one provider credit and may repeat Reels.

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

Keep only Reels with at least this many public likes. Missing like counts are excluded when above zero.

## `maxAgeDays` (type: `integer`):

Exclude Reels with a known publish time older than this, 1–365 days. Unknown timestamps remain eligible.

## `captionContains` (type: `string`):

Optional case-insensitive text filter on returned Reel captions; for example travel. This filters the sampled feed and does not search Instagram.

## Actor input object example

```json
{
  "maxResults": 20,
  "batches": 1,
  "minLikes": 0,
  "maxAgeDays": 30,
  "captionContains": ""
}
```

# Actor output Schema

## `results` (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 = {
    "maxResults": 20,
    "batches": 1,
    "minLikes": 0,
    "maxAgeDays": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/instagram-trending-reels-research-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 = {
    "maxResults": 20,
    "batches": 1,
    "minLikes": 0,
    "maxAgeDays": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("muhammadafzal/instagram-trending-reels-research-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 '{
  "maxResults": 20,
  "batches": 1,
  "minLikes": 0,
  "maxAgeDays": 30
}' |
apify call muhammadafzal/instagram-trending-reels-research-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,muhammadafzal/instagram-trending-reels-research-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/gbhpPRdkgJ1HtoUX6/builds/hgJMwHKXE3jTK2YcZ/openapi.json
