# Instagram Reels Scraper: Plays, Likes & MP4 Links (`deepmine/instagram-reels-scraper`) Actor

Instagram reels scraper by keyword: type a topic and get the reels Instagram ranks for it, with plays, likes, comments, date, length, sound, caption, hashtags, creator followers and a direct MP4 link per reel for downloading. No login. For content research and reel downloads.

- **URL**: https://apify.com/deepmine/instagram-reels-scraper.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** Social media, Videos
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.39 / 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 Reels Scraper: Plays, Likes & MP4 Links

Instagram reels scraper by profile or reel URL: give usernames (natgeo), profile links or reel links and get each profile's reels newest first, as deep as you ask, with plays, likes, comments, post date, length, sound, caption, the latest comments, the creator's follower count and direct MP4 and audio links. No login. Reels by keyword are built in too.

| 👤 Creator | 📝 Caption | ▶️ Plays | ❤️ Likes | 💬 Comments | 📅 Posted |
|---|---|---|---|---|---|
| natgeo | Presented by @Rolex. A simple branch becomes a fis… | 12,228,428 | 382,024 | 1,511 | 2026-10-02 |
| nasa | 🌒➡️🌘➡️🌔 ICYMI: there's a total solar eclipse happe… | 11,969,283 | 389,230 | 1,657 | 2026-08-12 |
| nasa | Volume up and get your groove on! A bit of weekend… | 10,064,614 | 248,792 | 2,652 | 2026-09-14 |

<sub>Collected 2026-10-12 in a test run: natgeo, nasa and levainbakery, 30 reels each, video and audio links on.</sub>

**$0.58 per 1,000 reels** on the Starter plan ($0.69 Free, $0.49 Scale, $0.39 Business). The prefilled run (40 reels) costs about $0.02. No start fee, no minimum.

### Reels by profile or URL

- **Every reel a profile shows, newest first.** The Actor pages through the profile's public reels tab 12 at a time, the way instagram.com/<username>/reels/ does, as far back as your **Max reels per profile** (default 100; one bakery's tab went back to 2021, 690 reels). Pinned reels come first, as on the profile; **Skip pinned reels** leaves them out.
- **Any form of input**: `natgeo`, `@natgeo`, `https://www.instagram.com/natgeo/`, `instagram.com/natgeo/reels/`, a numeric profile id, or reel links (`/reel/`, `/reels/`, `/p/`, `/tv/`). Several profiles are read at once.
- **Only new reels**: **Reels newer than** takes a date (2026-09-01) or a time span (7 days, 3 months). A profile stops paging at its first older reel, so a daily schedule reads a page or two per profile.
- **A reel by URL** gets the same row: caption, counts, date, sound, place, tags, comments and links. Its play count comes from its creator's latest 36 reels (older reels have no public play count).
- **Coming from apify/instagram-reel-scraper?** Its saved inputs work as they are: `username`, `resultsLimit`, `onlyPostsNewerThan`, `skipPinnedPosts`.
- **Each reel once**: a reel two profiles show (a collab) or one you also gave by URL is delivered and charged once. Unknown usernames and deleted reels are listed in the run summary, never charged.

### Download reels (video and audio)

