# Instagram Reels Views Scraper: Play Counts Per Reel, No Login (`themineworks/instagram-reels-views-scraper`) Actor

Get the view count of every public reel on any Instagram profile, one row per reel: views, likes, comments, date, pinned and collab flags, followers, and reach against the profile's median. No login or cookies. Filter by date or minimum views. Pay per reel; private and missing profiles are free.

- **URL**: https://apify.com/themineworks/instagram-reels-views-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Social media, Videos, Marketing
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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 Views Scraper: Play Counts Per Reel, No Login

### What does Instagram Reels Views Scraper do?

Give it Instagram usernames. Get back one row per public reel with the number that matters: how many times it was viewed. Each row also carries likes, comments, the posting date, whether the reel is pinned or a collab, the thumbnail, and the profile's follower count, so you can compare reels and accounts in one spreadsheet without joining tables.

Every row also answers the question view counts alone cannot: was this reel a hit for this account? `reach_ratio` divides the reel's views by the median views of the profile's other reels. A reel at `3.2` pulled more than three times the account's usual audience; one at `0.4` underperformed. That works across accounts of any size, which raw view counts do not.

No Instagram login, no cookies, no API key. The actor reads what Instagram shows any logged-out visitor on a profile's reels tab.

✅ One row per reel | ✅ Views, likes, comments, date | ✅ Reach against the profile's median | ✅ No login | ✅ Pay only for reels delivered | ✅ MCP-ready for AI agents

### Who is it for?

Influencer marketing teams checking whether a creator's views are real and recent before signing a deal. Brand and social media managers tracking which competitor reels break out. Agencies and analysts building view benchmarks across many accounts. Researchers collecting public reel performance data at scale.

### How much does it cost to scrape Instagram reel views?

**$0.0025 per reel delivered on Apify's Free plan, falling to $0.001 on Business and above** ($2.50 to $1.00 per 1,000 reels), plus **$0.005 per run**. Turning on reel details adds $0.001 per reel on Free ($0.0005 on Business and above), charged only when the details were actually fetched.

| Plan | Per reel | Reel details add-on |
| --- | --- | --- |
| Free | $0.0025 | $0.001 |
| Starter | $0.0021 | $0.0008 |
| Scale | $0.0016 | $0.0007 |
| Business and above | $0.001 | $0.0005 |

| Job (Free plan, one run) | Reels | Cost |
| --- | --- | --- |
| Latest 12 reels of one profile | 12 | $0.035 |
| Latest 30 reels of 100 profiles | 3,000 | $7.51 |
| Latest 100 reels of 50 profiles | 5,000 | $12.51 |

**What is never charged:** profiles that are private, do not exist, have no reels, or that Instagram refused; reels left out by your own settings (pinned reels, reels outside your date window, reels under your minimum views); reels Instagram returned without a view count; and, with reel details on, reels whose details could not be fetched. None of these produce a charge. The run summary lists every profile and what happened to it.

The Pricing tab on this page always shows the current rate for your plan. If it and this table ever disagree, the Pricing tab is right. The actor also respects your run's maximum cost: when the limit is reached it stops before delivering reels it could not charge for.

### How does it get reel views without logging in?

When a logged-out visitor opens `instagram.com/<username>/reels/`, Instagram's own website loads the reels through an internal GraphQL request that returns 12 reels at a time, each with its view, like and comment counts. This actor sends that same request, over Apify datacenter proxy by default, and follows the page cursor until it has as many reels as you asked for. A second request reads the profile's exact follower count and verified badge. With reel details on, one more request per reel reads the caption, coauthors, video URL, video length and exact publish time.

The normal path needs no browser, no login and no residential proxy, which is why the price per reel is low. In a 50 profile test of this route on 26 September 2026, 552 of 552 reels came back with a view count and Instagram returned no rate limit errors.

Instagram occasionally renames those internal requests when it ships a new website build. The actor detects this, re-reads the current names from Instagram once per run, and carries on. If it still cannot read reels, it says so plainly instead of returning an empty success: the run summary shows `route_broken: true`, the log shows an error, and a run that delivered nothing ends as failed. Profiles it could not read are never charged.

### What input does it take?

```json
{
  "usernames": ["natgeo", "nasa"],
  "maxReelsPerProfile": 30,
  "newerThanDays": 90,
  "minViews": 10000,
  "skipPinned": true,
  "includeReelDetails": false
}
```

