Douyin 抖音 Video Scraper - Metadata avatar

Douyin 抖音 Video Scraper - Metadata

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Douyin 抖音 Video Scraper - Metadata

Douyin 抖音 Video Scraper - Metadata

Scrape Douyin (抖音) videos and image posts from links, share links or IDs. Get caption, author, music, likes, comments, shares, hashtags, video quality links and post date as clean JSON. Optional MP4, cover and image downloads. Bulk input, no account or cookies needed.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Insights Data

Insights Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Categories

Security

Limited permissions

Share

🎬 What is the Douyin video scraper?

Douyin 抖音 Video Scraper - Metadata turns a list of Douyin links into the numbers you need for China market research and Douyin competitor analysis: likes, comments, shares, saves, author, music and hashtags of every public video or image post. It's made for marketers, brand teams, researchers and developers who follow Chinese short-video content, and it's a Douyin video scraper you can use without code, a Douyin account or cookies.

Paste Douyin links, share links or video IDs and click Start. For every public video or image post you get the text, author, music, engagement counts, hashtags, media links and posting date.

Douyin (抖音) is often called the Chinese TikTok: it is the short-video app used in mainland China. This Actor works as a TikTok China scraper for the videos and posts you list. In Chinese, this kind of tool is called a 抖音爬虫 (Douyin crawler).

  • Competitor benchmarking: compare the likes, comments, shares and saves of your competitors' posts with your own.
  • Douyin marketing research: see which posts, sounds and hashtags get the most likes, shares and saves in your niche.
  • Douyin influencer vetting: check a creator's verification, total likes received and post count, plus the numbers on the videos you list. Turn on Add extra details to also get the creator's follower and following counts.
  • Spot Douyin trends: collect hashtags, topic tags and music from the videos you track and see which ones keep coming back.
  • Content analysis: read the captions, chapters, topic tags and sounds of the posts you track for Douyin content analysis.
  • Build a Douyin dataset: turn a list of links into one tidy table for BI tools, spreadsheets or LLM pipelines, and save MP4 files, covers and slides of posts you are allowed to keep.

What can Douyin 抖音 Video Scraper - Metadata do?

  • 🔗 Reads many link formats: video links, image post (note) links, page links with modal_id, v.douyin.com share links, the whole share text copied from the app, and bare numeric IDs, all mixed together.
  • 📝 Works as a Douyin extractor for videos and image posts: each one comes back as one row with more than 50 fields and nested blocks.
  • 📸 Optional downloads: it also works as a Douyin video downloader. Save the MP4, the cover image and every slide of an image post next to the data.
  • ⚡ Live results: each row is saved the moment its video is finished, and duplicates are read only once.
  • 📦 Export Douyin data to JSON, CSV, Excel, XML or HTML. You can also call the Actor via the API, schedule runs, monitor them and connect them to Make, Zapier, Google Sheets and more.
  • 🛡️ Handles blocking for you: if Douyin refuses the connection, the Actor retries and switches to Apify Proxy automatically when your account can use it. See what happens without Apify Proxy.

📋 Douyin video scraper: what data can it extract?

The Actor collects the public Douyin metadata of each video or image post, grouped so it's easy to read. In short, it is a Douyin video extractor: one row of Douyin video metadata per link. Field names below are the exact names in the dataset.

🔗 id, url, shareUrl, inputUrl📝 text, caption, itemTitle, previewTitle, descLanguage
📅 createTime, createDate (Beijing time)📍 region, city, cityCode, location (tagged place)
👤 authorMeta: name, IDs, handles, verified, bio, total likes received, post count, avatar⭐ statistics: diggCount (likes), commentCount, shareCount, collectCount (saves), playCount, downloadCount, forwardCount, admireCount
🎵 musicMeta: sound ID, title, artist, original or not, length, audio link, owner🎥 videoMeta: width, height, quality, format, HDR, watermark flag, link expiry, play/download links, bit rates, covers
🔗 videoUrl, audioUrl, coverUrl, durationSeconds🏷️ hashtags, videoTags, mentions, chapters, series
📸 type (video or image), images (slides of an image post)✅ permissions, interaction: duet, stitch, download, share and comment switches, private / deleted state
💲 commerce, anchors, risk, share, xiguaCrossPost, aiMetadata🚩 15 yes/no flags such as isPinned, isAd, isStory, isShared

With Add extra details switched on, each row also gets an extras block: author follower and following counts, recommend and danmaku counts, secure item ID, AI-generated flag, download restriction note and suggested searches.

