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

Watching Reels one by one to find what performs wastes hours. Paste usernames, reel links or audio pages and get plays, likes, comments, captions, hashtags, music, MP4 video links and engagement rates in bulk. No login or cookies.

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

## Pricing

from $1.40 / 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.
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

### 🚀 What is Instagram Reels Scraper?

Instagram Reels Scraper is an Apify Actor that collects public reels from Instagram profiles, reel links and audio pages. Each reel comes back as a structured row with plays, likes, comments, caption, hashtags, video and audio links, music, tagged users and owner stats. You need no Instagram login.

- 🎯 **One input box for everything:** usernames, `@handles`, profile links, reel links, audio links and media IDs can be mixed in one list.
- ⚡ **Live results:** each reel is saved as soon as it is ready, so you can open the Output tab while the run is still going.
- 📊 **Ready-made metrics:** engagement rate by plays and by followers, plays per day and hours since posted.
- 🎵 **Audio pages too:** paste a sound link and collect the reels that use it.
- 🗂️ **Section tables:** reels overview, engagement, media links, caption and tags, music, owner, comments, profiles and inputs.

Click **Try for free**, paste a username and press **Start**.

### 📊 What data can you extract from Instagram reels?

This Instagram reels data extractor returns one row per reel with the fields below. You can export the dataset as JSON, CSV, Excel, XML or HTML.

