# Instagram Reels Scraper | Profile Videos & Engagement (`arabiainsights/instagram-profile-video-scraper`) Actor

Scrape Instagram profile videos and direct Reels into JSON, CSV or Excel. Export creator profiles, captions, dates and available engagement metrics in bulk.

- **URL**: https://apify.com/arabiainsights/instagram-profile-video-scraper.md
- **Developed by:** [Arabia Insights](https://apify.com/arabiainsights) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 reels

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/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 for profile videos and engagement data

Scrape Instagram profile videos and individual Reels into a structured dataset. Collect creator profiles, captions, publication dates, available engagement metrics, thumbnails, and temporary video links. Use Instagram Reels data exports for content research, creator comparisons, campaign reporting, and recurring monitoring.

The Actor works with public data without an Instagram login. A requested limit is a maximum: Instagram may return fewer Reels. Standard photo posts, Stories, comments, and follower lists are not supported.

### Get your first result

1. Add an Instagram username or public profile URL to **Profiles**.
2. Choose the maximum number of Reels per profile. Start with a small limit.
3. Run the Actor, open **Results**, and download the format you need.
4. Check **Run summary** for failed targets, delivered totals, and stop reasons.

```json
{
    "profiles": ["instagram"],
    "maxReelsPerProfile": 10
}
```

For bulk Reel engagement metrics, provide several profiles or add individual `https://www.instagram.com/reel/CODE/` URLs under `reelUrls`. You can combine profile and direct Reel inputs. Duplicate Reels are skipped within a run.

### Inputs and settings

| Setting              | What it does                                                                                                   |
| -------------------- | -------------------------------------------------------------------------------------------------------------- |
| `profiles`           | Up to 100 usernames, @usernames, profile URLs, or profile `/reels/` URLs.                                      |
| `reelUrls`           | Up to 1,000 direct Reel URLs. Use the canonical `/reel/CODE/` link.                                            |
| `maxReelsPerProfile` | Between 1 and 1,000 accepted Reels for each profile; default 100. Profile rows do not count toward this limit. |
| `profilesOnly`       | Return profile metadata without Reels. Cannot be combined with `reelUrls`.                                     |
| `fromDate`, `toDate` | Inclusive UTC dates in `YYYY-MM-DD` format. Items without usable dates are excluded when filtering by date.    |

#### Advanced settings

`proxyCountry` selects the country used to access Instagram; the default is `US`. `locale` sets a language preference, defaulting to `en-US`. `maxConcurrency` controls how many targets run at once, from 1 to 5; lower it if requests are being limited.

This Actor requires Apify Residential Proxy. Custom proxy URLs and other proxy groups are rejected. If you supply a country in both proxy settings, the values must match. Availability may differ by region.

### Results and fields

The dataset contains two row types. Profile inputs can produce a profile row before their Reel rows. Direct Reel inputs produce Reel rows. Profiles-only runs produce no Reels. Use `itemType` to distinguish them; total dataset rows are not the number of Reel results.

These shortened examples illustrate retained fields. Actual rows include the other applicable fields, with `null` when a value is unavailable.

```json
{
    "itemType": "profile",
    "username": "example_creator",
    "profileUrl": "https://www.instagram.com/example_creator/",
    "biography": "Travel and photography",
    "followerCount": 5000,
    "verified": false,
    "requestedUsername": "example_creator"
}
```

```json
{
    "itemType": "reel",
    "reelId": "Example123",
    "reelUrl": "https://www.instagram.com/reel/Example123/",
    "description": "A new adventure #travel",
    "postedAt": "2026-09-01T10:00:00.000Z",
    "viewCount": 12000,
    "likeCount": 500,
    "commentCount": 0,
    "shareCount": null,
    "requestedUsername": "example_creator"
}
```

| Field group    | Included data                                                                                                            |
| -------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Identity       | Reel ID and URL, profile identity, author, requested username and requested profile URL where applicable.                |
| Content        | Description, hashtags, mentions, pinned status, publication time and scrape time.                                        |
| Media          | Duration, dimensions, thumbnails, available video URL, and audio ID, title and artist.                                   |
| Engagement     | Views, likes, comments, shares, saves and reposts when publicly available.                                               |
| Profile        | Biography, bio links, follower/following/media counts, verification and business metadata.                               |
| Public contact | Contact details already publicly exposed on the profile, subject to availability and safeguards. No external enrichment. |

`null` means unavailable; zero is a reported zero. Metric availability describes whether a value was returned, not a guarantee of accuracy. Counts can change after collection. Media URLs can expire and are not permanent downloads or archived files.

### Export, API and scheduling

Use the dataset export controls to download JSON, CSV, or Excel. JSON preserves nested author, audio, and link objects. Choose fields when exporting to a spreadsheet. The dataset API provides the same stored customer records for automated reporting and data pipelines.

Save an Actor task to reuse inputs, then attach an Apify schedule for recurring collection. Each run is a separate snapshot, so compare timestamps and deduplicate across runs in your own workflow. Open the Actor's API tab for authenticated invocation examples and dataset endpoints.

### Pricing

The Actor fee is **$1.49 per 1,000 delivered Reels** ($0.00149 per Reel). **Apify platform usage is charged separately**, including compute, storage, and residential proxy traffic. Your total cost is the Reel fee plus platform usage; it can exceed the headline rate substantially on small runs. Check the Pricing tab and run usage details before running large jobs.

Profile metadata rows have no Actor fee, and there is no Actor startup fee. Duplicate Reels skipped within a run are not charged again. Profiles-only runs still incur platform usage, and an empty result does not mean zero platform usage. Do not estimate charges by counting mixed dataset rows: the Run summary reports delivered Reels and confirmed charged Reels separately. A spending limit can stop a run before the requested result count is reached.

### Limits and troubleshooting

Instagram can restrict access, stop returning older Reels, or return fewer records than requested. Private, missing, age-restricted, or region-restricted targets may fail. Retry later, reduce concurrency, or use another public target. Partial runs preserve delivered results; review target outcomes before treating a dataset as sufficient for your analysis.

#### Can I collect a private profile with cookies?

No. This release supports anonymous public-data collection. Non-empty legacy `sessionCookies` inputs are rejected; remove that setting before running.

#### Why are metrics missing or fewer Reels returned?

Instagram does not expose all metrics on all content. Date bounds, duplicates, the requested limit, and access restrictions can reduce output. Read each target's stop reason and the summary's delivered totals.

#### Migration from version 0.2

Version 0.3 removes `source` and `accessMode` from dataset rows. Run summary schema version 3 removes credential diagnostics and internal collection statistics while keeping target outcomes, public metric availability, and result totals. Update consumers that required the removed fields. Existing datasets are unchanged.

### Support

Report problems through the [Actor Issues page](https://apify.com/arabiainsights/instagram-profile-video-scraper/issues). Include the run ID, expected behavior, and a public example target. Do not include credentials or private data. Collect and use public data responsibly and respect applicable rights and platform terms.

# Actor input Schema

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

One to 100 Instagram usernames, @usernames, or supported public profile URLs. Provide this or 'Reel URLs' (at least one is required).

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

Up to 1,000 direct Instagram /reel/CODE/ URLs. Mix with profiles; duplicates are skipped. Standard photo /p/ URLs are rejected.

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

Maximum accepted Reel items for each unique profile after filtering and deduplication. Profile metadata rows are emitted separately and do not count toward this limit.

## `fromDate` (type: `string`):

Inclusive UTC lower date bound.

## `toDate` (type: `string`):

Inclusive UTC upper date bound.

## `profilesOnly` (type: `boolean`):

Return profile metadata without Reels. Cannot be combined with Reel URLs.

## `proxyCountry` (type: `string`):

Country used to access Instagram (two-letter country code). Availability can differ by region.

## `locale` (type: `string`):

Language preference for Instagram data, for example en-US.

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

Number of targets processed at once (1–5). Lower this if Instagram limits requests.

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

Apify Residential Proxy only; runtime validation rejects custom URLs and other groups.

## Actor input object example

```json
{
  "profiles": [
    "instagram"
  ],
  "maxReelsPerProfile": 100,
  "profilesOnly": false,
  "proxyCountry": "US",
  "locale": "en-US",
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Normalized profile and Reel metadata in the default Dataset overview.

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

Sanitized profile and reel outcomes, counters, stop reasons, and fatal status.

# 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": [
        "instagram"
    ]
};

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

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

```

## MCP server setup

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