Note: The Actor fills a field only when Douyin includes it in the public data for that video. Otherwise most fields are null and lists are empty. This also applies to the counts in statistics: playCount (views), downloadCount, forwardCount and admireCount are not guaranteed for every video, so run a quick test to see which counts you get. musicMeta, series, location and risk are null when the post has no sound, series, place or risk notice. For a Douyin image post, type is "image", url uses /note/, videoUrl is null and the slides are listed in images.

What data can't it extract?

  • Comments and replies
  • All videos of a creator's profile, keyword or hashtag search results, or trending lists
  • Transcripts or subtitles
  • Audio files (you get the audioUrl link, but no MP3 is saved)
  • Private, deleted or otherwise unavailable videos

For comments, creator uploads and trending lists on another Chinese video platform, see Bilibili Scraper — Videos, Comments, Danmaku & Creator Uploads.


🔍 How to scrape Douyin video data

You can use the Actor even if you've never extracted data from the web before.

  1. Create a free Apify account using your email.
  2. Open the Apify Douyin scraper page.
  3. The Douyin video links or IDs field comes prefilled with one example link, so you can click Start right away. Or replace it with your own video links, a Douyin share link (in the app, tap Share and copy the link or the whole share text) or a Douyin video ID.
  4. Click Start and wait for the run to finish. Rows appear in the Output tab while the run is still working.
  5. Click Export in the Output tab and download your data in JSON, CSV, Excel, XML or HTML.

⚠️ All download options start switched off, so you get data rows but no saved files until you turn them on.


💲 How much does it cost to scrape Douyin?

The Actor uses pay-per-event pricing. Your bill has three parts:

PartPriceWhen it is charged
💲 Results$5.00 per 1,000 results ($0.005 per video or image post) on the Free plan (lower on paid plans, see below)For each video or image post row saved to the dataset
🚀 Actor start$0.0002 per run with the default settings*Once per run
⚙️ Platform usageApify's normal usage rates for your planOn top of the two event prices. See below
Apify planPrice per resultPrice per 1,000 results
Free$0.005$5.00
Starter$0.0045$4.50
Scale$0.004$4.00
Business and higher$0.0035$3.50

The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

* The start fee is $0.00005 per GB of memory. The default memory is 4 GB, because the Actor opens Douyin in a browser, so the fee is 4 × $0.00005 = $0.0002. You don't need to change the memory setting.

  • Not charged as results: failed-item rows (from Keep failed items in the results), links skipped because your maximum charge limit was reached, and saved files. Saved files still use storage, which counts as platform usage.
  • Lower result price on paid plans: see the plan table above. The start fee is the same on every plan.

Rounded examples for the result and start charges at the Free plan price, before platform usage. See Is scraping Douyin free?

Videos savedResultsStart feeEvent total
10$0.05$0.0002≈ $0.05
100$0.50$0.0002≈ $0.50
1,000$5.00$0.0002≈ $5.00

What platform usage is made of:

  • Compute: the run's memory (4 GB by default) multiplied by how long the run takes.
  • Storage and data transfer: these grow when you save MP4s, covers or slides, because the files are downloaded and stored. Data-only runs store just the rows.
  • Apify Proxy traffic: this only applies when the Actor has to switch to Apify Proxy.

How to estimate platform usage: we have no measured figures to quote, so use your own test runs:

  1. Run the Actor on 10 of your links with the download options off. Open the finished run and note the usage cost and how long the run took.
  2. Run the same 10 links again with Save MP4 video files on, and note the same two numbers.
  3. Divide each usage cost by the number of videos saved to get the usage per video, with and without MP4s. Multiply by the number of videos you plan to scrape, and add the result charges and the start fee.

The difference between the two runs shows how much the MP4 downloads add. Long videos are big files, so they add more.

Keep costs under control: set a maximum charge limit when you start a run. When the limit is reached, the Actor stops cleanly and keeps everything saved so far. See the pricing tab for the current event list.

Is scraping Douyin free?

You can try it on the Apify Free plan, which gives you $5 of credit every month. Free-plan runs work the same as paid runs. That one credit is used up by the result charges plus the platform usage together. Set a maximum charge limit when you start a run, and do a small test run first.


⬇️ Douyin video scraper input

The only required field is Douyin video links or IDs (urls). Everything else is optional. Set the input in the Actor's form, or send it as JSON via the API.

Settings most people change

