TikTok Sound Scraper - Videos Using a Sound avatar

TikTok Sound Scraper - Videos Using a Sound

Pricing

from $0.24 / 1,000 results

Go to Apify Store
TikTok Sound Scraper - Videos Using a Sound

TikTok Sound Scraper - Videos Using a Sound

Scrape the TikTok videos that use a sound, by sound id or /music/ link. Each video row has plays, likes, comments, shares and saves, the caption, hashtags and author, and the MP4 links. $0.25 per 1,000 videos.

Pricing

from $0.24 / 1,000 results

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

2

Monthly active users

6 days ago

Last modified

Categories

Share

Scrape the TikTok videos that use a sound: give it a sound and get the videos posted with it, one row each, with plays, likes, comments, shares and saves, the caption, the author, and the video file links. Nothing to log into.

Two things to know before the first run. The limit is run wide, not per sound: three sounds with a limit of 50 gives you 50 videos in total, and the first sound can take the lot. And what you get is the feed TikTok serves under that sound today, in the feed's own order, which is not a complete history of everything ever posted with it.

InputSound ids, or tiktok.com/music/ links
OutputOne row per video using the sound: plays, likes, comments, shares, saves, caption, hashtags, author, branded flag and the video file links
Ceiling2,000 videos per run
Account neededNone
Price$0.25 per 1,000 videos on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 20,000

🔍 What TikTok Sound Scraper does

Every sound on TikTok has its own page of videos. This walks that page and flattens each video into a row, the same row shape our hashtag scraper returns, so the two can go into the same table.

The id is the trailing digits of a /music/ link. You will also find it in the music.id field of rows from our other TikTok scrapers, which is the usual way people get here: spot a sound that keeps appearing, then pull everything using it.

Ids from musicIds and ids read out of musicUrls are merged, so listing the same sound twice costs you nothing extra. A sound with no videos gets a row saying so, and the run moves on to the next one.

📋 What data you get from each TikTok video using a sound

What you getField
Video id and the link a person can openid, webVideoUrl
Caption, and the hashtags in ittext, hashtags
When it went up, and the region TikTok reportscreateTime, region
Plays, likes, comments, shares, saves and downloadsplayCount, diggCount, commentCount, shareCount, collectCount, downloadCount
Branded content flagisAd
Length, still and animated coversvideo.duration, video.cover, video.dynamicCover
The video file linksvideo.playAddr, video.downloadAddr
Who posted it: id, handle, display name, avatarauthor
The sound block, when TikTok attaches onemusic

▶️ How to scrape TikTok videos by sound

  1. Open TikTok Sound Scraper and click Try for free.
  2. Put the sound id into Music IDs, one per line, or paste links into Music URLs.
  3. Set Max videos per sound. It is the total for the run, so start at 50 while you look at the output.
  4. Click Start.
  5. Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.

Give it at least one sound. A run with nothing in either box fails rather than returning a sample.

💰 How much does it cost to scrape TikTok videos by sound?

$0.25 per 1,000 videos on the Free plan. Paid plans pay a little less: $0.248 on Starter, $0.246 on Scale and $0.244 on Business. On the free plan, the $5 Apify gives you each month covers about 20,000 videos.

You pay for videos delivered. Diagnostic rows and duplicates caught inside a run are not charged. resultsPerPage is the ceiling on both the rows and the spend.

📥 What you give it

{
"musicIds": ["7654341603238103821"],
"resultsPerPage": 200
}
FieldDefaultWhat it is
musicIdsnoneThe numeric sound id. The form opens with one filled in as an example, which is a starting point rather than a default.
musicUrlsnoneOr paste links like https://www.tiktok.com/music/original-sound-7654341603238103821. The id is read out of the slug, so pass musicIds when you have the digits: a slug carrying another long number can be read wrong, and a link with no id in it is skipped without a row.
resultsPerPage50Videos for the whole run, 1 to 2,000, despite what the field name suggests. This is also your spend cap.
sessionCookiesnoneOptional. Your own TikTok sessionid. The field is stored encrypted.
proxyConfigurationoffOptional. Your own servers are used exactly as given.
notionConnector, notionParentIdnoneOptional. Write each video into a Notion database as well as the dataset.

📤 What you get back

A real row from a real run, with the media links trimmed:

