TikTok Creator Videos Scraper
Pricing
from $0.50 / 1,000 results
TikTok Creator Videos Scraper
Enter a TikTok creator username and get every public video with full metadata and engagement stats.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
Coor Yu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Enter one or more TikTok creator usernames and get every public video from each profile, with full metadata and engagement stats.
中文说明
输入一个或多个 TikTok 达人用户名,抓取每位达人的全部公开视频,含完整元数据和互动指标。
输入参数
| 字段 | 类型 | 说明 |
|---|---|---|
creators | 数组(必填) | 达人用户名(可带或不带 @)或主页链接,每行一个 |
maxVideos | 整数 | 每个达人最多抓取的视频数;0 = 全部 |
maxConcurrency | 整数 | 同时抓取的达人数量,默认 2 |
maxRequestRetries | 整数 | 每个达人失败后的重试次数,默认 2 |
requestTimeoutSecs | 整数 | 页面导航和关键请求超时,默认 45 秒 |
proxyConfiguration | 对象 | 默认使用 Apify Proxy DEFAULT 非住宅池;不会自动切住宅代理 |
输出(Output schema)
每条记录对应一个视频,主要字段:
| 字段 | 说明 |
|---|---|
id / url | 视频 ID / 链接 |
text | 文案 |
createTime / createTimeUnix | 发布时间(ISO / 时间戳) |
durationSeconds | 时长(秒) |
cover / dynamicCover | 静态 / 动态封面 |
width / height | 分辨率 |
playCount | 播放量 |
diggCount | 点赞 |
commentCount / shareCount / collectCount | 评论 / 分享 / 收藏 |
hashtags | 话题标签数组 |
music | 音乐:{ id, title, authorName, isOriginal } |
isPinned | 是否置顶 |
authorUsername / authorNickname / authorId / authorVerified | 达人信息 |
控制台 Output 标签会以带封面缩略图的表格呈现以上结果。
工作原理:用真实浏览器打开达人主页,先读取服务端渲染的视频数据;再调用 TikTok 自身的 item_list 接口翻页——用页面内置的签名函数 byted_acrawler.frontierSign 对每次请求重新签名(X-Bogus),跟随 cursor 翻到底,从而拿到达人全部公开视频,不依赖任何第三方 actor。页面没有主动发出 item_list 请求时,actor 会用页面里的 secUid 构造同等参数模板并签名请求,提升非住宅代理下的结果获取率。
注意:只能抓取公开视频;返回数量可能略少于主页显示的总数(差额为私密/地区限制/已删除)。默认不会使用住宅代理,也不会自动切换到 RESIDENTIAL;如果用户在代理配置里手动选择 RESIDENTIAL,actor 会尊重用户选择。
Input
| Field | Type | Description |
|---|---|---|
creators | array (required) | Usernames (with or without @) or full profile URLs. |
maxVideos | integer | Max videos per creator. 0 = all available. |
maxConcurrency | integer | Number of creators scraped in parallel. Default 2. |
maxRequestRetries | integer | Retries per creator. Default 2. |
requestTimeoutSecs | integer | Navigation and key request timeout in seconds. Default 45. |
proxyConfiguration | object | Defaults to Apify Proxy DEFAULT non-residential pool. No automatic residential fallback. |
{"creators": ["mrbeast", "@khaby.lame", "https://www.tiktok.com/@zachking"],"maxVideos": 0,"maxConcurrency": 2,"maxRequestRetries": 2,"requestTimeoutSecs": 45,"proxyConfiguration": { "useApifyProxy": true }}
Output
One dataset record per video:
| Field | Description |
|---|---|
id, url | Video ID and canonical URL |
text | Caption / description |
createTime, createTimeUnix | Publish time (ISO + epoch) |
durationSeconds | Video length |
cover, dynamicCover | Thumbnail images |
width, height | Resolution |
playCount | Views |
diggCount | Likes |
commentCount, shareCount, collectCount | Engagement |
hashtags | Array of hashtag titles |
music | { id, title, authorName, isOriginal } |
isPinned | Whether the video is pinned on the profile |
authorUsername, authorNickname, authorId, authorVerified | Creator info |
Example record
{"id": "7300000000000000000","url": "https://www.tiktok.com/@zachking/video/7300000000000000000","text": "Magic trick #magic","createTime": "2024-11-01T12:00:00.000Z","durationSeconds": 12,"playCount": 12000000,"diggCount": 800000,"commentCount": 5400,"shareCount": 22000,"hashtags": ["magic"],"music": { "id": "...", "title": "original sound", "authorName": "zachking", "isOriginal": true },"isPinned": false,"authorUsername": "zachking","authorVerified": true}
How it works
The actor opens each profile in a real Chromium browser (via Crawlee's
PlaywrightCrawler) and reads the server-rendered video data. To page through the
creator's entire back-catalog it calls TikTok's item_list API directly:
- It captures the exact
item_listrequest the page issues itself (which carries TikTok's full expected parameter set), or builds an equivalent synthetic/api/post/item_list/template from the page'ssecUidwhen the page does not emit the request quickly. - For each subsequent page it swaps the
cursoron that template and re-signs the request with TikTok's own in-page signer (window.byted_acrawler.frontierSign, producing the requiredX-Bogus), then fetches from inside the page so the request carries the page's cookies (msToken). - It follows the server-provided
cursoruntilhasMoreis false.
This is fully self-contained — no dependency on any third-party actor — and returns public videos beyond the initial profile batch. Browser fingerprinting, shorter empty path waits, and signed synthetic pagination improve non-residential success rates.
Notes
- Only public profiles/videos are accessible. The returned count may be slightly below the profile's stated total — the difference is private, region-locked, or deleted posts.
- By default, the actor uses Apify Proxy
DEFAULTnon-residential pool and does not switch toRESIDENTIALautomatically. If you explicitly selectRESIDENTIAL, the actor uses your selection. - TikTok rotates its request-signing internals periodically. If a run ever returns zero,
the signer hook in
src/main.js(frontierSign) is the place to update.