Vexaloom Labs

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.

FieldTypeRequiredDescription
modestringoptionalChoose how to find sounds: by sound URL/ID, or by keyword search.
musicUrlsarrayoptional(mode=bySound) TikTok sound page URLs. Example: https://www.tiktok.com/music/original-sound-7595604258835401494
musicIdsarrayoptional(mode=bySound) Numeric TikTok sound IDs, 15-20 digits, as an alternative to full URLs.
Show all input fields
FieldTypeRequiredDescription
modestringoptionalChoose how to find sounds: by sound URL/ID, or by keyword search.
musicUrlsarrayoptional(mode=bySound) TikTok sound page URLs. Example: https://www.tiktok.com/music/original-sound-7595604258835401494
musicIdsarrayoptional(mode=bySound) Numeric TikTok sound IDs, 15-20 digits, as an alternative to full URLs.
searchQueriesarrayoptional(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.
maxSoundsPerQueryintegeroptional(mode=searchSounds) Keep at most this many sounds per keyword. TikTok returns a maximum of 30.
maxPostsPerSoundintegeroptionalVideos 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.
includeMusicMetadatabooleanoptionalEmit a metadata row per sound with title, creator/artist, duration, covers, DSP IDs, tags and video count.
includePostsbooleanoptionalEmit one row per video that uses the sound, with author, caption, hashtags, mentions, POI, effects, slideshow images and engagement counts.
includeErrorRowsbooleanoptionalEmit a row with rowType='error' when an input cannot be read, instead of only logging it. Off by default.
publishedWithinstringoptionalKeep only videos published inside this window. Applied after collection, to video rows.
minPlayCountintegeroptionalDrop videos below this play count. 0 keeps everything. Videos without a play count are kept only when this is 0.
minLikeCountintegeroptionalDrop videos below this like count. 0 keeps everything. Videos without a like count are kept only when this is 0.
uniqueCreatorsOnlybooleanoptionalKeep 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.

FieldTypeRequiredDescription
datastringoptionalDataset 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: bySound resolves one or more sound URLs/IDs; searchSounds discovers 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: dspLinks and externalSongInfo expose 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 their images array.
  • Client-side filters: publish window, minimum plays, minimum likes and one-video-per-creator, applied after collection.
  • Opt-in error rows: turn on includeErrorRows when 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 URL
  • musicTitle, authorName, album — track identity
  • artist — credited artist profile snapshot (id, secUid, username, displayName, bio, verified, avatarUrl)
  • artists — every credited artist TikTok returns
  • ownerHandle, ownerNickname — sound owner identity, when TikTok exposes one
  • duration, durationHighPrecision, shootDuration — track length and allowed clip length
  • language, createTime, createdAt, musicReleaseInfo — release and language metadata
  • isCopyrighted, isCommerceMusic, isUnlimitedMusic, isOriginal, isPrivate — licensing and visibility flags
  • isPgc, isAuthorArtist, hasCommerceRight, commercialRightType — commercial-use classification
  • playUrl, coverLarge, coverMedium, coverThumb — signed audio and cover URLs
  • videoCount — 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 data
  • externalSongInfo — raw partner IDs (partnerName, partnerSongId, externalSongKey, links)
  • tagList, themeTags — mood, genre and theme tags
  • matchedSongId, shareMeta — matched licensed track ID and share text
  • searchKeyword, searchPosition — lineage when the sound came from searchSounds
  • author — creator profile snapshot for the sound
  • rowType: "music"

Output per video (rowType: "post")

  • postId, postType, postUrl — video identifier, video or slideshow, and link
  • matchedMusicId — the sound this video was collected under
  • searchKeyword, searchPosition — search lineage when applicable
  • caption, textLanguage, createTime, createdAt — caption and publish time
  • locationCreated, poi — country and point-of-interest tag, when present
  • stitchEnabled, shareEnabled, duetEnabled, isAd — interaction and ad flags
  • playCount, likeCount, commentCount, shareCount, collectCount, repostCount — engagement counters
  • hashtags — {name, id, isCommerce} entries
  • mentions — {username, userId, secUid, userUniqueId, start, end} entries from TikTok's mention metadata
  • author — full author snapshot with bio, avatar and follower/heart/video counts
  • music — 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 URLs
  • images — slideshow image URLs with width/height for postType: "slideshow"
  • effectStickers — effects used in the video
  • mediaUrlExpiresAt — expiry timestamp for signed media URLs
  • rowType: "post"

Output per failed input (rowType: "error", opt-in)

  • errorCode — invalid_music_input, sound_unavailable, no_search_results, feed_blocked or blocked
  • errorMessage — plain-language explanation
  • inputValue, 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.

Open the step-by-step Python guide →

Source build LmWHGTW7L3zReLZ3O. Documentation is regenerated from the default published build; private drafts are not included.