# Instagram Reels Audio Scraper (`parsebird/instagram-reels-audio-scraper`) Actor

Find the Reels using any Instagram sound or song. Get plays, likes, comments, captions, hashtags and creators for each Reel, plus the audio title, artist and total Reel count.

- **URL**: https://apify.com/parsebird/instagram-reels-audio-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.29 / 1,000 instagram audios

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 Audio Scraper

Instagram Reels Audio Scraper finds the **Reels that use any Instagram sound or song**. For each Reel it returns plays, likes, comments, caption, hashtags and creator. For each sound it adds the title, artist and the total number of Reels using it.

<table><tr>
<td style="border-left:4px solid #E1306C;padding:12px 16px;font-weight:600">
Paste an audio ID or an Instagram audio link and get up to about 200 Reels per sound, with play counts ready to rank, creator usernames for outreach and a summary row per sound. No Instagram login needed.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Use the Apify actor "parsebird/instagram-reels-audio-scraper" (actor ID: parsebird~instagram-reels-audio-scraper) to find Instagram Reels that use a sound, via the ApifyClient: client.actor("parsebird/instagram-reels-audio-scraper").call(run_input={"audioInputs": ["579408562507956"], "maxReelsPerAudio": 100, "maxResults": 500}). Inputs: audioInputs (array of strings, required: Instagram audio IDs such as "579408562507956" or audio URLs such as "https://www.instagram.com/reels/audio/579408562507956/"); includeReelsUsingAudio (boolean, default true; false = only one audio_summary row per sound); maxReelsPerAudio (integer, default 50; Instagram shows logged-out visitors about 200 Reels per sound); maxAudioPages (integer, optional, about 12 Reels per page); maxResults (integer, default 250, total rows); includeRaw (boolean, default false, adds the full Instagram media object as raw); proxyConfiguration (object, default Apify Proxy). Output: one dataset row per item with record_type "audio_summary" (audio_id, audio_url, audio_title, audio_artist, uses_original_audio, audio_reel_count, audio_reel_count_text, audio_cover_url, reels_found) or "reel" (reel_id, shortcode, reel_url, caption, caption_hashtags, mentions, play_count, ig_play_count, fb_play_count, like_count, comment_count, counts_hidden, video_duration_secs, has_audio, thumbnail_url, video_url, width, height, is_paid_partnership, coauthors, location_name, author_id, author_username, author_full_name, author_is_verified, author_profile_pic_url, posted_at, plus the audio fields). Every row has the same keys; source_input and scraped_at are always set. A RUN_SUMMARY record in the default key-value store holds savedCount, chargedCount, stopReason (finished | max-results-reached | charge-limit-reached | blocked | no-input) and per-audio stats. Pricing: pay per row saved. Full API spec: https://apify.com/parsebird/instagram-reels-audio-scraper/api. Get your token: https://console.apify.com/account/integrations.
```

### What is Instagram Reels Audio Scraper?

**Instagram Reels Audio Scraper** is an **Instagram audio scraper and unofficial Instagram audio API**. It reads the public "Reels using this audio" feed on [Instagram](https://www.instagram.com) for any sound and turns it into clean data you can sort, chart and export.

Use it to answer questions like:

- Which Reels are using this trending sound, and which ones got the most plays?
- Who are the creators getting the most views with our song?
- How many Reels use our campaign audio this week compared with last week?
- Which captions and hashtags do creators pair with this sound?

The easiest way to try it: click **Start** with the example input. It returns the song *Believer* by Imagine Dragons plus 50 Reels that use it.

### What can Instagram Reels Audio Scraper do?

- 🎵 **Sound to Reels**: turn one audio ID into a list of the Reels using it, about 12 per page, up to roughly 200 per sound for logged-out visitors.
- 📊 **Engagement per Reel**: `play_count`, `like_count` and `comment_count` come back as numbers, ready to rank. Play counts are also split into Instagram and Facebook plays.
- 🏷️ **Sound details**: title, artist, whether it is someone's original audio, cover image and Instagram's total Reel count for the sound (for example `2M reels`).
- 👤 **Creators**: username, full name, verified badge, profile picture and user ID for every Reel, plus co-authors and paid-partnership flags.
- 🔗 **Flexible input**: paste audio IDs or any form of audio link, including `https://www.instagram.com/reels/audio/<id>/<song-name>/` share links.
- 🧾 **Two clear record types**: `record_type` separates the `audio_summary` row for each sound from its `reel` rows. Every row has the same keys, so the dataset loads cleanly into Excel, Google Sheets or a database.
- ⏱️ **Runs on Apify**: [schedule](https://docs.apify.com/platform/schedules) weekly runs to track how fast a sound spreads, call it through the [Apify API](https://docs.apify.com/api/v2) or [Apify MCP](https://docs.apify.com/platform/integrations/mcp) from an AI agent, and send results to Google Sheets, Slack, Make, Zapier or webhooks with [integrations](https://apify.com/integrations). Export as **JSON, CSV, Excel**, HTML or XML.

### What data can you extract from Instagram audio?

| Field | Description |
|-------|-------------|
| `record_type` | `audio_summary` (one per sound) or `reel` (one per Reel) |
| `audio_id`, `audio_url` | The sound's ID and its Instagram audio page |
| `audio_title`, `audio_artist`, `uses_original_audio` | Song title and artist, or the creator's name and "Original audio" |
| `audio_reel_count`, `audio_reel_count_text` | Instagram's total Reel count for the sound, e.g. `2000000` and `2M reels` (summary rows) |
| `reels_found` | How many Reels this run saved for the sound (summary rows) |
| `reel_id`, `shortcode`, `reel_url` | The Reel's IDs and link |
| `caption`, `caption_hashtags`, `mentions` | Caption text plus hashtags and @mentions parsed from it |
| `play_count`, `ig_play_count`, `fb_play_count` | Total plays, and plays on Instagram and on Facebook |
| `like_count`, `comment_count`, `counts_hidden` | Likes and comments; `like_count` is empty when the creator hid likes |
| `video_duration_secs`, `has_audio`, `width`, `height` | Video details |
| `thumbnail_url`, `video_url` | Cover image and video file links (Instagram media links expire after a while) |
| `author_username`, `author_full_name`, `author_is_verified`, `author_id`, `author_profile_pic_url` | The creator who posted the Reel |
| `coauthors`, `is_paid_partnership`, `location_name` | Collab co-authors, branded-content flag and tagged location |
| `posted_at`, `scraped_at`, `source_input` | Post time, collection time and the input that produced the row |

### How to scrape Reels by Instagram audio

1. Find the sound on Instagram: open a Reel, tap the **sound name** at the bottom to open its audio page, then copy the link. The number in the link (`/reels/audio/579408562507956/`) is the audio ID.
2. Open [Instagram Reels Audio Scraper](https://apify.com/parsebird/instagram-reels-audio-scraper) in Apify Console and click **Try for free**.
3. Paste one or more audio IDs or links into **Audio IDs or audio URLs**.
4. Set **Max Reels per audio** and **Max results** to the number of rows you need.
5. Click **Start**. Download the dataset as JSON, CSV or Excel, or read it through the API. Open the **Reels** view to rank by plays, or the **Audio summaries** view for one row per sound.

### Input examples

**Reels that use a sound:**

```json
{
  "audioInputs": ["579408562507956"],
  "maxReelsPerAudio": 50
}
```

**A deep pull on several sounds, links and IDs mixed:**

```json
{
  "audioInputs": [
    "https://www.instagram.com/reels/audio/579408562507956/believer/",
    "237374766849855"
  ],
  "maxReelsPerAudio": 500,
  "maxResults": 1000
}
```

**Weekly count check without the Reels (one row per sound):**

```json
{
  "audioInputs": ["579408562507956", "237374766849855"],
  "includeReelsUsingAudio": false
}
```

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `audioInputs` | array | **Yes** | — | Instagram audio IDs or audio page URLs |
| `includeReelsUsingAudio` | boolean | No | `true` | Save the Reels using each sound; `false` saves only the summary row |
| `maxReelsPerAudio` | integer | No | `50` | Reels to save per sound |
| `maxResults` | integer | No | `250` | Total rows to save in the run (summary rows included) |
| `maxAudioPages` | integer | No | no cap | Feed pages to read per sound (about 12 Reels each) |
| `includeRaw` | boolean | No | `false` | Add the full Instagram media object as `raw` |
| `proxyConfiguration` | object | No | Apify Proxy | Proxy settings (see FAQ) |

### Output example

A `reel` row:

```json
{
  "record_type": "reel",
  "source_input": "579408562507956",
  "audio_id": "579408562507956",
  "audio_url": "https://www.instagram.com/reels/audio/579408562507956/",
  "audio_title": "Believer",
  "audio_artist": "Imagine Dragons",
  "uses_original_audio": false,
  "reel_id": "3977288709674031466",
  "shortcode": "DcyKwJFStlq",
  "reel_url": "https://www.instagram.com/reel/DcyKwJFStlq/",
  "caption": "🎵 Song: Believer\n🎤 Artist: Imagine Dragons\n💿 Album: Evolve\n\nFollow for more songs @inklyricsdaily \n.\n.\n.\n.\n#lyrics #beliver #inklyricsdaily",
  "caption_hashtags": ["lyrics", "beliver", "inklyricsdaily"],
  "mentions": ["inklyricsdaily"],
  "play_count": 7519,
  "ig_play_count": 7182,
  "fb_play_count": 337,
  "like_count": 201,
  "comment_count": 5,
  "counts_hidden": false,
  "video_duration_secs": 23.707,
  "has_audio": true,
  "thumbnail_url": "https://instagram.fkul10-2.fna.fbcdn.net/v/t51.82787-15/791143430_...",
  "video_url": "https://instagram.fkul15-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQNMzBZ...",
  "width": 540,
  "height": 960,
  "is_paid_partnership": false,
  "coauthors": [],
  "location_name": null,
  "author_id": "16754751770",
  "author_username": "inklyricsdaily",
  "author_full_name": "Ink Lyrics Daily",
  "author_is_verified": false,
  "posted_at": "2026-09-02T11:50:02.000Z",
  "scraped_at": "2026-09-30T13:19:04.900Z"
}
```

The `audio_summary` row for the same sound (empty Reel fields left out here):

```json
{
  "record_type": "audio_summary",
  "source_input": "579408562507956",
  "audio_id": "579408562507956",
  "audio_url": "https://www.instagram.com/reels/audio/579408562507956/",
  "audio_title": "Believer",
  "audio_artist": "Imagine Dragons",
  "uses_original_audio": false,
  "audio_reel_count": 2000000,
  "audio_reel_count_text": "2M reels",
  "audio_cover_url": "https://scontent.fkul15-1.fna.fbcdn.net/v/t39.30808-6/426851752_...",
  "reels_found": 50,
  "scraped_at": "2026-09-30T13:19:04.897Z"
}
```

Each run also writes a `RUN_SUMMARY` record to the default key-value store with `savedCount`, `chargedCount`, `stopReason` and per-sound stats (`reels_saved`, `pages_read`, `more_available`). `stopReason` is one of `finished`, `max-results-reached`, `charge-limit-reached`, `blocked` or `no-input`, so code and AI agents can branch on it.

### How much does it cost to scrape Instagram audio?

Instagram Reels Audio Scraper uses pay-per-event pricing. You pay for each row saved to the dataset: each Reel, and each sound's summary row. Sounds that return nothing are not saved and not charged.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| Result scraped (per 1,000) | **$2.49** | **$1.99** | **$1.49** | **$1.29** |

The example run (1 sound + 50 Reels = 51 rows) costs about $0.13 on the Free plan. A full pull of about 200 Reels for one sound costs about $0.50 on the Free plan. You can set a maximum cost per run in the run options, and the actor stops when it is reached.

### Python and JavaScript API examples

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/instagram-reels-audio-scraper").call(run_input={
    "audioInputs": ["579408562507956"],
    "maxReelsPerAudio": 200,
})
reels = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items() if r["record_type"] == "reel"]
for reel in sorted(reels, key=lambda r: r["play_count"] or 0, reverse=True)[:10]:
    print(reel["play_count"], reel["author_username"], reel["reel_url"])
