# Instagram Reel Scraper (`futurizerush/instagram-reel-scraper`) Actor

Collect public Instagram Reels from usernames, profile URLs, profile Reels pages, and Reel URLs. Exports captions, creator details, thumbnails, selected metrics, and media details when available.

- **URL**: https://apify.com/futurizerush/instagram-reel-scraper.md
- **Developed by:** [Rush](https://apify.com/futurizerush) (community)
- **Categories:** Social media
- **Stats:** 1 total users, 0 monthly users, 71.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Instagram Reel Scraper

Collect public Instagram Reels from usernames, profile URLs, profile Reels pages, and direct Reel URLs. The Actor exports spreadsheet-friendly rows with captions, creator details, hashtags, mentions, thumbnails, source links, available public engagement fields, and selected video metadata when Instagram exposes them.

[Explore more social media scrapers](https://apify.com/futurizerush?fpr=rush)

### Features

- Collect public Reels from Instagram usernames, profile URLs, profile Reels pages, and direct Reel URLs.
- Export one spreadsheet-friendly row per Reel for dashboards, exports, and automation workflows.
- Include public creator details, captions, hashtags, mentions, thumbnails, engagement fields, and video metadata when available.
- Mark rows that hold only partial public details, with the reason, so incomplete media is never mistaken for a full result.
- Keep every result that was collected, and report the outcome of each input in the run summary.
- Avoid inventing rows for unavailable inputs and report incomplete sources clearly.

### What You Can Scrape

- Public Instagram profile URLs, such as `https://www.instagram.com/nasa/`
- Instagram profile Reels pages, such as `https://www.instagram.com/nasa/reels/`
- Usernames, such as `nasa`
- Direct Reel URLs, such as `https://www.instagram.com/reel/DZYvGYIv1nr/` or `https://www.instagram.com/reels/DZYvGYIv1nr/`

A direct Reel URL produces a full row when Instagram returns the Reel's public details. Optional fields can still be `null` when Instagram does not expose them. If core details cannot be verified, any available preview row is marked with `isPartial: true` and carries a `partialReason`, so automations can filter those rows out instead of treating them as full results.

### Input

| Field | Type | Description |
|---|---:|---|
| `startUrls` | array | Instagram usernames, profile URLs, profile Reels page URLs, or direct Reel URLs. Range: `1` to `100` inputs. |
| `maxReelsPerProfile` | integer | Maximum number of recent public Reel rows to save for each profile-style input. Default: `30`. Range: `1` to `200`. Each direct Reel URL can produce up to one row. |

```json
{
  "startUrls": ["nasa", "https://www.instagram.com/nasa/reels/"],
  "maxReelsPerProfile": 10
}
```

### How to Use

1. Add one or more Instagram usernames, profile URLs, profile Reels page URLs, or direct Reel URLs.
2. Choose the maximum number of recent public Reel rows to save for each profile-style input.
3. Start the Actor and download results from the dataset.

### Output

Each dataset row is one Reel result. Output is designed to stay spreadsheet-friendly so it is easy to filter, export, and use in dashboards or automation workflows.

The dataset preview groups the columns into 📋 Overview and 🎬 Media assets. Export the dataset to work with every column at once.

For profile inputs, rows can include Reels owned by the profile or associated with it through public collaboration or tag information.

| Field | Description |
|---|---|
| `inputValue` | Original input value that produced the row. |
| `sourceType` | `profile` or `reel`. |
| `profileUsername`, `profileRelation` | For profile inputs, shows the requested profile and how the Reel is associated with it. |
| `reelId`, `mediaPk`, `shortCode`, `reelUrl`, `postUrl`, `type` | Reel references and public Reel links. |
| `caption`, `captionIsEdited`, `captionCreatedAt`, `captionCreatedAtUnix`, `hashtags`, `mentions` | Public caption text, caption timing, and extracted tags when available. |
| `ownerUsername`, `ownerFullName`, `ownerId`, `ownerProfileUrl`, `ownerProfilePicUrl`, `ownerIsVerified` | Public creator details and profile links when available. |
| `timestamp`, `timestampUnix` | Public publish time when available. |
| `likesCount`, `commentsCount`, `playsCount` | Public engagement fields when Instagram returns them. |
| `videoDuration`, `videoWidth`, `videoHeight`, `dimensionsWidth`, `dimensionsHeight` | Public duration, selected video dimensions, and original media dimensions when available. |
| `thumbnailUrl`, `displayUrl`, `imageUrls`, `videoUrl`, `audioUrl` | Public media URLs when available. The thumbnail and selected display image may differ. |
| `hasAudio`, `audioType`, `audioTitle`, `audioArtist`, `audioId`, `audioDuration`, `usesOriginalAudio`, `shouldMuteAudio`, `originalLanguage` | Public audio and language information when available. Audio reference fields help group Reels using the same public sound when available. |
| `taggedUsers`, `taggedUserDetails`, `coauthorUsernames`, `coauthorDetails` | Public collaborators and tagged users when available. |
| `isPaidPartnership`, `likeAndViewCountsDisabled`, `commentsDisabled` | Public availability and content indicators when available. |
| `isPartial`, `partialReason` | Whether the row contains only partial public details. |
| `scrapedAt` | UTC time when the row was collected. |

#### Example Output

The example below is illustrative and uses fictional placeholder data.

```json
{
  "inputValue": "examplecreator",
  "sourceType": "profile",
  "profileUsername": "examplecreator",
  "profileRelation": "owner",
  "shortCode": "ABC123example",
  "reelUrl": "https://www.instagram.com/reel/ABC123example/",
  "postUrl": "https://www.instagram.com/p/ABC123example/",
  "caption": "New product launch highlights #launch @partner",
  "captionIsEdited": false,
  "captionCreatedAt": "2026-06-01T12:00:03+00:00",
  "captionCreatedAtUnix": 1780315203,
  "hashtags": ["#launch"],
  "mentions": ["@partner"],
  "imageUrls": ["https://example.com/thumbnail.jpg"],
  "taggedUsers": [],
  "taggedUserDetails": [],
  "coauthorUsernames": [],
  "coauthorDetails": [],
  "ownerUsername": "examplecreator",
  "ownerFullName": "Example Creator",
  "timestamp": "2026-06-01T12:00:00+00:00",
  "likesCount": 1200,
  "commentsCount": 48,
  "playsCount": 25000,
  "videoDuration": 18.5,
  "thumbnailUrl": "https://example.com/thumbnail.jpg",
  "videoUrl": "https://example.com/video.mp4",
  "hasAudio": true,
  "audioDuration": 18.5,
  "originalLanguage": "en",
  "isPartial": false,
  "partialReason": null,
  "scrapedAt": "2026-06-14T00:00:00+00:00"
}
```

### Good Use Cases

- Social listening and campaign monitoring
- Creator and competitor content research
- Public Reel discovery for reporting workflows
- Hashtag and mention analysis
- Building datasets for manual review, QA, and trend tracking

### Data Quality Notes

Instagram may omit some public fields for a given Reel or profile, and availability can change over time. When a field is not publicly available, the Actor returns `null` or an empty array instead of inventing data.

The Actor does not require an Instagram login, passwords, or private account access. Sources that do not expose public data are not represented as full dataset rows.

One input being unavailable does not affect the inputs after it. If Instagram stays unavailable across several inputs in a row, the run stops early rather than working through the rest, and every input it did not reach is listed in the run summary so you know exactly what to re-run.

### FAQ

#### Q: Can it scrape private Reels?

No. It collects public data only.

#### Q: Why are some rows marked as partial?

If important media details cannot be verified, the Actor saves the available preview with `isPartial: true` and a clear `partialReason`. Filter on `isPartial` to keep only fully verified rows.

#### Q: When does a run finish as failed?

Only when no results could be saved at all. If any results were collected, the run finishes successfully and keeps them, and the run summary reports the outcome of every source as `completed`, `partial`, `skipped`, or `failed`. Repeated inputs are merged before collection, so the summary lists each unique source once.

#### Q: Why are some engagement fields empty?

Instagram does not always expose every count for every public Reel. Empty fields mean the value was not publicly available during the run.

#### Q: Does it download video files?

No. It saves public media URLs when Instagram exposes them during the run.

#### Q: Can I use profile URLs and direct Reel URLs together?

Yes. You can mix usernames, profile URLs, profile Reels page URLs, and direct Reel URLs in the same run.

### Disclaimer

This Actor collects publicly available Instagram data. Availability of public fields can change over time. You are responsible for using the exported data in accordance with applicable laws, platform terms, and your own internal policies.

Keywords: Instagram Reel Scraper, Instagram Reels, Instagram scraper, Reels scraper, social media scraping, creator research, hashtag analysis, mention analysis, Apify Actor, public Instagram data, Claude Code, OpenClaw, Gemini, Antigravity, Codex, ChatGPT

# Actor input Schema

## `startUrls` (type: `array`):

Add Instagram usernames, profile URLs, profile /username/reels/ pages, or direct /reel/{code}/ and /reels/{code}/ URLs. Examples: nasa, https://www.instagram.com/nasa/reels/, https://www.instagram.com/reels/DZYvGYIv1nr/

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

Only applies to usernames, profile URLs, and profile /username/reels/ page inputs. Choose the maximum number of recent public Reel rows to save for each profile-style input. Each direct Reel URL can produce up to one row.

## Actor input object example

```json
{
  "startUrls": [
    "nasa",
    "nike",
    "instagram"
  ],
  "maxReelsPerProfile": 30
}
```

# Actor output Schema

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

All saved public Reel results.

# 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 = {
    "startUrls": [
        "nasa",
        "nike",
        "instagram"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("futurizerush/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 = { "startUrls": [
        "nasa",
        "nike",
        "instagram",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("futurizerush/instagram-reel-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "nasa",
    "nike",
    "instagram"
  ]
}' |
apify call futurizerush/instagram-reel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=futurizerush/instagram-reel-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LxcbaztcTQKZ6iR3O/builds/phLYb6wIoxNYg0l4b/openapi.json
