TikTok Sound Lookup: Metadata & Videos Using It
Look up any TikTok sound by URL or ID and get back its title, creator, duration, cover art, and streaming links, plus every video currently using that sound with captions, hashtags, and engagement counts.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | Choose how to find sounds: by sound URL/ID, or by keyword search. |
musicUrls | array | optional | (mode=bySound) TikTok sound page URLs. Example: https://www.tiktok.com/music/original-sound-7595604258835401494 |
musicIds | array | optional | (mode=bySound) Numeric TikTok sound IDs, 15-20 digits, as an alternative to full URLs. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | Choose how to find sounds: by sound URL/ID, or by keyword search. |
musicUrls | array | optional | (mode=bySound) TikTok sound page URLs. Example: https://www.tiktok.com/music/original-sound-7595604258835401494 |
musicIds | array | optional | (mode=bySound) Numeric TikTok sound IDs, 15-20 digits, as an alternative to full URLs. |
searchQueries | array | optional | (mode=searchSounds) Keywords to search in TikTok's sound catalogue, e.g. lofi, phonk, afrobeats. Each query returns up to 30 sounds; duplicates are removed across queries. |
maxSoundsPerQuery | integer | optional | (mode=searchSounds) Keep at most this many sounds per keyword. TikTok returns a maximum of 30. |
maxPostsPerSound | integer | optional | Videos to collect per sound (0-500). Set 0 for sound metadata only. TikTok can cap the public feed per run, so fewer rows may be returned and the run status reports any shortfall. |
includeMusicMetadata | boolean | optional | Emit a metadata row per sound with title, creator/artist, duration, covers, DSP IDs, tags and video count. |
includePosts | boolean | optional | Emit one row per video that uses the sound, with author, caption, hashtags, mentions, POI, effects, slideshow images and engagement counts. |
includeErrorRows | boolean | optional | Emit a row with rowType='error' when an input cannot be read, instead of only logging it. Off by default. |
publishedWithin | string | optional | Keep only videos published inside this window. Applied after collection, to video rows. |
minPlayCount | integer | optional | Drop videos below this play count. 0 keeps everything. Videos without a play count are kept only when this is 0. |
minLikeCount | integer | optional | Drop videos below this like count. 0 keeps everything. Videos without a like count are kept only when this is 0. |
uniqueCreatorsOnly | boolean | optional | Keep only the highest-play video per author across the run. Useful for audience and creator discovery. |
Download the published input schema
View complete JSON
{
"description": "Look up TikTok sounds by URL/ID or search by keyword. Returns sound metadata, artist and DSP details, plus the videos using each sound.",
"properties": {
"includeErrorRows": {
"default": false,
"description": "Emit a row with rowType='error' when an input cannot be read, instead of only logging it. Off by default.",
"prefill": false,
"title": "Include Error Rows",
"type": "boolean"
},
"includeMusicMetadata": {
"default": true,
"description": "Emit a metadata row per sound with title, creator/artist, duration, covers, DSP IDs, tags and video count.",
"prefill": true,
"title": "Include Sound Metadata",
"type": "boolean"
},
"includePosts": {
"default": true,
"description": "Emit one row per video that uses the sound, with author, caption, hashtags, mentions, POI, effects, slideshow images and engagement counts.",
"prefill": true,
"title": "Include Videos Using The Sound",
"type": "boolean"
},
"maxPostsPerSound": {
"default": 30,
"description": "Videos to collect per sound (0-500). Set 0 for sound metadata only. TikTok can cap the public feed per run, so fewer rows may be returned and the run status reports any shortfall.",
"maximum": 500,
"minimum": 0,
"prefill": 5,
"title": "Max Videos Per Sound",
"type": "integer"
},
"maxSoundsPerQuery": {
"default": 10,
"description": "(mode=searchSounds) Keep at most this many sounds per keyword. TikTok returns a maximum of 30.",
"maximum": 30,
"minimum": 1,
"title": "Max Sounds Per Query",
"type": "integer"
},
"minLikeCount": {
"default": 0,
"description": "Drop videos below this like count. 0 keeps everything. Videos without a like count are kept only when this is 0.",
"maximum": 1000000000000,
"minimum": 0,
"title": "Minimum Like Count",
"type": "integer"
},
"minPlayCount": {
"default": 0,
"description": "Drop videos below this play count. 0 keeps everything. Videos without a play count are kept only when this is 0.",
"maximum": 1000000000000,
"minimum": 0,
"title": "Minimum Play Count",
"type": "integer"
},
"mode": {
"default": "bySound",
"description": "Choose how to find sounds: by sound URL/ID, or by keyword search.",
"editor": "select",
"enum": [
"bySound",
"searchSounds"
],
"enumTitles": [
"Look up sounds by URL or ID",
"Search sounds by keyword"
],
"prefill": "bySound",
"title": "Mode",
"type": "string"
},
"musicIds": {
"description": "(mode=bySound) Numeric TikTok sound IDs, 15-20 digits, as an alternative to full URLs.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [
"7595604258835401494"
],
"title": "Sound IDs",
"type": "array"
},
"musicUrls": {
"description": "(mode=bySound) TikTok sound page URLs. Example: https://www.tiktok.com/music/original-sound-7595604258835401494",
"editor": "stringList",
"items": {
"type": "string"
},
"title": "Sound URLs",
"type": "array"
},
"publishedWithin": {
"default": "all",
"description": "Keep only videos published inside this window. Applied after collection, to video rows.",
"editor": "select",
"enum": [
"all",
"day",
"week",
"month",
"year"
],
"enumTitles": [
"Any time",
"Last 24 hours",
"Last 7 days",
"Last 30 days",
"Last 365 days"
],
"prefill": "all",
"title": "Published Within",
"type": "string"
},
"searchQueries": {
"description": "(mode=searchSounds) Keywords to search in TikTok's sound catalogue, e.g. lofi, phonk, afrobeats. Each query returns up to 30 sounds; duplicates are removed across queries.",
"editor": "stringList",
"items": {
"type": "string"
},
"title": "Sound Search Queries",
"type": "array"
},
"uniqueCreatorsOnly": {
"default": false,
"description": "Keep only the highest-play video per author across the run. Useful for audience and creator discovery.",
"prefill": false,
"title": "One Video Per Creator",
"type": "boolean"
}
},
"required": [],
"schemaVersion": 1,
"title": "TikTok Sound & Music Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
data | string | optional | Dataset containing sound metadata, videos using the sounds, and opt-in error rows. Use rowType to distinguish them. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Sound metadata rows (rowType=music), videos using each sound (rowType=post), and optional error rows (rowType=error), joined by matchedMusicId and searchKeyword.",
"properties": {
"data": {
"description": "Dataset containing sound metadata, videos using the sounds, and opt-in error rows. Use rowType to distinguish them.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Sounds, Videos and Errors",
"type": "string"
}
},
"title": "TikTok Sound & Music Scraper Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"fields": {
"album": {
"description": "Album name when the track belongs to a release",
"title": "Album",
"type": "string"
},
"artist": {
"description": "Artist profile snapshot for a credited/licensed track (id, secUid, username, displayName, bio, verified, avatarUrl)",
"title": "Artist",
"type": "object"
},
"artists": {
"description": "All credited artists returned for a licensed track",
"title": "Artists",
"type": "array"
},
"author": {
"description": "Profile snapshot for the sound's creator/artist or the video author (id, secUid, username, displayName, bio, verified, avatarUrl, followerCount, followingCount, heartCount, videoCount)",
"title": "Author",
"type": "object"
},
"authorName": {
"description": "Credited creator or artist name for the sound",
"title": "Author Name",
"type": "string"
},
"caption": {
"description": "Video caption text",
"title": "Caption",
"type": "string"
},
"collectCount": {
"description": "Number of times the video was saved",
"title": "Collect Count",
"type": "integer"
},
"commentCount": {
"description": "Number of comments",
"title": "Comment Count",
"type": "integer"
},
"commercialRightType": {
"description": "TikTok's commercial-right category code",
"title": "Commercial Right Type",
"type": "integer"
},
"coverLarge": {
"description": "Large cover image URL",
"title": "Cover Large",
"type": "string"
},
"coverMedium": {
"description": "Medium cover image URL",
"title": "Cover Medium",
"type": "string"
},
"coverThumb": {
"description": "Thumbnail cover image URL",
"title": "Cover Thumb",
"type": "string"
},
"createTime": {
"description": "Unix timestamp when the sound or video was created",
"title": "Create Time",
"type": "integer"
},
"createdAt": {
"description": "ISO 8601 UTC timestamp when the sound or video was created",
"title": "Created At",
"type": "string"
},
"dspLinks": {
"description": "Streaming-platform IDs and links derived from TikTok's DSP partner data (platform, platformName, songId, metaSongId, url)",
"title": "DSP Links",
"type": "array"
},
"duetEnabled": {
"description": "Whether duets are allowed on this video",
"title": "Duet Enabled",
"type": "boolean"
},
"duration": {
"description": "Duration of the sound in seconds",
"title": "Duration",
"type": "integer"
},
"durationHighPrecision": {
"description": "Higher-precision sound duration in seconds when available",
"title": "Duration High Precision",
"type": "number"
},
"effectStickers": {
"description": "Effect stickers used in the video",
"title": "Effect Stickers",
"type": "array"
},
"errorCode": {
"description": "Machine-readable failure code on opt-in error rows",
"title": "Error Code",
"type": "string"
},
"errorMessage": {
"description": "Plain-language failure description on opt-in error rows",
"title": "Error Message",
"type": "string"
},
"externalSongInfo": {
"description": "Raw partner IDs TikTok returns for the track (partnerName, partnerSongId, externalSongKey, h5Url, appLink, deepLink)",
"title": "External Song Info",
"type": "array"
},
"hasCommerceRight": {
"description": "Whether the sound carries commercial usage rights",
"title": "Has Commerce Right",
"type": "boolean"
},
"hashtags": {
"description": "Hashtags used in the caption",
"title": "Hashtags",
"type": "array"
},
"images": {
"description": "Slideshow images for photo posts (postType='slideshow')",
"title": "Images",
"type": "array"
},
"inputValue": {
"description": "The URL, ID or keyword that could not be read",
"title": "Input Value",
"type": "string"
},
"isAd": {
"description": "Whether the video is a paid advertisement",
"title": "Is Ad",
"type": "boolean"
},
"isAuthorArtist": {
"description": "Whether the credited author is the artist",
"title": "Is Author Artist",
"type": "boolean"
},
"isCommerceMusic": {
"description": "Whether the sound is a commercial music track",
"title": "Is Commerce Music",
"type": "boolean"
},
"isCopyrighted": {
"description": "Whether the sound is under copyright",
"title": "Is Copyrighted",
"type": "boolean"
},
"isOriginal": {
"description": "Whether this is an original sound recorded by a user",
"title": "Is Original Sound",
"type": "boolean"
},
"isPgc": {
"description": "Whether TikTok classifies the sound as professionally generated content",
"title": "Is PGC",
"type": "boolean"
},
"isPrivate": {
"description": "Whether the sound is private",
"title": "Is Private",
"type": "boolean"
},
"isUnlimitedMusic": {
"description": "Whether the sound is an unlimited-use music track",
"title": "Is Unlimited Music",
"type": "boolean"
},
"language": {
"description": "Language code of the sound when TikTok returns one",
"title": "Language",
"type": "string"
},
"likeCount": {
"description": "Number of likes",
"title": "Like Count",
"type": "integer"
},
"locationCreated": {
"description": "Country code where the video was created, when TikTok returns it",
"title": "Location Created",
"type": "string"
},
"matchedMusicId": {
"description": "Sound ID this video was collected under (video rows only)",
"title": "Matched Music ID",
"type": "string"
},
"matchedSongId": {
"description": "Internal TikTok matched-song ID for licensed tracks",
"title": "Matched Song ID",
"type": "string"
},
"mediaUrlExpiresAt": {
"description": "ISO 8601 UTC timestamp when signed video or cover URLs expire",
"title": "Media URL Expires At",
"type": "string"
},
"mentions": {
"description": "@mentions in the caption with username, userId, secUid, userUniqueId and caption offsets",
"title": "Mentions",
"type": "array"
},
"music": {
"description": "The sound used in this video (id, title, authorName, original, duration, album, playUrl, coverUrl, dspLinks)",
"title": "Music",
"type": "object"
},
"musicId": {
"description": "Unique TikTok sound ID (string, 15-20 digits)",
"title": "Music ID",
"type": "string"
},
"musicReleaseInfo": {
"description": "Release metadata TikTok returns for licensed tracks",
"title": "Music Release Info",
"type": "object"
},
"musicTitle": {
"description": "Title of the sound or track",
"title": "Music Title",
"type": "string"
},
"musicUrl": {
"description": "Canonical TikTok page URL for this sound",
"title": "Music URL",
"type": "string"
},
"ownerHandle": {
"description": "TikTok handle of the sound owner when TikTok returns one",
"title": "Owner Handle",
"type": "string"
},
"ownerNickname": {
"description": "Display name of the sound owner when TikTok returns one",
"title": "Owner Nickname",
"type": "string"
},
"playCount": {
"description": "Number of video plays",
"title": "Play Count",
"type": "integer"
},
"playUrl": {
"description": "Signed CDN URL for the sound audio (time-limited)",
"title": "Play URL",
"type": "string"
},
"poi": {
"description": "Point-of-interest object when the video is tagged with a location",
"title": "POI",
"type": "object"
},
"postId": {
"description": "Unique TikTok video/post ID (string)",
"title": "Post ID",
"type": "string"
},
"postType": {
"description": "Either 'video' or 'slideshow'",
"title": "Post Type",
"type": "string"
},
"postUrl": {
"description": "Direct URL to the TikTok video or photo post",
"title": "Post URL",
"type": "string"
},
"repostCount": {
"description": "Number of reposts (from statsV2)",
"title": "Repost Count",
"type": "integer"
},
"rowType": {
"description": "Discriminator: 'music' for sound metadata, 'post' for videos using a sound, 'error' for opt-in failure rows.",
"title": "Row Type",
"type": "string"
},
"searchKeyword": {
"description": "Keyword that surfaced this sound or video (searchSounds mode only)",
"title": "Search Keyword",
"type": "string"
},
"searchPosition": {
"description": "1-based position of the sound in its keyword's result list (searchSounds mode only)",
"title": "Search Position",
"type": "integer"
},
"shareCount": {
"description": "Number of shares",
"title": "Share Count",
"type": "integer"
},
"shareEnabled": {
"description": "Whether sharing is enabled on this video",
"title": "Share Enabled",
"type": "boolean"
},
"shareMeta": {
"description": "Share title and description TikTok uses for the sound page",
"title": "Share Meta",
"type": "object"
},
"shootDuration": {
"description": "Clip length TikTok allows creators to use with this sound",
"title": "Shoot Duration",
"type": "integer"
},
"stitchEnabled": {
"description": "Whether stitching is allowed on this video",
"title": "Stitch Enabled",
"type": "boolean"
},
"tagList": {
"description": "Mood/genre tags TikTok returns for the sound",
"title": "Tag List",
"type": "array"
},
"textLanguage": {
"description": "Language code of the caption",
"title": "Text Language",
"type": "string"
},
"themeTags": {
"description": "Theme tags TikTok returns for the sound",
"title": "Theme Tags",
"type": "array"
},
"video": {
"description": "Video file metadata (width, height, duration, ratio, definition, bitrate, codecType, format, size, videoQuality, playUrl, cover, originCover, dynamicCover)",
"title": "Video",
"type": "object"
},
"videoCount": {
"description": "Number of TikTok videos using this sound, kept as a string to avoid integer overflow for viral sounds",
"title": "Video Count",
"type": "string"
}
},
"title": "TikTok Sound & Music Scraper Dataset",
"views": {
"errors": {
"display": {
"component": "table",
"properties": {
"errorCode": {
"format": "text",
"label": "Error Code"
},
"errorMessage": {
"format": "text",
"label": "Error Message"
},
"inputValue": {
"format": "text",
"label": "Input"
},
"musicId": {
"format": "text",
"label": "Sound ID"
},
"rowType": {
"format": "text",
"label": "Type"
},
"searchKeyword": {
"format": "text",
"label": "Search Keyword"
}
}
},
"title": "Errors",
"transformation": {
"fields": [
"rowType",
"errorCode",
"errorMessage",
"inputValue",
"musicId",
"searchKeyword"
]
}
},
"overview": {
"display": {
"component": "table",
"properties": {
"artist": {
"format": "object",
"label": "Artist"
},
"authorName": {
"format": "text",
"label": "Sound Author"
},
"caption": {
"format": "text",
"label": "Caption"
},
"duration": {
"format": "number",
"label": "Duration (s)"
},
"likeCount": {
"format": "number",
"label": "Likes"
},
"matchedMusicId": {
"format": "text",
"label": "Sound ID"
},
"musicTitle": {
"format": "text",
"label": "Sound Title"
},
"playCount": {
"format": "number",
"label": "Plays"
},
"postId": {
"format": "text",
"label": "Video ID"
},
"postUrl": {
"format": "link",
"label": "Video URL"
},
"rowType": {
"format": "text",
"label": "Type"
},
"searchKeyword": {
"format": "text",
"label": "Search Keyword"
},
"videoCount": {
"format": "text",
"label": "Videos Using Sound"
}
}
},
"title": "Sounds and Videos",
"transformation": {
"fields": [
"rowType",
"musicTitle",
"authorName",
"artist",
"duration",
"videoCount",
"postId",
"caption",
"likeCount",
"playCount",
"matchedMusicId",
"searchKeyword",
"postUrl"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
TikTok Sound Lookup: Metadata & Videos Using It
Give this actor a TikTok sound — by page URL, numeric ID, or a keyword search — and it returns the sound's own metadata and the videos using it. Sound rows carry title, creator and artist, duration, cover art, DSP/streaming IDs, licensing flags, tags and total video count. Video rows carry the author, caption, hashtags, mentions, location, effects, slideshow images and engagement counters. No TikTok login, cookies or API key needed.
What this actor does
- Two modes:
bySoundresolves one or more sound URLs/IDs;searchSoundsdiscovers sounds from one or more keywords. - Complete sound metadata: title, author name, credited
artist/artists, owner handle, language, release info, tags, licensing flags, covers and video count. - DSP and partner IDs:
dspLinksandexternalSongInfoexpose the IDs TikTok holds for Spotify, Apple Music and other partners, without inventing links. - Every video using the sound: request up to 500 per sound, collected 30 at a time and deduplicated by video ID. TikTok can cap the public feed per run, so the actor returns what it can read and reports any shortfall.
- Slideshow-aware: photo posts are labelled
postType: "slideshow"and include theirimagesarray. - Client-side filters: publish window, minimum plays, minimum likes and one-video-per-creator, applied after collection.
- Opt-in error rows: turn on
includeErrorRowswhen you want a machine-readable row for each failed input. - Every empty field is omitted — no nulls or blank placeholders.
Output per sound (rowType: "music")
musicId,musicUrl— sound ID and canonical TikTok page URLmusicTitle,authorName,album— track identityartist— credited artist profile snapshot (id, secUid, username, displayName, bio, verified, avatarUrl)artists— every credited artist TikTok returnsownerHandle,ownerNickname— sound owner identity, when TikTok exposes oneduration,durationHighPrecision,shootDuration— track length and allowed clip lengthlanguage,createTime,createdAt,musicReleaseInfo— release and language metadataisCopyrighted,isCommerceMusic,isUnlimitedMusic,isOriginal,isPrivate— licensing and visibility flagsisPgc,isAuthorArtist,hasCommerceRight,commercialRightType— commercial-use classificationplayUrl,coverLarge,coverMedium,coverThumb— signed audio and cover URLsvideoCount— number of videos using the sound (kept as a string for very large counts)dspLinks— streaming-platform IDs, names and links derived from TikTok's partner dataexternalSongInfo— raw partner IDs (partnerName, partnerSongId, externalSongKey, links)tagList,themeTags— mood, genre and theme tagsmatchedSongId,shareMeta— matched licensed track ID and share textsearchKeyword,searchPosition— lineage when the sound came fromsearchSoundsauthor— creator profile snapshot for the soundrowType: "music"
Output per video (rowType: "post")
postId,postType,postUrl— video identifier,videoorslideshow, and linkmatchedMusicId— the sound this video was collected undersearchKeyword,searchPosition— search lineage when applicablecaption,textLanguage,createTime,createdAt— caption and publish timelocationCreated,poi— country and point-of-interest tag, when presentstitchEnabled,shareEnabled,duetEnabled,isAd— interaction and ad flagsplayCount,likeCount,commentCount,shareCount,collectCount,repostCount— engagement countershashtags—{name, id, isCommerce}entriesmentions—{username, userId, secUid, userUniqueId, start, end}entries from TikTok's mention metadataauthor— full author snapshot with bio, avatar and follower/heart/video countsmusic— the sound object embedded in the video (id, title, authorName, album, playUrl, coverUrl, dspLinks)video— width, height, duration, ratio, definition, bitrate, codec, format, size, quality and cover URLsimages— slideshow image URLs with width/height forpostType: "slideshow"effectStickers— effects used in the videomediaUrlExpiresAt— expiry timestamp for signed media URLsrowType: "post"
Output per failed input (rowType: "error", opt-in)
errorCode—invalid_music_input,sound_unavailable,no_search_results,feed_blockedorblockederrorMessage— plain-language explanationinputValue,musicId,searchKeyword— which input failed
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | bySound |
bySound / searchSounds |
musicUrls |
array | – | Sound page URLs (mode=bySound) |
musicIds |
array | – | Numeric sound IDs, 15–20 digits (mode=bySound) |
searchQueries |
array | – | Keywords to search (mode=searchSounds) |
maxSoundsPerQuery |
integer | 10 |
Sounds kept per keyword, 1–30 |
maxPostsPerSound |
integer | 30 |
Videos per sound, 0–500; 0 means metadata only |
includeMusicMetadata |
boolean | true |
Emit sound metadata rows |
includePosts |
boolean | true |
Emit video rows |
includeErrorRows |
boolean | false |
Emit rows for failed inputs |
publishedWithin |
string | all |
all / day / week / month / year (video rows) |
minPlayCount |
integer | 0 |
Drop videos below this play count |
minLikeCount |
integer | 0 |
Drop videos below this like count |
uniqueCreatorsOnly |
boolean | false |
Keep the highest-play video per author |
Example: one sound by URL
{
"mode": "bySound",
"musicUrls": ["https://www.tiktok.com/music/original-sound-7595604258835401494"],
"maxPostsPerSound": 100
}
Example: several sounds by ID
{
"mode": "bySound",
"musicIds": ["6799585653702019073", "7181527934435117058"],
"maxPostsPerSound": 50,
"includeErrorRows": true
}
Example: keyword discovery with filters
{
"mode": "searchSounds",
"searchQueries": ["lofi", "phonk", "afrobeats"],
"maxSoundsPerQuery": 10,
"maxPostsPerSound": 30,
"publishedWithin": "month",
"minPlayCount": 10000,
"uniqueCreatorsOnly": true
}
Example: metadata only
{
"mode": "bySound",
"musicIds": ["6799585653702019073"],
"includeMusicMetadata": true,
"includePosts": false,
"maxPostsPerSound": 0
}
Use cases
- A&R and label teams tracking how a track spreads and which creators are driving it
- Brand and campaign teams checking a sound's licensing flags, DSP IDs and audience before using it
- Trend researchers discovering sounds by keyword and pulling the videos that define each trend
- Rights-management teams auditing reuse of licensed or copyrighted tracks
- Creator-discovery platforms finding the highest-performing video per creator for a sound
- Music catalogues enriching tracks with TikTok's artist, release and streaming-partner identifiers
FAQ
Do I need a TikTok account or cookies? No. The actor reads public sound and video data without a login, cookie or API key.
Where do I find a sound's ID? Open the sound page on TikTok; the URL ends in /music/<name>-<digits>. The trailing digits are the ID, and you can paste either the full URL or the number.
What is the difference between authorName and artist? authorName is the label TikTok shows for the sound. artist and artists are the credited performer profiles TikTok returns for licensed tracks. For user-recorded sounds the artist fields are usually absent.
Why are dspLinks or externalSongInfo missing for some sounds? Streaming-partner IDs only exist for licensed commercial tracks. Original user sounds do not have them, and the field is omitted rather than filled with a guess.
How many sounds can one keyword return? TikTok returns up to 30 sounds per query and does not paginate this catalogue, so maxSoundsPerQuery is capped at 30. Use several keywords to broaden coverage; duplicates are removed across queries.
Why did I get fewer videos than the sound's video count? The actor collects up to maxPostsPerSound (maximum 500) from the public feed. TikTok may return fewer items for very old, private or region-restricted posts, and it can cap anonymous feed pages per IP. When that happens the actor returns everything it could read and reports the shortfall in the run status. Large pulls are read 30 videos at a time and can take several minutes to finish.
Why do some slideshow videos have no playback URL? Photo posts use images instead of a video file; their postType is slideshow and the video object may only carry covers and dimensions.
Are playUrl, covers and video URLs permanent? No. TikTok signs media URLs with a short expiry. Treat them as temporary and download promptly if you need the media itself.
Do the filters apply to sound rows too? No. publishedWithin, minPlayCount, minLikeCount and uniqueCreatorsOnly apply to video rows after collection. Sound rows are always returned for the inputs you asked for.
Is this affiliated with TikTok? No. This is an independent actor that reads TikTok's public sound and video data; it is not endorsed by or affiliated with TikTok or ByteDance.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build LmWHGTW7L3zReLZ3O. Documentation is regenerated from the default published build; private drafts are not included.