Form fieldJSON nameDefaultWhat it does
🔗 Douyin video links or IDsurlsnone (required)One link or ID per line. Mixed formats are fine, and duplicates are skipped
📥 Save MP4 video filesshouldDownloadVideosoffSaves each video's Douyin MP4 file to storage and fills videoFile. Image posts have no MP4
🌄 Save cover imagesshouldDownloadCoversoffSaves the cover of every video and image post. Fills coverFile
📸 Save slideshow imagesshouldDownloadSlideshowImagesoffSaves every slide of a Douyin slideshow (image post). Fills slideshowFiles. Has no effect on normal videos
🧪 Add extra detailsincludeExtrasoffAdds the extras block to every row
🚧 Keep failed items in the resultsincludeFailedItemsoffAdds a short, free row for every link that could not be read

Here's an example that reads one video and returns its data only, with no files saved:

{
"urls": [
"https://www.douyin.com/video/7577614489533680959"
]
}

See the input tab for the full description of every field.

You can paste any of these forms, one per line:

  • ✅ https://www.douyin.com/video/7577614489533680959 (video link)
  • ✅ https://www.douyin.com/note/<id> (image post link)
  • ✅ Any Douyin page link that contains modal_id=<id>
  • ✅ A v.douyin.com share link, or the whole share text copied from the app
  • ✅ An iesdouyin.com/share/video/<id>/ link
  • ✅ 7577614489533680959 (a bare numeric video ID)
  • ❌ A creator profile link without modal_id. The Actor reads single videos and posts, not whole profiles.

⚠️ A link that contains no video is skipped and the log says so. Turn on Keep failed items in the results to see it in the dataset as well.

Advanced settings

Form fieldJSON nameDefaultWhat it does
📂 Storage name for saved filesvideoKvStoreNameemptyName of a key-value store for saved files (lowercase letters, digits and dashes). Empty means the run's default key-value store
⏩ Parallel videosmaxConcurrency4How many videos are read at the same time (1 to 10). Lower it if you see many slow-downs
🔁 Retries per requestmaxRetries3How often a failed or blocked request is retried before the Actor gives up on that video (0 to 10)
🌐 ProxyproxyConfigurationno proxyThe Actor starts without a proxy. When Douyin blocks it, it switches to Apify Proxy automatically and stays on it for the rest of the run. Proxy traffic counts as platform usage. If your account can't use Apify Proxy, the Actor stays on the direct connection. Videos it still can't read after the retries are marked as failed. In that case, if Douyin blocks the very first connection, every video in that run is marked as failed, so add your own proxy here

⬆️ Douyin video scraper output

Results are stored in a dataset. You can browse it in the Output tab through 9 ready-made views: Overview, Content and flags, Author, Engagement, Video quality, Music, Tags, mentions and chapters, Permissions and commerce, and Saved files and images. The Engagement view is a quick table of Douyin video statistics. To download the data, click Export in the Output tab (the same export is in Storage → Datasets), pick the fields you need, and choose JSON, CSV, Excel, XML or HTML.

JSON example

This is an abridged sample row for the input example above, so it shows the Douyin video info for that link. It combines values from a real run of this video with the example values in the Actor's dataset schema (same video), so numbers such as likes will differ when you run it today. Long text is shortened with …, and most nested fields are left out to keep it readable. The full row has every field listed in the data table.

{
"id": "7577614489533680959",
"url": "https://www.douyin.com/video/7577614489533680959",
"durationSeconds": 1082.5,
"type": "video",
"text": "这个贵州五线小城,凭什么是中国“吃商”最高的城市? 糟了,捅了贵州老吃家的窝了! #抖音美食班当季新菜单 …",
"itemTitle": "这个贵州五线小城,凭什么是中国“吃商”最高的城市?",
"createTime": 1764320400,
"createDate": "2025-11-28",
"region": "CN",
"authorMeta": { "id": "75736792009", "name": "盗月社食遇记", "customUsername": "daoyueshe", "verified": true },
"videoMeta": { "width": 3840, "height": 2160, "ratio": "2160p", "format": "dash", "hasWatermark": true },
"musicMeta": { "id": "7577614774507424547", "author": "盗月社食遇记", "isOriginal": true },
"statistics": { "diggCount": 4064473, "commentCount": 163237, "shareCount": 5189298, "collectCount": 855171 },
"hashtags": [{ "id": "7572059655971538944", "name": "抖音美食班当季新菜单" }],
"videoTags": [{ "name": "美食", "level": 1 }],
"videoFile": null,
"coverFile": null,
"slideshowFiles": null,
"inputUrl": "https://www.douyin.com/video/7577614489533680959"
}