| Input | Default | What it does |
| --- | --- | --- |
| `usernames` | required | Public accounts, up to 1,000 per run. Usernames, @handles and profile links all work. `username`, `profiles`, `directUrls`, `startUrls` and `urls` are accepted too |
| `maxReelsPerProfile` | 30 | Most recent reels per profile, newest first, up to 1,000 |
| `newerThanDays` | none | Only reels posted in the last N days. Reading stops at the window edge, so older reels cost nothing |
| `minViews` | none | Only reels with at least this many views |
| `skipPinned` | true | Leave out pinned reels, which sit on top regardless of age |
| `includeReelDetails` | false | Add caption, hashtags, mentions, coauthors, collab owner, video URL, video length and exact publish time |
| `proxyConfiguration` | Apify datacenter | Leave as is |

### What data do you get back?

A real row from a test run against `natgeo` on 27 September 2026 with reel details on (signed image and video URLs shortened):

```json
{
  "username": "natgeo",
  "full_name": "National Geographic",
  "followers": 268498692,
  "is_verified": true,
  "shortcode": "DduQxrBjnsB",
  "url": "https://www.instagram.com/reel/DduQxrBjnsB/",
  "taken_at": "2026-09-26T16:00:03.000Z",
  "taken_at_source": "exact",
  "play_count": 1205771,
  "like_count": 18855,
  "comment_count": 81,
  "reach_ratio": 0.72,
  "median_play_count": 1664986,
  "median_sample_size": 24,
  "product_type": "clips",
  "is_pinned": false,
  "is_collab": false,
  "owner_username": "natgeo",
  "owner_id": "787132",
  "counts_hidden": false,
  "display_url": "https://scontent.cdninstagram.com/v/t51.82787-15/825320378_n.jpg?...",
  "caption": "When 33 miners became trapped underground in northern Chile, the whole world watched as rescuers searched for ways to bring them back to safety. \n\n#ChileanMineRescue: Race Against Time is now streaming on @DisneyPlus and @hulu.",
  "hashtags": ["ChileanMineRescue"],
  "mentions": ["DisneyPlus", "hulu"],
  "coauthors": ["natgeohistory"],
  "video_url": "https://instagram.fhyd2-2.fna.fbcdn.net/o1/v/t2/f2/m86/AQNWwxb.mp4?...",
  "video_duration": 30.04,
  "details_status": "ok",
  "scraped_at": "2026-09-27T10:59:55.108Z"
}
```

