# Instagram Reels Scraper (`agentx/instagram-reels-scraper`) Actor

Collect public Instagram Reels, posts, IGTV-style media, and carousels from one username. Download post media and return 62-field records with storage URLs and structured metadata.

- **URL**: https://apify.com/agentx/instagram-reels-scraper.md
- **Developed by:** [AgentX](https://apify.com/agentx) (community)
- **Categories:** Social media, Agents, Integrations
- **Stats:** 46 total users, 5 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.51 / 1,000 results

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/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 collects public Instagram Reels, feed posts, IGTV-style media, and carousels from one username and returns consistent records for research, monitoring, and data workflows.

- Two required inputs: one bare `username` and `max_results`
- Exactly 62 documented top-level fields in every published Dataset row
- Downloads every post image, video, and available cover to the run Key-Value Store
- Captions, hashtags, mentions, engagement snapshots, owner context, media parts, audio, location, and relationship signals
- Pay-per-event pricing from $0.00390 per Result on the FREE tier, plus the Actor Start event

[Run a one-result test](https://apify.com/agentx/instagram-reel-scraper) · [View the Actor API](https://apify.com/agentx/instagram-reel-scraper/api)

Start with one result. Public availability and nullable fields are source-dependent, while downloaded post media consumes run storage, so the smallest run is the safest way to confirm fit before scaling.

### Why Choose This API

Instagram Reel Scraper is designed for workflows that need a normalized account-post Dataset rather than manual profile review. One run accepts one public username, follows the available account timeline, and publishes up to the requested number of successfully resolved posts.

The same 62-field contract covers single images, feed videos, Reels, older IGTV-style records, and image, video, or mixed carousels. This makes exports easier to compare across post formats without treating a Reel, carousel, and feed image as unrelated record types.

Choose this Actor when you need recent public account content with post identity, owner details, caption text, publish time, engagement snapshots, media structure, optional source signals, and processing provenance. Choose manual review for a one-off visual check. Choose a custom integration when you require a different input model, private content, or a bespoke output contract.

Source values remain evidence from the moment of collection, not independent verification. Like, comment, play, and view counts can change. Verification and partnership fields are raw platform signals. Comment samples are not a complete comment archive. Post images, videos, and covers are downloaded into the run Key-Value Store; profile and audio URLs remain source-dependent and can expire.

### Quick Start Guide

1. Open the Actor and enter a bare Instagram username such as `instagram`.
2. Set `max_results` to `1` for the first run.
3. Start the run, wait for a terminal status, and inspect the default Dataset.
4. Confirm the returned fields and source availability before increasing the result limit.

```json
{
  "username": "instagram",
  "max_results": 1
}
```

If no row is published, check that the account is public and currently available, then review the terminal status and run log. A valid request can still return fewer rows than requested when the visible timeline ends or individual posts are unavailable.

### Input Parameters

| Field | Type | Required | Description |
|---|---|---:|---|
| `username` | string | Yes | One bare Instagram username, up to 30 characters; letters, numbers, periods, and underscores only |
| `max_results` | integer | Yes | Maximum successfully published Dataset rows, from 1 to 1,000,000 |

Do not submit `@instagram`, a profile URL, a post URL, a slash, query string, fragment, whitespace, or unsupported characters as `username`. The Actor rejects those formats instead of guessing the intended account.

`max_results` is an output ceiling, not a guarantee. The Actor can inspect later candidates after an unavailable post, but account visibility, feed exhaustion, source restrictions, and the platform run limit can still produce fewer rows.

### Output Data Schema

Every published row contains 62 top-level fields. Nullable values remain null when Instagram does not expose them, while collection fields such as hashtags or sponsor tags can be empty arrays.

| Group | Representative fields | What the group describes |
|---|---|---|
| Post identity | `post_id`, `shortcode`, `post_url`, `post_type`, `instagram_product_type`, `instagram_media_type` | Stable source identifiers and normalized format |
| Owner | `owner_id`, `owner_username`, `owner_full_name`, `owner_is_verified`, `owner_is_private`, `owner_profile_pic_url` | Publishing account context and raw flags |
| Caption and time | `caption`, `hashtags`, `mentions`, `published_at`, `published_timestamp`, `caption_created_at` | Text, ASCII-letter/digit/underscore hashtags, extracted references, and timestamps |
| Engagement | `like_count`, `comment_count`, `play_count`, `view_count`, `like_and_view_counts_disabled` | Processing-time source counts and visibility state |
| Media | `cover_url`, `media_items`, `media_count`, `image_count`, `video_count`, `is_carousel`, `has_video`, `has_audio` | Images, videos, carousel parts, dimensions, and audio presence |
| Context | `location_*`, `tagged_users`, `coauthors`, `sponsor_tags`, `top_comments` | Optional place, relationship, sponsorship, and comment-sample data |
| Audio | `audio_type`, `audio_title`, `audio_artist`, `audio_asset_id`, `audio_duration_ms`, `audio_preview_url`, `audio_is_trending` | Optional music or original-audio metadata |
| Provenance | `processor`, `processed_at` | Actor identity and UTC processing time |

Abbreviated example:

```json
{
  "post_id": "3946975519354428264",
  "shortcode": "DbGeVKoSJto",
  "post_url": "https://www.instagram.com/reel/DbGeVKoSJto/",
  "post_type": "reel",
  "owner_username": "instagram",
  "caption": "Example caption",
  "published_at": "2026-07-22T16:04:53+00:00",
  "like_count": 86903,
  "comment_count": 6083,
  "cover_url": "https://api.apify.com/v2/key-value-stores/example/records/cover.jpg",
  "media_count": 1,
  "has_video": true,
  "media_items": [
    {
      "position": 1,
      "media_type": "video",
      "media_url": "https://api.apify.com/v2/key-value-stores/example/records/video.mp4",
      "has_audio": true
    }
  ],
  "processor": "https://apify.com/agentx/instagram-reel-scraper",
  "processed_at": "2026-07-28T12:00:00+00:00"
}
```

The example is intentionally abbreviated; the Dataset schema is the authoritative field list. `cover_url` and nested `media_items` URLs point to files downloaded into the run Key-Value Store. `owner_profile_pic_url`, `audio_cover_url`, and `audio_preview_url` remain source URLs and can expire. Stored post media follows the retention and deletion rules of the associated Apify storage; it is not permanent hosting.

### Integration Examples

The Actor ID is `agentx/instagram-reel-scraper`. Keep the Apify token in a secret and use the same one-result scenario across integrations.

#### HTTP API

```bash
curl -X POST "https://api.apify.com/v2/actors/agentx~instagram-reel-scraper/runs?waitForFinish=60" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"username":"instagram","max_results":1}'
```

The Run Actor endpoint returns a run object. If the status is not terminal after the wait period, poll the run and then read items from its `defaultDatasetId`. Apify’s current API documentation recommends the Authorization header instead of placing the token in the URL.

#### Python client

```python
import os

from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("agentx/instagram-reel-scraper").call(
    run_input={"username": "instagram", "max_results": 1}
)
if run is None:
    raise RuntimeError("Actor run did not start")

items = client.dataset(run.default_dataset_id).list_items().items
```

#### MCP

The hosted [Apify MCP server](https://docs.apify.com/integrations/mcp) can expose Store Actors through its authenticated `call-actor` tool. Enable that tool, select `agentx/instagram-reel-scraper`, and pass the same two-field input. Actor execution and storage access require authentication.

### Pricing & Cost Calculator

The release registers two charged events: Actor Start and Result. A Result is one successfully published row in the default Dataset.

| Tier | Result price |
|---|---:|
| FREE | $0.00390 |
| BRONZE | $0.00351 |
| SILVER | $0.00312 |
| GOLD | $0.00293 |
| PLATINUM | $0.00293 |
| DIAMOND | $0.00293 |

Actor Start is $0.01000 per start event. At the default 256 MB memory setting, a smallest useful FREE-tier run that publishes one row is approximately `$0.01000 + $0.00390 = $0.01390`. One hundred published FREE-tier rows in one run are approximately `$0.40000`.

Charges follow actual events, not the requested maximum. A run that publishes fewer rows creates fewer Result events. Use Apify’s run-level maximum charge option when a hard spending boundary matters, and reconcile costs against the run’s recorded charged events.

### Use Cases & Applications

#### Account content research

Compare recent post formats, captions, hashtags, mentions, publish times, and available engagement values for one public account. Repeat runs create new snapshots; they do not retroactively update older Dataset rows.

#### Creative format analysis

Separate feed images, feed videos, Reels, IGTV-style records, and carousel types. Inspect media-part counts, dimensions, covers, tagged accounts, coauthors, and available audio labels before selecting examples for deeper review.

#### Brand monitoring

Preserve post URLs, owner identity, source timestamps, processing time, and available counts for periodic review. Do not treat count changes as proof of reach quality, paid distribution, causation, or campaign success without additional evidence.

#### Data and AI workflows

Use the normalized record as input for classification, summarization, search, or analysis. Apply moderation and minimization to captions and comment samples. Do not infer protected traits, identity authenticity, sponsorship validity, or brand safety from isolated names, images, flags, or comments.

### FAQ

#### Does Instagram Reel Scraper collect only Reels?

No. It collects public account posts and normalizes Reels, feed images, feed videos, older IGTV-style records, and image, video, or mixed carousels.

#### Does `max_results` guarantee the Dataset size?

No. It is the maximum number of successfully published rows. Public availability, feed exhaustion, removed or restricted posts, source blocking, and the platform run limit can reduce the result count.

#### Are likes, comments, plays, and views current?

They are snapshots of values exposed when the row is processed. Values can change later, and some counts can be hidden or unavailable.

#### Are audio, location, comments, and relationship fields always present?

No. These groups are source-dependent. Missing scalar values can be null, and collection fields can be empty.

#### Does hashtag extraction cover every writing system?

No. The current Dataset extracts hashtags made from ASCII letters, digits, and underscores. Non-Latin hashtag text can remain only in the original `caption` and may be absent from `hashtags`.

#### Can I pass a profile URL, post URL, or `@handle`?

No. Submit one bare username. URLs, `@`, slashes, queries, fragments, whitespace, unsupported characters, and names longer than 30 characters are rejected.

#### Does the Actor download or permanently store media files?

The Actor downloads every post image, video, and available cover before publishing that post, uploads each unique file to the run Key-Value Store, and returns those storage URLs in `cover_url` and `media_items`. The files are not permanent: their lifetime follows the associated Apify storage retention and deletion settings.

#### Are verification, partnership, and sponsor fields independently checked?

No. They are raw source signals. Confirm identity, ownership, sponsorship, and disclosure obligations separately before making consequential decisions.

#### What should I include in a support request?

Include the Actor name, run ID, Dataset ID, UTC time, non-secret input, requested and returned counts, the affected post ID or shortcode, and the exact missing or unexpected field. Never publish API tokens or infrastructure credentials.

### Data Interpretation & Reliability

Every published row follows the documented 62-field Dataset schema. Required identifiers and downloaded post media are available before a post is published, while source-dependent values such as audio, location, comments, and engagement counts can remain null or empty.

Instagram account verification, content ownership, audience quality, engagement quality, comments, locations, sponsorships, music rights, and media rights are outside the Actor’s certification boundary. Review important records against the current source and use independent checks for high-impact decisions.

The Actor does not promise full profile history, permanent media retention, complete comments, uninterrupted source access, or a specific result count. A terminal successful run confirms the run ended; always inspect the Dataset and associated Key-Value Store before accepting downstream completeness.

### Legal & Compliance

Review the current [Instagram Terms of Use](https://www.instagram.com/legal/terms/), [Meta Privacy Policy](https://privacycenter.instagram.com/policy/), applicable intellectual-property rights, privacy laws, platform rules, and contractual restrictions before collecting or reusing data.

Public visibility does not automatically authorize unrestricted copying, publication, model training, profiling, or outreach. Collect only the fields needed for a documented purpose. Apply access controls, retention limits, deletion procedures, and moderation for captions or comments that can contain personal, offensive, or unstable content.

Do not use this Actor to bypass access controls or collect private content. Media, captions, music, trademarks, profile images, tagged accounts, locations, and user comments can carry third-party rights and privacy obligations.

### Related Tools

Related Instagram and social research:

- [Instagram Creator Scraper](https://apify.com/agentx/instagram-creator-scraper) — public creator profile context
- [Instagram Trending Scraper](https://apify.com/agentx/instagram-trending-scraper) — Explore content with Actor-specific trend labels
- [Twitter Info Scraper](https://apify.com/agentx/twitter-info-scraper) — public account context on another social platform

Optional multi-source enrichment:

- [All Video Scraper](https://apify.com/agentx/all-video-scraper) — video-oriented workflows across supported sources
- [All Shopping Scraper](https://apify.com/agentx/all-shopping-scraper) — cross-market product research
- [All Property Scraper](https://apify.com/agentx/all-property-scraper) — cross-market property research

Each Actor has its own input, output, pricing, and source limits. Validate identifiers and timestamps before joining records.

### Support & Community

[Run a one-result test](https://apify.com/agentx/instagram-reel-scraper) · [View the Actor API](https://apify.com/agentx/instagram-reel-scraper/api) · [Contact AiAgentApi support](https://t.me/AiAgentApi)

For reproducible support, include non-secret evidence only. Never share API tokens, account credentials, infrastructure URLs, or personal data in a public ticket.

# Actor input Schema

## `username` (type: `string`):

Enter one bare Instagram username only. Do not include @, a profile URL, slash, query, or spaces.

## `max_results` (type: `integer`):

Maximum successfully published Dataset rows, from 1 to 1,000,000. The Actor may inspect later candidates after detail failures; feed exhaustion, source blocking, or the run deadline can still produce fewer rows.

## Actor input object example

```json
{
  "username": "instagram",
  "max_results": 3
}
```

# Actor output Schema

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

Browse returned post records. Post media URLs point to downloaded files in the run Key-Value Store; counts, location, audio, and comment samples remain source-dependent.

# 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 = {
    "username": "instagram",
    "max_results": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentx/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 = {
    "username": "instagram",
    "max_results": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("agentx/instagram-reels-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 '{
  "username": "instagram",
  "max_results": 3
}' |
apify call agentx/instagram-reels-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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