# Instagram Reels Scraper & API: Views, Likes & Video URLs (`s_actors/instagram-reels-scraper`) Actor

Scrape every Reel of any public Instagram profile: plays, likes, comments, date, duration, MP4 video URL, cover, audio, hashtags, mentions, collaborators, follower count and engagement rate. Date and plays filters, only-new monitoring. No login.

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

## Pricing

from $0.44 / 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

Scrape **all Reels of any public Instagram profile**: plays, likes, comments, posting time, duration, the **MP4 video URL**, cover, audio (song or original sound), hashtags, mentions, collaborators and tagged accounts, plus the profile's **follower count and an engagement rate** for every Reel.

```json
{ "profiles": ["natgeo"], "maxReelsPerProfile": 30 }
```

No Instagram login, no cookies, no browser. Give usernames, profile links or user IDs; get one row per Reel. Use it as an **Instagram Reels scraper API** for competitor analysis, influencer vetting, content research, a Reels analytics sheet, or to **download all Reels of an Instagram profile** (each row has the MP4 link).

#### What you get

Real example, 18 October 2026:

| profile | posted | plays | likes | comments | engagement, % | duration, s | collaboration |
|---|---|---|---|---|---|---|---|
| instagram | 2026-10-14 | 68,007,513 | 435,053 | 11,498 | 0.065 | 10.9 | no |
| instagram | 2026-09-30 | 107,055,272 | 876,943 | 12,936 | 0.130 | 170.1 | no |
| natgeo | 2026-10-17 | 10,689,775 | 206,218 | 3,355 | 0.078 | 8.4 | no |
| natgeo | 2026-10-15 | 1,212,172 | 49,189 | 352 | 0.018 | 30.0 | no |
| nasa | 2026-10-04 | 3,659,855 | 41,035 | 171 | 0.039 | 31.5 | yes (posted by eaglescheer) |
| nasa | 2026-09-14 | 10,119,001 | 251,379 | 2,686 | 0.243 | 40.0 | yes (posted by astro_jessica) |

Every row:

| Field | Example | What it is |
|---|---|---|
| `profile` | natgeo | the profile you asked for |
| `reelUrl`, `shortcode`, `reelId` | instagram.com/reel/DeobYzjga9x/ | the Reel |
| `caption`, `hashtags`, `mentions` | "Mobula rays sail…", \[], \["mywildlive"] | caption text, its hashtags and @mentions |
| `postedAt` | 2026-10-18T12:06:13Z | posting time (UTC) |
| `plays`, `likes`, `comments` | 1,055,883, 105,556, 278 | exact counts, as in the app (`likes` is empty when the author hides them) |
| `engagementRate`, `playsPerFollower` | 0.039, 0.004 | (likes + comments) / followers × 100, plays / followers |
| `profileFollowers` | 268,339,265 | followers of the profile |
| `durationSeconds`, `videoWidth`, `videoHeight` | 32.8, 1080, 1920 | |
| `videoUrl`, `coverUrl` | scontent…cdninstagram.com/….mp4 | the MP4 file (highest quality) and the cover image; Instagram links expire after a few days |
| `audio` | {title: "Original audio", artist: "National Geographic", isOriginal: true} | the song or original sound of the Reel, with its ID |
| `ownerUsername`, `ownerId`, `isCollab` | eaglescheer, …, true | who posted it: a collaboration on the profile's Reels tab is posted by another account |
| `coauthors`, `taggedUsers`, `locationName` | \["disneyplus", "natgeotv"] | collaborators, tagged accounts, location |
| `isPinned`, `isPaidPartnership` | false, false | pinned to the profile, marked "Paid partnership" |

The **Reels** view of the dataset shows the main table; **Video, audio, tags** shows the rest. Export to Excel, CSV, JSON or Google Sheets.

#### How to use it

1. Add profiles: `natgeo`, `@natgeo`, `https://www.instagram.com/natgeo/reels/` or the numeric ID `787132`, one per line.
2. Set **Max Reels per profile** (newest first; up to 10,000, the whole Reels tab of most accounts).
3. Optional filters: **Posted after** (a date like `2026-10-01` or a period like `7 days`), **Minimum plays**, **Skip pinned Reels**. Reels that do not pass are free, and reading stops at the first Reel older than the date.
4. Run, then open the dataset or call it from the API.

#### Why this Actor

| | This Actor | Typical Reels scrapers |
|---|---|---|
| Login, cookies | none | some need your session |
| Counts | exact plays, likes, comments | sometimes rounded or missing plays |
| Engagement | engagement rate and plays per follower in every row | followers in a separate run |
| Collaborations | marked, with the real author | mixed in silently |
| MP4 link, audio | included, no add-on | paid add-ons |
| Monitoring | only-new mode for scheduled runs | no |
| Price | $0.58 per 1,000 Reels | $0.59-2.60 per 1,000, often + start fees |

#### Monitor profiles for new Reels