| Field | Description |
| --- | --- |
| `username` | The profile you asked for, whose reels tab this reel came from |
| `full_name`, `followers`, `is_verified` | That profile's display name, exact follower count and verified badge |
| `shortcode`, `url` | The reel's Instagram code and direct link |
| `taken_at` | When the reel was posted. `taken_at_source` says `media_id` (upload time read from the reel's id, usually a few minutes before publishing) or `exact` (publish time, with reel details on) |
| `play_count` | Views, as Instagram reports them |
| `like_count`, `comment_count` | Likes and comments at scrape time |
| `reach_ratio` | Views divided by `median_play_count`. 1.0 is a typical reel for this account |
| `median_play_count`, `median_sample_size` | Median views of the profile's non-pinned reels read in this run, and how many reels that median covers |
| `is_pinned`, `is_collab` | Pinned to the top; owned by another account with this profile as coauthor |
| `owner_username`, `owner_id` | Who owns the reel. For collab reels the username needs reel details on |
| `counts_hidden` | The owner hides counts in the Instagram app. The counts here are what Instagram still returns |
| `display_url` | Thumbnail image |
| `caption`, `hashtags`, `mentions`, `coauthors`, `video_url`, `video_duration`, `details_status` | Reel details, only when `includeReelDetails` is on |
| `scraped_at` | When the row was produced |

Fields with no value are left out of the row rather than sent as `null`.

**The run summary.** The default dataset holds reel rows only. Everything else is in the run's `OUTPUT` record (Storage, then Key-value store): a line for every profile with its status (`ok`, `partial`, `private`, `not_found`, `no_reels`, `filtered_out`, `unavailable`, `blocked`, `skipped`, `invalid_input`), how many reels were read and delivered, and a plain explanation when something did not work. None of it is billed.

### What are the limitations?

- **No share or save counts.** Instagram does not show them to logged-out visitors on any request we found, so no row carries them. Be wary of any tool that promises them without a login.
- **Private accounts return nothing.** Their reels are visible only to approved followers. They are listed in the summary as `private` and not charged.
- **Some profiles are hidden from logged-out visitors**, for example age restricted accounts. They show as `unavailable`, not charged.
- **Input is by profile.** Single reel links, hashtags and keyword search are not supported. A reel link in your list is skipped and noted in the summary.
- **Collab reels appear on every coauthor's reels tab**, just as on Instagram. `is_collab` marks them so you can filter them out.
- **Image and video URLs are signed by Instagram** and stop working after some days. Download what you need soon after the run.
- **Counts are live at scrape time.** Views keep growing for days after posting, so run on a schedule if you track them.

### What can you use it for?

**Influencer vetting.** Pull a creator's last 30 reels and look at `reach_ratio` and `median_play_count` instead of follower count. A large account whose recent reels sit far below its own median is losing its audience.

**Competitor content tracking.** Run your competitors daily with `newerThanDays: 7` and sort by `reach_ratio` to see which new reels broke out, then read the captions with reel details on.

**Benchmarks across accounts.** `reach_ratio` puts a 10,000 follower account and a 10 million follower account on the same scale, so you can rank creators by how well their content performs, not how big they are.

**Content research.** Filter with `minViews` to collect only the reels that travelled, with captions and hashtags, for a swipe file of what works in a niche.

### How do I get started?

1. Add the usernames or profile links you want in `usernames`.
2. Set `maxReelsPerProfile` (30 by default). Add `newerThanDays` or `minViews` if you only want recent or popular reels.
3. Turn on `includeReelDetails` if you need captions, coauthors or video URLs.
4. Click Start. Download the reels as JSON, CSV or Excel from the dataset, or pull them via API or MCP. Open the `OUTPUT` record to see what happened to each profile.

### Can I run it on a schedule?

Yes, with Apify Schedules, no code needed.

1. Run the actor once with the input you want repeated, then click **Save as a task**.
2. In the Apify Console, open **Schedules**, then **Create new**.
3. Pick a frequency or a cron expression such as `0 6 * * *` (daily at 6am).
4. Under **Actors or tasks to run**, add the task you saved, then save.

Each scheduled run is billed per reel exactly like a manual one. Nothing is charged for the schedule itself. Full options are in Apify's [Schedules documentation](https://docs.apify.com/platform/schedules).

### FAQ

#### How much does it cost to get the view counts of 1,000 Instagram reels?

$2.50 on Apify's Free plan, falling to $1.00 on Business and above, plus $0.005 per run. Pulling the latest 30 reels from 100 profiles in one run is 3,000 reels, or $7.51 on the Free plan. Private, missing and refused profiles, and reels your filters leave out, cost nothing.

#### Do I need an Instagram account, cookies or an API key?

No. The actor reads only what Instagram shows a logged-out visitor, so there is no account to connect and nothing of yours at risk of a ban. You only need an Apify account to run it.

#### Can I get the share count or save count of a reel?

No. Instagram does not serve share or save counts to logged-out visitors, so they are not in the output. Views, likes and comments are.

#### How many reels can I get per profile?

Up to 1,000 per profile per run, newest first, set with `maxReelsPerProfile`. Instagram serves 12 reels per request, so the default of 30 takes three requests per profile. How far back a profile goes depends on how many reels it has posted.

#### Can I get only recent reels, or only reels above a certain number of views?

Yes. `newerThanDays: 30` returns only reels from the last 30 days and stops reading as soon as it passes that point. `minViews: 100000` returns only reels with at least 100,000 views. Reels your filters leave out are never charged.

#### What does reach\_ratio mean?

It is the reel's views divided by the median views of the same profile's non-pinned reels read in the run. A value of 2.0 means the reel reached twice the account's typical audience; 0.5 means half. `median_sample_size` tells you how many reels the median is based on.

#### Why is owner\_username missing on some reels?

Those are collab reels: another account posted them with this profile as a coauthor, and they appear on both reels tabs. The reels list only gives the owner's numeric id (`owner_id`). Turn on `includeReelDetails` to get the owner's username.

#### Am I charged for private accounts or usernames that do not exist?

No. They produce no reel rows, so nothing is billed. Each one is listed in the run's `OUTPUT` record with a status of `private` or `not_found` and a short explanation.

#### Can I scrape a single reel by its URL, or reels by hashtag?

Not with this actor. It reads reels from profiles. A single reel link in your input is skipped, noted in the summary and not charged. To cover a hashtag or topic, list the accounts you care about.

#### Is it legal to scrape Instagram reel data?

The actor collects only public data that Instagram shows to any visitor without logging in. Public data can still include personal data under laws such as the GDPR and CCPA, so collect only what you have a legitimate purpose for. This is general information, not legal advice.

### Use in Claude, ChatGPT and any MCP agent

Add it to Claude Code in one line:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=themineworks/instagram-reels-views-scraper"
```

Or point any MCP client at:

```
https://mcp.apify.com/?tools=themineworks/instagram-reels-views-scraper
```

Things an agent can ask for once connected:

- "Get the last 30 reels of natgeo and nasa with their view counts, and tell me which reels beat each account's median by 3x."
- "Which of these five creators has the highest median views on reels from the last 60 days?"

Or call it programmatically with the Apify client:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/instagram-reels-views-scraper').call({
  usernames: ['natgeo', 'nasa'],
  maxReelsPerProfile: 30,
  newerThanDays: 90,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### More from The Mine Works

Browse every tool at [themineworks.com](https://themineworks.com/). Related actors for social media data:

- **[Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper)**: follower counts, bio and profile stats for a list of Instagram accounts.
- **[Threads Scraper](https://apify.com/themineworks/threads-scraper)**: posts, profiles and search on Meta Threads.
- **[Twitter / X Scraper](https://apify.com/themineworks/twitter-x-scraper)**: tweets by keyword or handle with no paid API key.

Found this useful? A quick Store review helps other buyers find it. Found a bug or want a field added? Open an issue on the actor's Apify Console page.

***

**Disclaimer:** This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. Instagram is a trademark of Meta Platforms, Inc. Use scraped public data in line with GDPR, CCPA and your local laws.

# Actor input Schema

## `usernames` (type: `array`):

Public Instagram accounts to read reels from, up to 1,000 per run. Bare usernames (nasa), @handles and profile links (https://www.instagram.com/nasa/ or .../nasa/reels/) all work. Links to a single reel or post are skipped and listed in the run summary, never charged.

## `maxReelsPerProfile` (type: `integer`):

Most recent reels to return for each profile, newest first. Instagram serves reels 12 at a time, so 30 means three requests per profile. Up to 1,000.

## `newerThanDays` (type: `integer`):

Only return reels posted within this many days. The actor stops reading a profile as soon as it passes the window, so older reels cost nothing. Leave empty for no date limit.

## `minViews` (type: `integer`):

Only return reels with at least this many views (play count). Reels below it are skipped and not charged. Views are not in date order, so the actor reads up to five times more reels per profile to find matches. Leave empty or 0 to return every reel.

## `skipPinned` (type: `boolean`):

Pinned reels sit at the top of a profile regardless of age and are usually old hits. On (the default) leaves them out, so you get the latest reels in date order. Skipped reels are not charged.

## `includeReelDetails` (type: `boolean`):

Adds the caption (with hashtags and mentions), coauthor usernames, the owner username of collab reels, the direct video URL, the video length in seconds and the exact publish time. One extra lookup per reel, so runs take longer; the price per reel does not change. A reel whose details cannot be fetched is still delivered, marked, and not charged.

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

Apify datacenter proxy is the default and is all this actor needs. Leave it as is unless you have a reason to change it.

## Actor input object example

```json
{
  "usernames": [
    "natgeo",
    "nasa"
  ],
  "maxReelsPerProfile": 30,
  "skipPinned": true,
  "includeReelDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `reels` (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 = {
    "usernames": [
        "natgeo",
        "nasa"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/instagram-reels-views-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 = {
    "usernames": [
        "natgeo",
        "nasa",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/instagram-reels-views-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 '{
  "usernames": [
    "natgeo",
    "nasa"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call themineworks/instagram-reels-views-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/instagram-reels-views-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/9NaxSPzWPySB1mpXB/builds/5VXdAam0GfZPVUNi7/openapi.json
