TikTok, Douyin & Bilibili Scraper β Videos, Profiles, Comments
Pricing
from $8.00 / 1,000 video scrapeds
TikTok, Douyin & Bilibili Scraper β Videos, Profiles, Comments
Scrape videos, profiles, posts, comments, likes, live streams, and trending feeds from TikTok, Douyin, and Bilibili. Unified JSON schema, no-watermark MP4 URLs, concurrent processing, automatic retries. No API key required.
Pricing
from $8.00 / 1,000 video scrapeds
Rating
0.0
(0)
Developer
Pika Choo
Actor stats
1
Bookmarked
12
Total users
7
Monthly active users
2 days ago
Last modified
Categories
Share
π¬ TikTok, Douyin & Bilibili Scraper
Scrape videos, profiles, comments, likes, live streams, and trending feeds across TikTok, Douyin, and Bilibili β all in one actor. Unified JSON schema, no API key required, direct MP4 downloads, from $0.002 per item.
π― Who needs this?
- π£ Social media managers tracking competitors and viral trends across Western + Chinese platforms
- π¨ Content creators sourcing trending music, hashtags, and reference videos
- π Market researchers monitoring brand mentions, sentiment, and virality
- π E-commerce teams identifying influencers and top-performing product creators
- π€ AI / ML teams collecting training data for video, caption, or comment analysis
- π’ Agencies running influencer discovery and campaign measurement
β¨ Features
- π 3 platforms in one actor β TikTok, Douyin, Bilibili
- π¬ 7 scraping modes β video detail, user posts, user profile, comments, likes, live info, trending
- πͺ Auto platform detection β paste any URL, the actor routes it to the right platform
- π Bulk mode β scrape many URLs in a single run, processed concurrently
- β¬οΈ No-watermark MP4 URLs β direct video download links (TikTok / Douyin)
- π¬ Full comment threads β with replies and engagement counts
- π΄ Live room data β viewer count, title, status, host
- π₯ Trending feeds β Douyin hot search, Bilibili popular
- π Automatic retries β transient failures retried with backoff; persistent failures logged as error rows
- π Unified output schema β the same field names across all three platforms (raw response also included)
- π‘οΈ Proxy-ready β Apify residential proxy integration built-in
π₯ Input
π΄ Required
| Field | Type | Description |
|---|---|---|
mode π¬ | string | What to scrape. See the mode table below. |
One of url or urls is also required (except for trending mode).
π Main fields
| Field | Type | Default | Description |
|---|---|---|---|
platform π | select | auto | auto, tiktok, douyin, or bilibili |
url π | string | β | Single URL β video, user profile, or live room |
urls π | array | β | Bulk list of URLs. Combined with url if both given. |
maxItems π | integer | 100 | Max items per input URL (paginated modes). 1β5000. |
ποΈ Options
| Field | Type | Default | Description |
|---|---|---|---|
downloadVideos β¬οΈ | boolean | true | Include no-watermark MP4 URLs in output |
includeComments π¬ | boolean | false | Also fetch a batch of comments alongside video_detail |
cookie πͺ | string (secret) | β | Browser cookie for private / gated content |
proxyConfiguration π‘οΈ | object | RESIDENTIAL | Apify proxy settings β residential strongly recommended |
π¬ Modes Γ Platforms
| Mode | TikTok | Douyin | Bilibili | Input expected |
|---|---|---|---|---|
video_detail | β | β | β | Video URL |
user_posts | β | β | β | User profile URL |
user_profile | β | β | β | User profile URL |
video_comments | β | β | β | Video URL |
user_likes | β | β | β | User profile URL |
live_info | β | β | β | Live room URL |
trending | β | β | β | platform only (no URL) |
Unsupported combinations return a clear error record.
π€ Output
Unified schema across all platforms:
| Field | Description |
|---|---|
platform | tiktok, douyin, or bilibili |
item_type | video, user, comment, live, trending, or error |
item_id | Native platform ID |
url | Canonical URL back to the source |
title, description | Caption / title text |
author_id, author_name, author_username | Creator info |
duration_sec, cover_url, video_url_nowm | Video asset fields |
music_title, music_author | Background audio |
hashtags | Array extracted from caption |
created_at | ISO publish timestamp |
play_count, like_count, comment_count, share_count, collect_count | Engagement stats |
follower_count, following_count, video_count, bio, avatar_url, verified | Profile fields |
comment_id, reply_to_id, comment_text | Comment fields |
live_status, live_title, viewer_count | Live fields |
raw | Full source API response for advanced users |
scraped_at | ISO timestamp when scraped |
π§ͺ Examples
Single TikTok video with download URL
{"mode": "video_detail","url": "https://www.tiktok.com/@charlidamelio/video/7337889649290054955","downloadVideos": true}
Bulk β 3 creators' latest 50 posts each (Douyin)
{"mode": "user_posts","urls": ["https://www.douyin.com/user/MS4wLjABAAAA...","https://www.douyin.com/user/MS4wLjABAAAB...","https://www.douyin.com/user/MS4wLjABAAAC..."],"maxItems": 50}
Top 200 comments on a Bilibili video
{"mode": "video_comments","url": "https://www.bilibili.com/video/BV1GJ411x7h7","maxItems": 200}
Douyin trending feed
{"mode": "trending","platform": "douyin","maxItems": 50}
Bilibili live room
{"mode": "live_info","url": "https://live.bilibili.com/21452505"}
π΅ Pricing
Simple pay-per-event β you only pay for items successfully delivered:
| Event | Price | Covers |
|---|---|---|
| π¬ Video scraped | $0.008 | Any video row (video_detail, user_posts, user_likes, live_info, trending) |
| π¬ Comment scraped | $0.002 | Each comment |
| π€ Profile scraped | $0.005 | Each user profile |
Failed URLs return an error row and are not billed.
β FAQ
Q: Do I need a TikTok / Douyin / Bilibili account? No. The actor scrapes public data using the built-in Apify proxy. No login required.
Q: Do no-watermark MP4 URLs expire? Yes, TikTok and Douyin CDN URLs expire in a few hours. Download and store the file promptly.
Q: Can I scrape private accounts?
No β only public content is supported. For some gated endpoints (private collections, saved videos, TikTok comments), you may pass your browser cookie via the cookie field.
Q: TikTok comments mode returns 0 results?
TikTok's comment API requires a logged-in session. Paste a fresh TikTok browser cookie into the cookie input field. Videos, profiles, and posts work without a cookie; comments need one.
Q: Will one URL appear in my output multiple times? No β each URL produces a single row (or a single error row).
Q: What happens if a URL is deleted or region-blocked?
You'll get an error row with item_type: "error" and a human-readable error_message. You are not charged for error rows.
Q: Can I run this with my own proxy instead of Apify proxy?
Yes β set custom proxy URLs in proxyConfiguration.proxyUrls.
Q: Does the actor handle bulk scraping efficiently? Yes β URLs are processed concurrently. 100 URLs typically finish in 2β3 minutes.
Q: What's the maximum URLs per run? There's no hard limit, but we recommend β€ 500 URLs per run for optimal reliability. Split larger jobs into multiple runs for parallelism.
π Troubleshooting
No results for a TikTok URL The video may be deleted, private, or region-blocked. Check the URL in a browser first. Error rows include a status message explaining why.
"Spending limit reached"
You set ACTOR_MAX_TOTAL_CHARGE_USD and the run hit the cap mid-batch. Remaining URLs are skipped and marked as error rows. Increase the cap or split the batch.
Empty dataset on first run
Make sure mode is set and that url/urls match the mode's expected input (e.g. video URL for video_detail, profile URL for user_posts).
Bilibili returns 404
The BV-id may be invalid or deleted. Short links like b23.tv/xxx are auto-resolved.
π‘οΈ Legal
- Scrapes public data only.
- You are responsible for compliance with each platform's terms of service and your local laws (GDPR, CCPA, etc.).
- Personal data handling: store / transmit in line with applicable regulations.
β Support
If something's not working, open the run β view the log β attach the run URL when reaching out. The actor auto-populates error rows with context, so paste those too.
Happy scraping. π