# Instagram Reels Scraper: Views, Outlier Finder, No Login (`sourabhbgp/instagram-scraper`) Actor

Scrape Instagram reels by account, hashtag or keyword, sound or link, in bulk. Get views, likes, comments, caption, length, audio with a trending flag, followers and an outlier score that finds viral reels. MP4 download and comments included. No login or cookies.

- **URL**: https://apify.com/sourabhbgp/instagram-scraper.md
- **Developed by:** [Sourabh Kumar](https://apify.com/sourabhbgp) (community)
- **Categories:** Social media, Videos
- **Stats:** 5 total users, 3 monthly users, 96.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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 scraper and outlier finder: views, hashtags, sounds, no login

Get Instagram reels four ways, in bulk: from accounts, from a hashtag or keyword, from a sound, or from reel links. Every reel comes with its views, likes, comments, caption, length and audio, plus an **outlier score**: how many times the account's usual views it got.

**From $1.50 per 1,000 reels, plus $0.005 per run. No login, cookies or proxy needed.**

Best for finding outlier reels: the videos that got far more views than their account usually gets, by account, hashtag or sound. 49 fields per reel, including fields you won't find elsewhere: `outlierScore`, `medianPlays`, caption language, Instagram's topic labels, the sound's trending flag and how many reels use the sound.

Made for content research: see what breaks out on a topic, how long those reels are, what their first line says, and which sounds they use.

<br>

### Pick a mode

Set **What to scrape** (`mode`), then fill the section with the same name. Other sections are ignored.

| You want | `mode` | Paste into |
|---|---|---|
| Every reel of some accounts, with an optional date range | `accounts` | `accounts` (usernames or profile links) |
| The reels Instagram ranks as popular for a hashtag or keyword | `topics` | `topics` (hashtags or keywords) |
| How many reels use a sound, and its newest reels | `audio` | `audioIds` (audio links or IDs) |
| Full details for specific reels | `reels` | `reelUrls` (reel links or shortcodes) |

Every mode can be scheduled. Run it weekly on your competitors and sort by outlier score.

<br>

### Why this Instagram reels scraper?

- 🚀 **Outlier score on every reel**, so the videos that broke out stand out at a glance.
- 👁️ **Real view counts**, the same number Instagram shows on the reel.
- 📊 **A ready summary per account, topic or sound**: median views, posting rate, typical length, top hashtags, sounds and outliers.
- 🎬 **Video download and comments included** in the price, no add-on fees.
- 🎵 **Trending sounds flagged**, with how many reels already use each sound.
- 🌐 **Caption language** on every reel, including Hindi written in English letters.
- 💸 **Pay only for reels.** Empty accounts, topics and links are free.

<br>

### 1. Accounts: every reel of the accounts you list

**Paste** usernames (`nasa`), `@usernames` or profile links.

**Get** one row per reel, in the order of the account's Reels tab: pinned first, then newest. Collab reels another account posted to the tab are included and marked `isCollab`.

| Option | Field | Default | What it does |
|---|---|---|---|
| Max reels per account | `maxReelsPerAccount` | 24 | Up to 2,000 |
| Posted on or after | `postedAfter` | empty | Only reels posted on or after this day (UTC) |
| Posted on or before | `postedBefore` | empty | Only reels posted on or before this day (UTC) |

In this mode `followers`, `medianPlays` and `outlierScore` always describe the account you asked for (`statsAccount`), also on collab reels.

**Input**

```json
{
  "mode": "accounts",
  "accounts": ["nasa", "https://www.instagram.com/mavgpt/"],
  "maxReelsPerAccount": 12
}
```

**Output** (one real row, selected fields)

```json
{
  "account": "nasa",
  "reelUrl": "https://www.instagram.com/reel/DeSM5CYPDfd/",
  "username": "nasajohnson",
  "postedAt": "2026-10-09T19:02:56.000Z",
  "caption": "The journey brought them home. The discoveries will take us farther. 🌎 ...",
  "captionLanguage": "en",
  "durationSeconds": 110.77,
  "playCount": 3113765,
  "likeCount": 52448,
  "commentCount": 569,
  "engagementRate": 0.017,
  "statsAccount": "nasa",
  "followers": 104370795,
  "medianPlays": 4285077,
  "outlierScore": 0.73,
  "audioTitle": "Original audio",
  "isOriginalAudio": true,
  "topicTags": ["spacex launch", "international space station", "astronaut jessica meir", "falcon 9 liftoff", "dragon capsule splashdown"],
  "isCollab": true,
  "isPinned": false
}
```

<br>

### 2. Hashtags and keywords: Instagram's popular reels

**Paste** topics as words, for example `ai tools` or `open source`. Instagram's pages often use the spaced form: "open source" has one, "#opensource" doesn't.

**Get** the reels Instagram itself ranks as popular for the topic, usually 36 to 70. Each row also carries how many reels the topic has (Instagram publishes that number for bigger topics), Instagram's own summary of the topic, and related topics to try next.

| Option | Field | Default | What it does |
|---|---|---|---|
| Max reels per topic | `maxReelsPerTopic` | 50 | Up to 100 |

**Input**

```json
{
  "mode": "topics",
  "topics": ["ai tools hindi", "open source", "naruto"]
}
```

**Output** (one real row, selected fields)

```json
{
  "topic": "ai-tools-hindi",
  "rank": 2,
  "reelUrl": "https://www.instagram.com/reel/DUnJUE8gFDt/",
  "username": "ask_saloni",
  "postedAt": "2026-02-11T09:06:53.000Z",
  "caption": "If you want guidance on AI courses, tools, or the right learning platforms, feel free to D...",
  "captionLanguage": "en",
  "durationSeconds": 47.81,
  "playCount": 2462,
  "followers": 106,
  "medianPlays": 1121,
  "outlierScore": 2.2,
  "relatedTopics": ["ai hindi", "ai tools", "ai tool hindi", "ai tools in hindi", "ai se reels kaise banaye ai tool hindi"]
}
```

<br>

### 3. Audio: how many reels use a sound

**Paste** an audio link (`https://www.instagram.com/reels/audio/1091134006320233/`) or its number. Every reel row in any mode carries its `audioId`, so you can take sounds from another run.

**Get** the exact number of reels using the sound (`audioReelCount`) and the reels Instagram shows logged-out visitors on the sound's page: about 12 of the newest, often posted minutes before, so their views are still low.

| Option | Field | Default | What it does |
|---|---|---|---|
| Max reels per sound | `maxReelsPerAudio` | 12 | Instagram shows about 12 |

**Input**

```json
{
  "mode": "audio",
  "audioIds": ["https://www.instagram.com/reels/audio/1091134006320233/"]
}
```

**Output** (one real row, selected fields)

```json
{
  "rank": 2,
  "audioReelCount": 831428,
  "reelUrl": "https://www.instagram.com/reel/DdkvRJMhoJ3/",
  "username": "iammayakishori",
  "postedAt": "2026-09-22T03:25:57.000Z",
  "durationSeconds": 61.28,
  "playCount": 116868,
  "audioTitle": "Inspire The World",
  "audioArtist": "DensoMusic",
  "isOriginalAudio": false,
  "outlierScore": 2.21
}
```

<br>

### 4. Reels: full details for reel links

**Paste** reel links or shortcodes. Photo and carousel posts are skipped for free, with a note.

**Get** one row per reel with its views and its author's usual views for comparison.

**Input**

```json
{
  "mode": "reels",
  "reelUrls": ["https://www.instagram.com/reel/DeXnAlOqLuU/"],
  "includeComments": true,
  "downloadVideos": true
}
```

**Output** (one real row, selected fields)

```json
{
  "reelUrl": "https://www.instagram.com/reel/DeXnAlOqLuU/",
  "username": "mavgpt",
  "postedAt": "2026-10-11T21:20:55.000Z",
  "caption": "Comment “Tricks” and I’ll send you 200 more 👇 ...",
  "captionLanguage": "en",
  "hashtags": ["chatgpt", "ai", "chatgptimage", "aiimages", "chatgptprompts"],
  "durationSeconds": 24.37,
  "playCount": 1146445,
  "likeCount": 46404,
  "commentCount": 13317,
  "followers": 1427077,
  "medianPlays": 27436,
  "outlierScore": 41.79,
  "topicTags": ["chatgpt tips", "secret prompts", "photo editing hacks", "generative ai", "tech tutorial", "social media hacks"]
}
```

<br>

### Extras for every mode

| Option | Field | Default | What it does |
|---|---|---|---|
| Add author stats | `includeAuthorStats` | `true` | Hashtag, keyword and Audio mode: followers, median views and outlier score for each reel's author. Accounts and Reels mode always include them. |
| Download the videos | `downloadVideos` | `false` | Saves each MP4 to the run's storage and adds its link as `videoFile`. Every row has `videoUrl` either way, which stops working about a day after the run (`videoUrlExpiresAt`). |
| Add comments | `includeComments` | `false` | The comments Instagram shows logged-out visitors, newest first: text, author, likes, time |
| Max comments per reel | `maxComments` | 20 | Up to 500 |

**The summary.** Every run also saves an `INSIGHTS` record next to the rows. You get one block per account, topic or sound:

- the reel count on Instagram, creators, median and top views, and views per follower
- how many reels scored 3 or more, typical length, the share using original audio, and caption languages
- top hashtags, topic labels, sounds and creators, each with its share of reels
- the five biggest outliers with their first caption line
- in Accounts mode: the bio, bio links, highlights and reels per week

Open it from the run's **Storage** tab.

<br>

### What people use it for

- 🎬 **Creators:** find which videos broke out on your topic, how long they were and what their first line said.
- 🔍 **Competitor tracking:** pull a creator list every week and sort by outlier score.
- 🧭 **Finding a gap:** compare topics by size and views. A small topic with high views is room to grow.
- 🎵 **Picking sounds:** see which songs top reels use and how many reels already use them.
- 🤝 **Influencer vetting:** check creators by followers, median views, views per follower and posting rate.
- 🤖 **AI and analytics:** feed captions, downloaded videos and engagement data to your models.

<br>

### How much does it cost?

One price for every reel. Author stats, comments, video downloads and the summary cost nothing extra, and empty accounts, topics or links are free.

| Apify plan | Per 1,000 reels |
|---|---|
| Free | $2.50 |
| Starter | $2.00 |
| Scale | $1.75 |
| Business | $1.50 |

Each run also costs $0.005 to start ($0.02 on the Free plan).

- **Free plan:** your $5 monthly credit covers about **2,000 reels**.
- **Starter plan ($29):** about **14,500 reels** a month.

<br>

### Limitations

- **Share and save counts aren't available.** Instagram doesn't show them to logged-out visitors.
- **Comments are a sample.** Logged out, Instagram shows only part of a reel's comments, and no replies.
- **Topic results are Instagram's popular reels,** so their views run higher than a typical reel on the topic. Some topics have no page (plain "anime", "github"); those come back with a note and cost nothing.
- **About 12 reels per sound,** the newest ones. The count of reels using the sound is exact.
- **Private accounts are skipped,** with a note, and cost nothing.

<br>

### FAQ

#### How do I scrape Instagram reels without coding?

Pick a mode, paste accounts, topics, sounds or links, and press **Start**. Download the results as Excel, CSV or JSON.

#### How do I find viral or outlier reels in my niche?

Run Accounts mode on the creators in your niche, or Hashtags and keywords mode on your topic, then sort the results by `outlierScore`. Anything above 3 got three times its account's usual views. The `INSIGHTS` summary lists the five biggest outliers with their first caption line, which is usually the hook.

#### What exactly is the outlier score?

The reel's views divided by the median views of the account's newest 24 non-pinned reels. A 1 is a normal reel for that account; a 5 got five times the usual views. `statsAccount` says which account the numbers describe.

#### Can I scrape Instagram reels by hashtag?

Yes. Hashtags and keywords mode returns the reels Instagram ranks as popular for that hashtag, usually 36 to 70. These are the top reels, not the most recent ones.

#### Can I see if a sound is trending and how many reels use it?

Yes. Every reel row has `audioIsTrending`, and Audio mode gives the exact number of reels using a sound (`audioReelCount`). It doesn't produce a chart of today's trending sounds.

#### Can I check views for a list of reel links in bulk?

Yes. Paste the links into Reels mode. Each row has the views, likes, comments and the author's usual views for comparison.

#### Can I track competitors every week?

Yes. Save your input as a task and add a schedule. Use a date range in Accounts mode to get only the new reels.

#### Do I need a proxy or an Instagram account?

No. It reads only what Instagram shows logged-out visitors, so no account is ever at risk, and it handles blocks by itself.

#### Can I use it from code or an AI agent?

Yes. Call it through the Apify API, or connect it to an AI agent through Apify's MCP server.

#### Is scraping Instagram legal?

It collects only what Instagram shows any logged-out visitor. How you use the data is your responsibility, especially personal data.

#### Your feedback

Something missing or wrong? [Open an issue](https://console.apify.com/actors/SrDgCr4wTG7Eca9GA/issues).

# Actor input Schema

## `mode` (type: `string`):

Pick what to scrape, then fill the section with the same name below. Other sections are ignored.

## `accounts` (type: `array`):

One account per line: a username (nasa), @username or a profile link (https://www.instagram.com/nasa/).

## `maxReelsPerAccount` (type: `integer`):

Stop after this many reels for each account, in the order of its Reels tab: pinned reels first, then newest first.

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

Only reels posted on or after this date (UTC). Leave empty for no lower limit.

## `postedBefore` (type: `string`):

Only reels posted on or before this date (UTC). Leave empty for no upper limit.

## `topics` (type: `array`):

One topic per line, for example ai tools or open source. Type topics as words: Instagram's pages often use the spaced form (open source has one, #opensource has none). You get the reels Instagram itself ranks as popular for it, plus how many reels the topic has and related topics. Instagram has these pages for many topics but not all.

## `maxReelsPerTopic` (type: `integer`):

Stop after this many reels for each topic. Instagram shows about 36 to 70 popular reels per topic.

## `audioIds` (type: `array`):

One sound per line: an audio link (https://www.instagram.com/reels/audio/1091134006320233/) or its number. You get how many reels use the sound (audioReelCount) and the reels Instagram shows logged-out visitors on the sound's page: about 12 of the newest, often posted minutes before, so their views are still low. Every reel row carries its audioId, so you can take sounds from any other run.

## `maxReelsPerAudio` (type: `integer`):

Stop after this many reels for each sound. Instagram shows logged-out visitors about 12 reels per sound.

## `reelUrls` (type: `array`):

One reel per line: a link (https://www.instagram.com/reel/DeXnAlOqLuU/) or its shortcode.

## `includeAuthorStats` (type: `boolean`):

Hashtag, keyword and Audio mode: for every reel's author, followers, the median views of their recent reels, and how many times that median this reel got (outlier score). A few extra requests per author. Accounts and Reels mode always include them.

## `downloadVideos` (type: `boolean`):

Save each reel's MP4 to the run's key-value store and add its link as videoFile. Every row has videoUrl either way: Instagram's own link, which stops working at videoUrlExpiresAt (about a day after the run).

## `includeComments` (type: `boolean`):

Add each reel's comments as a list (text, author, likes, time), newest first. Instagram shows logged-out visitors only part of a reel's comments and no replies, so this is a sample, not every comment. A few extra requests per reel.

## `maxComments` (type: `integer`):

Comments to add per reel when comments are on.

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

Usually not needed. The scraper handles blocks by itself.

## Actor input object example

```json
{
  "mode": "accounts",
  "accounts": [
    "nasa"
  ],
  "maxReelsPerAccount": 12,
  "topics": [
    "ai tools"
  ],
  "maxReelsPerTopic": 50,
  "maxReelsPerAudio": 12,
  "includeAuthorStats": true,
  "downloadVideos": false,
  "includeComments": false,
  "maxComments": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per reel.

## `insights` (type: `string`):

One block per account, topic or sound: views, length, sounds, hashtags, outliers.

## `runSummary` (type: `string`):

What happened to each input line.

# 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 = {
    "accounts": [
        "nasa"
    ],
    "maxReelsPerAccount": 12,
    "topics": [
        "ai tools"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourabhbgp/instagram-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 = {
    "accounts": ["nasa"],
    "maxReelsPerAccount": 12,
    "topics": ["ai tools"],
}

# Run the Actor and wait for it to finish
run = client.actor("sourabhbgp/instagram-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 '{
  "accounts": [
    "nasa"
  ],
  "maxReelsPerAccount": 12,
  "topics": [
    "ai tools"
  ]
}' |
apify call sourabhbgp/instagram-scraper --silent --output-dataset

```

## MCP server setup

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