# instagram reel and audio scraper - Trending Sound Finder (`jordan-byte/instagram-reel-and-audio-scraper-trending-sound-finder`) Actor

Find every Reel using a specific trending audio track, or scrape an account's entire Reels history with full audio/music metadata. Get play counts, captions, engagement stats, and track/artist info. Optional video download. No login required.

- **URL**: https://apify.com/jordan-byte/instagram-reel-and-audio-scraper-trending-sound-finder.md
- **Developed by:** [Jordan Byte](https://apify.com/jordan-byte) (community)
- **Categories:** Automation, Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 results

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/platform/actors/running/actors-in-store#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 Reel & Audio Scraper

The **Instagram Reel Scraper** for finding and extracting Reels two ways: by **audio track** (every Reel using a specific trending sound) or by **username** (an account's entire Reels history with the exact audio each one uses). Get post stats, captions, author details, and detailed audio/music metadata - with optional video download. No login required to run it.

### What does the Instagram Reel Scraper do?

This Instagram Reels scraper and Instagram audio scraper in one:

- **Find every Reel using a specific audio track** - give it an Instagram audio/music URL and get every Reel using that sound, fully paginated. Useful as a trending-audio tracker or Instagram sound finder.
- **Scrape an Instagram account's Reels** - give it a username and get that account's entire Reels history (paginated automatically) along with the exact track or original-audio info for each one.
- **Detailed audio metadata** - track title, artist name, whether it's original audio vs. a licensed track, and the original creator's info. Works as an Instagram audio ID lookup / Instagram song finder.
- **Full engagement stats** - play count, like count, comment count, video duration, caption, dimensions, post date.
- **Download Instagram Reels** - optionally save each Reel's actual video file, with a direct link added to its dataset row.

### Who uses an Instagram Reel Scraper like this?

- **Social media trend research** - track which Reels are riding a specific audio trend and how fast it's growing.
- **Influencer and competitor analysis** - pull every Reel an account has posted, with engagement numbers, in one run.
- **Content and marketing research** - study captions, formats, and audio choices across many Reels at once.
- **Sourcing UGC or trending sounds** - download the actual videos behind a trending audio track for reference or repurposing.

### Input

Provide **audio URLs**, **usernames**, or both in the same run.

| Field | Description |
|---|---|
| `audioUrls` | Instagram audio page URLs, e.g. `https://www.instagram.com/reels/audio/123456789/`. Every Reel using that track is returned. |
| `usernames` | Instagram usernames - a bare name (`capcaprice`), an `@handle`, or a full profile URL all work. That account's Reels (and their audio) are returned. Public accounts only. |
| `maxResults` | Stop collecting once this many Reels have been found, per audio track / per username. Default `5`. |
| `downloadVideos` | If `true`, downloads each Reel's video into the key-value store and adds a `videoStorageUrl` link to its row. Default `false`. |
| `sessionid` / `csrftoken` | Optional. Instagram cookies from a logged-in browser session. Not required to scrape, but can improve reliability if Instagram is rate-limiting anonymous requests hard. Use a throwaway account, not your main one. |
| `proxyConfiguration` | A residential proxy is strongly recommended - Instagram aggressively rate-limits datacenter IPs. Defaults to Apify Proxy's `RESIDENTIAL` group. |

**Example - scrape Reels by audio track:**

```json
{
    "audioUrls": ["https://www.instagram.com/reels/audio/579408562507956/"],
    "maxResults": 20,
    "downloadVideos": false
}
```

**Example - scrape all Reels from a username:**

```json
{
    "usernames": ["capcaprice"],
    "maxResults": 50,
    "downloadVideos": false
}
```

### Output

Each Reel becomes one row in the dataset:

```json
{
    "URL": "https://www.instagram.com/reel/DbCqtiyiLT5/",
    "Id": "DbCqtiyiLT5",
    "postedAt": "2026-07-28T09:12:41.000Z",
    "playCount": 1738,
    "likeCount": 51,
    "commentCount": 4,
    "videoDuration": 18.4,
    "caption": "wait for it 😭",
    "originalWidth": 1080,
    "originalHeight": 1920,
    "videoTemporaryUrl": "https://scontent.cdninstagram.com/...",
    "videoStorageUrl": null,
    "musicId": "1399554895132263",
    "musicUrl": "https://www.instagram.com/reels/audio/1399554895132263/",
    "audioDetails": {
        "type": "licensed_music",
        "audioId": "1399554895132263",
        "trackTitle": "Some Song",
        "artistName": "Some Artist"
    },
    "author": {
        "username": "_musafir._.23",
        "fullname": "Musafir",
        "temporaryProfilePictureUrl": "https://scontent.cdninstagram.com/...",
        "isVerified": false,
        "isPrivate": false
    }
}
```

Turn on `downloadVideos` and `videoStorageUrl` becomes a direct link to the downloaded `.mp4` in the key-value store.

### Tips

- **Username mode only returns public accounts.** Private or nonexistent accounts return no data.
- **`maxResults` applies per audio track / per username**, not to the whole run - 3 usernames with `maxResults: 10` can return up to 30 rows.
- **A residential proxy matters more than session cookies** for avoiding rate limits - use both for the most reliable runs.
- Some Reels genuinely don't carry audio attribution data (Instagram doesn't always expose it) - these come back with `audioDetails.type: "unknown"`, which is expected, not an error.

### Frequently asked questions

**Do I need to log in to scrape Instagram Reels?**
No. This Instagram Reel scraper works without an Instagram login. Providing a `sessionid`/`csrftoken` is optional and only improves reliability under heavy rate limiting.

**Can I download Instagram Reel videos, not just metadata?**
Yes - set `downloadVideos: true` and each Reel's actual video file is saved and linked in its dataset row.

**Can I find what song or audio a Reel is using?**
Yes - every Reel's row includes `audioDetails` with the track title, artist, and whether it's original audio or a licensed track.

**How many Reels can this scraper collect?**
As many as you set in `maxResults` - the actor paginates through an audio track's full usage or an account's entire Reels history automatically.

**Does this work for both public accounts and specific audio tracks?**
Yes - use `usernames` to scrape an account's Reels, `audioUrls` to scrape every Reel using a specific sound, or both in the same run.

# Actor input Schema

## `audioUrls` (type: `array`):

Instagram audio page URLs, e.g. "https://www.instagram.com/reels/audio/123456789/". Each track's ID is extracted automatically. Finds every reel that uses this exact audio track. Provide this, `usernames` below, or both.

## `usernames` (type: `array`):

Instagram usernames, e.g. "capcaprice" - a full profile URL like "https://www.instagram.com/capcaprice/" or an "@handle" also work. Fetches that account's reels (paginating through their full post history as needed) along with each reel's audio info. Only public accounts return data. Provide this, `audioUrls` above, or both.

## `sessionid` (type: `string`):

Optional. The clips/music endpoint works for unauthenticated requests, but Instagram may rate-limit anonymous traffic more aggressively. Providing a logged-in session can improve reliability. Log into instagram.com in a browser, open DevTools -> Application/Storage -> Cookies, and copy the value of the `sessionid` cookie. Must come from the same session as `csrftoken` below - Instagram rejects the two if they don't match. Use a throwaway/secondary account, not your main one.

## `csrftoken` (type: `string`):

Optional. Must come from the same logged-in browser session as `sessionid` above - same DevTools Cookies panel, the row named `csrftoken`. Leave both blank to scrape anonymously.

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

Stop scraping a given audio track or username once this many reels have been collected for it.

## `downloadVideos` (type: `boolean`):

If enabled, each reel's video is downloaded and stored in the key-value store, and a link to it is added to that reel's dataset row.

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

Required - Instagram aggressively rate-limits and flags datacenter IPs. A residential proxy is strongly recommended.

## Actor input object example

```json
{
  "audioUrls": [
    "https://www.instagram.com/reels/audio/123456789/"
  ],
  "usernames": [
    "instagram"
  ],
  "maxResults": 5,
  "downloadVideos": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "audioUrls": [
        "https://www.instagram.com/reels/audio/123456789/"
    ],
    "usernames": [
        "instagram"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jordan-byte/instagram-reel-and-audio-scraper-trending-sound-finder").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 = {
    "audioUrls": ["https://www.instagram.com/reels/audio/123456789/"],
    "usernames": ["instagram"],
}

# Run the Actor and wait for it to finish
run = client.actor("jordan-byte/instagram-reel-and-audio-scraper-trending-sound-finder").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 '{
  "audioUrls": [
    "https://www.instagram.com/reels/audio/123456789/"
  ],
  "usernames": [
    "instagram"
  ]
}' |
apify call jordan-byte/instagram-reel-and-audio-scraper-trending-sound-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jordan-byte/instagram-reel-and-audio-scraper-trending-sound-finder"
        }
    }
}

```

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/7YDabUZqpeI88oxap/builds/IgJy5o55PCNIpzueC/openapi.json
