# Instagram Music & Audio Scraper – Reels by Sound (`lance_api/instagram-music-audio-scraper`) Actor

Find public Instagram Reels using a specific song, sound, or Original Audio. Extract Reel URLs, videos, creators, plays, likes, comments, and music metadata from Instagram Audio URLs or numeric Audio IDs.

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

## Pricing

from $1.50 / 1,000 reel results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/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 Music & Audio Scraper API

Turn an **Instagram Audio URL or numeric Audio ID** into structured records for the public Reels using that sound. Each result can include Reel media, creator details, engagement signals, and music metadata—ready for export or downstream analysis.

**One Audio → many Reels. Duplicate-safe discovery. Result-based billing.**

- Discover multiple public Reels from one song, sound, or Original Audio.
- Batch up to 200 Audio URLs or IDs in one run.
- Process repeated Audio inputs once.
- Deliver the same Reel once per run, even when it appears across pages or Audio inputs.
- Keep the Dataset cleaner while avoiding duplicate Reel result charges.

```text
Instagram Audio URL or ID
        ↓
Public Reels using that sound
        ↓
Reel + creator + engagement + music metadata
```

### Key features

- **One Audio discovers many Reels:** Start from a single Instagram Audio URL or ID and collect individual public Reel records instead of opening each usage manually.
- **Licensed music and Original Audio:** Work with released tracks, catalog music, creator sounds, and Original Audio when public data is available.
- **Useful structured output:** Receive Reel links and media together with creator, engagement, and music information in one Dataset.
- **Batch processing:** Submit multiple Audio URLs or IDs in one run for repeatable research and automation workflows.
- **Duplicate-safe results:** Repeated Audio inputs are processed once, and the same Reel is delivered once per run.
- **Result-volume controls:** Limit exploration per sound and across the complete run to keep Dataset size and result-fee exposure predictable.

Use **Instagram Reels Downloader** instead when you already know the exact Reel URLs and want to extract those specific Reels.

### What data can you extract?

Each successful Dataset item represents one unique public Reel using the requested Instagram audio. Available fields can include:

- Audio ID, audio asset ID, audio cluster ID, and canonical music ID
- Licensed music or Original Audio classification
- Track title, artist, artist username, duration, cover, and audio URL
- Reel ID, shortcode, canonical URL, caption, publication time, and duration
- Download-ready Reel video and thumbnail URLs
- Creator ID, username, full name, and verification status
- Play, like, comment, and share counts when available

Instagram may not expose every optional field for every sound or Reel. Missing metadata is omitted or returned as `null` without failing an otherwise usable result.

### How to scrape Instagram Reels by music or audio

1. Open an Instagram Audio page and copy its URL, or copy its numeric Audio ID.
2. Add the value to `audioInputs`.
3. Choose how many Reels to explore for each Audio.
4. Set a run-wide `maxResults` guardrail.
5. Start the Actor and open the Dataset.

You do not need to determine whether a number is an audio asset ID, audio cluster ID, or canonical music ID before running the Actor.

### Supported Instagram audio types

- **Licensed music:** Released tracks and licensed catalog music used in public Reels.
- **Original Audio:** Creator sounds and original audio attached to public Reels.

This version starts from an Instagram Reels Audio URL or numeric Audio ID. It does not search by keyword, artist name, song title, or trending status.

### Input

```json
{
  "audioInputs": [
    "https://www.instagram.com/reels/audio/1005688403740006/"
  ],
  "maxReelsPerAudio": 50,
  "maxResults": 500
}
```

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `audioInputs` | array of strings | Required | Instagram Reels Audio URLs or numeric Audio IDs. Submit up to 200 unique inputs in one run; repeated inputs are normalized and processed once. |
| `maxReelsPerAudio` | integer | `50` | Controls how deeply each sound is explored, from 1 to 100 unique Reels. This prevents one high-volume Audio from consuming the complete run allowance. |
| `maxResults` | integer | `500` | Run-wide output guardrail, from 1 to 10,000 successful unique Reels. Use it to control Dataset size and result-fee exposure across a batch. It is not a total cost cap. |

Supported input formats:

```text
https://www.instagram.com/reels/audio/1005688403740006/
1005688403740006
```

### Output

Successful results are stored as **one Dataset row per unique Reel**. If an Audio input is invalid, unavailable, not found, or has no public Reel results, it can instead produce a non-billable status row explaining what happened. Unavailable inputs do not silently disappear.

> This example illustrates the Dataset structure. Values are sample data and are not presented as a live Instagram result.