Save your input as a task, schedule it every hour or day and turn on **Only new Reels since the previous run**: each run returns only the Reels posted since the last one (the first run returns everything and remembers it). A run with nothing new stops after one request and costs almost nothing. Send new rows to Google Sheets, Slack, email or a webhook with an Apify integration.

#### Pricing

Pay per result, no subscription:

| Event | Price | When |
|---|---|---|
| Reel | $0.58 per 1,000 ($0.52 on Scale, $0.44 on Business) | each Reel in the results |
| New profile lookup | $0.004 | rare: a profile with embedding turned off that nobody looked up in the last 3 days, when Instagram shows its page only to a residential IP; other profiles are free |
| Run start | $0.001 | |

Examples: the last 30 Reels of one profile = **$0.02**; 100 Reels of each of 10 competitors = **$0.58**; a daily only-new check of 20 profiles posting one Reel a day ≈ $0.38 a month.

#### FAQ

**Do I need an Instagram account?** No. The Actor reads the public Reels tab the way a logged-out visitor sees it.

**Private accounts?** Not supported: their Reels are not public. The run log lists them.

**Why does a profile show Reels posted by other accounts?** Those are collaborations: Instagram shows them on both profiles. `isCollab` is true and `ownerUsername` is the author; filter them out if you need only the profile's own Reels.

**Photos and carousels?** This Actor reads the Reels tab, where every item is a video.

**How many Reels can I get?** The whole Reels tab: 12 Reels per request, so 1,000 Reels take about 84 requests and a minute or two.

**Can I download the videos?** Each row has `videoUrl`, the MP4 file. Instagram's links expire after a few days, so download them soon after the run.

#### Use with the API and AI agents

Run it from your code or an AI agent with the Apify API, the Apify MCP server or the Python and JavaScript clients; read the results from the dataset (`?view=reels` for the main table).

#### Other social media tools

| Tool | What it does |
|---|---|
| [Instagram Influencer Finder](https://apify.com/s_actors/instagram-influencer-email-finder) | Instagram creators and local businesses by keyword and city, with emails from the bio and website, phones and engagement |
| [Instagram Profile Scraper](https://apify.com/s_actors/instagram-profile-scraper) | Bio, followers, posts count, emails and phones from the bio, engagement rate and follower change of any profile |
| [Instagram Trending Audio](https://apify.com/s_actors/instagram-trending-audio) | Reels sounds trending right now in any country, with Reels counts and daily growth |
| [Instagram Audio Scraper](https://apify.com/s_actors/instagram-audio-scraper) | The Reels using any sound or song, with its exact Reels count, growth per day and Spotify link |
| [Instagram Post Scraper](https://apify.com/s_actors/instagram-post-scraper) | Any post, Reel or carousel by link with the exact posting time, likes, comments and plays |
| [Instagram Video Downloader](https://apify.com/s_actors/instagram-video-downloader) | Reels, videos and carousels as MP4 files in 1080p from links or whole profiles, one ZIP |
| [Instagram Reel Transcript](https://apify.com/s_actors/instagram-reel-transcript) | Reels and videos to text by link or profile: AI transcript in 99 languages, hook, SRT and VTT |
| [TikTok Profile Scraper](https://apify.com/s_actors/tiktok-profile-scraper) | All videos of TikTok creators with exact stats and MP4 links |
| [YouTube Shorts Scraper](https://apify.com/s_actors/youtube-shorts-scraper) | Shorts of any YouTube channel with views and likes |

# Actor input Schema

## `profiles` (type: `array`):

Usernames (natgeo or @natgeo), profile links (https://www.instagram.com/natgeo/ or .../natgeo/reels/) or numeric user IDs, one per line. Public profiles only.

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

The newest N Reels of each profile (pinned Reels come first, as in the app). Up to 10,000: the whole Reels tab of most accounts.

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

Only Reels posted after this date (2026-10-01) or within this period (24 hours, 7 days, 2 weeks, 3 months). Reading stops at the first older Reel, so a short period is fast and cheap.

## `minPlays` (type: `integer`):

Only Reels played at least this many times. Empty = every Reel.

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

Leave out the Reels pinned to the top of the profile (they are often old).

## `onlyNew` (type: `boolean`):

Return only Reels not returned by your earlier runs with the same monitor name. The first run returns everything and remembers it.

## `monitorName` (type: `string`):

Separate memory for separate schedules (for example 'competitors' and 'clients'). Empty = default.

## `maxConcurrency` (type: `integer`):

How many profiles are read in parallel.

## `debugLog` (type: `boolean`):

Log every retried request.

## Actor input object example

```json
{
  "profiles": [
    "natgeo"
  ],
  "maxReelsPerProfile": 30,
  "skipPinned": false,
  "onlyNew": false,
  "maxConcurrency": 5,
  "debugLog": false
}
```

# Actor output Schema

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

One row per Reel with plays, likes, comments and engagement.

## `details` (type: `string`):

MP4 link, audio, hashtags, mentions, collaborators and the owner.

## `all` (type: `string`):

Every field of every row.

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

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

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

```

## MCP server setup

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