TikTok Music Videos Scraper
Pricing
from $2.00 / 1,000 results
TikTok Music Videos Scraper
Scrape all public TikTok videos that use a given music/sound URL. Get captions, stats, covers, author profiles, and music details with pagination and proxy support.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Alien Force
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a minute ago
Last modified
Categories
Share
Overview
The TikTok Music Videos Scraper collects public videos that use a given TikTok music / sound. Paste one or more music page URLs and get structured rows with video stats, caption, author, and music details.
Key Features
- Music URL input: Accepts TikTok music / sound page URLs (the numeric ID in the URL is enough).
- Video metadata and stats: Caption, create time, duration, cover, views, likes, comments, shares, and saves.
- Author details: Username, display name, avatar, verified flag, and profile URL.
- Music details: Title, author, duration, and whether the sound is original.
- Pagination: Walks through all available videos for each sound, or stops at your max limit.
- Exact counts: Prefers precise count values when TikTok provides them.
- Proxy support: Datacenter proxies by default; switch to residential if TikTok starts blocking.
- Fast and lightweight: Built for quick, low-cost runs without a browser.
Input Schema
Input Properties
-
startUrls- Type:
array - Description: TikTok music / sound page URLs.
- Example:
[{ "url": "https://www.tiktok.com/music/original-sound-7660478815075912465" }]
- Type:
-
limit- Type:
integer - Description: Maximum number of videos to scrape per music URL. Set to
0for no limit. Default is50. - Example:
100
- Type:
-
proxyConfiguration- Type:
object - Description: Proxy settings for the run. Apify Proxy datacenter IPs are used by default. If TikTok starts returning empty results, switch to the
RESIDENTIALgroup. - Example:
{ "useApifyProxy": true }
- Type:
Input Example
{"startUrls": [{"url": "https://www.tiktok.com/music/original-sound-7660478815075912465"}],"limit": 100,"proxyConfiguration": {"useApifyProxy": true}}
Output
One dataset row per video.
| Field | Type | Description |
|---|---|---|
inputUrl | string | Music URL as given in the input |
musicUrl | string | Music URL (keeps the slug from input when provided) |
musicId | string | Music / sound ID |
musicTitle | string | Music title |
musicAuthorName | string | Music author / creator |
musicDuration | integer | Music duration in seconds |
musicOriginal | boolean | Whether this is an original sound |
videoId | string | Video ID |
videoUrl | string | Canonical video URL |
description | string | Video caption |
createTime | integer | Video creation time (Unix timestamp, seconds) |
duration | integer | Video duration in seconds |
cover | string | Cover image URL |
playCount | integer | Views |
diggCount | integer | Likes |
commentCount | integer | Comments |
shareCount | integer | Shares |
collectCount | integer | Saves |
authorId | string | Author user ID |
authorUsername | string | Author username |
authorNickname | string | Author display name |
authorAvatar | string | Author avatar URL |
authorVerified | boolean | Verified author |
authorProfileUrl | string | Author profile URL |
scrapedAt | string | When the video was scraped |
Output Example
{"inputUrl": "https://www.tiktok.com/music/original-sound-7660478815075912465","musicUrl": "https://www.tiktok.com/music/original-sound-7660478815075912465","musicId": "7660478815075912465","musicTitle": "الصوت الأصلي","musicAuthorName": "tomouro","musicDuration": 293,"musicOriginal": true,"videoId": "7675241138294525191","videoUrl": "https://www.tiktok.com/@keiyi_motovlogs/video/7675241138294525191","description": "Por qué la gente lo pide, Parte 1 del video completo😛#fyp #motovlog","createTime": 1787031341,"duration": 121,"cover": "https://...","playCount": 123700000,"diggCount": 10200000,"commentCount": 84100,"shareCount": 594800,"collectCount": 539510,"authorId": "6726268700528624646","authorUsername": "keiyi_motovlogs","authorNickname": "Keiyi_Motovlogs","authorAvatar": "https://...","authorVerified": false,"authorProfileUrl": "https://www.tiktok.com/@keiyi_motovlogs","scrapedAt": "2026-09-18T19:00:00.000Z"}
Handling of missing and blocked inputs
Inputs that yield no videos are kept out of the dataset and reported in the RUN_REPORT record in the run's key-value store, alongside a warning in the log. Each entry lists the original input, the resolved musicId and musicUrl, a reason (empty, invalidInput, or requestFailed), and a human-readable message.
- Music with no public videos: skipped as
empty. - Input without a usable music ID: skipped as
invalidInput. If no input yields a music ID, the run fails with an input error. - Blocked request: automatically retried. If every retry fails before any video is saved, the input is skipped as
requestFailed. A run where all targets were blocked fails with a clear message. If some videos were already saved, the run keeps those rows and only logs a warning.
The run's status message always reports how many videos were scraped and how many inputs were skipped.