TikTok Discover Scraper: Sound Finder by keyword
Pricing
from $5.99 / 1,000 results
TikTok Discover Scraper: Sound Finder by keyword
This TikTok Discover Scraper extracts real-time Discover trends, viral topics, popular sounds, and creator rankings. Ideal for tracking what's trending globally or locally to enhance strategic decision-making.
Pricing
from $5.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
0
Monthly active users
10 days ago
Last modified
Categories
Share
TikTok Sound Scraper — Sounds by Keyword with Commercial-Right Data
Type a topic and get back TikTok's own Sounds search results for it — one row per track, with the real number of videos already using that sound and TikTok's own commercial-right code decoded into plain English. Every response is structured JSON, ready to pass straight to an LLM, load into a spreadsheet, or feed a monitoring pipeline. No TikTok account, cookie, or API key is required to run it. Whether you're building a content brief, a rotating "safe sounds" list for a brand account, or a weekly trend report, this actor turns a plain keyword into a licensable sound catalogue instead of a pile of unrelated videos.
What is TikTok Sound Scraper: Sound Finder by keyword?
TikTok Sound Scraper: Sound Finder by keyword queries TikTok's own Sounds search tab (/api/search/music/full/) for each line you enter, pages through the results, deduplicates them on TikTok's sound ID, applies any filters you set, and pushes one flat row per track. It runs entirely logged-out — no TikTok account, cookie, or API key is asked for anywhere in the input schema, and the code never sets a credential of any kind.
What sets it apart from a general keyword or hashtag scraper is that it returns the sound catalogue itself — including TikTok's raw commercial_right_type code decoded into a plain-English label — rather than the videos that happen to use those sounds. That decoded rights field is the piece competing TikTok tools in this space do not expose.
- 🎼 Keyword, hashtag, sound-link, or profile-link input — anything that isn't a recognised TikTok link is searched as-is
- 📄 Real pagination — 20 sounds per page, threaded with TikTok's own
search_idcursor - 📈 Filter by minimum video-usage count, commercial-right status, or language label
- ↕️ Re-sort the sounds you fetched by relevance, usage, recency, or track length
- 💼 Commercial-right code decoding, so you know which tracks a business account may use
- 🔓 Keyless by default, with an automatic proxy and browser-signature rescue path if TikTok challenges the exit IP
What data can you get with TikTok Sound Scraper: Sound Finder by keyword?
Every run returns one JSON object per sound match, built by merging TikTok's music_info block onto a base row shape shared with a sibling video-scraping actor — so video- and author-only fields ship as null on a sound row instead of a fabricated 0.
| Result type | Extracted fields | Primary use case |
|---|---|---|
| Sound (track) | sound.soundId, sound.title, sound.artist, sound.album, sound.durationSeconds, sound.videoDurationSeconds, sound.videoCount, sound.language, sound.commercialRightType, sound.commercialRightLabel, sound.availableForBusiness, sound.isLibraryTrack, sound.isOriginalSound, sound.shootingAllowed, sound.addedAt / sound.addedAtISO, sound.coverUrl, sound.previewUrl, sound.soundUrl, sound.resultPosition, sound.matchedQuery | Choosing a specific track for a content brief, building a licensed sound library, spotting rising audio |
| Discovery context | hashtag, count, input, discoveryInfo.tag, discoveryInfo.url, discoveryInfo.type, scrapedAt | Tracing a row back to the keyword line and run that produced it, merging rows across a multi-keyword run |
| Base-actor compatibility fields | musicMeta.musicName, musicMeta.musicAuthor, musicMeta.musicId, musicMeta.musicAlbum, musicMeta.musicOriginal, musicMeta.playUrl, musicMeta.coverMediumUrl, plus id, text, createTime, authorMeta.*, videoMeta.*, diggCount, shareCount, playCount, collectCount, commentCount (all null on a sound row), mentions, hashtags, effectStickers (all []) | Drop-in compatibility with pipelines already built for a video-based Discover actor |
Commercial-right decoded sound catalogue
This is the field competing tools don't surface: sound.commercialRightType is TikTok's own raw code (1, 2, or 3), and sound.commercialRightLabel decodes it into plain English —
{"commercialRightType": 2,"commercialRightLabel": "Full commercial right","availableForBusiness": true,"isLibraryTrack": true,"shootingAllowed": true}
sound.availableForBusiness mirrors TikTok's own has_commerce_right flag and is true only on the type-2 rows. sound.isLibraryTrack distinguishes a licensed catalogue track (is_pgc) from a user upload, and sound.shootingAllowed reports whether TikTok itself permits recording new videos with that sound. Together these four fields let a brand or agency filter a keyword's entire sound catalogue down to what a business account can actually post with, instead of guessing from the track name.
Usage and freshness signals
sound.videoCount mirrors TikTok's own user_count — how many videos already use that exact sound — and sound.addedAtISO reports when the sound landed on TikTok, converted from Unix time. Combined with sound.resultPosition (where TikTok ranked it for your keyword) and sound.durationSeconds, these fields let you separate a track that's climbing from one that peaked months ago, without opening TikTok yourself.
Why not build this yourself?
TikTok does not publish a general, keyless "search sounds by keyword" API for arbitrary business use — its Research API is restricted to vetted academic applicants and its Content Posting API is for publishing, not search. Reaching /api/search/music/full/ directly means solving problems this actor already handles in code: a TLS-impersonation ladder (chrome124, chrome120, safari184, chrome99_android, safari17_2_ios, chrome131) rotated until one profile clears TikTok's WAF, a homepage warm-up to mint trust cookies before the search request fires, and threading TikTok's own search_id value from page 1 into every later page — without it, page 2 measured zero rows. Every guard in the code checks response body shape rather than HTTP status, because a dead TikTok surface still answers HTTP 200. Building and maintaining that stack yourself costs real engineering time every time TikTok rotates which impersonation profile clears; this actor exists so you don't have to.
What's the difference between a TikTok keyword scraper and a sound discovery scraper?
A TikTok keyword or hashtag scraper searches TikTok's video feed and returns the posts that matched your term — captions, view counts, creator handles. A sound discovery scraper searches TikTok's separate Sounds tab and returns the audio tracks associated with that topic, independent of any one video. The distinction matters because a keyword video scraper tells you what content already exists for a topic, while a sound discovery scraper tells you which tracks you could still use to make new content around it.
This confusion shows up directly in the competing tools we reviewed: on TikTok Scraper (All-in-One)'s listing (apify.com/lurkapi/tiktok-scraper-all-in-one, checked 2026-07-30), the "Keyword search" input returns matching videos, while its separate "Sound URLs" input only finds videos that use a sound you already know — it does not discover new sounds from a topic. TikTok Sound Scraper: Sound Finder by keyword sits in the second category exclusively: it returns sound objects, not video posts, and needs nothing but a topic phrase to start.
How to scrape TikTok sounds with TikTok Sound Scraper: Sound Finder by keyword?
- Open the Actor's page on the Apify Store and click Start.
- Enter your topics in
startUrls— the only required field — one line per topic (e.g.phonk,skincare routine, or a TikTok search/sound/tag/profile link). - Set the real query controls this Actor exposes:
maxSoundsPerQuery(how many to keep),maxPagesPerQuery(how deep to page),minSoundVideoCount,onlyCommerciallyUsable,soundLanguages, andsortSoundsBy. - Click Save & Start to run the Actor.
- Read results from the Storage → Dataset tab, or export them as JSON, JSONL, CSV, Excel, HTML table, or XML.
{"startUrls": ["phonk", "skincare routine"],"maxSoundsPerQuery": 25,"minSoundVideoCount": 10000,"onlyCommerciallyUsable": true,"sortSoundsBy": "videoCount"}
How to run multiple queries in one job
startUrls accepts one topic per line, and every line is searched, deduplicated, and pushed independently within the same run — there's no separate batch upload format. The Actor's code processes each keyword in your list one after another within a single run (not in parallel), so a run with several topics simply takes proportionally longer than a run with one. Each pushed row carries sound.matchedQuery and hashtag naming the exact line it came from, so a multi-keyword dataset is still easy to split back apart afterward.
⬇️ Input
Every field below comes straight from this Actor's input schema. Only startUrls is required — everything else has a working default.
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
startUrls | Yes | array of strings | — | One topic per line. A # prefix is stripped. TikTok search links (?q=…), sound links (/music/<slug>), hashtag links (/tag/<tag>), and profile links (/@handle) are converted into a search term; any other TikTok URL is skipped with a logged warning rather than searched literally. |
maxSoundsPerQuery | No | integer | min 0, max 500 | How many sounds to keep per topic, applied after filters run. Leave empty to fall back to maxItems. 0 keeps everything the page budget returns. |
maxPagesPerQuery | No | integer | default 8, min 1, max 20 | Page budget per topic (20 sounds per page). Raise it when your filters are strict, since filtered-out sounds still consume pages. |
maxItems | No | integer | default 10, min 0, max 500 | Legacy cap kept for backward compatibility with the original Discover actor and its saved tasks. Used only when maxSoundsPerQuery is left empty. If both are left empty, the Actor's own code falls back to a cap of 20. |
minSoundVideoCount | No | integer | default 0, min 0 | Drops tracks with fewer than this many videos, applied to TikTok's own user_count. 0 disables the filter. |
onlyCommerciallyUsable | No | boolean | default false | Keeps only sounds where TikTok reports has_commerce_right = true (commercial-right code 2). |
soundLanguages | No | array of strings | default [] | Keep only these TikTok language labels (e.g. English, Korean, Spanish). A sound with no language label is dropped while this filter is on. Leave empty to keep every language. |
sortSoundsBy | No | string (enum) | default "relevance"; one of relevance, videoCount, newest, oldest, longest | Re-orders the sounds this run already fetched. relevance is TikTok's own ranking, untouched; every other value is applied client-side to the rows in hand — it does not ask TikTok for a different ranking. |
proxyConfiguration | No | object (Apify Proxy editor) | default {"useApifyProxy": false} | Left off, the run tries a direct connection first and escalates to Datacenter, then Residential, only if TikTok's WAF challenges the exit IP. |
{"startUrls": ["phonk", "skincare routine", "https://www.tiktok.com/search?q=lofi"],"maxSoundsPerQuery": 25,"maxPagesPerQuery": 8,"maxItems": 10,"minSoundVideoCount": 10000,"onlyCommerciallyUsable": true,"soundLanguages": ["English"],"sortSoundsBy": "videoCount","proxyConfiguration": { "useApifyProxy": false }}
⚠️ Common pitfall: pasting a plain TikTok video URL into startUrls does nothing useful — the Actor only recognises search, sound, hashtag, and profile links; any other http-prefixed line is skipped with a warning instead of being searched literally. A second, less obvious one: if you turn on proxyConfiguration and pick a country inside the Apify Proxy editor, that country selection is silently ignored — the Actor's code only forwards the chosen proxy group (Datacenter or Residential) to Apify Proxy, never a country code, so region is effectively determined by whichever exit IP the proxy hands back.
⬆️ Output
Results are typed, normalized JSON with a consistent schema across every run, stored in the Actor's default dataset. Export directly to JSON, JSONL, CSV, Excel, HTML table, or XML from the Storage tab. Every pushed row is a charged row_result event ($0.005 each, per this Actor's pay-per-event pricing) — there is no separate uncharged accounting row in the code, so your dataset row count and your billed event count always match exactly.
Scraped results
[{"hashtag": "phonk","count": 1,"input": "phonk","rowType": "sound","scrapedAt": "2026-07-30T09:12:44Z","id": null,"text": null,"createTime": null,"createTimeISO": null,"isAd": null,"isMuted": null,"diggCount": null,"shareCount": null,"playCount": null,"collectCount": null,"commentCount": null,"isSlideshow": null,"isPinned": null,"webVideoUrl": null,"mediaUrls": ["https://sf16-ies-music-sg.tiktokcdn.com/obj/…"],"mentions": [],"hashtags": [],"effectStickers": [],"authorMeta": {"id": null, "name": null, "nickName": null, "verified": null,"signature": null, "bioLink": null, "avatar": null, "privateAccount": null,"following": null, "fans": null, "heart": null, "video": null, "digg": null},"videoMeta": {"height": null, "width": null, "duration": null, "coverUrl": null,"originalCoverUrl": null, "definition": null, "format": null,"originalDownloadAddr": null, "downloadAddr": null,"subtitleUrls": [], "slideshowImages": []},"musicMeta": {"musicName": "Lalala Phonk","musicAuthor": "Sushi Beats","musicOriginal": false,"musicAlbum": "Lalala Phonk","playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/…","coverMediumUrl": "https://p16-sg.tiktokcdn.com/aweme/200x200/…","musicId": "7195227075836381185"},"discoveryInfo": {"breadcrumbs": [],"relatedTags": [],"url": "https://www.tiktok.com/search/music?q=phonk","tag": "phonk","type": "soundSearch"},"sound": {"soundId": "7195227075836381185","title": "Lalala Phonk","artist": "Sushi Beats","album": "Lalala Phonk","durationSeconds": 60,"videoDurationSeconds": 60,"videoCount": 607570,"language": "English","commercialRightType": 3,"commercialRightLabel": "Commerce music - right not granted","availableForBusiness": false,"isLibraryTrack": true,"isOriginalSound": false,"shootingAllowed": true,"addedAt": 1675269358,"addedAtISO": "2023-02-01T16:35:58Z","coverUrl": "https://p16-sg.tiktokcdn.com/aweme/720x720/…","previewUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/…","soundUrl": "https://www.tiktok.com/music/x-7195227075836381185","resultPosition": 1,"matchedQuery": "phonk"}},{"hashtag": "phonk","count": 2,"input": "phonk","rowType": "sound","scrapedAt": "2026-07-30T09:12:45Z","sound": {"soundId": "7331882201849710849","title": "Phonk Drift","artist": "Kordhell","album": null,"durationSeconds": 45,"videoDurationSeconds": 30,"videoCount": 389421,"language": "English","commercialRightType": 2,"commercialRightLabel": "Full commercial right","availableForBusiness": true,"isLibraryTrack": true,"isOriginalSound": false,"shootingAllowed": true,"addedAt": 1690000000,"addedAtISO": "2023-07-22T06:13:20Z","coverUrl": "https://p16-sg.tiktokcdn.com/aweme/720x720/…","previewUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/…","soundUrl": "https://www.tiktok.com/music/x-7331882201849710849","resultPosition": 2,"matchedQuery": "phonk"}},{"hashtag": "phonk","count": 3,"input": "phonk","rowType": "sound","scrapedAt": "2026-07-30T09:12:46Z","sound": {"soundId": "7250013489012340000","title": "original sound","artist": "user4821037","album": null,"durationSeconds": 22,"videoDurationSeconds": 22,"videoCount": 70,"language": null,"commercialRightType": 1,"commercialRightLabel": "No commercial right","availableForBusiness": false,"isLibraryTrack": false,"isOriginalSound": true,"shootingAllowed": true,"addedAt": 1710000000,"addedAtISO": "2024-03-09T18:40:00Z","coverUrl": "https://p16-sg.tiktokcdn.com/aweme/720x720/…","previewUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/…","soundUrl": "https://www.tiktok.com/music/x-7250013489012340000","resultPosition": 3,"matchedQuery": "phonk"}}]
How can I use the data extracted with TikTok Sound Scraper: Sound Finder by keyword?
- 💼 Marketing and social media teams: filter a niche's whole sound catalogue down to
sound.availableForBusiness = truebefore a brand account posts, instead of guessing from the track name. - 🤖 AI engineers and LLM developers: an agent issues a keyword, receives structured
soundobjects back, and passes them to the model as grounded context for a content-planning or licensing assistant. - 📊 Trend and market researchers: sort by
sortSoundsBy: videoCountand diffsound.videoCountacross scheduled runs to quantify which tracks are climbing under a topic, not just which videos are. - 🎬 Content creators: build a running shortlist of tracks per content pillar, keyed on the stable
sound.soundId, and feed those IDs into a dedicated sound-detail or video-by-sound actor for deeper research.
How do you monitor sound rights and virality over time?
Sound catalogues shift constantly — a track's commercial-right status can change, and a niche track's usage count can go from a few hundred to hundreds of thousands of videos within weeks. Monitoring means running the same keyword set on a schedule and comparing each new dataset to the last one, keyed on the stable sound.soundId rather than on row position, which changes as new sounds enter the results.
The fields worth diffing between runs are sound.videoCount (usage growth), sound.commercialRightType / sound.commercialRightLabel / sound.availableForBusiness (rights status, which TikTok can change independently of usage), and sound.addedAtISO (to catch sounds that are newly indexed under your keyword). A practical loop: schedule a run across your keyword set, load the new dataset, join it to the previous run on sound.soundId, and alert when videoCount crosses a threshold you care about or when availableForBusiness flips to true for a track you were tracking. Delivery is via the Actor's dataset — set up an Apify Schedule to run it automatically and an Apify webhook on run completion to push the resulting dataset ID to your own pipeline.
Integrate TikTok Sound Scraper: Sound Finder by keyword and automate your workflow
TikTok Sound Scraper: Sound Finder by keyword works with any language or tool that can send an HTTP request, through the Apify API and its official client libraries.
REST API with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("Scrapier/tiktok-discover-scraper-sound-finder-by-keyword").call(run_input={"startUrls": ["phonk", "lofi study"],"maxSoundsPerQuery": 25,"minSoundVideoCount": 10000,"sortSoundsBy": "videoCount",})for row in client.dataset(run["defaultDatasetId"]).iterate_items():sound = row["sound"]print(sound["title"], sound["videoCount"], sound["commercialRightLabel"])
MCP for query-grounded AI agents
This Actor is reachable through Apify's own Actors MCP Server (mcp.apify.com), which exposes any Apify Actor — including this one — as a callable tool for MCP-compatible clients such as Claude Desktop and Claude Code. An agent calls the tool with a keyword, gets structured sound rows back, and can ground its next answer in the real catalogue instead of guessing at track names.
Scheduled monitoring and delivery
Set up an Apify Schedule to run this Actor on a recurring cadence (hourly, daily, or a custom cron expression) against a fixed keyword set, and attach an Apify webhook to fire on each run's completion — pointing it at your own endpoint to pull the new dataset automatically rather than polling the Apify Console.
Is it legal to scrape TikTok sound data?
Yes — this Actor collects only sound catalogue data that TikTok already shows to any logged-out visitor of its public Sounds search tab. sound.title, sound.artist, sound.album, and usage counts are TikTok's own public catalogue metadata, not personal profile data about identifiable individuals, so this falls under a terms-of-service and database-rights framing rather than GDPR or CCPA, which govern personal data and do not apply to this kind of public content catalogue. Scraping for internal monitoring or content planning carries a different risk profile than scraping to train a model or republish audio at scale — the commercial-right label this Actor decodes is TikTok's own data point, not legal advice, so confirm rights in TikTok's own Commercial Music Library before publishing with a track. Consult your legal team for commercial use cases involving bulk data storage, and respect TikTok's Terms of Service and the copyright of each track's rights holder.
❓ Frequently asked questions
Does this Actor support region or country targeting?
No. There is no region or country input in the schema — the catalogue you get reflects whichever region TikTok resolves from the run's exit IP. If you turn on proxyConfiguration and select a country in the Apify Proxy editor, that selection has no effect: the Actor's code only forwards the chosen proxy group (Datacenter or Residential) to Apify Proxy, never a country code.
How do I re-order the sounds I get back?
Set sortSoundsBy to relevance (TikTok's own order, the default), videoCount (most-used first), newest, oldest, or longest. This re-sorts only the rows this run already fetched — it does not change what TikTok returns or ask for a different server-side ranking.
How does this Actor handle TikTok's anti-bot measures?
It opens with a homepage warm-up using curl-level TLS impersonation, rotating through a fixed list of browser profiles until one clears TikTok's WAF, and every check is based on response body shape (size and content) rather than HTTP status, since a blocked TikTok surface still answers HTTP 200. If the exit IP still gets challenged, the run automatically escalates from no proxy to a Datacenter proxy and then a Residential proxy, and as a last resort falls back to a signed Playwright browser session for the same query.
Does this Actor extract TikTok's commercial-right data?
Yes — it arrives in sound.commercialRightType (TikTok's raw numeric code), sound.commercialRightLabel (decoded to "No commercial right", "Full commercial right", or "Commerce music - right not granted"), and sound.availableForBusiness (TikTok's own has_commerce_right boolean). If TikTok ever returns a code outside 1–3, commercialRightLabel is null rather than a guessed label.
How many sounds does this Actor return per keyword?
Up to maxSoundsPerQuery (or maxItems if that's left empty), capped at 500 by the schema. The Actor's own input schema documents a measured ceiling of 8 pages returning 160 unique sounds for one keyword, with TikTok still reporting has_more: 1 at that point — anonymous search does run dry for narrower topics before that ceiling is reached.
How do I monitor a sound's rights or popularity over time?
Schedule this Actor to run against the same keyword set on a recurring basis, join each new dataset to the previous one on the stable sound.soundId, and alert on the specific delta you care about — a rising sound.videoCount or a sound.availableForBusiness flag that flips to true.
Does this Actor work with Claude, ChatGPT, and AI agent frameworks?
Yes. It's callable as an HTTP endpoint through the Apify API by any agent framework, and it's also reachable through Apify's Actors MCP Server (mcp.apify.com) for MCP-compatible clients, which lets an agent retrieve a live sound catalogue before answering a question about trending audio.
How does this Actor compare to other TikTok sound and keyword tools?
On TikTok Keywords Discovery Tool's listing (apify.com/easyapi/tiktok-keywords-discovery-tool, checked 2026-07-30), the output is search-suggestion strings (keyword, type, item) — no sound metadata at all. On TikTok Scraper (All-in-One)'s listing (apify.com/lurkapi/tiktok-scraper-all-in-one, checked 2026-07-30), sound lookup requires a Sound URL you already have; it doesn't discover sounds from a topic keyword. This Actor is the one built specifically to go keyword → sound catalogue, with the commercial-right code decoded on every row.
Can I use this Actor without managing proxies or TikTok credentials?
Yes. By default it runs with no proxy at all and only reaches for Apify Proxy (Datacenter, then Residential) automatically if TikTok challenges the exit IP — you never need to supply a TikTok login, cookie, or API key anywhere in the input.
💬 Your feedback
Found a bug, or a field you expected but didn't get? Let Scrapier know through the Issues tab on this Actor's Apify Store page, or via the Apify Console's built-in support chat — reports like these directly shape the next update.