```json
{
  "success": true,
  "status": "success",
  "inputAudio": "https://www.instagram.com/reels/audio/1005688403740006/",
  "audio": {
    "id": "1005688403740006",
    "type": "licensed_music",
    "title": "Sample track",
    "artist": "Sample artist",
    "durationSeconds": 97.74
  },
  "reel": {
    "id": "1234567890123456789_123456789",
    "shortcode": "SampleCode1",
    "url": "https://www.instagram.com/reel/SampleCode1/",
    "caption": "Sample caption",
    "publishedAt": "2026-01-15T10:30:00.000Z",
    "durationSeconds": 18.5,
    "videoUrl": "https://cdn.example.com/sample-reel.mp4"
  },
  "creator": {
    "id": "123456789",
    "username": "sample_creator",
    "fullName": "Sample Creator",
    "verified": false
  },
  "engagement": {
    "playCount": 12500,
    "likeCount": 840,
    "commentCount": 24,
    "shareCount": 51
  },
  "error": null
}
```

Media URLs can expire. Download the files or copy them into your own storage soon after the run.

### Status and errors

Status rows are not charged as Reel results.

| Status | Public error code | Meaning and output | Retry? | Reel result charge? |
| --- | --- | --- | --- | --- |
| `success` | — | A unique public Reel was delivered with the metadata currently available. | Not needed | Yes |
| `error` | `INVALID_MUSIC_INPUT` | The submitted value is not a supported Instagram Reels Audio URL or numeric Audio ID. A status row explains the problem. | No; correct the input | No |
| `music_not_found` | `MUSIC_NOT_FOUND` | The Audio could not be found or is no longer publicly available. A status row is returned. | Usually no; verify the URL or ID | No |
| `no_public_media` | `NO_PUBLIC_MEDIA` | The Audio was recognized, but no usable public Reel result was available. A status row is returned. | Usually no; public availability may change | No |
| `error` | `MUSIC_TEMPORARILY_UNAVAILABLE` | The Audio could not be processed at this time. A status row is returned without exposing implementation details. | Yes, try again later | No |

### How many Reels can one Instagram Audio URL return?

One Instagram Audio URL can return many Dataset items:

```text
1 Audio URL → 50 unique Reels → 50 Dataset items
1 Audio URL → 100 unique Reels → 100 Dataset items
```

`maxReelsPerAudio` limits each Audio input. `maxResults` limits successful unique results across the complete run. For example, ten Audio inputs with `maxReelsPerAudio: 100` and `maxResults: 300` stop after 300 successful unique Reel results.

The actual number can be lower when fewer public Reels are available, results overlap across Audio inputs, pagination ends, or a Reel is not publicly accessible.

### Pricing

#### Reel results

Each successfully delivered unique Reel is one billable result. The rate depends on your Apify membership tier:

| Apify tier | Price per 1,000 Reel results | Price per result |
|---|---:|---:|
| FREE | $2.00 | $0.0020 |
| BRONZE | $1.80 | $0.0018 |
| SILVER | $1.60 | $0.0016 |
| GOLD | $1.50 | $0.0015 |

#### Music processing

Each unique valid Instagram Music or Audio input that enters processing has a small processing fee of **$1.00 per 1,000 inputs** ($0.001 per input) for every membership tier. This is a low-frequency event: one Audio input can return many Reel results, while repeated or invalid inputs are not processed twice and do not create this charge.

A very small Actor start fee also applies once per run.

#### Duplicate protection

The same Reel is saved and billed once per run, even if it is discovered again across pages or Audio inputs. Repeated Audio inputs are also processed once.

#### Failure protection

Invalid or empty Audio inputs do not create processing or Reel result charges. A valid Audio input is charged once when processing begins, even if Instagram has no public Reels for it or processing later fails. Failed, unavailable, duplicate, and unsaved Reels do not create Reel result charges.

#### Control result volume

Use `maxReelsPerAudio` to control exploration depth per sound and `maxResults` to control delivered results across the entire batch.

### Use cases

#### Music marketing

Collect structured public Reel, creator, and engagement data for a released song, then use it in your own music campaign analysis.

#### UGC campaign tracking

Collect public Reels using a branded campaign sound and export the Dataset for reporting or review.

#### Creator discovery

Build a structured list of creators already publishing public Reels with a particular sound for downstream research.

#### Trend research

Export Reels using the same audio and analyze publishing patterns, creators, captions, and available engagement in your own tools.

#### Competitive research

Collect structured Reel and engagement data and use it for downstream competitive analysis within a market or content niche.

### Instagram Music API and Instagram Audio API

Run the Actor through the Apify API and use the Dataset in automated workflows. Apify supports API runs, schedules, webhooks, integrations, and exports such as JSON, CSV, and Excel.

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

run = client.actor("lance_api/instagram-music-audio-scraper-api").call(run_input={
    "audioInputs": ["https://www.instagram.com/reels/audio/1005688403740006/"],
    "maxReelsPerAudio": 50,
    "maxResults": 500,
})