How to read it:

  • durationSeconds is the length in seconds (about 18 minutes here).
  • createTime is the posting time in Unix seconds, and createDate is the same moment as a Beijing-time date.
  • diggCount is the like count and collectCount is the number of saves. The other counts, including playCount, are left out of this sample to keep it short.
  • isOriginal is true, so Douyin marks this sound as original.
  • ratio is the quality label of the video (2160p here).
  • videoFile, coverFile and slideshowFiles are null because the download options were off in this input.

When optional fields are filled

  • videoFile, coverFile and slideshowFiles are filled only when the matching download option is on and the file was saved. Each entry holds kvStoreKey, kvStoreId, kvUrl, sizeBytes, mimeType and sourceUrl. Otherwise these fields are null.
  • extras appears only when Add extra details is on. When it is off, the field is missing from the row.
  • Failed-item rows (only with Keep failed items in the results) contain just id, inputUrl and error. The error value starts with unavailable: (deleted, private or not found), failed: (could not be read) or unresolved: (no video found in the input). For unresolved: rows, id is null.

⚠️ Media links inside a row (videoUrl, audioUrl, coverUrl and the links in videoMeta) stop working after a few hours, and videoMeta.cdnUrlExpiresAt tells you when. Saved files don't expire this way.

Saved files and run summary

Saved files go to a key-value store with keys like video-<id>.mp4, cover-<id>.jpg and slide-<id>-01.jpg. The extension follows the file type.

