Instagram Audio Scraper - Reels by Audio, Song & Sound
Pricing
from $2.50 / 1,000 instagram audio or reel results
Instagram Audio Scraper - Reels by Audio, Song & Sound
Find the public Instagram Reels that use a sound. Start from an audio ID, audio URL, Reel URL, profile or keyword and get each Reel's plays, likes, comments, hashtags, creator and post date.
Pricing
from $2.50 / 1,000 instagram audio or reel results
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
253
Total users
99
Monthly active users
15 days ago
Last modified
Categories
Share
What is Instagram Audio Scraper?
Instagram Audio Scraper turns an Instagram sound into a dataset of the public Reels that use it. Start from an audio ID, an audio page URL, a Reel URL, a creator's profile or a Reel search keyword, and get one row per Reel with the audio ID, caption, co-hashtags, play count, likes, comments, post date and creator. Music marketers, trend researchers, creator agencies and AI agents use it to see how far a sound is spreading and who is using it, with no Instagram login or cookies.
Why teams choose this Instagram audio scraper
- Start from what you have. Audio IDs or audio URLs in
audioInputs, Reel links inreelUrls, creators inprofileHandlesor keywords insearchQueries. - Sound-to-Reels expansion. With
includeReelsUsingAudio, one audio ID becomes a list of the Reels using that sound. - Engagement per Reel.
play_count,like_countandcomment_countcome back as numbers, ready to rank. - Two clear record types.
record_typeseparates theaudio_summaryrow for the sound itself from eachreelrow. - Resumable at scale. Page caps per audio, profile and search, plus cursors in the summary, keep large pulls predictable.
- Built for AI agents. Flat JSON with stable snake_case keys, available through Apify MCP and the Apify API.
Best fit for this Actor
- Start here when your question is about a sound: who uses it, how fast it spreads, and which Reels get the most plays with it.
- Use
reelUrlswhen you have a Reel and want to identify its audio, then pass the returnedaudio_idintoaudioInputsto find other Reels using the same sound. - For Reels by hashtag rather than by sound, start with Instagram Hashtag Posts Scraper.
- For a creator's full Reel feed with music details, start with Instagram Reels Scraper.
What people and AI agents ask this Actor to do
Which Reels are using this trending sound, and which ones got the most plays? What audio does this Reel use, and who else is using it? Track how many Reels use our campaign song each week. Find Reels about running shoes and tell me which sounds they use.
| Request | Input to send |
|---|---|
| Reels that use a sound | {"audioInputs": ["579408562507956"], "maxReelsPerAudio": 50} |
| Identify the sound of a Reel | {"reelUrls": ["https://www.instagram.com/reel/DLDXI0fylTC/"]} |
| Expand that sound next | Pass the returned audio_id into {"audioInputs": ["<audio_id>"]} |
| Sounds a creator uses | {"profileHandles": ["natgeo"], "maxReelsPerProfile": 30} |
| Sounds used in a topic | {"searchQueries": ["running shoes"], "maxSearchPages": 1, "datePosted": "last-week"} |
| A deep pull on one sound | {"audioInputs": ["579408562507956"], "maxAudioPages": 10, "maxResults": 500} |
Example workflow: from one sound to a creator shortlist
A music marketer starts with the audio ID of a song their label is pushing. They send it in audioInputs and get an audio_summary row plus one reel row for every Reel using the sound. They sort the Reels by play_count, note which creators reached the most viewers, then pass those author_username values to Instagram Profile Scraper for follower counts and contact details. They schedule the same input weekly and compare row counts to see whether the sound is still spreading.
How to scrape Reels by Instagram audio
- Add an audio ID or audio URL in Audio inputs, or use Reel URLs, profile handles or search keywords.
- Set Max Reels per audio and Max results to the rows you need.
- Click Start. Export the dataset as JSON, CSV or Excel, or read it through the API.
Quick start input
{"audioInputs": ["579408562507956"],"includeReelsUsingAudio": true,"maxReelsPerAudio": 50,"maxResults": 250}
Input reference
| Field | Type | What it controls |
|---|---|---|
audioInputs | array of strings | Instagram audio IDs or audio page URLs, such as https://www.instagram.com/reels/audio/579408562507956/. |
reelUrls | array of strings | Public Reel or post URLs whose audio you want to identify. |
profileHandles | array of strings | Public profile handles or URLs whose Reels should be scanned. |
searchQueries | array of strings | Keywords to search Reels by, such as running shoes. |
includeReelsUsingAudio | boolean | Expand each audioInputs sound into the Reels using it. Default true. |
maxReelsPerAudio | integer | Cap on Reels per audio. Default 50. |
maxAudioPages | integer | Cap on pages read per audio. Default 3. |
maxReelsPerProfile | integer | Cap on Reels per profile. Default 50. |
maxSearchPages | integer | Cap on pages per search keyword. Default 2. |
maxResults | integer | Overall cap on saved rows. Default 250. |
datePosted | string | Date window for search keywords: any, last-hour, last-day, last-week, last-month or last-year. Default any. |
includeRaw | boolean | Add the raw source fragment to each row for debugging. Default false. |
Output: Instagram audio data you receive
The dataset holds two record types, marked by record_type: one audio_summary row for each requested sound and one reel row for each Reel found. The sample below is a real Reel row with the creator username replaced by a placeholder.
| Field | What it contains |
|---|---|
record_type, source_type, source_input | Row type and the input that produced it |
audio_id, audio_url | The sound's ID and Instagram audio page |
audio_title, audio_artist, uses_original_audio | Sound details when Instagram exposes them |
reel_id, shortcode, reel_url | The Reel's identifiers and link |
caption, caption_hashtags, mentions | Caption text, parsed hashtags and mentions |
play_count, like_count, comment_count | Public engagement numbers |
video_duration_secs, has_audio, thumbnail_url, video_url | Media details (Instagram media links expire after a while) |
author_username, author_full_name, author_is_verified | The creator who posted the Reel |
posted_at, scraped_at, provider | Post date, collection time and data route |
{"record_type": "reel","source_type": "audio","source_input": "579408562507956","audio_id": "579408562507956","audio_url": "https://www.instagram.com/reels/audio/579408562507956/","reel_id": "3992930496069429334","shortcode": "DdpvSF3CuhW","reel_url": "https://www.instagram.com/reel/DdpvSF3CuhW/","caption": "Strong women aren’t born knowing how to weather every storm. They learn, one hard season at a time.\n\nThey cry, rest, ask for help, and begin again. Strength doesn’t mean nothing hurts. Sometimes it means choosing to keep going while you heal.\n\nIf you’re facing a season no one else can see, give yourself credit. You’ve made it through days you once thought you couldn’t. You’re still here, still growing, still becoming. \n\nDrop a 💪 if you’re proud of the woman you’re becoming.\n\n#StrongWomen #WomenEmpowerment #ResilientWomen #HealingJourney #KeepGoing\n\n(Strong women, women’s empowerment, resilience, overcoming hard times, healing journey, inner strength, personal growth, self-worth, keep going, becoming the woman you’re meant to be)","caption_hashtags": ["strongwomen","womenempowerment","resilientwomen","healingjourney","keepgoing"],"play_count": 128166,"like_count": 1989,"comment_count": 28,"video_duration_secs": 9.868,"has_audio": true,"author_username": "example.creator","posted_at": "2026-09-24T01:47:34.000Z","scraped_at": "2026-09-29T09:57:41.813Z"}
What each run outcome means
Every run writes an OUTPUT record and a RUN_SUMMARY record to the default key-value store with savedCount, chargedCount, stopReason, sourceCounts and nextCursors. Read stopReason to branch in code or in an agent.
stopReason | Meaning |
|---|---|
finished | Every input was processed and every row found was saved. |
max-results-reached | The maxResults cap was reached; raise it to collect more. |
charge-limit-reached | The maximum charge set for the run was reached. |
no-input | No audio, Reel, profile or search input was provided. |
missing-provider-secrets | The Actor's own data-source configuration needs attention from the maintainer. |
Pricing
This Actor uses Pay per event plus Apify platform usage. You pay one result event for each row saved to the dataset, whether it is an audio_summary row or a reel row, plus the start event and the platform usage of the run. The live Pricing tab on this page shows the current event prices.
Worked examples:
- 1 audio ID with 50 Reels = 51 result events (1 summary + 50 Reels) + start event + platform usage.
- 5 Reel URLs = up to 10 result events (each Reel row plus its sound summary row) + start event + platform usage.
maxResults: 100= at most 100 result events, whatever the inputs.
Formula: result event price × saved rows + start event + platform usage. Set a maximum charge per run in the run options to cap spend.
Use Instagram Audio Scraper with AI agents (MCP)
Connect this Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP, then ask in plain language:
Take Instagram audio ID 579408562507956 and return up to 50 Reels that use it, with reel URL, play count, like count, author username and post date, sorted by play count. Tell me the stop reason.
Agent checklist:
- Pass the sound in
audioInputsand setmaxResultsto the rows you need. With only a Reel link, pass it inreelUrlsfirst and reuse the returnedaudio_id. - Read rows with
get-dataset-items; keep rows whererecord_typeisreelfor ranking. - Read
OUTPUT.stopReasonandOUTPUT.savedCountfor the terminal state. - Keep
reel_url,audio_urlandscraped_atto cite each result.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~instagram-audio-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"audioInputs": ["579408562507956"], "maxReelsPerAudio": 25, "maxResults": 26}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/instagram-audio-scraper').call({audioInputs: ['579408562507956'],maxReelsPerAudio: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const reels = items.filter((row) => row.record_type === 'reel');console.log(reels.sort((a, b) => (b.play_count ?? 0) - (a.play_count ?? 0)).slice(0, 5));
Choosing the right sound research tool
Other Actors from the same developer pick up where this one stops.
| Your starting point | Tool to use | Why it fits |
|---|---|---|
| When you start from an Instagram sound or a Reel's audio | This Actor | Reels using the sound, with engagement |
| When you then want creator details for top Reels | Instagram Profile Scraper | Pass author_username values for follower counts, bios and contact details |
| When you want to read reactions to a Reel | Instagram Comments Scraper | Every public comment for a reel_url |
| When you start from a hashtag | Instagram Hashtag Posts Scraper | Posts and Reels under the tag |
| When you want a creator's full Reel feed | Instagram Reels Scraper | Reels from profiles, hashtags or keywords |
| When you want the same sound on TikTok | TikTok Sound Scraper | TikTok sound details and the videos using it |
| When you want the song's streaming numbers | Spotify Scraper | Track, artist and play-count data |
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| A sound ID or audio URL | Use audioInputs with includeReelsUsingAudio on | Every Reel row that uses the sound |
| Only a Reel link | Use reelUrls first, then pass audio_id into audioInputs | The Reel's sound, then every Reel using it |
| A viral sound | Raise maxAudioPages and maxResults together | A deeper list of Reels |
| Weekly trend tracking | Schedule the same audio input | Comparable counts over time |
| Media files matter | Download media links soon after collection | Reliable copies of thumbnails and videos |
Builder's note
I found that sound research usually starts from whatever link someone has in hand, so the Actor accepts audio IDs, audio URLs, Reel URLs, profiles and keywords and resolves them all to the same row shape. I learned that sound titles and artist names appear on some sounds and not others, so each row keeps the audio ID and audio URL as the stable way to group Reels by sound.
FAQ
How do I find an Instagram audio ID?
Open the sound's page on Instagram. The number in https://www.instagram.com/reels/audio/<ID>/ is the audio ID. You can also paste a Reel URL into reelUrls and read audio_id from the result.
How many Reels can I get for one sound?
Set maxReelsPerAudio, maxAudioPages and maxResults to the number you need. Popular sounds fill the cap; new sounds return the Reels that exist so far.
How much does it cost to get 1,000 Reels for a sound?
1,000 saved rows cost 1,000 result events plus one start event and platform usage. Multiply by the result event price on the Pricing tab.
Do I need an Instagram account or cookies?
No. The Actor reads public data only and needs no login.
Why are some sound titles and artists empty?
Instagram shows a title and artist for some sounds and hides them for others, especially original audio. Group Reels by audio_id and audio_url, which identify the sound either way.
Responsible use
This Actor collects public Instagram data only. Results include usernames and captions, which are personal data protected by laws such as the GDPR and CCPA. Collect and use them only with a lawful basis, keep them no longer than you need, and respect Instagram's terms and music rights. Read Apify's guide on whether web scraping is legal for more context. Instagram is a trademark of Meta Platforms, Inc. This independent Actor is not affiliated with, associated with, or endorsed by Meta. For questions or bugs, open a ticket in the Issues tab.