# Instagram Reels Audio Downloader (`maximedupre/instagram-reels-audio-downloader`) Actor

Extract an audio-only stream from each usable public Instagram Reel URL. Get a source-hosted audio link and available audio, Reel, creator, caption, and engagement data in your dataset. Submit one URL or a list.

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

## Pricing

$0.01 / 1,000 reel audios

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🎧 Instagram Reels audio links for creators and researchers

If you have public Instagram Reel URLs, this Actor gives you the audio-only stream and a direct source-hosted audio URL for each usable Reel. It also keeps available format, creator, caption, engagement, and timing data with the Reel. Creators can save audio references, researchers can compare Reels, and developers can build a small audio dataset from known links. The returned audio URL is ready to open after the run without actor-held cookies, login state, source credentials, special headers, or a matching IP.

**Try a focused task**

- For one public Reel, use **[Download Audio From Instagram Reel](https://apify.com/maximedupre/instagram-reels-audio-downloader/examples/download-audio-from-instagram-reel)** to get an audio link in the dataset.
- When you need the stream itself, use **[Extract Audio From Instagram Reel](https://apify.com/maximedupre/instagram-reels-audio-downloader/examples/extract-audio-from-instagram-reel)** and review its available audio details.
- Use **[Instagram Reel Audio Extractor](https://apify.com/maximedupre/instagram-reels-audio-downloader/examples/instagram-reel-audio-extractor)** to keep the audio link with the Reel ID and source URL.
- For a list of Reel URLs, use **[Instagram Reels Audio Downloader](https://apify.com/maximedupre/instagram-reels-audio-downloader/examples/instagram-reels-audio-downloader)** to process them in one run.
- Use **[Instagram Reel Audio Downloader](https://apify.com/maximedupre/instagram-reels-audio-downloader/examples/instagram-reel-audio-downloader)** to keep creator, caption, and engagement data beside the audio link.

#### 🔗 Audio links with Reel context

**What you get**

Each dataset row represents one usable public Reel audio stream. Required fields include `audioUrl`, `reelUrl`, `reelId`, and `source`. Available format, stream, creator, caption, engagement, publication, and duration fields stay with the source context.

#### ▶️ Run from known Instagram Reel URLs

**Run steps**

1. Add one or more public Instagram Reel URLs to the input.
2. Start the Actor.
3. Open the returned dataset link when the run finishes.
4. Open `audioUrl` for the source-hosted audio stream and use the other fields to trace it back to the Reel.

Each submitted URL is handled on its own. An invalid, restricted, or unavailable URL does not discard usable rows from other submitted URLs. This Actor accepts known public Reel URLs. It does not discover Reels from profiles, hashtags, sounds, keywords, or trending feeds.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `reelUrls` | array of objects | Required list of public Instagram Reel URLs to process. Each entry is handled independently. |
| `reelUrls[].url` | string | Required full public Instagram Reel URL. |

**Example input**

The example below is the public input from a successful run. One unavailable URL does not prevent usable URLs in the same list from producing rows.

```json
{
  "reelUrls": [
    {
      "url": "https://www.instagram.com/reel/C_qU9qyo9_M/"
    },
    {
      "url": "https://www.instagram.com/reel/DJf0_RmSd-T/"
    },
    {
      "url": "https://www.instagram.com/reel/ZZZhostedQAUnavailable000/"
    }
  ]
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `results` | string | Links to the dataset overview with the extracted Instagram Reel audio rows. |

**Dataset rows**

| Field | Type | What it does |
| --- | --- | --- |
| `audioUrl` | string | Source-hosted URL for the audio-only stream. |
| `audioFormat` | string | Audio format when available. |
| `audioContainer` | string | File container used by the audio when available. |
| `audioCodec` | string | Codec used by the audio when available. |
| `audioQuality` | string | Quality label supplied for the audio when available. |
| `audioBitrateKbps` | number | Audio bitrate in kilobits per second when available. |
| `audioSampleRateHz` | number | Audio sample rate in hertz when available. |
| `audioDurationSeconds` | number | Audio stream duration in seconds when available. |
| `audioFileSizeBytes` | integer | Audio file size in bytes when available. |
| `audioChannels` | integer | Number of audio channels when available. |
| `audioChannelLayout` | string | Audio channel layout, such as mono or stereo, when available. |
| `reelUrl` | string | Original or canonical Instagram Reel URL. |
| `reelId` | string | Instagram Reel identifier. |
| `source` | string | Source service. The current value is `instagram`. |
| `creatorHandle` | string | Reel creator handle when available. |
| `caption` | string | Reel caption when available. |
| `likeCount` | integer | Public like count when available. |
| `commentCount` | integer | Public comment count when available. |
| `publishedAt` | string | Reel publication time when available. |
| `reelDurationSeconds` | number | Reel media duration in seconds when available. |

**Example dataset row**

This genuine row is from the current beta run and is shown in full.

```json
{
  "audioUrl": "https://scontent-lga3-2.cdninstagram.com/o1/v/t2/f2/m86/AQN2bEvIeu03rq4iKoh4hFhMwQ0AhxkupzGZInA8UtQ37LzrlYxNAzArE7Sg0lNSzD78FxYKvLz5doconSvRqtG4.mp4?_nc_cat=100&_nc_sid=9ca052&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_ohc=We2XJ1sW0q8Q7kNvwEK2PkF&efg=eyJ2ZW5jb2RlX3RhZyI6ImlnLXhwdmRzLmNsaXBzLmlnd3d3LUMzLmRhc2hfbG5faGVhYWNfdmJyM19hdWRpbyIsInZpZGVvX2lkIjpudWxsLCJvaWxfdXJsZ2VuX2FwcF9pZCI6OTM2NjE5NzQzMzkyNDU5LCJjbGllbnRfbmFtZSI6ImlnIiwieHB2X2Fzc2V0X2lkIjoxNjM2NDIwNDYzNzU3ODg0LCJhc3NldF9hZ2VfZGF5cyI6NzIwLCJ2aV91c2VjYXNlX2lkIjoxMDA5OSwiZHVyYXRpb25fcyI6ODgsImJpdHJhdGUiOjc2MDgwLCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&_nc_gid=fxWLHQbV4795XtlI-VtZhg&_nc_ss=73689&_nc_zt=28&oh=00_AQI39AzuqkKydydN26kCDaTK4NVsWoSqeHP5q6ggjNxU4w&oe=6A952FB6",
  "audioFormat": "audio/mp4",
  "audioContainer": "mp4",
  "reelUrl": "https://www.instagram.com/reel/C_qU9qyo9_M/",
  "reelId": "C_qU9qyo9_M",
  "source": "instagram",
  "audioCodec": "mp4a.40.5",
  "audioQuality": "dash_ln_heaac_vbr3_audio",
  "audioBitrateKbps": 75.955,
  "audioSampleRateHz": 44100,
  "audioFileSizeBytes": 846397,
  "audioChannels": 2,
  "audioChannelLayout": "stereo",
  "audioDurationSeconds": 89.000633,
  "reelDurationSeconds": 89.000633,
  "creatorHandle": "emilio.piano",
  "caption": "This 3 year old SINGER @theangelicanero asked me to play Titanic with her. It was an incredible and cute moment 🥹❤️\n\n@celinedion",
  "likeCount": 36826896,
  "commentCount": 506522,
  "publishedAt": "2024-09-08T15:40:51.000Z"
}
```

#### 💳 Pricing

**How billing works**

This Actor uses pay-per-event pricing. The primary event covers one audio-only stream saved from a usable public Instagram Reel. An invalid, restricted, or unavailable URL does not produce that saved stream.

#### 🔌 Integrations

**Apify workflow**

Run the Actor in Apify, open the dataset, and use the returned source-hosted audio links in your workflow. This video shows an Apify Actor integration flow:

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

#### ❓ FAQ

##### What happens if one URL is invalid or restricted?

Each submitted URL is handled on its own. Usable URLs can still create rows when another URL is invalid, restricted, or unavailable.

##### What if a Reel has no usable audio?

The Actor cannot guarantee an audio link when the Reel has no usable audio or the public source is unavailable or restricted.

##### Does this download the Reel video?

No. It extracts an audio-only stream. It does not provide the Reel video.

##### Can I choose MP3 or another output format?

No. The Actor returns the best available source audio stream and its available format details. It does not transcode audio or offer a buyer-selected format.

##### Do I need an Instagram login or credentials?

No. Submit public Reel URLs without an Instagram or source-service credential. The returned source-hosted URL is ready to open after the run without actor-held cookies, login state, source credentials, special headers, or a matching IP.

##### Can I submit more than one Reel URL?

Yes. Submit one list of public Reel URLs in one run. This Actor does not run separate searches for profiles, hashtags, sounds, keywords, or trending feeds.

##### What metadata comes with the audio link?

Rows include audio format, container, codec, quality, bitrate, sample rate, duration, file size, channels, Reel URL and ID, source, creator handle, caption, likes, comments, publication time, and Reel duration when available.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

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

### 🔗 Related Actors

**Owned actors**

- [TikTok Audio Downloader](https://apify.com/maximedupre/tiktok-audio-downloader) extracts audio and public metadata from known TikTok video URLs.
- [Instagram Downloader API](https://apify.com/maximedupre/instagram-downloader-api) collects direct media links from public Instagram posts, Reels, and TV links.
- [YouTube Music Downloader](https://apify.com/maximedupre/youtube-music-downloader) gets audio from known public YouTube Music tracks or YouTube videos.

**Other relevant actors**

- [Instagram Reels Audio Scraper](https://apify.com/automation-lab/instagram-reels-audio-scraper) inspects public Reel audio metadata and usage signals.
- [Instagram Reels Audio Scraper Downloader](https://apify.com/scrapers-hub/instagram-reels-audio-scraper-downloader) offers another public Reel audio scraper and downloader for creator workflows.

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

# Actor input Schema

## `reelUrls` (type: `array`):

Add one or more public Instagram Reel URLs. Each usable Reel can return an audio-only stream and available metadata, while other URLs are handled separately.

## Actor input object example

```json
{
  "reelUrls": [
    {
      "url": "https://www.instagram.com/reel/C_qU9qyo9_M/"
    }
  ]
}
```

# Actor output Schema

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

Open the dataset with source-hosted audio links and available audio and Reel metadata.

# 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 = {
    "reelUrls": [
        {
            "url": "https://www.instagram.com/reel/C_qU9qyo9_M/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/instagram-reels-audio-downloader").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 = { "reelUrls": [{ "url": "https://www.instagram.com/reel/C_qU9qyo9_M/" }] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/instagram-reels-audio-downloader").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 '{
  "reelUrls": [
    {
      "url": "https://www.instagram.com/reel/C_qU9qyo9_M/"
    }
  ]
}' |
apify call maximedupre/instagram-reels-audio-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/instagram-reels-audio-downloader"
        }
    }
}

```

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/yv3yRxq2yJl6c5Z3j/builds/9rTNhZCJHF2wva2De/openapi.json