```

**JavaScript:**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/instagram-reels-audio-scraper').call({
    audioInputs: ['https://www.instagram.com/reels/audio/237374766849855/'],
    maxReelsPerAudio: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const summary = items.find((i) => i.record_type === 'audio_summary');
console.log(summary.audio_artist, summary.audio_title, summary.audio_reel_count_text);
items.filter((i) => i.record_type === 'reel').forEach((r) => console.log(r.author_username, r.play_count));
```

See the [API tab](https://apify.com/parsebird/instagram-reels-audio-scraper/api) for more clients and endpoints.

### FAQ

**How many Reels can I get per sound?**
Instagram shows logged-out visitors roughly 200 Reels per sound; in our tests we got between 196 and 251 for popular songs. Instagram's own total (for example "2M reels") is returned in `audio_reel_count` on the summary row. Smaller or newer sounds return fewer Reels.

**Can it tell me which sound a Reel uses, or scan a profile or a keyword?**
No. Instagram hides the audio of a Reel from logged-out visitors, including on Reel pages, profiles and embeds. This actor does not log in to Instagram, so it works from the sound's side only: give it a sound and it finds the Reels using it. To get a sound's ID, open its audio page from the Instagram app or website.

**Why is `audio_title` empty for some sounds?**
For some sounds Instagram shows a generic "Audio on Instagram" page to logged-out visitors and hides the name. The actor still returns the Reels using the sound, and logs a note for that sound.

**Why did a sound return nothing?**
The ID may be wrong, the sound may have been removed or restricted, or the song may not be licensed in the country of the IP address Instagram sees. The run log names each sound that returned nothing, and it is not charged.

**Why is `like_count` empty for some Reels?**
The creator hid the like count. `counts_hidden` is `true` for those Reels. Plays and comments are still returned.

**Do I need a proxy?**
Keep the default. The actor uses the direct connection first and switches to Apify Proxy automatically if Instagram starts refusing requests.

**How fast is it?**
In our tests, 10 sounds with up to 400 Reels each (440 rows in total) took about 90 seconds.

**Do the video and image links last?**
Instagram media links expire after some time. Download the files soon after the run, or store `reel_url` and look the Reel up again later.

**Can I schedule runs and connect other tools?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) for recurring runs and [integrations](https://docs.apify.com/platform/integrations) for Google Sheets, Zapier, Make, n8n, Slack or webhooks.

**Something is missing or broken?**
Open an issue in the **Issues** tab. We read every report and fix problems quickly.

### Is it legal to scrape Instagram audio pages?

Instagram Reels Audio Scraper only collects information that Instagram shows to anyone without logging in: public Reels, their public engagement numbers and the public profile names of their creators. It does not log in, and it does not collect private accounts or private messages. Creator usernames and names can still be personal data under laws such as the EU GDPR and the California CCPA, so make sure you have a lawful reason to store and use them. Videos, images and music are protected by copyright; use the links for analysis, not for republishing. You should also check Instagram's terms of use. If you are unsure, ask a lawyer. Read more in Apify's blog post [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

### Other social media and music scrapers

- [Spotify Play Count Scraper & API](https://apify.com/parsebird/spotify-play-count-scraper): play counts for Spotify tracks and albums, useful next to Instagram sound data
- [SoundCloud Scraper](https://apify.com/parsebird/soundcloud-scraper): tracks, plays and artists from SoundCloud
- [Threads Scraper](https://apify.com/parsebird/threads-scraper): profiles, posts and search results from Meta's Threads
- [Threads Search Scraper](https://apify.com/parsebird/threads-search-scraper): Threads posts for any keyword or tag
- [TikTok Live Search Scraper](https://apify.com/parsebird/tiktok-live-search-scraper): live TikTok streams for any keyword
- [TikTok Slideshow Downloader](https://apify.com/parsebird/tiktok-slideshow-downloader): photos and music from TikTok slideshow posts
- [Bio-Link Scraper](https://apify.com/parsebird/biolink-scraper): contact links from Linktree, Beacons and similar pages, useful for creator outreach
- [Social Handle Checker](https://apify.com/parsebird/social-handle-checker): check whether a handle exists on TikTok, X, Snapchat, Twitch and GitHub

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/instagram-reels-audio-scraper/changelog.md

# Actor input Schema

## `audioInputs` (type: `array`):

Add Instagram sounds, one per line: an audio ID such as <code>579408562507956</code>, or an audio page URL such as <code>https://www.instagram.com/reels/audio/579408562507956/</code>. On Instagram, tap the sound name under a Reel to open its audio page.

## `includeReelsUsingAudio` (type: `boolean`):

Save one row for every Reel that uses each sound. Turn off to get only the audio summary row (title, artist, total Reel count).

## `maxReelsPerAudio` (type: `integer`):

Stop after this many Reels for each sound. Instagram shows logged-out visitors about 200 Reels per sound, so higher values rarely add more.

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

Stop the whole run after this many saved rows (audio summaries plus Reels). Leave empty for no overall cap.

## `maxAudioPages` (type: `integer`):

Optional cap on feed pages read per sound. One page holds about 12 Reels. Leave empty to rely on Max Reels per audio.

## `includeRaw` (type: `boolean`):

Add the full Instagram media object to each Reel row in a <code>raw</code> field. Useful for debugging; makes the dataset much larger.

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

Instagram limits requests per IP address and some songs are only licensed in certain countries. The default Apify Proxy handles both for most runs.

## Actor input object example

```json
{
  "audioInputs": [
    "579408562507956"
  ],
  "includeReelsUsingAudio": true,
  "maxReelsPerAudio": 50,
  "maxResults": 100,
  "includeRaw": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "audioInputs": [
        "579408562507956"
    ],
    "maxReelsPerAudio": 50,
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/instagram-reels-audio-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 = {
    "audioInputs": ["579408562507956"],
    "maxReelsPerAudio": 50,
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/instagram-reels-audio-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 '{
  "audioInputs": [
    "579408562507956"
  ],
  "maxReelsPerAudio": 50,
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call parsebird/instagram-reels-audio-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/instagram-reels-audio-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/97dQ65dwejRncK9OU/builds/ZcEUhNsB6CMi3ukC7/openapi.json