| Field | Description | Example |
|---|---|---|
| `inputUrl` | The input line this reel came from. | `nasa` |
| `id` | Instagram media ID. | `4004634989362489982` |
| `type` | Video, Image or Sidecar. | `Video` |
| `shortCode` | The code in the reel link. | `DeTUk4sDSp-` |
| `caption` | Full caption text. | `POV: you're watching the Earth set` |
| `hashtags` | Hashtags in the caption, without #. | `["NASA", "ArtemisII"]` |
| `mentions` | Usernames mentioned in the caption, without @. | `[]` |
| `url` | Link to the reel. | `https://www.instagram.com/reel/DeTUk4sDSp-/` |
| `commentsCount` | Total comments on the reel. | `6906` |
| `firstComment` | Text of the first comment shown. | `Amazing view!` |
| `latestComments` | Latest comments shown to logged-out visitors (text, author, likes, date). | `[]` |
| `dimensionsHeight` | Video height in pixels. | `1908` |
| `dimensionsWidth` | Video width in pixels. | `1074` |
| `displayUrl` | Cover image link. | `https://scontent.cdninstagram.com/...jpg` |
| `videoUrl` | Direct MP4 link (expires after some days). | `https://instagram.fna.fbcdn.net/...mp4` |
| `alt` | Accessibility description from Instagram. | `Video by NASA on October 10, 2026.` |
| `likesCount` | Like count (empty when the owner hides it). | `696348` |
| `videoPlayCount` | Play count. | `10076679` |
| `timestamp` | Post time, ISO 8601 UTC. | `2026-10-10T15:15:02.000Z` |
| `ownerFullName` | Display name of the owner. | `NASA` |
| `ownerUsername` | Username of the owner. | `nasa` |
| `ownerId` | Instagram user ID of the owner. | `528817151` |
| `productType` | clips for reels. | `clips` |
| `videoDuration` | Video length in seconds. | `43.767` |
| `musicInfo` | Song or original audio: artist, title, audio ID, explicit flag. | `{"artist_name": "nasa", "song_name": "Original audio"}` |
| `isCommentsDisabled` | True when comments are turned off. | `false` |
| `taggedUsers` | Accounts tagged in the reel. | `[]` |
| `locationName` | Location name, if set. | - |
| `locationId` | Instagram location ID, if set. | - |
| `isPinned` | True when pinned to the top of the profile. | `false` |
| `coAuthors` | Collab partners shown on the reel. | `[]` |
| `isCollab` | True when the reel has co-authors. | `false` |
| `audioUrl` | Direct audio-only link (expires after some days). | `https://instagram.fna.fbcdn.net/...mp4` |
| `videoQualities` | Every available video file (width, height, link). | `[]` |
| `hasAudio` | True when the video has sound. | `true` |
| `topics` | Topic labels Instagram shows for the reel. | `["earthrise"]` |
| `likesHidden` | True when the owner hides like counts. | `false` |
| `ownerIsVerified` | Blue check of the owner. | `true` |
| `ownerIsPrivate` | True for private accounts. | `false` |
| `ownerProfilePicUrl` | Profile picture link of the owner. | `https://scontent.cdninstagram.com/...jpg` |
| `ownerFollowersCount` | Followers of the owner (filled for profile runs; empty when the reel's owner is a collab partner). | `104382986` |
| `ownerFollowingCount` | Accounts the owner follows. | `90` |
| `ownerBio` | Profile bio of the owner. | `Exploring the universe` |
| `ownerExternalLinks` | Links in the owner bio. | `[]` |
| `engagementRateByFollowers` | Engagement rate in percent, relative to the owner's followers. | `0.67` |
| `engagementRateByViews` | Engagement rate in percent, relative to plays. | `6.98` |
| `hoursSincePosted` | Hours between posting and the run. | `186.4` |
| `viewsPerDay` | Average plays per day since posting. | `1297000.5` |
| `hasMoreComments` | True when the reel has more comments than shown. | `true` |

Plays are saved as `videoPlayCount`, which makes the Actor an Instagram reels views scraper as well. The Instagram reels play count comes from the same row as likes and comments, so you can compare them directly. Each Instagram reels video URL is stored in `videoUrl`, next to `audioUrl` and `videoQualities`.

#### Extra tables next to the reels

- **Comments table:** `inputUrl`, `reelShortCode`, `reelUrl`, `reelOwnerUsername`, `commentId`, `text`, `ownerUsername`, `ownerIsVerified`, `ownerProfilePicUrl`, `timestamp`, `likesCount`, `repliesCount`, `isReply`.
- **Profiles table:** `inputUrl`, `username`, `fullName`, `id`, `isVerified`, `isPrivate`, `bio`, `followersCount`, `followingCount`, `profilePicUrl`, `externalLinks`, `profileUrl`, `reelsCollected`, `scrapedAt`.
- **Inputs table:** `inputUrl`, `inputType`, `status`, `reelsCollected`, `message`, `scrapedAt`.

### 💡 Use cases for Instagram reels data

- **Reel performance tracking:** compare `videoPlayCount`, `likesCount` and `commentsCount` between runs for Instagram reels analytics on your own or a client's account.
- **Competitor benchmarking:** use `engagementRateByViews` and `viewsPerDay` to run an Instagram reels competitor analysis across rival brands.
- **Influencer vetting:** read `ownerFollowersCount` next to `engagementRateByFollowers` to analyze Instagram reels from a creator before a partnership.
- **Trending sound research:** paste an audio link and review `musicInfo` for every reel that uses the sound.
- **Content research:** study `hashtags` and `topics` to see which Instagram reels hashtags cluster around a theme.
- **Caption review:** export `caption` text to see how top creators write their Instagram reels captions.
- **Media collection:** keep `videoUrl` and `audioUrl` links from each reel for archiving or research, and download them soon because they expire.
- **Single reel lookup:** paste one reel link and the Instagram reel scraper returns that reel with its full details.

### 🛠️ How to scrape Instagram reels

1. Create an Apify account and open Instagram Reels Scraper in the Apify Console.
2. Paste usernames, profile links, reel links or audio links into **Profiles, reels or audio links**.
3. Set **Reels per profile or audio** to the number of newest reels you want for each profile or sound.
4. Add **Posted after** or **Posted before** if you only need a date range.
5. Keep **Full reel details** on for caption, hashtags, links, music and latest comments, or turn it off for a faster run.
6. Click **Start** and open the **Output** tab while the run is going.
7. Download the dataset as JSON, CSV, Excel, XML or HTML.

#### How to scrape Instagram reels by username

Type a username such as `nasa` or `@nasa`, or paste a profile link. The Instagram profile reels scraper then saves the newest reels first until it reaches your **Reels per profile or audio** limit, or all reels Instagram shows when you enter 0.

#### How to scrape Instagram reels by audio

Paste an audio link such as `https://www.instagram.com/reels/audio/123.../`. The Instagram audio reels scraper reads the reels that use the sound and fills `musicInfo` with the artist, song and audio ID, so you can follow Instagram reels music trends.

#### How to scrape Instagram reels without login

You do not enter an Instagram account or password anywhere. As an Instagram reels scraper without login, it reads only what a logged-out visitor can see, so private accounts and hidden content are not available.

#### How to filter Instagram reels by date

Fill **Posted after** and **Posted before** to filter Instagram reels by date. Use `YYYY-MM-DD` or a relative value such as `7 days`, `2 weeks`, `3 months` or `1 year`, and a relative value in **Posted before** means older than that.

#### How to export Instagram reels to CSV

When the run finishes, open the **Output** tab or the dataset and choose CSV to export Instagram reels to CSV. Pick Excel in the same menu to get your Instagram reels to Excel in one click.

### 💰 How much does it cost to scrape Instagram reels?

Instagram Reels Scraper uses pay-per-event pricing: you pay for each reel saved as a result, plus a very small Actor Start charge of $0.00005 per run start. The price per 1,000 results depends on your pricing tier:

| Pricing tier | Price per 1,000 results |
|---|---|
| Free | $2 |
| Bronze | $1.8 |
| Silver | $1.6 |
| Gold, Platinum and Diamond | $1.4 |

For example, 1,000 reels cost $2 in the Free row and $1.4 in the Gold, Platinum and Diamond rows. The comments, profiles and inputs tables add no extra result charges, and a run stops cleanly when it reaches your spending limit. See the Pricing tab for current rates.

### ⬇️ Input

The Instagram reels scraper tool needs only one input, the `urls` list. Everything else is optional, and you can open the Input tab to see every option in the form. You can fill the form or send the same JSON to the Instagram reels data scraper through the API.

![Instagram reels scraper Apify Actor input form with profile links and reel count](IMAGE_URL_PLACEHOLDER "instagram-reels-scraper-input-form.png")

| Field | What it does |
|---|---|
| `urls` | Required. One item per line: a username, profile link, reel or post link, audio link or numeric media ID. |
| `reels_count` | Maximum reels saved for each profile or audio page, newest first. 0 means all reels Instagram shows (up to 100000). |
| `beginDate` | Only keep reels posted on or after this date (`YYYY-MM-DD` or a relative value such as `7 days`). |
| `endDate` | Only keep reels posted before this date (same formats). |
| `skip_pinned` | Leave out reels the owner pinned to the top of their profile. |
| `fetch_reels_data` | On: every reel gets its full details. Off: much faster, and profile reels only carry the link, play, like and comment counts, cover image and pinned flag. Reel links and audio pages always come with full details. |
| `comments_per_reel` | How many of the latest comments to include in each reel row (`latestComments`). 0 means none (up to 50000). |
| `maxConcurrency` | How many reels of the same profile are read at the same time (1 to 20). Higher is faster. |
| `proxyConfiguration` | Optional. Pick a proxy yourself, or leave the default. |

Example input:

```json
{
  "urls": ["nasa"],
  "reels_count": 10,
  "skip_pinned": false,
  "fetch_reels_data": true,
  "comments_per_reel": 5
}
```

💡 Start with a small `reels_count` for your first test run, then raise it once the output looks right.

### ⬆️ Output

The scraped results are shown as a dataset in the **Storage** tab. The table view is for convenience and doesn't show **all the fields**. This Instagram reels extractor saves each reel the moment it is ready. Instagram reels scraping runs therefore show rows in the dataset while they are still going.

![Instagram Reels Scraper output table with plays, likes and comments](IMAGE_URL_PLACEHOLDER "instagram-reels-scraper-output-table.png")

Export formats: JSON, CSV, Excel, XML and HTML.

Example output for one reel (built from the example values in the dataset schema, not a captured run):

```json
{
  "inputUrl": "nasa",
  "id": "4004634989362489982",
  "type": "Video",
  "shortCode": "DeTUk4sDSp-",
  "caption": "POV: you're watching the Earth set",
  "hashtags": ["NASA", "ArtemisII"],
  "mentions": [],
  "url": "https://www.instagram.com/reel/DeTUk4sDSp-/",
  "commentsCount": 6906,
  "firstComment": "Amazing view!",
  "latestComments": [],
  "dimensionsHeight": 1908,
  "dimensionsWidth": 1074,
  "displayUrl": "https://scontent.cdninstagram.com/...jpg",
  "videoUrl": "https://instagram.fna.fbcdn.net/...mp4",
  "alt": "Video by NASA on October 10, 2026.",
  "likesCount": 696348,
  "videoPlayCount": 10076679,
  "timestamp": "2026-10-10T15:15:02.000Z",
  "ownerFullName": "NASA",
  "ownerUsername": "nasa",
  "ownerId": "528817151",
  "productType": "clips",
  "videoDuration": 43.767,
  "musicInfo": { "artist_name": "nasa", "song_name": "Original audio" },
  "isCommentsDisabled": false,
  "taggedUsers": [],
  "isPinned": false,
  "coAuthors": [],
  "isCollab": false,
  "audioUrl": "https://instagram.fna.fbcdn.net/...mp4",
  "videoQualities": [],
  "hasAudio": true,
  "topics": ["earthrise"],
  "likesHidden": false,
  "ownerIsVerified": true,
  "ownerIsPrivate": false,
  "ownerProfilePicUrl": "https://scontent.cdninstagram.com/...jpg",
  "ownerFollowersCount": 104382986,
  "ownerFollowingCount": 90,
  "ownerBio": "Exploring the universe",
  "ownerExternalLinks": [],
  "engagementRateByFollowers": 0.67,
  "engagementRateByViews": 6.98,
  "hoursSincePosted": 186.4,
  "viewsPerDay": 1297000.5,
  "hasMoreComments": true
}
```

The Output tab groups the same data into views and tables:

| View or table | One row per |
|---|---|
| Reels overview, Engagement, Media links, Caption & tags, Music, Owner, Comments in rows | Reel (different columns of the same data) |
| Comments table | Comment, with the reel it belongs to |
| Profiles table | Scraped profile with follower stats |
| Inputs table | Input line with its status |

As an Instagram reels comments scraper, it fills the Comments table from the latest comments of each saved reel. A run summary with totals and per-input status is also saved as `SUMMARY` in the key-value store. Keep in mind that `engagementRateByViews` and `engagementRateByFollowers` give you the Instagram reels engagement rate in percent, while `likesCount` stays empty when `likesHidden` is true.

### ⚠️ Limitations and error handling

- The Instagram reels crawler reads public pages only, so a private account is marked as failed in the Inputs table with a message that it is private.
- A numeric user ID cannot be turned into a username without login. Use the username or profile link instead.
- Instagram shows logged-out visitors only the first page of comments, usually about a dozen, so `latestComments` holds those. `commentsCount` still has the total and `hasMoreComments` tells you more exist.
- For a single reel link, the play count may stay empty for older reels of the owner.
- Instagram may show logged-out visitors only part of the reels that use a sound. The Inputs table message notes how many were shown.
- Direct `videoUrl` and `audioUrl` links expire after some days.
- Owner follower fields are filled for profile runs and stay empty when the reel's owner is a collab partner.
- Instagram can change its pages. If an input fails, check the Inputs table and open an issue with the run link.

The Inputs table has one row per input line. Its `status` is one of these values:

| Status | Meaning |
|---|---|
| `ok` | Reels were saved for this input. |
| `no results` | No reels were found, for example none in the chosen date range. |
| `filtered out` | A single reel was posted outside your date range, or it is pinned while pinned reels are skipped. |
| `stopped` | The run reached your spending limit during this input. |
| `skipped` | The run reached your spending limit before this input started. |
| `failed` | The input could not be read. The `message` field says why and what to try next. |

### 🔌 Integrating Instagram Reels Scraper with other apps

Every run can be started and read through the Apify API, so the Actor also works as an Instagram reels scraper API for your own code. See the API tab for ready-made JavaScript, Python and CLI snippets.

- Use the Apify API as an Instagram reels API to start runs and read results.
- Read the dataset items endpoint as an Instagram reels data API for dashboards and spreadsheets.
- Schedule runs, call webhooks when a run finishes and connect results to tools such as Make, Zapier or Google Sheets through the [Apify integrations](https://docs.apify.com/platform/integrations).
- Paste many inputs at once and the Instagram reels bulk scraper handles them in a single run.
- AI agents can start the Actor through Apify's MCP server.

### 🔗 More Apify Actors by crawl_craft

TikTok is another short-video platform, and these Actors by crawl_craft cover it:

| Actor | What it extracts | When to use it |
|---|---|---|
| [TikTok Video Scraper](https://apify.com/crawl_craft/tiktok-video-scraper) | Captions, hashtags, views, likes, comments, shares, author and music data, plus video downloads and transcripts. | Use it when your short-video research also includes TikTok videos. |
| [TikTok User Search Scraper](https://apify.com/crawl_craft/tiktok-user-search-scraper) | Full TikTok profiles found by keyword search. | Use it to discover creators on TikTok before you check their content. |
| [TikTok Transcript Scraper](https://apify.com/crawl_craft/tiktok-transcript-scraper) | Timestamped transcripts, subtitle languages and translations, plus video and author data. | Use it when you need the spoken text of TikTok videos. |

### ⚖️ Is it legal to scrape Instagram?

Instagram Reels Scraper collects only reels and profile details that are visible to logged-out visitors on Instagram, and it does not access private accounts. Results may still contain personal data, so collect it only with a legitimate reason and consider GDPR (Regulation (EU) 2016/679) and Instagram's terms. Consult a lawyer if you are unsure. Read Apify's posts on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/) for background.

### ❓ FAQ

#### Can you scrape Instagram reels?

Yes, public reels can be collected from profiles, reel links and audio pages. Instagram Reels Scraper reads what a logged-out visitor can see and returns it as a dataset.

#### Can Apify scrape Instagram reels?

Yes, this Actor runs on Apify. Start it from the Console, schedule it, or call it through the API.

#### Do I need an Instagram login?

No. You do not enter an Instagram account, and private accounts cannot be scraped.

#### Does Instagram Reels have an API?

Check Meta's developer documentation for its own options. If you need an Instagram API to fetch reels without setting up your own app, Instagram Reels Scraper returns public reel data as a dataset that you read through the Apify API.

#### How many reels can I get?

Set `reels_count` for each profile or audio page, up to 100000, or enter 0 for all reels Instagram shows. Run a small test first to see how many reels an input returns.

#### How much does it cost?

You pay per reel saved as a result, plus the Actor Start charge of $0.00005 per run start. See the Pricing section above and the Pricing tab for the price per 1,000 results in your tier.

#### Why do I get only about a dozen comments per reel?

Instagram shows logged-out visitors only the first page of comments. Use `commentsCount` for the full total.

#### Do I need a proxy?

No. The proxy field is optional, and you can leave the default.

### 💬 Your feedback

Found a bug or missing field? Open an issue on the Actor's **Issues** tab with the run link and the input you used. For a custom solution, such as extra fields or a private data pipeline, write to hello.crawlcraft@gmail.com.

# Actor input Schema

## `urls` (type: `array`):

One item per line. Accepted: a username (nasa or @nasa), a profile link (https://www.instagram.com/nasa/), a reel or post link (https://www.instagram.com/reel/DeTUk4sDSp-/), an audio link (https://www.instagram.com/reels/audio/123.../) or a numeric media ID. Profiles and audio pages return many reels; a reel link returns that one reel. Bulk lists are supported.

## `reels_count` (type: `integer`):

Maximum number of reels saved for each profile or audio page, newest first. 0 means all reels Instagram shows.

## `beginDate` (type: `string`):

Only keep reels posted on or after this date. Use YYYY-MM-DD, or a relative value such as 7 days, 2 weeks, 3 months or 1 year. Leave empty for no lower limit.

## `endDate` (type: `string`):

Only keep reels posted before this date. Same formats as Posted after (a relative value like 7 days means: older than 7 days). Leave empty for no upper limit.

## `skip_pinned` (type: `boolean`):

Leave out reels the owner pinned to the top of their profile. Pinned reels are otherwise saved and marked with isPinned = true.

## `fetch_reels_data` (type: `boolean`):

On: every reel gets its caption, hashtags, post date, duration, video and audio links, music, tagged users, location and latest comments. Off: much faster - reels from profiles then only carry the link, play, like and comment counts, cover image and pinned flag. Reel links and audio pages always come with full details.

## `comments_per_reel` (type: `integer`):

How many of the latest comments to include in each reel row (latestComments). Instagram shows logged-out visitors only the first page of comments, usually about a dozen. 0 means none.

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

How many reels of the same profile are read at the same time. Higher is faster.

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

Optional. The run works with the default setting. You can also pick a proxy yourself here.

## Actor input object example

```json
{
  "urls": [
    "nasa"
  ],
  "reels_count": 10,
  "skip_pinned": false,
  "fetch_reels_data": true,
  "comments_per_reel": 5,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

The main facts of every reel.

## `engagement` (type: `string`):

Plays, likes, comments and engagement metrics.

## `media` (type: `string`):

Cover, video and audio files.

## `content` (type: `string`):

Caption, hashtags, mentions, tagged people, collabs, topics and location.

## `music` (type: `string`):

The song or original audio used in each reel.

## `owner` (type: `string`):

Who posted each reel and their profile stats.

## `comments` (type: `string`):

Comment counts and the latest comments of each reel.

## `allFields` (type: `string`):

Every field of every reel.

## `commentsTable` (type: `string`):

One row per comment, with the reel it belongs to.

## `profilesTable` (type: `string`):

One row per scraped profile with follower stats.

## `sourcesTable` (type: `string`):

One status row per input line.

## `summary` (type: `string`):

Totals and per-input 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 = {
    "urls": [
        "nasa"
    ],
    "reels_count": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawl_craft/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 = {
    "urls": ["nasa"],
    "reels_count": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("crawl_craft/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 '{
  "urls": [
    "nasa"
  ],
  "reels_count": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call crawl_craft/instagram-reels-scraper --silent --output-dataset

```

## MCP server setup

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