TikTok, Douyin & Bilibili Scraper — Videos, Profiles, Comments avatar

TikTok, Douyin & Bilibili Scraper — Videos, Profiles, Comments

Pricing

from $5.00 / 1,000 video scrapeds

Go to Apify Store
TikTok, Douyin & Bilibili Scraper — Videos, Profiles, Comments

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 $5.00 / 1,000 video scrapeds

Rating

2.0

(1)

Developer

Pika Choo

Pika Choo

Maintained by Community

Actor stats

4

Bookmarked

163

Total users

22

Monthly active users

4.4 hours

Issues response

18 hours ago

Last modified

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
  • 🔗 TikTok short-link auto-resolvevm.tiktok.com / vt.tiktok.com URLs are followed to their canonical video URL before scraping
  • 🛟 Crash-proof — every failure mode (bad input, anti-bot, unsupported combo, network timeout) becomes a structured error row, never a failed run

📥 Input

🔴 Required

FieldTypeDescription
mode 🎬stringWhat to scrape. See the mode table below.

One of url or urls is also required (except for trending mode).

📋 Main fields

FieldTypeDefaultDescription
platform 🌐selectautoauto, tiktok, douyin, or bilibili
url 🔗stringSingle URL — video, user profile, or live room
urls 📋arrayBulk list of URLs. Combined with url if both given.
maxItems 📊integer100Max items per input URL (paginated modes). 1–5000.

🎛️ Options

FieldTypeDefaultDescription
downloadVideos ⬇️booleantrueInclude no-watermark MP4 URLs in output. Auto-disabled for Douyin (Douyin's CDN currently rate-limits these to 403); pass forceDownload: true to override. TikTok and Bilibili are unaffected.
forceDownload 🔓booleanfalseOverride the Douyin auto-disable above. Use only if you've confirmed your IP/cookie can pull Douyin no-watermark URLs.
includeComments 💬booleanfalseAlso fetch a batch of comments alongside video_detail
cookie 🍪string (secret)Browser cookie for private / gated content
proxyConfiguration 🛡️objectRESIDENTIALApify proxy settings — residential strongly recommended

🎬 Modes × Platforms

ModeTikTokDouyinBilibiliInput expected
video_detailVideo URL
user_postsUser profile URL
user_profileUser profile URL
video_commentsVideo URL
user_likesUser profile URL
live_infoLive room URL
trendingplatform only (no URL)

Unsupported combinations return a clear error record.


📤 Output

Unified schema across all platforms:

FieldDescription
platformtiktok, douyin, or bilibili
item_typevideo, user, comment, live, trending, or error
item_idNative platform ID
urlCanonical URL back to the source
title, descriptionCaption / title text
author_id, author_name, author_usernameCreator info
duration_sec, cover_url, video_url_nowmVideo asset fields
music_title, music_authorBackground audio
hashtagsArray extracted from caption
created_atISO publish timestamp
play_count, like_count, comment_count, share_count, collect_countEngagement stats
follower_count, following_count, video_count, bio, avatar_url, verifiedProfile fields
comment_id, reply_to_id, comment_textComment fields
live_status, live_title, viewer_countLive fields
rawFull source API response for advanced users
scraped_atISO 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
}
{
"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:

EventPriceCovers
🎬 Video scraped$0.008Any video row (video_detail, user_posts, user_likes, live_info, trending)
💬 Comment scraped$0.002Each comment
👤 Profile scraped$0.005Each user profile

Failed URLs return an error row and are not billed.


⚠️ Platform Quirks

The target platforms (TikTok, Douyin, Bilibili) frequently rotate their anti-bot defenses. The actor handles every failure gracefully — you get a clean error row instead of a failed run — but data may be partial in these specific cases:

AreaBehaviorWhat to do
🎶 Douyin no-watermark MP4 URLsDouyin CDN currently rate-limits these to 403Auto-disabled by default. Metadata still returned. Pass forceDownload: true to attempt anyway.
📅 Douyin user_posts freshnessDouyin's public feed lags by ~6 days for some accountsUse Bilibili or TikTok for time-sensitive monitoring.
📺 Bilibili download URLsBilibili rotates download tokens; some downloads may failMetadata + URL still returned; download via your own client.
🎵 Newer Douyin URL formatsSome short-form Douyin URL shapes are not yet parsedUse the canonical douyin.com/video/<id> form.
👤 TikTok user_profileSome regions return a soft block for profile lookupsTry a residential proxy in a different country group.

We track these continuously and ship fixes as soon as they're available.


❓ 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.


  • 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. 🚀