TikTok Sound Scraper
Scrape the TikTok videos using a sound: views, likes, comments, shares, caption, author and MP4 links. $0.25 per 1,000 videos.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
musicIds,musicUrls,resultsPerPage(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00025 per result = $0.25 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Result returned | Charged per video returned. Failed/empty runs not charged. | $0.00025 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-19, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
musicIds | TikTok music/sound IDs (the trailing digits of a /music/ URL). Find them in any video's music.id field. | array |
musicUrls | Or paste TikTok /music/ URLs. | array |
resultsPerPage | Max videos per sound. Charged per result. | integer |
notionConnector | Optional. Deliver results to your connected Notion via Apify MCP connectors. | string |
notionParentId | Optional Notion database/data-source id. | string |
sessionCookies | Optional, leave empty and the run works as normal. Supply your own TikTok account cookie here, and the run uses it where an account is needed. In Chrome, on a logged-in tiktok.com tab: F12 → Application → Cookies → copy the `sessionid` value. Paste one per line; several are rotated. | array |
What you get
A structured dataset — each result includes fields like:
textplayCountdiggCountcommentCountwebVideoUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Social Media Scrapers
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
TikTok Followers and Following Scraper
Get a public TikTok account's following list with no login. Followers need your own cookie. Handles, bios, avatars, regions. $0.35 per 1,000 profiles.
Instagram Comments Scraper
Scrape comments from any public Instagram post or reel: text, author, likes, replies and timestamp. Nothing to log into. $0.40 per 1,000 rows.
Twitter (X) Search Scraper
Scrape X (Twitter) search by keyword or advanced query. Get the full text, engagement, media and author. No login needed from you. $0.40 per 1,000 tweets.
Twitter (X) List Scraper
Scrape every tweet from an X (Twitter) list. Get full text, likes, retweets, views, hashtags, media and author. No login. $0.40 per 1,000 tweets.
Threads Scraper
Scrape public Threads profiles and recent posts with no login. Rows carry bios, followers, post text, likes, timestamps and media URLs. $0.40 per 1,000 rows.
Facebook Pages Scraper
Scrape public Facebook Page names, handles, likes, talking-about counts and verified badges. Up to 10 Pages per run. No login needed from you.
Where this tool sits
- Categories
- Social Media Scrapers
- Platforms
- TikTok
TikTok Sound Scraper: every video using a sound, with its counts and links
Give it a TikTok sound and you get the videos posted with it, one row each, with plays, likes, comments, shares and saves, the caption, the author, and both 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.
| Input | Sound ids, or tiktok.com/music/ links |
| Output | One row per video using the sound |
| Ceiling | 2,000 videos per run |
| Account needed | None from you |
| Price | $0.25 per 1,000 videos, flat on every plan |
🔍 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 anything our other TikTok scrapers return, 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 you give it
{
"musicIds": ["7654341603238103821"],
"resultsPerPage": 200
}
| Field | Default | What it is |
|---|---|---|
musicIds | none | The numeric sound id. The form opens with one filled in as an example, which is a starting point rather than a default. |
musicUrls | none | Or 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. |
resultsPerPage | 50 | Videos for the whole run, 1 to 2,000, despite what the field name suggests. This is also your spend cap. |
sessionCookies | none | Optional. Your own TikTok sessionid, used only for sounds that came back empty. Use a throwaway account: the value sits in the run input, which anyone who can open the run can read. |
proxyConfiguration | off | Leave it off. It exists for people routing through their own servers at high volume. |
notionConnector, notionParentId | none | Optional. 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/..." }
}
| Field | What it is |
|---|---|
id, webVideoUrl | Unique per video, and the link a person can open. Use id as your dedupe key across runs. |
text, hashtags | The caption, and the tags parsed out of it. An empty array when the caption has none. |
createTime, region | When it was posted, as an ISO timestamp, and the region TikTok reports. |
playCount, diggCount, commentCount, shareCount, collectCount, downloadCount | Views, likes, comments, shares, saves and downloads, as the feed reports them at read time. |
isAd | TikTok's own flag for branded content. |
video | Duration in seconds, the still and animated covers, playAddr without the watermark and downloadAddr with it. |
author | The account that posted it: id, handle, display name and avatar. |
music | Title, 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.
| Row | How to spot it | Billed |
|---|---|---|
| A video | ok: true and type: "video" | yes |
| A diagnostic | ok: false and an errorCode | no |
Filter on ok == true and you have your data. NO_RESULTS means the sound exists but nothing came back for it, RATE_LIMITED and BLOCKED mean that sound would not answer this run and re-running usually clears it. None of them is charged.
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.
▶️ How to run it
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 shape. 4. Click Start. 5. Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
💰 How much does it cost?
$0.25 per 1,000 videos. Flat on every Apify plan, no volume tiers.
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 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.
- Pulling reference clips for an edit: caption, duration and both file links in one row.
🚧 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 consume the whole run.
- No sort option. You get the feed's own order, because that is all the source offers.
- Media links expire. They are signed and short lived. Fetch the file during the run if you
want to keep it.
- A counter TikTok does not send reads as
0. - An empty input fails the run instead of returning a sample. Give it at least one sound.
🧭 Which TikTok scraper do you need?
| If you want | Use |
|---|---|
| The videos using a sound | This one |
| Videos under a hashtag | TikTok Hashtag Scraper |
| A profile plus its videos, or a keyword search | TikTok Scraper |
| Follower and likes counts for a list of handles | TikTok Profile Scraper |
| Comments under a video | TikTok Comments Scraper |
❓ Questions people ask
Where do I find a 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? No. The cookie field is optional and only comes into play for sounds that came back empty without it.
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.
Is scraping TikTok legal? 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.
Can I run it on a schedule? Yes. Use Apify's scheduler, or start it from the API and read the dataset when it finishes.
🆘 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.