# Instagram Reels Search Scraper (`maximedupre/instagram-reels-search-scraper`) Actor

Search public Instagram Reels by keyword phrases or hashtags. Get structured Reel records with captions, hashtags, publication times, engagement counts, author details, media links, and optional timestamped transcripts.

- **URL**: https://apify.com/maximedupre/instagram-reels-search-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Videos, Marketing
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 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

### 🔎 Find Public Instagram Reels by Search Term

For content researchers, social media teams, and developers, this Actor searches the public, currently ranked Instagram Reels surface by keyword phrases or hashtags. It returns structured Reel records with captions, hashtags and mentions, publication times, engagement counts, author details, public media links, and optional timestamped transcripts. Use the rows to study content, find examples, or build a research workflow. It is not an exhaustive historical archive.

- Search public Reels with a keyword phrase or hashtag using **[Instagram Reels Search Scraper](https://apify.com/maximedupre/instagram-reels-search-scraper/examples/instagram-reels-search-scraper)**.
- Find public Instagram video matches for a topic with **[Instagram Video Search](https://apify.com/maximedupre/instagram-reels-search-scraper/examples/instagram-video-search)**.
- Collect a structured row for a matching Reel with **[Instagram Reel Scraper](https://apify.com/maximedupre/instagram-reels-search-scraper/examples/instagram-reel-scraper)**.
- Continue a prior search from its returned cursor with **[Instagram Reels Search](https://apify.com/maximedupre/instagram-reels-search-scraper/examples/instagram-reels-search)**.
- Add detected language and time-aligned speech segments when available with **[Instagram Reels Transcript](https://apify.com/maximedupre/instagram-reels-search-scraper/examples/instagram-reels-transcript)**.

#### 📦 Get Structured Reel Records

Each saved row describes one first eligible public Reel found for a submitted search value. The saved searchTerm shows the value that caused that first save. If the same Reel appears again from another submitted value, the later match is ignored. One row does not collect every matching value.

**Reel identity and engagement**

Each row can include a stable Reel ID, canonical permalink, the search value that produced the row, caption text, extracted hashtags and mentions, publication time, likes, comments, plays, and duration.

**Author, media, and enrichment**

Rows can include public author profile details, a thumbnail link, a source media link, alternate video variants, music attribution, and the public paid-partnership flag. Source media links are returned when available. The Actor does not permanently host or download the videos.

#### ▶️ Search the Current Reels Surface

Run a keyword phrase or hashtag search on the public, currently ranked Instagram Reels surface. The source can change its ordering, and the Actor does not promise a complete historical archive.

1. Enter one or more keyword phrases or hashtags.
2. Use the same filters and result target for every search value in the run.
3. Set a target in Maximum results, or leave it empty to return all available results until the source is exhausted.
4. Paste a continuation token from an earlier run to continue that search with the same search terms and filters.
5. Open the default dataset after the run completes.

When two submitted values lead to the same Reel, the Actor saves the first eligible occurrence and ignores later matches. The saved searchTerm identifies the value that led to that first row.

#### ⚙️ Input

Use one run for search values that share the same filters and result target. The searchTerms field is required. The other fields are optional.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| searchTerms | string array | Required. Enter one or more keyword phrases or hashtags. Every value in this run uses the same filters and result target. |
| continuationToken | string | Continue one earlier search from its returned position. Use the same search terms and filters. |
| maxItems | integer | Set the target number of matching Reels. Leave it empty to return all available results until the source is exhausted. The public schema does not set a fixed upper bound. |
| includeTranscripts | boolean | Add a timestamped transcript with detected language and time-aligned segments when speech can be transcribed. Each transcript is charged separately. |
| minLikes | integer | Keep only Reels with at least this many public likes. Leave it empty to keep all like counts. |
| minPlays | integer | Keep only Reels with at least this many public plays or views. Leave it empty to keep all play or view counts. |
| publishedAfter | date string | Keep only Reels published on or after this calendar date. Leave it empty to include any publication date. |

**Example input**

This is the public input from a successful current-beta run.

```json
{
  "searchTerms": [
    "travel"
  ],
  "maxItems": 10,
  "includeTranscripts": false
}
```

#### 🧾 Output

The public output schema exposes a results link to the default dataset. Each dataset row is a structured public Instagram Reel record.

**Output link**

| Field | Type | What it does |
| --- | --- | --- |
| results | string | Opens the default dataset overview with the matching Reel rows. |

**Reel row without a transcript**

This shape contains the Reel, author, media, and optional music fields. Optional fields appear only when the public source provides them.

| Field | Type | What it does |
| --- | --- | --- |
| reelId | string | Stable Instagram Reel ID. |
| permalink | URL string | Canonical public URL of the Reel. |
| searchTerm | string | Submitted search value that caused this Reel to be saved. |
| caption | string | Reel caption when available. |
| hashtags | string array | Hashtags extracted from the caption when available. |
| mentions | string array | Instagram accounts mentioned in the caption when available. |
| publishedAt | date-time string | Source publication time when available. |
| likes | integer | Public like count when available. |
| comments | integer | Public comment count when available. |
| plays | integer | Public play or view count when available. |
| durationSeconds | number | Reel duration in seconds when available. |
| media | object | Public media links and available video variants. |
| media.thumbnailUrl | URL string | Direct thumbnail URL when available. |
| media.videoUrl | URL string | Main direct video URL when available. |
| media.videoVariants | object array | Other direct video URLs with source-provided size or quality details. |
| media.videoVariants\[].url | URL string | Direct URL for this video variant. |
| media.videoVariants\[].width | integer | Variant width in pixels when available. |
| media.videoVariants\[].height | integer | Variant height in pixels when available. |
| media.videoVariants\[].bitrate | integer | Variant bitrate in bits per second when available. |
| author | object | Public identity and profile facts for the Reel author. |
| author.username | string | Reel author's Instagram username. |
| author.displayName | string | Public display name when available. |
| author.profileUrl | URL string | Public profile URL when available. |
| author.profileImageUrl | URL string | Direct profile image URL when available. |
| author.isVerified | boolean | Whether the author is publicly marked as verified when available. |
| author.isPrivate | boolean | Whether the author is publicly marked as private when available. |
| music | object | Public music attribution when available. |
| music.title | string | Public music title when available. |
| music.artist | string | Public music artist when available. |
| isPaidPartnership | boolean | Public paid-partnership indicator when available. |

**Genuine row**

This complete row is copied from a successful current-beta run.

```json
{
  "reelId": "POLARIS_3809847048594935553",
  "permalink": "https://www.instagram.com/reel/DTfS7SMEk8B/",
  "searchTerm": "travel",
  "caption": "Switzerland all the year 🇨🇭🥹\n\nWhich one is your preferred month?\n\n@life_samour_style \n\n#switzerland #life_samour_style #season #swiss #travel",
  "hashtags": [
    "switzerland",
    "life_samour_style",
    "season",
    "swiss",
    "travel"
  ],
  "mentions": [
    "life_samour_style"
  ],
  "publishedAt": "2026-01-14T11:15:50.000Z",
  "likes": 3297157,
  "comments": 6253,
  "plays": 30175127,
  "durationSeconds": 14.8,
  "media": {
    "thumbnailUrl": "https://scontent-arn2-1.cdninstagram.com/v/t51.71878-15/615887274_3237902143054688_1140202660103312350_n.jpg?stp=dst-jpegr_e15_tt6&_nc_cat=102&ig_cache_key=MzgwOTg0NzA0ODU5NDkzNTU1Mw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5oZHIudmlkZW9fZGVmYXVsdF9jb3Zlcl9mcmFtZS5DMyJ9&_nc_ohc=TTjz14PY1k8Q7kNvwEdLruF&_nc_oc=AdoyVQGsNeQBWqm-y1AZPIXP8GAzggmTbf5NlOQbd8PR9BoKTOcN7FfpsyE8acv4j_0&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&se=-1&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_gid=nKaghpOvk3O3h4BzaCtg1Q&_nc_ss=7a22e&oh=00_AQLoGc99R1juogvxL3ZK3V69ypH2VCeGhDCf1h0FqWy_Hg&oe=6AB72139",
    "videoUrl": "https://scontent-arn2-1.cdninstagram.com/o1/v/t2/f2/m86/AQP_hqF-tPtv5Xofan7SoZA6fFe5GfcwBPguliTCR2r7fcmzChiIeMjhkMYEEKZ3KME496CkxqO52dnKpJbiL2V0S5Zu2CLuvtytWLY.mp4?_nc_cat=107&_nc_sid=5e9851&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_ohc=OQ9v9nZgqFkQ7kNvwFk8XRv&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTIyODQ5OTg0OTI0MDQwMywiYXNzZXRfYWdlX2RheXMiOjI1MCwidmlfdXNlY2FzZV9pZCI6MTA4MjcsImR1cmF0aW9uX3MiOjE0LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=ab86e0945adfe464&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC85QzQxRUIyNkM3RDEwMzNGOEE3QzFFMzczQjRDRkU5Ml92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYOnBhc3N0aHJvdWdoX2V2ZXJzdG9yZS9HTWVVdGlUQWRRSThnbjRHQUpMRnVqY1ROMUVJYnN0VEFRQUYVAgLIARIAKAAYABsCiAd1c2Vfb2lsATEScHJvZ3Jlc3NpdmVfcmVjaXBlATEVAAAmpv32kY3UrgQVAigCQzMsF0AtmZmZmZmaGBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX-B2WWqQEA&_nc_gid=nKaghpOvk3O3h4BzaCtg1Q&_nc_ss=7a22e&_nc_zt=28&oh=00_AQJId37a5okCphsPzXnrimwVUwnLkSAB3yvPZBjCiNlVQw&oe=6AB32EFC",
    "videoVariants": [
      {
        "url": "https://scontent-arn2-1.cdninstagram.com/o1/v/t2/f2/m86/AQP_hqF-tPtv5Xofan7SoZA6fFe5GfcwBPguliTCR2r7fcmzChiIeMjhkMYEEKZ3KME496CkxqO52dnKpJbiL2V0S5Zu2CLuvtytWLY.mp4?_nc_cat=107&_nc_sid=9ca052&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_ohc=OQ9v9nZgqFkQ7kNvwFk8XRv&efg=eyJ2ZW5jb2RlX3RhZyI6ImlnLXhwdmRzLmNsaXBzLmMyLUMzLmRhc2hfYmFzZWxpbmVfMV92MSIsInZpZGVvX2lkIjpudWxsLCJvaWxfdXJsZ2VuX2FwcF9pZCI6OTM2NjE5NzQzMzkyNDU5LCJjbGllbnRfbmFtZSI6ImlnIiwieHB2X2Fzc2V0X2lkIjoxMjI4NDk5ODQ5MjQwNDAzLCJhc3NldF9hZ2VfZGF5cyI6MjUwLCJ2aV91c2VjYXNlX2lkIjoxMDgyNywiZHVyYXRpb25fcyI6MTQsImJpdHJhdGUiOjM4ODIzNjUsInVybGdlbl9zb3VyY2UiOiJ3d3cifQ%3D%3D&ccb=17-1&_nc_gid=nKaghpOvk3O3h4BzaCtg1Q&_nc_ss=7a22e&_nc_zt=28&oh=00_AQJ0uH0pudpkEqm5NjtzInD6MgHYBQkZysU2otXcc_QCog&oe=6AB32EFC",
        "width": 720,
        "height": 1280,
        "bitrate": 3882365
      },
      {
        "url": "https://scontent-arn2-1.cdninstagram.com/o1/v/t2/f2/m86/AQNonvGY_N4qcTLS9C_PHYX2JPOOd51gb1JOJ_E_i-EK6nfN2asCQtGuK4OMb51xM3fINiu8GehNBhWj4uboD2FbLF-BMVoAlbYolUA.mp4?_nc_cat=104&_nc_sid=9ca052&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_ohc=d53WHfmhzPAQ7kNvwHdC3AJ&efg=eyJ2ZW5jb2RlX3RhZyI6ImlnLXhwdmRzLmNsaXBzLmMyLUMzLmRhc2hfYmFzZWxpbmVfM192MSIsInZpZGVvX2lkIjpudWxsLCJvaWxfdXJsZ2VuX2FwcF9pZCI6OTM2NjE5NzQzMzkyNDU5LCJjbGllbnRfbmFtZSI6ImlnIiwieHB2X2Fzc2V0X2lkIjoxMjI4NDk5ODQ5MjQwNDAzLCJhc3NldF9hZ2VfZGF5cyI6MjUwLCJ2aV91c2VjYXNlX2lkIjoxMDgyNywiZHVyYXRpb25fcyI6MTQsImJpdHJhdGUiOjU1MTIwMSwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&_nc_gid=nKaghpOvk3O3h4BzaCtg1Q&_nc_ss=7a22e&_nc_zt=28&oh=00_AQIey2m8xeWEGB3xUMltZ1tFpnyg4HcPwMRPv80CUCJ2hg&oe=6AB30919",
        "width": 360,
        "height": 640,
        "bitrate": 551201
      }
    ]
  },
  "author": {
    "username": "life_samour_style",
    "displayName": "Mour & Sami",
    "profileUrl": "https://www.instagram.com/life_samour_style/",
    "profileImageUrl": "https://scontent-arn2-1.cdninstagram.com/v/t51.82787-19/584635801_17922495753191367_8918713359859714107_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2gEFLqraM3lhWlFFNX_LgO4qQGo5cwHnoxfE7xMvNiqk_Ue2qM2ni-3W7jNX_nBsU2M&_nc_ohc=mptFxjYCsKUQ7kNvwEIHJmM&_nc_gid=nKaghpOvk3O3h4BzaCtg1Q&edm=APs17CUBAAAA&ccb=7-5&oh=00_AQLL8FW4-U85rZdfc1RyMdm_0HfuE6mGVPOGR8oxT_JIGQ&oe=6AB7018C&_nc_sid=10d13b",
    "isVerified": true,
    "isPrivate": false
  },
  "isPaidPartnership": false
}
```

**Reel row with a transcript request**

This shape keeps every field above and adds transcript fields. When a transcript is produced, status is available and language and segments are included. When it is not produced, the row keeps transcript with status unavailable.

| Field | Type | What it does |
| --- | --- | --- |
| reelId | string | Stable Instagram Reel ID. |
| permalink | URL string | Canonical public URL of the Reel. |
| searchTerm | string | Submitted search value that caused this Reel to be saved. |
| caption | string | Reel caption when available. |
| hashtags | string array | Hashtags extracted from the caption when available. |
| mentions | string array | Instagram accounts mentioned in the caption when available. |
| publishedAt | date-time string | Source publication time when available. |
| likes | integer | Public like count when available. |
| comments | integer | Public comment count when available. |
| plays | integer | Public play or view count when available. |
| durationSeconds | number | Reel duration in seconds when available. |
| media | object | Public media links and available video variants. |
| media.thumbnailUrl | URL string | Direct thumbnail URL when available. |
| media.videoUrl | URL string | Main direct video URL when available. |
| media.videoVariants | object array | Other direct video URLs with source-provided size or quality details. |
| media.videoVariants\[].url | URL string | Direct URL for this video variant. |
| media.videoVariants\[].width | integer | Variant width in pixels when available. |
| media.videoVariants\[].height | integer | Variant height in pixels when available. |
| media.videoVariants\[].bitrate | integer | Variant bitrate in bits per second when available. |
| author | object | Public identity and profile facts for the Reel author. |
| author.username | string | Reel author's Instagram username. |
| author.displayName | string | Public display name when available. |
| author.profileUrl | URL string | Public profile URL when available. |
| author.profileImageUrl | URL string | Direct profile image URL when available. |
| author.isVerified | boolean | Whether the author is publicly marked as verified when available. |
| author.isPrivate | boolean | Whether the author is publicly marked as private when available. |
| music | object | Public music attribution when available. |
| music.title | string | Public music title when available. |
| music.artist | string | Public music artist when available. |
| isPaidPartnership | boolean | Public paid-partnership indicator when available. |
| transcript | object | Requested transcript or its availability status. |
| transcript.status | string | Transcript status: available or unavailable. |
| transcript.language | string | Detected transcript language when a transcript is available. |
| transcript.segments | object array | Time-aligned spoken-word segments when a transcript is available. |
| transcript.segments\[].startSeconds | number | Segment start time in seconds. |
| transcript.segments\[].endSeconds | number | Segment end time in seconds. |
| transcript.segments\[].text | string | Words spoken during the segment. |

**Genuine row**

This complete row is copied from a successful current-beta run with transcript enrichment requested.

```json
{
  "reelId": "POLARIS_3555486811487409459",
  "permalink": "https://www.instagram.com/reel/DFXoGrSSxUz/",
  "searchTerm": "podcast clips",
  "caption": "True 🤍🥺\n\n#podcast #podcastersofinstagram #podcasting #trending #podcasters #reels #explore #viral #explorepage #podcasts #fyp",
  "hashtags": [
    "podcast",
    "podcastersofinstagram",
    "podcasting",
    "trending",
    "podcasters",
    "reels",
    "explore",
    "viral",
    "explorepage",
    "podcasts",
    "fyp"
  ],
  "mentions": [],
  "publishedAt": "2025-01-28T12:25:44.000Z",
  "likes": 258640,
  "comments": 395,
  "plays": 3156686,
  "durationSeconds": 12.374945,
  "media": {
    "thumbnailUrl": "https://scontent-sjc6-1.cdninstagram.com/v/t51.75761-15/475453288_17909757996065562_2925699891180018418_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=104&ig_cache_key=MzU1NTQ4NjgxMTQ4NzQwOTQ1OTE3OTA5NzU3OTkwMDY1NTYy.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjExNTguc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=zjc3CTytuRAQ7kNvwHaHBF5&_nc_oc=AdpR5EM-IJTEl2e1_3n13gGzwNhSZYwZ8r0UY5sBEDXd1shMLuzeQHn9MYmNn0LAzt8&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_gid=FGjq8F1wua1D7wC6iMUYuQ&_nc_ss=7a22e&oh=00_AQKGsYmLHEPlCk1lXTgsVmt9BHlfwFQOW0HoW1Nmf6edQA&oe=6AB706CE",
    "videoUrl": "https://scontent-sjc3-1.cdninstagram.com/o1/v/t2/f2/m367/AQMNKPThZiqXEulmUGWleTSA61oZNZa9RHxLnBSULGDAbsir03b0KLStgqa2DVuxDkllACQNy_NQJ68pauDoCUmRW46ckvOkOhTBTbQ.mp4?_nc_cat=105&_nc_sid=5e9851&_nc_ht=scontent-sjc3-1.cdninstagram.com&_nc_ohc=2eOfsFUibe4Q7kNvwGCr3cg&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTAyMjMzNzg0MzI3NDQzMCwiYXNzZXRfYWdlX2RheXMiOjYwMSwidmlfdXNlY2FzZV9pZCI6MTAwOTksImR1cmF0aW9uX3MiOjEyLCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=b3bd0e8221e76506&_nc_vs=HBksFQIYQGlnX2VwaGVtZXJhbC81OTQwNDAxMkE1RUQxMzZCRUY3NENCMzZCMjU4ODNBOF92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYR2lnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8xOTMyMzU3MDk3MjkzMjUxXzc0MDY1Mzc1MzQyOTA1NTQ1NjQubXA0FQICyAESACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJvyK6b_y89ADFQIoAkMzLBdAKL987ZFocxgSZGFzaF9iYXNlbGluZV8xX3YxEQB1_gdl5p0BAA&_nc_gid=FGjq8F1wua1D7wC6iMUYuQ&_nc_ss=7a22e&_nc_zt=28&oh=00_AQLYAuD3FUbZ2LYdvMeBWlaTtRNW1yAGNjQHkkoR3meT2A&oe=6AB7085E",
    "videoVariants": [
      {
        "url": "https://scontent-sjc3-1.cdninstagram.com/o1/v/t2/f2/m367/AQOAw1LOjh7x2VgKqsfIRwQno43Cq7zQeFxYnGpCb-RiOzuQbZIdTi8oW91fiYAq3CshsNGbasAkDiBvHPX6vklJn0sKpuxakqQrL6Sm0_3W2w.mp4?_nc_cat=105&_nc_sid=9ca052&_nc_ht=scontent-sjc3-1.cdninstagram.com&_nc_ohc=6ytjbrIJZQUQ7kNvwHjP7fS&efg=eyJ2ZW5jb2RlX3RhZyI6ImlnLXhwdmRzLmNsaXBzLmMyLUMzLmRhc2hfdnA5LWJhc2ljLWdlbjJfMzYwcCIsInZpZGVvX2lkIjpudWxsLCJvaWxfdXJsZ2VuX2FwcF9pZCI6OTM2NjE5NzQzMzkyNDU5LCJjbGllbnRfbmFtZSI6ImlnIiwieHB2X2Fzc2V0X2lkIjoxMDIyMzM3ODQzMjc0NDMwLCJhc3NldF9hZ2VfZGF5cyI6NjAxLCJ2aV91c2VjYXNlX2lkIjoxMDA5OSwiZHVyYXRpb25fcyI6MTIsImJpdHJhdGUiOjE2MTE3NywidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&_nc_gid=FGjq8F1wua1D7wC6iMUYuQ&_nc_ss=7a22e&_nc_zt=28&oh=00_AQLn0af8dqjdzYtKjqBZ_GZ0zq9eAq8a6_svd0Y_2hUK0g&oe=6AB6F9A7",
        "width": 360,
        "height": 640,
        "bitrate": 161177
      },
      {
        "url": "https://scontent-sjc6-1.cdninstagram.com/o1/v/t2/f2/m367/AQNo8b6b7MpHWj4ObSYrX5gB05QrWkjxkHdFb39mk-g8RLgIOaxESlenNx-NlSvX7M_eAig4MYYtpKlg9YGAIVF8LR7zYqBSwNyRBc6iiVdkxA.mp4?_nc_cat=104&_nc_sid=9ca052&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_ohc=67HWLIRoXIcQ7kNvwGDgk5V&efg=eyJ2ZW5jb2RlX3RhZyI6ImlnLXhwdmRzLmNsaXBzLmMyLUMzLmRhc2hfdnA5LWJhc2ljLWdlbjJfNTQwcCIsInZpZGVvX2lkIjpudWxsLCJvaWxfdXJsZ2VuX2FwcF9pZCI6OTM2NjE5NzQzMzkyNDU5LCJjbGllbnRfbmFtZSI6ImlnIiwieHB2X2Fzc2V0X2lkIjoxMDIyMzM3ODQzMjc0NDMwLCJhc3NldF9hZ2VfZGF5cyI6NjAxLCJ2aV91c2VjYXNlX2lkIjoxMDA5OSwiZHVyYXRpb25fcyI6MTIsImJpdHJhdGUiOjQxMTIxMCwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&_nc_gid=FGjq8F1wua1D7wC6iMUYuQ&_nc_ss=7a22e&_nc_zt=28&oh=00_AQINSepBUjGR4lpxwaj6ZU-GYB3WUnB4zgGePxDnEXLAaA&oe=6AB715A0",
        "width": 540,
        "height": 960,
        "bitrate": 411210
      },
      {
        "url": "https://scontent-sjc6-1.cdninstagram.com/o1/v/t2/f2/m367/AQOSmP2urw5PmidmRkQYEMdhWvNEbIRriU8FGR5Q2gxs8EVlVkNyD9rsh51nHzj6gtzCB56ENiumVw1tAVXmljeoQCJLsDU7fXJE8G_s_z_maQ.mp4?_nc_cat=102&_nc_sid=9ca052&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_ohc=tJ7YqSdl8_cQ7kNvwF8ZZFu&efg=eyJ2ZW5jb2RlX3RhZyI6ImlnLXhwdmRzLmNsaXBzLmMyLUMzLmRhc2hfdnA5LWJhc2ljLWdlbjJfNzIwcCIsInZpZGVvX2lkIjpudWxsLCJvaWxfdXJsZ2VuX2FwcF9pZCI6OTM2NjE5NzQzMzkyNDU5LCJjbGllbnRfbmFtZSI6ImlnIiwieHB2X2Fzc2V0X2lkIjoxMDIyMzM3ODQzMjc0NDMwLCJhc3NldF9hZ2VfZGF5cyI6NjAxLCJ2aV91c2VjYXNlX2lkIjoxMDA5OSwiZHVyYXRpb25fcyI6MTIsImJpdHJhdGUiOjczNjg5MiwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&_nc_gid=FGjq8F1wua1D7wC6iMUYuQ&_nc_ss=7a22e&_nc_zt=28&oh=00_AQLPczf24XNj8Vx091VszlRAVzMuvAE-SuZ_ld0WiSv5rQ&oe=6AB72C9A",
        "width": 720,
        "height": 1280,
        "bitrate": 736892
      },
      {
        "url": "https://scontent-sjc6-1.cdninstagram.com/o1/v/t2/f2/m367/AQMTUoYvVcS7D1C1t7z6pu90lDdNMYhdu-yHciG9TnvkXvbvJStl8E_XrRxQpdgUQbVQ04tnNPLqsqeA-MDxJaRFev_9Y8lnDIYZ5KW8wcxWDg.mp4?_nc_cat=107&_nc_sid=9ca052&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_ohc=Wu1xxMeehUgQ7kNvwGkMsrG&efg=eyJ2ZW5jb2RlX3RhZyI6ImlnLXhwdmRzLmNsaXBzLmMyLUMzLmRhc2hfdnA5LWJhc2ljLWdlbjJfMTA4MHAiLCJ2aWRlb19pZCI6bnVsbCwib2lsX3VybGdlbl9hcHBfaWQiOjkzNjYxOTc0MzM5MjQ1OSwiY2xpZW50X25hbWUiOiJpZyIsInhwdl9hc3NldF9pZCI6MTAyMjMzNzg0MzI3NDQzMCwiYXNzZXRfYWdlX2RheXMiOjYwMSwidmlfdXNlY2FzZV9pZCI6MTAwOTksImR1cmF0aW9uX3MiOjEyLCJiaXRyYXRlIjoxMDQzNzM5LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&_nc_gid=FGjq8F1wua1D7wC6iMUYuQ&_nc_ss=7a22e&_nc_zt=28&oh=00_AQLBonAfSocy9ntSTDTYTKBJrSPivotic6DykTiVEvwBEw&oe=6AB71F39",
        "width": 1080,
        "height": 1920,
        "bitrate": 1043739
      }
    ]
  },
  "author": {
    "username": "podcast.tallkss",
    "displayName": "PODCAST TALKS 🎧 | Meenal Kumawat",
    "profileUrl": "https://www.instagram.com/podcast.tallkss/",
    "profileImageUrl": "https://scontent-sjc6-1.cdninstagram.com/v/t51.2885-19/434558403_384481751175996_1070031451636521337_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDIyLmMyIn0&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2gEaTn5hlaFX0eTALaILDCUs6P8ZFHuVqUnOG6_VKEOlcw1sBozevAkRNkVhtJJdGJY&_nc_ohc=2HZMZZJh1D8Q7kNvwFWnVWx&_nc_gid=FGjq8F1wua1D7wC6iMUYuQ&edm=APs17CUBAAAA&ccb=7-5&oh=00_AQJlVO9dMwkWL_nMvzZKZ6jRNq1IBgYz06yFnZEikbHOnQ&oe=6AB71229&_nc_sid=10d13b",
    "isVerified": false,
    "isPrivate": false
  },
  "music": {
    "title": "Tune Jo Na Kaha - Raaz Yeh Dil Ka (feat. Version (Original Singer: Mohit Chauhan))",
    "artist": "Pritam"
  },
  "isPaidPartnership": false,
  "transcript": {
    "status": "unavailable"
  }
}
```

#### 💳 Pricing

**Charged events**

| Event | What it covers |
| --- | --- |
| Reel | One public Reel matching a submitted search value, with its canonical URL and structured metadata. The configured tiered rate is $0.0005 to $0.00135 per event, depending on Apify tier. |
| Reel transcript | One timestamped transcript for a Reel when transcription is requested and produced. This separate event is priced at $0.0054. |

Your total depends on the Reel and transcript events emitted in the run. Check the Store pricing panel for the current rate for your tier.

#### 🔌 Integrations

**Apify dataset and API**

Completed result data is available through the default dataset and standard Actor API access. Open the dataset from the run or request it through the API.

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I search by more than one value?

Yes. Add multiple keyword phrases or hashtags to search in one run. Every value uses the same filters and result target. Use separate runs when a search needs different settings.

##### What happens if I leave Maximum results empty?

The Actor keeps searching and returns all available results until the source is exhausted. The public schema does not define a fixed maximum.

##### Does this search cover every historical Reel?

No. It searches the public, currently ranked Reels surface. It is not an exhaustive historical archive, and source ordering can change.

##### Are private or login-gated Reels included?

No. The Actor retrieves public Reels without requiring an Instagram login. Private or login-gated content is outside its scope.

##### What does the continuation token do?

It lets you continue one earlier search from its returned position. Use the same search terms and filters when you continue it.

##### What happens if one Reel matches two search values?

The Actor saves the first eligible occurrence and ignores later duplicate matches. The saved searchTerm identifies the value that caused the first row.

##### What if a requested transcript is unavailable?

The primary Reel row remains, and transcript.status is unavailable. A transcript is added only when speech can be transcribed.

##### Can I filter by likes, plays, or publication date?

Yes. Use minLikes, minPlays, or publishedAfter. Values that do not meet an active filter are not returned.

##### Can I use the media URLs as permanent downloads?

No. The Actor returns public source media links when available. It does not permanently host or download the videos.

### 📝 Changelog

**v0.0** (21-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~instagram-reels-search-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Instagram User Search Scraper](https://apify.com/maximedupre/instagram-user-search-scraper) Find public Instagram accounts by niche or business keyword before choosing profile targets.
- [Instagram Post & Reel Content Scraper](https://apify.com/maximedupre/instagram-post-content-scraper) Collect posts and reels from a known public profile feed.
- [Instagram Reels Comments Scraper](https://apify.com/maximedupre/instagram-reels-comments-scraper) Review available top-level comments from a Reel URL.
- [Instagram Downloader API](https://apify.com/maximedupre/instagram-downloader-api) Get source-hosted media links and metadata from a known Reel URL.
- [Instagram Profile Stats Scraper](https://apify.com/maximedupre/instagram-profile-stats-scraper) Check public profile counts and recent content before deeper Reel research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `searchTerms` (type: `array`):

Enter one or more keyword phrases or hashtags to find public Instagram Reels. All values in this run use the same filters and result limit. Group keyword phrases together and hashtags together. Use separate runs when searches need different settings.

## `continuationToken` (type: `string`):

Optional. Paste the continuation position returned by an earlier run to continue that search. Use the same search terms and filters.

## `maxItems` (type: `integer`):

Stop after this many matching Reels. Leave empty to return all available results until the source is exhausted.

## `includeTranscripts` (type: `boolean`):

Add a timestamped transcript with detected language and time-aligned segments when speech can be transcribed. Each transcript is charged separately.

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

Only return Reels with at least this many public likes. Leave empty to keep all like counts.

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

Only return Reels with at least this many public plays or views. Leave empty to keep all play or view counts.

## `publishedAfter` (type: `string`):

Only return Reels published on or after this calendar date. Leave empty to include any publication date.

## Actor input object example

```json
{
  "searchTerms": [
    "travel"
  ],
  "maxItems": 10,
  "includeTranscripts": false
}
```

# Actor output Schema

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

Open the dataset to view matching Instagram Reels.

# 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 = {
    "searchTerms": [
        "travel"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/instagram-reels-search-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 = {
    "searchTerms": ["travel"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/instagram-reels-search-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 '{
  "searchTerms": [
    "travel"
  ],
  "maxItems": 10
}' |
apify call maximedupre/instagram-reels-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/instagram-reels-search-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/nSdVTwjVaoV3Ok44T/builds/XD7VfAyw4Eo3KkIgp/openapi.json