The prefilled form turns on **Include video and audio links**, so every row carries `videoUrl` (the reel's MP4 file) and `audioUrl` (its sound track alone): open them or feed the columns to a downloader. Instagram signs these links and they stop working after a few days, so download soon after the run (or run it again). The **🎬 Videos (MP4)** view shows both next to each reel's length, plays and likes.

### Reels by keyword

Open **Keyword search** in the form to find reels by topic instead: Instagram's public topic pages for each keyword (about 45 reels each), then the related searches Instagram lists next to it, in Instagram's order or newest first, with Boolean keywords (`("home workout" OR pilates) AND NOT giveaway`) and a filter that keeps only reels whose caption names your keyword. It's the engine of [Instagram Reels Search](https://apify.com/deepmine/instagram-reels-search), which has the full keyword form; profiles, reel URLs and keywords can go in one run.

### What you get

- **Numbers on every reel**: plays, likes, comments, post date and length, plus the caption, its hashtags and mentions, the cover image, and the creator's username, profile link and verified check.
- **The latest comments**: `firstComment` and `latestComments`, the newest comments a visitor sees (about 14 per reel, with author, time and likes). Free; turn "Add latest comments" off for lighter rows.
- **The details Instagram shows logged-out visitors, at no extra cost**: the video's view count, the song name, artist and sound id (or "Original audio" and whose it is), the tagged location with coordinates, tagged users, collab co-authors and paid partnership where creators set them, the creator's name, picture and follower count, the video's size, and whether comments are off or likes hidden. Turn "Add reel details" off for the fastest runs.
- **Filters that cost nothing**: reels newer than a date, skip pinned reels, minimum plays, likes and comments. Reels the filters leave out aren't charged.
- **Monitoring for scheduled runs**: give the run a "History name" and each scheduled run delivers the reels with `playsSinceLastRun`, `likesSinceLastRun` and `commentsSinceLastRun` since the run before, new ones marked `isNew`: a daily engagement tracker for a list of reels or profiles (the **🔁 Changes** view; see [Daily monitoring](#daily-monitoring)). Every reel is charged as a normal result. "Only reels never delivered before" is an optional filter: only the reels a profile posted since an earlier run (the run stops at the first reel it already delivered).
- **Reels only**: a photo or carousel post is left out and never charged.
- **Transcripts (optional, paid)**: turn on "Add transcripts" to get what's said in each reel as text (`transcript`, `transcriptLanguage`): Instagram's own speech transcript, read without a login, for reels of any length. $0.0039 per reel with a transcript; reels without speech (music only, silent) aren't charged for it.
- **No login, no cookies, no account of yours involved.** The Actor reads the public pages Instagram shows every visitor.

Typical uses: tracking a creator's or a competitor's reels, downloading a profile's reels, a scheduled run with "Reels newer than: 1 day" for new posts, and content research by topic.

### Input

```json
{
  "profiles": ["natgeo", "https://www.instagram.com/reel/DeXXAddgJhQ/"],
  "maxReelsPerProfile": 50,
  "onlyPostsNewerThan": "30 days",
  "includeVideoUrl": true
}
```

- **Profiles or reel URLs**: usernames, profile URLs, numeric ids or reel URLs, one per line. Audio pages (reels that use a sound) aren't supported yet.
- **Max reels per profile**: newest first, default 100. **Max results** (Advanced) caps the whole run.
- **Include video and audio links**: adds `videoUrl` and `audioUrl`.
- **Add transcripts**: adds `transcript` and `transcriptLanguage` (off by default; $0.0039 per reel whose transcript has 3+ words).
- **Add latest comments**: on by default and free; adds `firstComment` and `latestComments`.
- **Add reel details**: on by default and free; adds the video's views, the creator's name, picture and follower count, the sound, location, tagged users, collaborators, partnership and sponsor fields and the video's size (keys below marked *details*). Comments need it on.
- **Filters**: Reels newer than, Skip pinned reels, Min plays, Min likes (reels whose creator hides likes are left out), Min comments.
- **History name** (Monitoring): the key-value store in your Apify account that remembers delivered reels; a later run with it adds each reel's growth since (`playsSinceLastRun`, ...) and `isNew`. **Only reels never delivered before**: an optional filter, off by default: only reels no run with this history delivered; a profile's tab is read until the first reel an earlier run delivered (empty history name = named after your inputs). See [Daily monitoring](#daily-monitoring).
- **Keyword search**: Keywords (phrases, #hashtags, instagram.com/popular/ topic URLs or Boolean searches), Max reels per keyword, Sort by (Most relevant or Newest first), Continue with related searches, Only reels that mention the keyword. See [Instagram Reels Search](https://apify.com/deepmine/instagram-reels-search) for how each works.

### Output

One row per reel, in the dataset's **📊 Overview** view. **🎬 Videos (MP4)** shows the file links, **👤 Creators** who made each reel with hashtags and mentions, **📈 Stats** only the numbers. The run's OUTPUT record (🧾 Run summary) lists each profile, reel URL and keyword with its status (ok, missing, invalid, error), why it stopped and counts.

#### Output fields

- `cover`: the reel's cover image. Instagram signs media links; they stop working after a few days.
- `caption`: full caption.
- `captionSnippet`: first 50 characters of the caption.
- `transcript`: what's said in the reel, Instagram's own speech transcript (its auto-captions) as plain text, no timings; null for reels without speech (*transcripts*, a paid add-on).
- `transcriptLanguage`: the transcript's language (ISO 639-1: en, es, de, ...), null when it's too short to tell (*transcripts*).
- `alt`: Instagram's own alt text for the reel ("Video by <creator> on <date>.", often with "May be an image of ..."), read with the latest comments; null when Instagram has none.
- `authorUsername`: the creator's username, without @.
- `authorFullName`: the creator's display name (*details*).
- `reelUrl`: https://www.instagram.com/reel/<shortcode>/.
- `authorVerified`: the creator has the blue check.
- `authorFollowers`: the creator's follower count (*details*).
- `plays`: play count (the number Instagram's reels tab shows). A reel given by URL has it when it's among its creator's latest 36 reels (older reels: null).
- `views`: the video's view count, a separate counter from plays (often a quarter to a half of them), as Instagram's public embed widget shows it; null when the creator hides counts or turned off embedding (*details*).
- `likes`: like count (null when the creator hides it).
- `comments`: comment count.
- `playsSinceLastRun`: plays gained since the last run that delivered this reel; null for a new reel (*monitoring*: only with a history name or "Only reels never delivered before").
- `likesSinceLastRun`: likes gained since then (*monitoring*).
- `commentsSinceLastRun`: comments gained since then (*monitoring*).
- `fbLikeCount`: likes on the reel's Facebook cross-post, when the creator shares reels to Facebook (*details*).
- `durationSeconds`: length in seconds.
- `mediaType`: `reel` (a Reels post) or `video` (a feed video). Photos and carousels are never rows.
- `productType`: Instagram's product type: `clips` for a Reels post, `feed` or `igtv` (*details*; in runs with profiles or reel URLs).
- `postedAt`: when it was posted (UTC).
- `isPinned`: pinned to the top of the creator's reels tab (profile and reel URL rows).
- `rank`: position in the profile's reels tab (pinned reels first), or in Instagram's list for a keyword row's `topic` (1 = first; null for reel URL rows).
- `isNew`: true when no earlier run with this history delivered the reel (*monitoring*).
- `firstSeenAt`: when a run with this history first delivered the reel (UTC) (*monitoring*).
- `lastSeenAt`: when an earlier run last delivered it (UTC); null for a new reel (*monitoring*).
- `audioTitle`: the reel's sound: a song name, or Original audio (*details*).
- `audioArtist`: the sound's artist, or the account whose original audio it is.
- `isOriginalAudio`: true when the sound is the creator's own audio, false for a song (*details*).
- `locationName`: the place tagged on the reel (*details*).
- `taggedUsers`: accounts tagged in the reel, each as `{username, fullName, id, profilePicUrl, isVerified}` (*details*).
- `collaborators`: collab co-authors shown next to the creator, in the same shape (*details*).
- `isPaidPartnership`: marked as a paid partnership (*details*).
- `sponsors`: brands named in the paid partnership label, in the same shape (*details*); Instagram usually hides them from visitors who aren't logged in, so this is mostly null even when `isPaidPartnership` is true.
- `hashtags`: hashtags in the caption, lower case, without #.
- `mentions`: accounts mentioned in the caption, without @.
- `firstComment`: the newest comment a visitor sees (*details*, with "Add latest comments" on, the default).
- `latestComments`: the newest comments a visitor sees (about 14), each as `{id, text, ownerUsername, ownerProfilePicUrl, ownerIsVerified, timestamp, likesCount, repliesCount}` (same switches).
- `hasHiddenLikes`: the creator hides the like count (`likes` is then null) (*details*).
- `isCommentsDisabled`: comments are turned off (*details*).
- `latitude`: the tagged place's latitude (*details*).
- `longitude`: its longitude (*details*).
- `videoWidth`: the video's width in pixels (*details*).
- `videoHeight`: its height (*details*).
- `videoUrl`: direct MP4 link, with "Include video and audio links" on (signed; expires after a few days).
- `audioUrl`: direct link to the reel's sound track (MP4 audio), same switch and expiry (in runs with profiles or reel URLs).
- `images`: the cover frame in two sizes, full size first, then 320 px wide (signed; expires after a few days) (*details*).
- `authorAvatar`: the creator's profile picture (signed; expires after a few days) (*details*).
- `authorProfileUrl`: the creator's profile.
- `inputUrl`: the profile or reel URL from your input the reel came from (in runs with profiles or reel URLs).
- `keyword`: your keyword this reel was found for (in runs with keywords).
- `topic`: the Instagram search it came from: your keyword, or a related search Instagram lists for it (keyword runs).
- `matchedTerms`: for a Boolean keyword, the words and phrases of it the reel's caption or creator holds (keyword runs).
- `shortCode`: the reel's shortcode.
- `reelId`: Instagram's numeric media id.
- `audioId`: Instagram's id of the sound; reels with the same id use the same sound (*details*).
- `locationId`: Instagram's id of the tagged place (*details*).
- `authorId`: the creator's numeric user id.
- `scrapedAt`: when the run collected it (UTC).

Every row of a run has the same keys: `inputUrl`, `isPinned`, `productType` and `audioUrl` come with profiles and reel URLs, `keyword`, `topic` and `matchedTerms` with keywords. Key names match our TikTok Video Search Actor where both have the field, so the two go into one sheet.

Example row (a profile row, video and audio links on; `latestComments` shortened to its first comment here):

```json
{
  "cover": "https://scontent-lax3-2.cdninstagram.com/v/t51.82787-15/842191580_18656578867049152_4200499629839780998_n.jpg?...",
  "caption": "POV: you're watching the Earth set\n\nWe just released hundreds of new images and hours of new audio from our Artemis II mission around the Moon this spring. Check out our link in bio for the Artemis II Preliminary Lunar Science Report.\n\n#NASA #ArtemisII #Artemis",
  "captionSnippet": "POV: you're watching the Earth set We just release…",
  "transcript": "Would you look at that man? Wow. No wonder.",
  "transcriptLanguage": null,
  "alt": "Video by NASA on October 10, 2026. May be an image of planet, eclipse and text.",
  "authorUsername": "nasa",
  "authorFullName": "NASA",
  "reelUrl": "https://www.instagram.com/reel/DeTUk4sDSp-/",
  "authorVerified": true,
  "authorFollowers": 104348062,
  "plays": 8803898,
  "views": 3006729,
  "likes": 612960,
  "comments": 5937,
  "fbLikeCount": null,
  "durationSeconds": 43.8,
  "mediaType": "reel",
  "productType": "clips",
  "postedAt": "2026-10-10T15:15:02Z",
  "isPinned": false,
  "rank": 1,
  "audioTitle": "Original audio",
  "audioArtist": "nasa",
  "isOriginalAudio": true,
  "locationName": null,
  "taggedUsers": [
    {
      "username": "nasaartemis",
      "fullName": "NASA Artemis",
      "id": "1104426670",
      "profilePicUrl": "https://scontent-lax3-2.cdninstagram.com/v/t51.82787-19/670016304_18577283653042671_4689932669633757619_n.jpg?...",
      "isVerified": true
    }
  ],
  "collaborators": null,
  "isPaidPartnership": false,
  "sponsors": null,
  "hashtags": [
    "nasa",
    "artemisii",
    "artemis"
  ],
  "mentions": null,
  "firstComment": "😍😍😍",
  "latestComments": [
    {
      "id": "18435033883198108",
      "text": "😍😍😍",
      "ownerUsername": "domusaureaarchitecture",
      "ownerProfilePicUrl": "https://scontent-dfw5-2.cdninstagram.com/v/t51.2885-19/118140493_305011100779012_9040235127101458324_n.jpg?...",
      "ownerIsVerified": false,
      "timestamp": "2026-10-12T18:19:43Z",
      "likesCount": 0,
      "repliesCount": null
    }
  ],
  "hasHiddenLikes": false,
  "isCommentsDisabled": false,
  "latitude": null,
  "longitude": null,
  "videoWidth": 1074,
  "videoHeight": 1908,
  "videoUrl": "https://scontent-lax7-1.cdninstagram.com/o1/v/t2/f2/m86/AQNUvreb47JFAC3mKM7kF_weYHzhiVF-MfERm99CfyBTok0ezeRdbVW8cH5NXn4mxO8gVi6j1GQ2RU9i4ByvKCLVPHdDruUpsCKYDQI.mp4?...",
  "audioUrl": "https://scontent-lax3-1.cdninstagram.com/o1/v/t2/f2/m78/AQPB4JL-DRgi9IPGEW-CRYYVXhI25dlK6MjaV6MVLn6z-PjYWWDHQ8paV0zV_HrR6itVi3lQcobq2zQ38W6sABUwWavnfWG0BvOCn3w.mp4?...",
  "images": [
    "https://scontent-lax3-2.cdninstagram.com/v/t51.82787-15/842191580_18656578867049152_4200499629839780998_n.jpg?stp=dst-jpg_e15_tt6&...",
    "https://scontent-lax3-2.cdninstagram.com/v/t51.82787-15/842191580_18656578867049152_4200499629839780998_n.jpg?stp=dst-jpg_e15_p320x320_tt6&..."
  ],
  "authorAvatar": "https://scontent-lax3-2.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?...",
  "authorProfileUrl": "https://www.instagram.com/nasa/",
  "inputUrl": "https://www.instagram.com/nasa/",
  "shortCode": "DeTUk4sDSp-",
  "reelId": "4004634989362489982",
  "audioId": "28589819277311219",
  "locationId": null,
  "authorId": "528817151",
  "scrapedAt": "2026-10-12T18:21:54Z"
}
```

### Daily monitoring

Track how reels grow, every day: each run delivers the reels it finds with how much each one grew since the run before, and marks the new ones.

1. Add your profiles (or reel URLs) and set "Max reels per profile" (12 covers a few weeks of posts for most creators).
2. Open **Monitoring** and give the history a name, e.g. `creators-watch`.
3. Save it as a task and schedule it daily (Schedules in Apify Console).

The first run delivers what's there and remembers it in the key-value store `creators-watch` in your account. Each later run delivers every reel it finds again: the ones an earlier run delivered carry what changed since, new ones have `isNew: true`. The **🔁 Changes** view shows the growth, and OUTPUT's `monitoring` part counts the new and the seen-again reels. A reel read again 13 minutes after a run first delivered it (2026-10-20):

```json
{
  "plays": 35246,
  "likes": 1413,
  "comments": 4,
  "playsSinceLastRun": 184,
  "likesSinceLastRun": 9,
  "commentsSinceLastRun": 0,
  "isNew": false,
  "firstSeenAt": "2026-10-20T17:02:39Z",
  "lastSeenAt": "2026-10-20T17:02:39Z"
}
```

**What it costs:** every reel a run delivers is charged as a normal result, new or seen before: $0.58 per 1,000 reels at Starter. 10 profiles with 12 reels each (120 reels a day) cost about $0.07 a day, $2.09 for 30 days.

**Only new reels instead:** turn on **Only reels never delivered before** (off by default) and a run leaves out every reel an earlier run with this history delivered: they aren't charged, and you get no growth numbers for them.

Apify lets an Actor open only the named stores it made itself, so if a store of that name already exists in your account (made by another Actor or by hand), this Actor keeps its history next to it as `creators-watch-instagram-reels-scraper`; OUTPUT and the status message say so. A new name starts a fresh history; the store keeps the last 100,000 reels.

### Pricing

Pay per result: you pay for reels delivered, never for unknown profiles, deleted reels or reels your filters leave out.

| Plan | Per 1,000 reels |
|---|---|
| Free | $0.69 |
| Starter | $0.58 |
| Scale | $0.49 |
| Business | $0.39 |

**Transcripts** ("Add transcripts", off by default): $0.0039 per reel with a transcript, on every plan, on top of the reel. Reels without speech (music only, silent) or with fewer than 3 words aren't charged for it.

Set a maximum cost on the run and the Actor stops at or before it. Proxies are included: the Actor uses Apify Proxy and switches to residential IPs on its own if Instagram keeps refusing datacenter ones.

### Good to know

- **What a visitor sees, nothing more.** Rows come from Instagram's public profile reels tabs, reel pages and topic pages, the same ones anyone can open without an account. Instagram shows share counts only to logged-in viewers, so rows have no shares; private accounts show no reels (the run summary says so).
- **Plays** are the counts Instagram's reels tab shows. A reel given by URL that is older than its creator's latest 36 reels has no public play count, so `plays` is null there.
- **Views** (`views`) are Instagram's own video view counter, a separate one from plays, read from each reel's public embed widget.
- **Reel details** come from each reel's public post data, its public embed widget and its creator's public profile (read once per creator); when Instagram doesn't answer one of them, the others fill in what they can.
- If Instagram ever refuses every IP, the run fails with a clear message instead of finishing empty; a profile whose reels tab comes back empty is checked against a profile that always has reels first.
- **Big runs**: the Actor stops a little before the run's timeout and keeps every reel it delivered; raise the timeout in the run options for very large runs.

### Related Actors

- **Reels by keyword, every option in one form:** [Instagram Reels Search](https://apify.com/deepmine/instagram-reels-search), the same engine.
- **Also need Threads data?** [Threads Scraper](https://apify.com/deepmine/threads-scraper) searches Meta Threads by keyword or hashtag and returns posts, replies and profiles with likes and view counts, with no login.

### Feedback

Found a bug or missing a field? Open an issue in the Issues tab. If the Actor saves you time, a short review on its Store page helps others find it.

# Actor input Schema

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

Instagram usernames, profile URLs or reel URLs, one per line: natgeo, @natgeo, instagram.com/natgeo/ or instagram.com/reel/DeXXAddgJhQ/. A profile gives its reels newest first. You pay per reel delivered.

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

Reels per profile, newest first (pinned reels first, as on the profile). Profiles page back years. You pay per reel, so this caps the cost per profile. Empty = 100.

## `includeVideoUrl` (type: `boolean`):

Adds videoUrl and audioUrl: direct links to each reel's MP4 file and its sound track, for downloading. Instagram signs them; they stop working after a few days. Free.

## `includeComments` (type: `boolean`):

Adds firstComment and latestComments: the newest comments a visitor sees (about 14 per reel, with author, time and likes). Free. Needs reel details on.

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

Adds what's said in each reel as text (transcript, transcriptLanguage): Instagram's own speech transcript, no timings. $0.0039 per reel with a transcript, on top of the reel; reels without speech aren't charged for it.

## `includeDetails` (type: `boolean`):

Adds the video's views, the creator's name, picture and follower count, the sound, the place and coordinates, tagged users, collaborators, sponsors and the video's size. Free. Turn off for the fastest runs.

## `onlyPostsNewerThan` (type: `string`):

Keep only reels posted after a date (2026-09-01) or within a time span (7 days, 3 months). A profile stops paging at its first older reel. Empty = any date.

## `skipPinnedPosts` (type: `boolean`):

Leave out the reels a creator pinned to the top of their profile (often older than the rest). Reels left out aren't charged.

## `minPlays` (type: `integer`):

Keep only reels with at least this many plays, e.g. 10000. Reels left out aren't charged. Empty = no limit.

## `minLikes` (type: `integer`):

Keep only reels with at least this many likes (reels whose creator hides likes are left out). Reels left out aren't charged. Empty = no limit.

## `minComments` (type: `integer`):

Keep only reels with at least this many comments. Reels left out aren't charged. Empty = no limit.

## `keywords` (type: `array`):

Find reels by topic, one per line: a phrase (home workout), a #hashtag or an instagram.com/popular/ topic URL. Boolean searches work too: ("home workout" OR pilates) AND NOT giveaway. You pay per reel delivered.

## `maxResultsPerKeyword` (type: `integer`):

Reels per keyword. A topic has about 45 reels; with related searches on, more come from the searches Instagram lists next to it. You pay per reel, so this caps the cost per keyword. Default 100.

## `sortBy` (type: `string`):

Most relevant (default): Instagram's own order for the keyword's search, then its related searches. Newest first: reads the related searches until they hold enough recent reels, then delivers the newest first.

## `includeRelatedTopics` (type: `boolean`):

When a keyword's own reels run out, go on with the related searches Instagram suggests for it (home workout: home workout for women, home leg workout, ...). Each row says which search it came from.

## `requireKeywordMatch` (type: `boolean`):

On (default): every keyword reel's caption, hashtags or creator name contains the keyword (cosplay matches #cosplaygirl). Off: every reel Instagram groups under the keyword's search. Reels left out aren't charged.

## `historyStore` (type: `string`):

For scheduled runs: name a history, e.g. fitness-watch. Each run charges every reel it finds as a normal result; reels an earlier run delivered come with playsSinceLastRun, likesSinceLastRun, commentsSinceLastRun and firstSeenAt, new ones with isNew true. Kept in a key-value store in your account.

## `onlyNew` (type: `boolean`):

Off by default. A filter: returns only reels never delivered before by a run with this history; the others are left out (not charged, no growth numbers). Empty history name = one named after your inputs. Profiles stop at the first reel delivered before.

## `maxResults` (type: `integer`):

Stop after this many reels in total, across profiles, reel URLs and keywords. You pay per reel, so this caps the run's cost.

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

Leave as is: Apify Proxy (datacenter). If Instagram keeps refusing datacenter IPs, the Actor switches to Apify residential on its own, at no extra cost to you.

## `maxAgeDays` (type: `integer`):

Kept for saved inputs: keep only reels posted in the last N days. Reels newer than (above) does the same with a date or any time span.

## `username` (type: `array`):

Same as Profiles or reel URLs; read together with it, so saved inputs of apify/instagram-reel-scraper run as they are.

## `resultsLimit` (type: `integer`):

Same as Max reels per profile (used when that one is empty).

## `includeSharesCount` (type: `boolean`):

Accepted for saved inputs. Instagram shows share counts only to signed-in accounts and this Actor never signs in, so rows have no share count and nothing is charged for it.

## `includeDownloadedVideo` (type: `boolean`):

Accepted for saved inputs: turns on the video and audio file links.

## `skipTrialReels` (type: `boolean`):

Accepted for saved inputs; no effect (the Actor reads each profile's public reels tab).

## Actor input object example

```json
{
  "profiles": [
    "natgeo",
    "nasa"
  ],
  "maxReelsPerProfile": 20,
  "includeVideoUrl": true,
  "includeComments": true,
  "includeTranscript": false,
  "includeDetails": true,
  "skipPinnedPosts": false,
  "maxResultsPerKeyword": 100,
  "sortBy": "relevance",
  "includeRelatedTopics": true,
  "requireKeywordMatch": true,
  "onlyNew": false,
  "maxResults": 10000,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "includeSharesCount": false,
  "includeDownloadedVideo": false,
  "skipTrialReels": false
}
```

# Actor output Schema

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

No description

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

No description

# 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": [
        "natgeo",
        "nasa"
    ],
    "maxReelsPerProfile": 20,
    "includeVideoUrl": true,
    "sortBy": "relevance",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/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 = {
    "profiles": [
        "natgeo",
        "nasa",
    ],
    "maxReelsPerProfile": 20,
    "includeVideoUrl": True,
    "sortBy": "relevance",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/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 '{
  "profiles": [
    "natgeo",
    "nasa"
  ],
  "maxReelsPerProfile": 20,
  "includeVideoUrl": true,
  "sortBy": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/instagram-reels-scraper --silent --output-dataset

```

## MCP server setup

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