# Instagram Reel Scraper — Plays, Audio & AI Transcripts (`yugenox/instagram-reel-scraper`) Actor

Scrape Instagram reels from public profiles, reel links and audio pages (reels by audio): plays, likes, comment count, caption, hashtags, audio, duration, date and the creator's follower count. Optional AI transcripts at $0.004 per minute. $1.20 per 1,000 reels. No login or cookies.

- **URL**: https://apify.com/yugenox/instagram-reel-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Social media, Videos, Developer tools
- **Stats:** 13 total users, 10 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 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 Reel Scraper — Plays, Audio & Transcripts, No Login

Scrape Instagram reels from any public profile, reel link or audio page. Each reel comes with its **plays, likes, comment count, caption, hashtags, audio, duration, date, and the creator's username and follower count**. You can also turn on **transcripts**: the spoken words of each reel as text, in any language. You don't need an account, cookies or an API key.

### Why this one

- **Built to finish.** It runs on the same engine as [yugenox/instagram-scraper](https://apify.com/yugenox/instagram-scraper), and 100 of that Actor's 100 public runs in the 30 days to 2026-10-03 succeeded (Apify Store run stats). Every run ends with the reels it saved and a plain status message. A short timeout, a blocked request or an unexpected error stops the run early and keeps what was read, instead of failing it.
- **Transcripts when you want them.** Speech to text for $0.004 per minute of audio, in any language, up to 15 minutes per reel. Reels set to a licensed song have no speech, so they are skipped free.
- **Fast.** In a test run, 400 reels from one profile took 15 seconds.
- **Only new reels on a schedule.** Monitor mode remembers what each profile, link or audio page returned in earlier runs and returns only its new reels. Reels an input already delivered are never charged again.
- **No login, no cookies, no account risk.** It only reads what Instagram shows to any visitor.

### Input

| Field | What it does |
|---|---|
| `reelUrls` | Usernames (`nasa`, `@nasa`), profile URLs (their reels tab, newest first), reel URLs (`/reel/…/`) or audio pages (`/reels/audio/<id>/`). |
| `maxReels` | Hard cap on reels for the whole run. This limits your cost. Left empty, it is 100, or `maxReelsPerProfile` × the number of profiles and links when you set only that. |
| `maxReelsPerProfile` | Cap per profile or audio page, so one big creator can't use up the run. |
| `newerThan` | Only reels after a date (`2026-09-01`) or within a period (`7 days`, `2 weeks`). On profiles, paging stops at the first older reel. |
| `skipPinned` | Leave out reels pinned to the top of a profile's reels tab. |
| `includeTranscript` | Add the spoken words of each reel (`transcript`, `transcriptLanguage`). Off by default. |
| `monitor`, `monitorKey` | For scheduled runs: return only reels earlier runs didn't save. |

```json
{
  "reelUrls": ["https://www.instagram.com/nasa/", "https://www.instagram.com/reel/DeCPVhERA8e/"],
  "maxReels": 50,
  "newerThan": "30 days",
  "includeTranscript": true
}
```

Hashtag, location and keyword pages are not accepted here, because they mix photos with videos. Use [yugenox/instagram-scraper](https://apify.com/yugenox/instagram-scraper) for those.

Inputs written for apify/instagram-reel-scraper work here too: `username`, `resultsLimit` (per profile), `onlyPostsNewerThan`, `skipPinnedPosts` and `includeTranscript`. As there, `resultsLimit` alone caps each profile, not the run: 10 profiles with `resultsLimit: 50` return up to 500 reels.

### Output

Each row is one reel. A post link you paste yourself that turns out to be a photo or a carousel (a `/p/…/` link, or a `/reel/…/` link that is really a photo post) is skipped and not charged; the run report marks it `not_video`. Here is an example row, shortened:

```json
{
  "url": "https://www.instagram.com/reel/DeCPVhERA8e/",
  "code": "DeCPVhERA8e",
  "createdAt": "2026-10-03T14:10:18.000Z",
  "caption": "Room with a view. Check out my new digs as I camp out in Dragon until our departure…",
  "hashtags": [],
  "mentions": ["iss"],
  "likeCount": 39409,
  "commentCount": 475,
  "video": { "playCount": 832825, "duration": 27.561, "url": "https://scontent…mp4", "width": 720, "height": 1280 },
  "audio": { "id": "28373637802328796", "title": "Original audio", "artist": "astro_jessica", "isOriginal": true },
  "owner": { "username": "astro_jessica", "fullName": "Jessica Meir", "isVerified": true, "followerCount": 721592 },
  "coowners": [{ "username": "nasa" }, { "username": "iss" }],
  "engagementRate": 5.5272,
  "isPinned": false,
  "transcript": "Good morning from my dragon lair. Now that crew 13 has arrived…",
  "transcriptLanguage": "en"
}
```

Rows also carry `image` (the cover), `location`, `taggedUsers`, `isPaidPartnership`, `productType` and `source` (which of your inputs found the reel). `engagementRate` is likes plus comments divided by the creator's followers, in percent.

**Plays:** `video.playCount` is Instagram's play count, the number on a profile's reels tab. Reels from a profile or an audio page have it. Instagram doesn't show a play count on a single reel's page to logged-out visitors, so for a pasted reel URL `playCount` is `null`. Paste the creator's profile instead to get plays.

**Share counts are not included.** This Actor does not return how many times a reel was shared.

### Pricing

**$1.20 per 1,000 reels on the Free and Starter plans, less on bigger plans**, plus a $0.001 start fee per run.

| Your Apify plan (discount tier) | Per reel | Per 1,000 reels |
|---|---:|---:|
| Free (FREE) | $0.0012 | $1.20 |
| Starter (BRONZE) | $0.0012 | $1.20 |
| Scale (SILVER) | $0.0010 | $1.00 |
| Business (GOLD) | $0.0009 | $0.90 |
| Enterprise (PLATINUM, DIAMOND) | $0.0009 | $0.90 |

- **Start fee:** $0.001 per run (charged per GB of memory; the default 512 MB is one).
- **Transcripts (optional):** $0.004 per started minute of audio. A 27-second reel is one minute. Reels with no speech (a licensed song) and reels longer than 15 minutes are not transcribed and not charged. If transcripts are unavailable on a run, the status message says so and no transcript minutes are charged.
- **You pay only for reels saved.** Reels older than `newerThan`, and reels monitor mode already delivered, are free.
- **Your spending limit is respected up front.** The run stops at the number of reels your limit covers.
- Free Apify plans are limited to 100 reels per run.
- **Example:** 500 reels on Starter cost $0.60 + $0.001. With transcripts of 30-second reels, add 500 × $0.004 = $2.00.

### FAQ

**Do I need an Instagram account or cookies?** No.

**Why is `playCount` empty for some reels?** A pasted reel URL has no play count (see Output). Reels from a profile, pinned ones included, and reels from an audio page have it. If you paste a reel URL and also its audio page, the reel is saved once, from whichever input reaches it first. When that is the URL, the row has no play count. To get its plays, leave the reel URL out.

**Can the same reel come back twice?** No. When your inputs overlap (a reel URL plus its own audio page, two audio pages that both list it, or a collab reel on two co-owners' profiles you both scrape), each reel is saved and charged once per run, for the input that reached it first. The run report counts the repeats it skipped (`duplicatesSkipped`). In monitor mode, a reel delivered through one input is remembered for every input that reached it.

**What if I paste a link to a photo or carousel?** It is skipped and not charged, and the run report marks that input `not_video`. This Actor only returns videos and reels. Use [yugenox/instagram-post-scraper](https://apify.com/yugenox/instagram-post-scraper) for photos and carousels.

**Why do I get only 12 reels from an audio page?** Instagram shows only the first 12 reels of an audio page to logged-out visitors. The run report marks such a page `capped`.

**Can I get only the new reels each day?** Yes. Schedule the Actor with `monitor: true` (and a `monitorKey` per watchlist), or with `newerThan: "24 hours"`.

**What about private accounts?** Private accounts are skipped. The run report marks them `private`, and nothing is charged for them.

**Which languages do transcripts support?** Any spoken language. `transcriptLanguage` gives the detected language code.

**Is it legal to scrape Instagram?** This Actor only collects publicly available data: reels and the public profiles of the accounts that posted them, which anyone can see without logging in. Collecting publicly available data is generally legal, but you're responsible for how you use it. Results can include usernames, names, captions and transcripts from public accounts, and that counts as personal data. You must follow privacy laws such as GDPR, PIPEDA and CCPA, as well as Instagram's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

If you contact creators you find, anti-spam laws apply: CASL in Canada, CAN-SPAM in the US, and GDPR/ePrivacy in the EU. Get consent before sending commercial messages.

**Does it access any private data?** No. Everything comes from pages Instagram shows to any visitor without logging in. It never uses a login, never touches private or restricted accounts, and never reaches password-protected areas.

### Use it from code, n8n, Make or an AI agent

```bash
curl -X POST "https://api.apify.com/v2/acts/yugenox~instagram-reel-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"reelUrls":["https://www.instagram.com/nasa/"],"maxReels":20}'
```

- **n8n / Make:** use the Apify node, choose "Run Actor and get dataset items" and pick `yugenox/instagram-reel-scraper`.
- **MCP (Claude, Cursor and others):** add `https://mcp.apify.com?actors=yugenox/instagram-reel-scraper` as an MCP server.

### More Instagram tools

- [Instagram Scraper](https://apify.com/yugenox/instagram-scraper): posts, reels, profiles, hashtags, locations and audio, with AI summaries.
- [Instagram Comments Scraper](https://apify.com/yugenox/instagram-comments-scraper): every public comment on posts and reels.
- [Instagram Reels Transcript](https://apify.com/yugenox/instagram-reels-transcript): transcripts first, $0.004 per minute.
- [Instagram Trends](https://apify.com/yugenox/instagram-trends-scraper): Instagram's own trending keywords and rising profiles.
- [Instagram Influencer Analytics](https://apify.com/yugenox/instagram-creator-analytics): median reel plays, engagement and brand deals per creator.

# Actor input Schema

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

Instagram usernames (nasa or @nasa), profile URLs (https://www.instagram.com/nasa/ — their reels tab is scraped, newest first), reel URLs (https://www.instagram.com/reel/…/) or audio pages (https://www.instagram.com/reels/audio/<id>/). Hashtag and location pages are not accepted here because they mix photos with videos.

## `maxReels` (type: `integer`):

Stop after this many reels across the whole run — a hard cap on the cost. Left empty: 100, or "Max reels per profile" × the number of profiles and links when only that is set. Free Apify plans get up to 100 per run.

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

Cap for each profile or audio page, so one big creator can't use up the whole run. Leave empty for no per-profile cap.

## `newerThan` (type: `string`):

A date (YYYY-MM-DD) or a period such as "7 days", "2 weeks" or "3 months". On profiles, paging stops at the first older reel, so old reels cost nothing.

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

Leave out reels pinned to the top of a profile's reels tab (they are often old).

## `includeTranscript` (type: `boolean`):

Add the spoken words of each reel as text, in any language, up to 15 minutes per reel. Billed per started minute of audio ($0.004 per minute). Reels set to a licensed song have no speech and are skipped free.

## `monitor` (type: `boolean`):

For scheduled runs: remember the reels earlier runs saved and return only new ones. Reels already seen are skipped and not charged, and profile paging stops at the newest reel delivered last time. The memory is a key-value store in your own Apify account.

## `monitorKey` (type: `string`):

Names this watchlist's memory (letters, digits and dashes). Use a different name for each schedule. Default: "default".

## Actor input object example

```json
{
  "reelUrls": [
    "https://www.instagram.com/nasa/"
  ],
  "maxReels": 5,
  "skipPinned": false,
  "includeTranscript": false,
  "monitor": false
}
```

# Actor output Schema

## `results` (type: `string`):

Every reel this run saved, as JSON.

## `resultsCsv` (type: `string`):

The same reels as CSV, ready for a spreadsheet.

## `resultsTable` (type: `string`):

The same reels narrowed to the key columns (the "reels" view).

# 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 = {
    "reelUrls": [
        "https://www.instagram.com/nasa/"
    ],
    "maxReels": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/instagram-reel-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 = {
    "reelUrls": ["https://www.instagram.com/nasa/"],
    "maxReels": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/instagram-reel-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 '{
  "reelUrls": [
    "https://www.instagram.com/nasa/"
  ],
  "maxReels": 5
}' |
apify call yugenox/instagram-reel-scraper --silent --output-dataset

```

## MCP server setup

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