To get the files onto your computer: open Storage → Key-value stores in Apify Console and click the store (the run's default store, or the one named in Storage name for saved files). Then download a record, such as video-<id>.mp4, from the record list. Apify Console can also download all records at once. You can also open the kvUrl link in a row's videoFile, coverFile or slideshowFiles entry.

⚠️ Per the Apify storage docs, unnamed key-value stores (the run's default) expire after 7 days unless otherwise specified, and named stores are kept indefinitely. To keep your files, set Storage name for saved files. The run's default key-value store also gets a SUMMARY record with the run counts: videos saved, videos billed, failed or unavailable, skipped, files saved, files failed, and duration.


💡 Tips and advanced usage

How many results can you scrape?

You get one row per unique video or image post you list. The Actor sets no per-run cap. What you actually get depends on how many of your links are still public and on your maximum charge limit. Start with a quick test run of a few links.

How to get faster or cheaper results

  • Leave the download options off unless you need the files. Data-only rows are faster and cheaper to collect.
  • Paste many links into one run instead of starting one run per link. You pay the start fee once, and videos are read in parallel.
  • If the log shows many slow-downs, lower Parallel videos.
  • We don't quote run times. They depend on how many videos you list, the download options and how fast Douyin answers. Time a small test run and scale up from there.
  • For Douyin data analysis, use the Engagement, Author and Music views and export only the columns you need.

Using it as a Douyin downloader

Turn on Save MP4 video files and the Actor saves each video's MP4 to storage. The row's videoFile then holds the file's name in storage (kvStoreKey) and a link to the file (kvUrl). See Saved files and run summary for how to download them. Image posts have no MP4, so use Save slideshow images for those.

Run it on a schedule: track your posts every week

The Actor reads only the links you give it and doesn't compare runs for you: each run is a snapshot of the numbers at that moment. For China social media monitoring of a campaign or a set of competitor posts, set up one recurring run:

  1. Paste the post links you want to follow into Douyin video links or IDs and switch on Keep failed items in the results, so posts that are deleted or made private show up as rows.
  2. Save the input as a task in Apify Console, so every run reads the same links.
  3. Open Schedules, create a schedule that runs daily or weekly, and add your task to it.
  4. Compare the runs by id: the change in statistics.diggCount, commentCount, shareCount and collectCount shows how each post grew since the last run, and a new unavailable: error shows that a post was taken down.

When your campaign publishes new posts, add their links to the task's input.

Known issues

  • Very large files may be skipped when saving. The log names any file that was skipped.
  • Rows are saved in the order the videos finish, which may differ from your input order. Use inputUrl to match them.
  • Fields that Douyin doesn't send for a video stay null.

🔌 Integrations and API

Can I use it as a Douyin video scraper API?

Yes. The Apify API lets you start runs, schedule them and fetch results programmatically, so the Actor works as a ready-made Douyin scraper API. This is the Apify API, not an official Douyin API. Use the apify-client NPM package for Node.js or the apify-client PyPI package for Python. The API tab has ready-to-use code for this Douyin video API.

Douyin API Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/douyin-video-scraper-metadata").call(run_input={
"urls": ["https://www.douyin.com/video/7577614489533680959"]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["id"], item["statistics"]["diggCount"])

Can I integrate it with other apps?

Yes. Connect the Actor with other cloud services through Apify integrations: Make, Zapier, n8n, Slack, Google Sheets, Google Drive, Airbyte, GitHub, LangChain and more. Use webhooks to trigger an action whenever a run finishes. Three workflows that fit Douyin data:

  • Google Sheets report: add the Google Sheets integration to the scheduled task from the recipe above, so each run sends the Douyin engagement numbers of the links your team tracks to a sheet.
  • Slack alert: add the Slack integration to the same task, so your channel gets a message with the run link when the fresh numbers are ready.
  • Webhook to Make, Zapier or n8n: send a webhook when the run succeeds, read the dataset in your scenario and pass the rows to your BI tool, translate the captions, or flag posts whose likes jumped since the last run.

Can I use it with AI agents (MCP)?

Yes. Connect the Actor to Claude and other AI assistants through the Apify MCP server. Your agent can then call it whenever it needs Douyin video data. Open the MCP tab for setup steps.


🔗 Other scrapers for Chinese and short-video platforms

These Actors from the same author cover data that this one doesn't: TikTok profiles and hashtags, and other Chinese platforms.


❓ FAQ

Scraping publicly available data is generally legal, but you are responsible for how you use it. This Actor reads only public video pages, without logging in. Respect personal data rules (such as GDPR, or PIPL in China), copyright in any video you save, and Douyin's terms of service, and only collect personal data when you have a legitimate reason. This is not legal advice. If you are unsure, ask a lawyer.

How does the Douyin scraper work?

It works like a person opening each video in a browser, only faster. First it turns every input into a video ID, following share links where needed, and drops duplicates. Then it opens Douyin as a normal visitor would, reads the public details of several videos in parallel and saves each one as a row right away. If you turned on downloads, it also saves the files. It doesn't wander through profiles or search pages. It reads exactly the videos you list.

How to download Douyin video files?

You can download Douyin video files in bulk: paste the links, switch on Save MP4 video files and start the run. Each MP4 lands in storage, and the row's videoFile entry gives its name and link. To download the files, open Storage → Key-value stores, click the store and download the records you need, or download them all at once. Image posts have no MP4. For those, switch on Save slideshow images. For a Douyin cover download, switch on Save cover images.

How is it different from copying data by hand?

FeatureDouyin 抖音 Video Scraper - MetadataCopying from the app by hand
Many links in one go✅ Bulk input, any mix of formats❌ One video at a time
Structured fields (likes, saves, author, music, hashtags)✅ More than 50 fields per row❌ Only what you type out
Export to CSV / Excel / JSON✅❌
Saved MP4, covers and slides✅ Optional❌ Manual, one by one
Schedule and API access✅❌

Why scrape Douyin video data?

  • Compare content: see Douyin statistics such as likes, comments, shares and saves side by side for any set of posts.
  • Learn from sounds and tags: collect Douyin hashtags, topic tags and Douyin music to see what works in a category.
  • Measure campaigns: track the posts behind a campaign on a schedule.
  • Feed AI and BI: structured text and numbers drop straight into dashboards or LLM workflows.

Why am I getting fewer results than expected?

  1. Blocking without Apify Proxy: if Douyin blocks the connection and your account can't use Apify Proxy, videos that still can't be read after the retries are marked as failed. Add your own proxy in Proxy, or use an account with Apify Proxy access.
  2. Duplicates: the same video entered twice is read once.
  3. Unavailable links: deleted, private or unreadable videos are left out. Turn on Keep failed items in the results to see each one with its error.
  4. Profile links: links to a profile without modal_id are skipped.
  5. Maximum charge limit: the run stops cleanly when your limit is reached.

Is it a Douyin analytics tool?

Not by itself. It collects the raw public numbers (likes, comments, shares, saves, author stats, music and tags) for the posts you list, and you build your Douyin analytics on top of them in a spreadsheet, BI tool or notebook. It doesn't calculate rates, rank posts or show charts.

Do I need a Douyin account or cookies?

No. The Actor reads public data that any visitor can see, so you don't need a login, cookies or an API key from Douyin.


📧 Support and feedback

Found a bug or have a feature request? Please create an issue on the Issues tab.

Need a custom solution, more fields or a different Douyin dataset? Contact us at hello.insights.data@gmail.com.

Built and maintained by insights_data.