TikTok Sound Scraper - Music Metadata & Videos
Pricing
from $3.00 / 1,000 scraped tiktok sounds
TikTok Sound Scraper - Music Metadata & Videos
Scrape TikTok sound metadata, audio preview links, artist details, usage counts and the videos that use each sound. No login or cookies needed.
Pricing
from $3.00 / 1,000 scraped tiktok sounds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
118
Total users
46
Monthly active users
11 days
Issues response
16 days ago
Last modified
Categories
Security
Limited permissionsShare
What is TikTok Sound Scraper - Music Metadata & Videos?
TikTok Sound Scraper is an Apify Actor for people and systems that work from TikTok sound references and need normalized data in the default dataset. It accepts TikTok music URLs, raw clip IDs, or music search queries, and it returns one record per saved sound or one record per saved video using that sound. The most useful fields include clipId, soundUrl, title, author, album, userCount, audioUrl, coverUrl, shareUrl, plus video fields such as videoId, videoUrl, authorUsername, playCount, likeCount, and hashtags. The outcome is a structured dataset for analytics, creator research, trend monitoring, and AI-agent workflows.
This Actor uses ScrapeCreators first and SociaVault as the configured fallback for sound metadata and videos. It is usable through Apify MCP and through the Apify API.
Best fit and connected workflows
This Actor fits workflows that start with a TikTok sound reference and end with a structured list of the sound itself and the videos that use it.
Use it when you want to:
- turn a TikTok
/music/URL into normalized sound metadata, - resolve a raw clip ID into a sound record,
- discover sounds through TikTok music search and then collect the related sound and video rows,
- export creator and engagement fields for downstream analysis,
- feed sound metadata into another TikTok workflow.
For discovery-first workflows, pass a sound URL or clip ID from a public TikTok video or trend feed into this Actor.
Practical scenario
Maya is reviewing a campaign brief that includes a TikTok music link. She starts with the sound URL https://www.tiktok.com/music/luther-7439295283975702544 and runs the Actor with outputMode set to sounds_and_videos.
The dataset returns a sound row with title, author, album, userCount, audioUrl, and shareUrl, plus video rows with videoId, videoUrl, authorUsername, playCount, likeCount, and caption. Maya uses the userCount and video engagement fields to decide which creators to review next, then opens the listed videoUrl records for a manual content check.
Input fields
| Field | Type | Purpose |
|---|---|---|
soundUrls | array of strings | TikTok sound/music URLs |
startUrls | array of request sources | Apify-style URL input for TikTok /music/ URLs |
clipIds | array of strings | Raw TikTok sound clip IDs |
searchQueries | array of strings | Music search queries that use the fallback data provider search |
outputMode | string | Save sound metadata, videos, or both |
providerOrder | string | scrapecreators-first (default), sociavault-first, scrapecreators-only, or sociavault-only; also available in the Console form |
maxSounds | integer | Maximum unique sounds to process |
maxSearchResultsPerQuery | integer | Maximum sounds discovered per search query |
maxVideosPerSound | integer | Maximum videos saved for each sound |
maxPagesPerSound | integer | Safety cap for provider pagination per sound |
region | string | Alpha-2 region used for the fallback data provider search |
filterBy | string | The fallback data provider search filter: all, title, or creators |
sortType | string | The fallback data provider search sort mode |
includeRawData | boolean | Include raw primary sound/video objects on each row |
Focused input example
{"soundUrls": ["https://www.tiktok.com/music/luther-7439295283975702544"],"outputMode": "sounds_and_videos","maxSounds": 1,"maxVideosPerSound": 25,"maxPagesPerSound": 5,"includeRawData": false}
Output fields
The default dataset contains normalized sound rows and video rows. Each row includes a recordType and a provider.
| Field | Type | Purpose |
|---|---|---|
recordType | string | sound or video |
provider | string | Provider that returned the row |
inputType | string or null | url, clipId, or search |
inputValue | string or null | Original URL, clip ID, or query |
searchQuery | string or null | Query that discovered the sound |
clipId | string or null | TikTok sound clip ID |
soundUrl | string or null | TikTok music page URL |
title | string or null | Sound title |
author | string or null | Sound author or artist |
album | string or null | Album name when available |
durationSeconds | number or null | Sound clip duration |
fullSongDurationMs | number or null | Matched full song duration |
userCount | integer or null | Number of TikTok videos using the sound |
createdAt | string or null | Sound or video creation timestamp |
isOriginal | boolean or null | TikTok original flag |
isOriginalSound | boolean or null | TikTok original audio flag |
isCommerceMusic | boolean or null | Commerce music flag |
hasCommerceRight | boolean or null | Provider-reported commerce right |
canReuse | boolean or null | Reuse or shooting flag when exposed |
language | string or null | Reported language |
coverUrl | string or null | Cover art or thumbnail URL |
audioUrl | string or null | Provider-returned audio preview URL |
shareUrl | string or null | Provider-returned TikTok share URL |
matchedSongId | string or null | Matched catalog song ID |
matchedSongTitle | string or null | Matched catalog song title |
matchedSongAuthor | string or null | Matched catalog song author |
themeTags | array or null | Genre or mood tags |
artists | array or null | Artist profile objects |
soundTitle | string or null | Sound title on video rows |
soundAuthor | string or null | Sound author on video rows |
videoPosition | integer or null | Position in the returned video list |
videoId | string or null | TikTok video ID |
videoUrl | string or null | TikTok video URL |
caption | string or null | Video caption text |
authorId | string or null | Video author ID |
authorSecUid | string or null | TikTok secure user ID |
authorUsername | string or null | Video author username |
authorNickname | string or null | Video author display name |
authorVerified | boolean or null | Whether the author is verified |
region | string or null | Video region when returned |
durationMs | integer or null | Video duration in milliseconds |
playCount | integer or null | Video play count |
likeCount | integer or null | Video like count |
commentCount | integer or null | Video comment count |
shareCount | integer or null | Video share count |
collectCount | integer or null | Video save count |
hashtags | array or null | Hashtags detected in the video |
scrapedAt | string | Timestamp when the row was saved |
Illustrative output record
{"recordType": "sound","inputType": "url","inputValue": "https://www.tiktok.com/music/luther-7439295283975702544","clipId": "7439295283975702544","soundUrl": "https://www.tiktok.com/music/luther-7439295283975702544","title": "luther","author": "Kendrick Lamar & SZA","album": "GNX","durationSeconds": 59,"userCount": 482194,"coverUrl": "https://p16-sg.tiktokcdn.com/aweme/720x720/example.jpeg","audioUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/example","shareUrl": "https://www.tiktok.com/music/luther-7439295283975702544","matchedSongTitle": "luther","matchedSongAuthor": "Kendrick Lamar & SZA","scrapedAt": "2026-06-10T00:00:00.000Z"}
How it works
The Actor accepts direct music URLs, request-list style start URLs, raw clip IDs, and optional search queries.
Implementation facts from the live contract:
- ScrapeCreators is the default first provider for sound details and videos.
- SociaVault is the fallback when the selected primary route fails, including a video pagination HTTP 404. Each provider starts with its own cursor; videos already saved are skipped across pages and providers.
- The fallback data provider search powers
searchQueries. outputModeselects whether rows include sounds, videos, or both.maxSounds,maxSearchResultsPerQuery,maxVideosPerSound, andmaxPagesPerSoundbound collection size and provider pagination.includeRawDataadds raw primary sound/video objects to each saved row for debugging and downstream parsing.- Output rows are stored in the default dataset, and
RUN_SUMMARYis stored in the key-value store.
Pricing
This Actor uses Pay per event with Apify platform usage included. The live Pricing tab shows the current pricing details, so check it before each run.
Event examples from the live contract:
- Actor start: $0.00005 per started GB of run memory, rounded up with a minimum of one startup event.
- Scraped TikTok sound: charged for each saved sound metadata row.
- Scraped TikTok video using sound: charged for each saved video row.
For example, two saved sound rows and ten saved video rows cost $0.021 in result events, plus the memory-scaled startup event. Platform usage is included under the current pricing. The live Pricing tab controls the effective charges.
Use with AI agents (MCP)
This Actor is an Apify Actor usable through Apify MCP. It retrieves TikTok sound metadata and video rows from accepted inputs and returns normalized dataset records plus run summary telemetry.
Exact Actor identity: khadinakbar/tiktok-sound-scraper
Use it when an agent needs a structured TikTok music record, a list of videos using a sound, or a sound discovered from search.
Find the TikTok sound behind this URL, save the sound metadata, and return the first 10 videos using it. Use the default provider order, keep raw provider data off, and summarize the sound title, author, usage count, and top creator handles.
Output interpretation:
recordType = "sound"identifies the music-level row.recordType = "video"identifies a video that uses the sound.providershows whether the primary or fallback data provider returned the row.scrapedAtmarks when the row was saved.OUTPUTandRUN_SUMMARYcontain the sameoutcome, provider usage, row counts, cost estimate, stop reason, and per-soundvideoCoveragedetails. An upstream failure, stalled cursor, or page safety cap producesPARTIALwhen useful rows were saved. A result cap means the requested sample was collected. Provider exhaustion describes only the returned feed.
Scope and pagination guidance:
- Direct sound URLs and clip IDs map to specific sounds.
- Search queries use the fallback data provider search, then the discovered sounds are scraped.
maxPagesPerSoundis a shared page-request budget across primary and fallback providers for one sound. A fallback restarts from its first page and may consume part of this budget while passing videos already saved. Cursors are managed internally; each bounded execution starts fresh and manages its own video cursors.maxVideosPerSoundcaps the number of saved video rows per sound.maxSoundscaps the number of unique sounds across direct inputs and search results.
Apify API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor('khadinakbar/tiktok-sound-scraper').call({soundUrls: ['https://www.tiktok.com/music/luther-7439295283975702544'],outputMode: 'sounds_and_videos',maxSounds: 1,maxVideosPerSound: 10});const datasetItems = await client.dataset(run.defaultDatasetId).listItems();console.log(datasetItems.items);
Best results and outcome guidance
A focused input usually produces the clearest dataset. Start with one of these patterns:
- one sound URL when you already know the exact TikTok music page,
- one clip ID when you only have the numeric sound identifier,
- one search query when you want discovery first and can work from the returned matches,
soundsmode when you only need sound-level metadata,videosmode when you only need the videos that use a sound.
For search-driven workflows, use region, filterBy, and sortType together so the search matches your research context. Set maxVideosPerSound to a smaller number when you only need sample videos, or leave it higher when you want broader coverage of the returned sound.
Continue the workflow
- Then use TikTok Transcript Scraper to continue Tiktok records selected with TikTok Sound Scraper - Music Metadata & Videos into a focused media workflow.
- Then use TikTok Trending Hashtags Scraper to extend TikTok Sound Scraper - Music Metadata & Videos research with a complementary discovery contract.
Design note
I found that the dataset contract cleanly separates sound rows from video rows through recordType, while still keeping shared identifiers like clipId and soundUrl available for both workflow stages.
FAQ
When should I use sound URLs versus clip IDs?
Use sound URLs when you already have a TikTok music page. Use clip IDs when another workflow, such as a search scraper or trend scraper, has already extracted the numeric sound identifier.
How does this Actor connect to discovery workflows?
A discovery Actor can surface public TikTok records first. Pass a sound URL or clip ID from that result into this Actor to collect the related sound metadata and videos.
What appears in the dataset when I only want sound metadata?
Set outputMode to sounds. The dataset will then focus on sound rows, including fields like title, author, album, userCount, audioUrl, and shareUrl.
What appears in the dataset when I only want videos?
Set outputMode to videos. The dataset will focus on video rows with fields such as videoId, videoUrl, authorUsername, playCount, likeCount, and hashtags.
How do search queries work?
searchQueries uses the fallback data provider's TikTok music search endpoint to discover sounds, and then the Actor scrapes each discovered sound according to the other input settings.
Where can I check pricing for the current run?
Open the live Pricing tab in the Actor UI. The Actor uses Pay per event with Apify platform usage included.
Responsible use
Use this Actor for public web data and for workflows that fit your data governance, privacy, and platform-terms requirements. Review the returned dataset fields before downstream use, especially when joining sound rows and video rows into a single analysis table.
Sound video coverage and fallback
The mobile app's post count and a sound's userCount are separate source observations. Neither promises that this API feed can enumerate every public video. Regional availability, ranking, removals, and the upstream endpoint can affect coverage. Increasing the caps allows more pagination; it does not guarantee the app's total. region affects music search only, not direct sound-video enumeration. A 404 during pagination is a provider failure, not proof of exhaustion, and will be visible in providerErrors and videoCoverage.
For a small test with automatic fallback, use:
{"clipIds": ["7510997257874753537"],"outputMode": "sounds_and_videos","providerOrder": "scrapecreators-first","maxSounds": 1,"maxVideosPerSound": 10,"maxPagesPerSound": 5,"includeRawData": false}
Use "providerOrder": "sociavault-only" to compare that provider's returned feed. All four choices work on any Apify plan; each saved result uses the existing event pricing and remains subject to the spending limit set for the execution. Choosing another provider does not guarantee more results or matching app counts.
Start another bounded execution to collect more. If an upstream page fails after useful rows were saved, the run reports partial coverage; inspect OUTPUT, RUN_SUMMARY, the dataset, and final charges before starting another bounded run. If a save could not be confirmed, the summary marks the affected totals as unknown rather than claiming zero.
The provider selector controls sound details and videos. Music search is available through SociaVault: automatic orders or SociaVault-only may use it, while ScrapeCreators-only with searchQueries is rejected before a provider request. For a direct sound, region does not change the sound-video feed.
Raw sound output includes the public sound object, rather than the provider account/billing wrapper. Provider account balances are not copied into the Dataset.
TikTok, ScrapeCreators, and SociaVault are trademarks of their respective owners. This independent Actor is not affiliated with, associated with, or endorsed by those services.