{
"ok": true,
"type": "video",
"id": "7654341587425692942",
"webVideoUrl": "https://www.tiktok.com/@tiktok/video/7654341587425692942",
"text": "what are fans searching about @Malcolm Todd on TikTok? expect the unexpected during TikTok In The Mix with Jack Coyne, presented by @T-Mobile",
"createTime": "2026-06-22T21:54:52.000Z",
"hashtags": [],
"region": "US",
"playCount": 32128243,
"diggCount": 47298,
"commentCount": 1058,
"shareCount": 435,
"collectCount": 4902,
"downloadCount": 33,
"isAd": true,
"video": { "duration": 71, "cover": "https://p16-common-sign.tiktokcdn.com/...", "playAddr": "https://v19.tiktokcdn.com/...", "downloadAddr": "https://v19.tiktokcdn.com/..." },
"music": null,
"author": { "id": "107955", "uniqueId": "tiktok", "nickname": "TikTok", "avatar": "https://p16-common-sign.tiktokcdn.com/..." }
}
FieldHow to read it
idUnique per video. Use it as your dedupe key across runs.
hashtagsAn empty array when the caption has none, as above.
playCount and the other countersAs the feed reports them at read time. A counter TikTok did not send reads 0.
isAdTikTok's own flag for branded content.
video.playAddr, video.downloadAddrThe video file links. Signed links that stop working after a while.
musicTitle, artist, length and whether it is an original sound. It comes back null on plenty of rows, including the real one above, so check before you read into it.

🧾 Reading the output

Two kinds of row land in your dataset.

RowHow to spot itBilled
A videook: true and type: "video"yes
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your data.

CodeWhat it means
NOT_FOUNDTikTok has no sound with that id.
NO_RESULTSThe sound exists but nothing came back for it.
RATE_LIMITEDThat sound would not answer this run. Re-running usually clears it.
NOT_SERVEDThis video was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
TIME_LIMITThe run neared its time limit and stopped, keeping every video it had delivered. If none had come back by then, the run ends as failed.

One quirk of the Overview table: it shows five columns, so a diagnostic row reads as a nearly blank line there. Open the row itself or download the JSON and everything is present.

💡 What people use it for

  • Checking whether a sound is actually travelling before building a post around it.
  • Finding the creators who picked a track up early, since every row carries the author handle.
  • Watching a sound your brand paid for and counting the videos that used it.

From a sound you keep hearing to the creators using it, in three runs:

  1. Run TikTok Hashtag Scraper on a tag in your niche and look for a music.id that keeps repeating.
  2. Paste that id into Music IDs here and sort the rows on createTime to see who used it first.
  3. Copy their author.uniqueId into TikTok Profile Scraper for follower counts.

🚧 What it does not do

  • No row for the sound itself. There is no title, artist or total-video-count row, only the videos using it. The music block on each video is the nearest thing, and it is often null.
  • Not the full history of a sound. You get the feed TikTok is serving now.
  • The limit is shared across your sounds. One popular sound can use the whole run.
  • No sort option. You get the feed's own order, because that is all TikTok offers here.
  • Media links expire. They are signed and short lived.
  • A counter TikTok does not send reads as 0.
  • An empty input fails the run instead of returning a sample.
  • It is not an official TikTok tool. Dami's Studio is independent and is not affiliated with or endorsed by TikTok, or by any other company named on this page.

🧭 Which TikTok scraper do you need?

If you wantUse
Videos using one soundThis one
Videos posted under a hashtagTikTok Hashtag Scraper
A profile plus its newest videos, or a keyword searchTikTok Scraper
Follower and like counts for a list of handlesTikTok Profile Scraper
Comments under a videoTikTok Comments Scraper
The hashtags ranking in a country right nowTikTok Trending Hashtags

❓ Questions people ask

Where do I find a TikTok sound id?

It is the digits at the end of a /music/ link, and it is in the music.id field of rows from our hashtag and video scrapers.

Do I need a TikTok account to scrape a sound?

No. The cookie field is optional.

Is the limit per sound or per run?

Per run. The field is called "Max videos per sound", but the number you set is the total the run will deliver.

Why is music null on a sound scraper?

Because the feed does not always attach the sound block to each video it returns. You already know which sound you asked for, so the row is still yours.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/tiktok-music-scraper. Either way the run happens on your Apify account at the same price.

This reads public videos only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Include the sound ids you used and the run ID, and the log is usually enough for us to see what happened.