items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
for item in items:
    print(item["status"], item.get("reel", {}).get("url"))
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('lance_api/instagram-music-audio-scraper-api').call({
  audioInputs: ['https://www.instagram.com/reels/audio/1005688403740006/'],
  maxReelsPerAudio: 50,
  maxResults: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
  console.log(item.status, item.reel?.url);
}
```

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/lance_api~instagram-music-audio-scraper-api/run-sync-get-dataset-items?timeout=300" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "audioInputs": ["https://www.instagram.com/reels/audio/1005688403740006/"],
    "maxReelsPerAudio": 50,
    "maxResults": 500
  }'
```

### FAQ

#### What is an Instagram Audio URL?

An Instagram Audio URL is the public page for a song, sound, or Original Audio used by Reels. It commonly follows `instagram.com/reels/audio/NUMERIC_ID/`.

#### Can I scrape Original Audio?

Yes. The Actor supports public Original Audio and creator sounds when that information is publicly available.

#### Can I enter an Audio ID instead of a URL?

Yes. Add the numeric ID directly to `audioInputs`; a full Instagram Audio URL is not required.

#### Do I need an audio asset ID or audio cluster ID?

No. For most cases, paste the Instagram Reels Audio URL. The Actor handles supported identifiers and returns resolved music metadata when available.

#### How many Reels can I get from one Audio?

Set `maxReelsPerAudio` from 1 to 100. The actual result count depends on the public Reels available for that sound and the run-wide `maxResults` guardrail.

#### Why can one Audio input return many results?

One sound can be reused by many Reels. Each unique public Reel usage is saved as a separate Dataset record so it can be searched, filtered, exported, and billed independently.

#### Are duplicate Reels charged twice?

No. A Reel discovered more than once across pages or Audio inputs is delivered and charged once per run.

#### Does the Actor return video URLs?

Yes, when a usable public video URL is available. Returned media URLs are temporary and should be downloaded promptly.

#### Can I process multiple Audio URLs?

Yes. Put multiple Instagram Audio URLs or IDs in `audioInputs`. `maxReelsPerAudio` applies to each input, while `maxResults` guards the complete run output.

#### How do I find Instagram Reels using the same audio?

Paste the Instagram Audio URL into `audioInputs`. The Actor returns individual public Reels using that sound.

#### When should I use this Actor instead of Instagram Reels Downloader?

Use Instagram Music & Audio Scraper when Audio is your starting point and you want to discover multiple Reels using it. Use Instagram Reels Downloader when you already have specific Reel URLs.

### Public data and responsible use

This is an unofficial Actor and is not affiliated with, endorsed by, or sponsored by Instagram or Meta.

The Actor works with publicly accessible information. Availability and optional metadata can change, and some Audio pages or Reels may be unavailable because of deletion, privacy settings, regional restrictions, or platform changes. Use the returned data responsibly and follow applicable laws, platform terms, and privacy requirements.

### Related Instagram Actors

#### Instagram Reels Downloader

Use Instagram Reels Downloader when you already know the exact Reel URL and want to extract or download that Reel directly. It also supports public Profile and mixed-media workflows.

#### Instagram Video AI Transcript Scraper API

Use Instagram Video AI Transcript Scraper API when you need speech-to-text transcripts and optional translation from a public Instagram video.

### Support

For help, email **lanceapi2026@hotmail.com** or open an issue on the Actor page.

Include:

- Apify Run ID
- A non-sensitive public Instagram Audio URL or Audio ID
- The `maxReelsPerAudio` and `maxResults` values used
- Expected result versus actual result
- Returned public status and error code

Never send your `APIFY_TOKEN`, cookies, session data, passwords, API keys, proxy credentials, or Authorization headers.

# Actor input Schema

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

Enter Instagram Reels Audio URLs or numeric Audio IDs. Each input can return multiple public Reels using that sound.

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

Maximum unique Reel usage records returned for each Audio input.

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

Maximum successful unique Reel results saved across all Audio inputs in this run.

## Actor input object example

```json
{
  "audioInputs": [
    "https://www.instagram.com/reels/audio/1005688403740006/"
  ],
  "maxReelsPerAudio": 50,
  "maxResults": 500
}
```

# 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 = {
    "audioInputs": [
        "https://www.instagram.com/reels/audio/1005688403740006/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lance_api/instagram-music-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": ["https://www.instagram.com/reels/audio/1005688403740006/"] }

# Run the Actor and wait for it to finish
run = client.actor("lance_api/instagram-music-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": [
    "https://www.instagram.com/reels/audio/1005688403740006/"
  ]
}' |
apify call lance_api/instagram-music-audio-scraper --silent --output-dataset

```

## MCP server setup

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