# Douyin Video Downloader (`burbn/douyin-video-downloader`) Actor

Download Douyin (Chinese TikTok) videos without watermark. Extract no-watermark video download URLs, cover images, video metadata, author details, music info, hashtags, and engagement statistics (likes, comments, shares, plays). Supports bulk video downloads by URL or aweme ID.

- **URL**: https://apify.com/burbn/douyin-video-downloader.md
- **Developed by:** [Kevin](https://apify.com/burbn) (community)
- **Categories:** Videos, Social media, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Douyin Video Downloader – Chinese TikTok Video Extractor (No Watermark)

**Download Douyin (Chinese TikTok) videos without watermark by video URL or aweme ID. Extract no-watermark video download URLs, cover images, video metadata, author details, music info, hashtags, and engagement statistics (likes, comments, shares, plays). Supports bulk video downloads. Built with Apify best practices for reliability and speed.**

***

### Table of Contents

- [Features](#features)
- [Use Cases](#use-cases)
- [Quick Start](#quick-start)
- [Input Parameters](#input-parameters)
- [Output Format](#output-format)
- [Performance & Limits](#performance--limits)
- [FAQ](#faq)
- [Troubleshooting](#troubleshooting)
- [Tags](#tags)

***

### Features

- **No-Watermark Downloads** – Get clean, watermark-free video download URLs in the highest available quality (up to 1080p MP4).
- **Bulk Downloads** – Process multiple Douyin videos in a single run.
- **Video Metadata** – Extract title, description, caption, duration, dimensions, and creation date.
- **Author Info** – Get author nickname, username, avatar, follower count, following count, and total likes.
- **Music Details** – Extract music title, author, duration, play URL, and whether it's an original sound.
- **Engagement Stats** – Get likes (digg), comments, collects (favorites), shares, plays, and recommend counts.
- **Hashtags & Tags** – Extract all hashtags and video category tags.
- **Cover Images** – Get static cover, original cover, and dynamic/animated cover URLs.
- **Series Info** – Extract series/mix name, ID, and episode number for playlist videos.
- **Multiple URL Formats** – Supports full video URLs, share URLs, and raw aweme IDs.

***

### Use Cases

| Use Case | Description | Key Benefits |
|----------|-------------|--------------|
| Video Archiving | Download Douyin videos without watermark for archival purposes. | Clean, high-quality MP4 downloads up to 1080p. |
| Content Research | Analyze trending Douyin videos and their engagement metrics. | Get likes, comments, shares, and collect counts. |
| Competitor Analysis | Monitor competitor video performance on Douyin. | Track engagement stats and posting frequency. |
| Influencer Analytics | Evaluate influencer content performance for brand partnerships. | Author details with follower counts and engagement data. |
| Music Discovery | Extract original sounds and music info from viral videos. | Music title, author, duration, and direct play URL. |
| Social Media Reporting | Build dashboards with Douyin video performance data. | Comprehensive stats exported as JSON, CSV, or Excel. |

***

### Quick Start

#### 1. Basic – Single Video by aweme ID

```json
{
  "videos": ["7658216586767060264"]
}
```

#### 2. Basic – Single Video by URL

```json
{
  "videos": ["https://www.douyin.com/video/7658216586767060264"]
}
```

#### 3. Bulk – Multiple Videos

```json
{
  "videos": [
    "7658216586767060264",
    "https://www.douyin.com/video/7612345678901234567",
    "https://www.iesdouyin.com/share/video/7698765432109876543"
  ]
}
```

***

### Input Parameters

| Parameter | Type | Required | Description | Default | Example |
|-----------|------|----------|-------------|---------|---------|
| `videos` | Array of Strings | Yes | One or more Douyin video URLs or aweme IDs. | - | `["7658216586767060264"]` or `["https://www.douyin.com/video/7658216586767060264"]` |

#### Supported Input Formats

| Format | Example |
|--------|---------|
| aweme ID (direct) | `7658216586767060264` |
| Douyin video URL | `https://www.douyin.com/video/7658216586767060264` |
| Douyin share URL | `https://www.iesdouyin.com/share/video/7658216586767060264` |
| Douyin short URL | `https://v.douyin.com/iRNBho6u/` |

***

### Output Format

#### Video Result Data Structure

```json
{
  "source": "douyin_video_downloader",
  "position": 1,

  "aweme_id": "7658216586767060264",
  "group_id": "7658216586767060264",
  "sec_item_id": "MS4wLjAAAAAAJMcsLhwY0bOXffUOdTTs...",

  "desc": "宿舍空调哥，舍友夏天不开空调 #chiikawa #小八 #乌萨奇 #搞笑 #青年创作者成长计划",
  "item_title": "宿舍空调哥，舍友夏天不开空调",
  "caption": "#chiikawa #小八 #乌萨奇 #搞笑 #青年创作者成长计划",
  "create_time": "2026-07-03T08:46:49.000Z",
  "create_time_unix": 1783068409,
  "duration_ms": 84382,
  "duration_seconds": 84,

  "video_width": 1920,
  "video_height": 1080,
  "video_ratio": "default",
  "horizontal_type": 1,

  "download_url_no_watermark": "https://v5-dy-ov-experiment.zjcdn.com/...",
  "download_url_watermark": "https://v5-dy-ov-experiment.zjcdn.com/...",
  "play_url": "https://v5-dy-ov-experiment.zjcdn.com/...",
  "play_url_h264": "https://v5-dy-ov-experiment.zjcdn.com/...",
  "play_url_h265": "https://v5-dy-ov-experiment.zjcdn.com/...",

  "cover_url": "https://p3-pc-sign.douyinpic.com/...",
  "origin_cover_url": "https://p3-pc-sign.douyinpic.com/...",
  "dynamic_cover_url": "https://p3-pc-sign.douyinpic.com/...",

  "author_uid": "591999631104228",
  "author_sec_uid": "MS4wLjABAAAAMKqpoOoeOOe-Sm-Rb0kzIUhRj9ebu...",
  "author_nickname": "果冻卡哇",
  "author_unique_id": "NB666SB520",
  "author_short_id": "38909370239",
  "author_signature": "梦到什么做什么...",
  "author_avatar_url": "https://p3-pc.douyinpic.com/aweme/100x100/...",
  "author_follower_count": 1511642,
  "author_following_count": 0,
  "author_total_favorited": 24572974,

  "music_id": "7658216621567232809",
  "music_title": "@果冻卡哇创作的原声",
  "music_author": "果冻卡哇",
  "music_duration": 84,
  "music_play_url": "https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/...",
  "music_is_original": true,

  "digg_count": 303178,
  "comment_count": 4212,
  "collect_count": 76225,
  "share_count": 170288,
  "play_count": 0,
  "recommend_count": 18914,
  "admire_count": 2,

  "hashtags": ["chiikawa", "小八", "乌萨奇", "搞笑", "青年创作者成长计划"],
  "video_tags": ["二次元", "二次元内容", "动漫IP"],

  "mix_id": "7624834247669909504",
  "mix_name": "大学生宿舍",
  "series_id": "7624834247669909504",
  "series_name": "合集 · 大学生宿舍",
  "series_episode": 13,

  "share_url": "https://www.iesdouyin.com/share/video/7658216586767060264/...",

  "is_ads": false,
  "region": null,
  "aweme_type": 0,
  "media_type": 4,

  "scraped_at": "2026-08-06T14:59:21.700Z"
}
```

#### Output Fields Explained

| Field | Type | Description |
|-------|------|-------------|
| `source` | String | Source indicator, always `douyin_video_downloader` |
| `position` | Integer | Position in the batch (1-based) |
| `aweme_id` | String | Douyin video ID |
| `group_id` | String | Group ID (same as aweme\_id for regular videos) |
| `sec_item_id` | String | Secure item ID |
| `desc` | String | Full video description with hashtags |
| `item_title` | String | Video title (without hashtags) |
| `caption` | String | Video caption (hashtags only) |
| `create_time` | String | ISO timestamp of video creation |
| `create_time_unix` | Number | Unix timestamp of video creation |
| `duration_ms` | Number | Video duration in milliseconds |
| `duration_seconds` | Number | Video duration in seconds |
| `video_width` | Number | Video width in pixels |
| `video_height` | Number | Video height in pixels |
| `video_ratio` | String | Video ratio identifier |
| `horizontal_type` | Number | 1 = horizontal/landscape, 0 = vertical/portrait |
| `download_url_no_watermark` | String | **No-watermark download URL** (best quality MP4) |
| `download_url_watermark` | String | Download URL with Douyin watermark |
| `play_url` | String | Default play URL |
| `play_url_h264` | String | H.264 codec play URL |
| `play_url_h265` | String | H.265/HEVC codec play URL |
| `cover_url` | String | Video cover/thumbnail image URL |
| `origin_cover_url` | String | Original cover image URL |
| `dynamic_cover_url` | String | Animated/dynamic cover URL |
| `author_uid` | String | Author's user ID |
| `author_sec_uid` | String | Author's secure user ID |
| `author_nickname` | String | Author's display name |
| `author_unique_id` | String | Author's username/handle |
| `author_short_id` | String | Author's short ID |
| `author_signature` | String | Author's bio/description |
| `author_avatar_url` | String | Author's profile picture URL |
| `author_follower_count` | Number | Author's follower count |
| `author_following_count` | Number | Author's following count |
| `author_total_favorited` | Number | Total likes received by the author |
| `music_id` | String | Music/sound ID |
| `music_title` | String | Music title |
| `music_author` | String | Music author name |
| `music_duration` | Number | Music duration in seconds |
| `music_play_url` | String | Direct music/audio play URL |
| `music_is_original` | Boolean | Whether it's an original sound |
| `digg_count` | Number | Number of likes |
| `comment_count` | Number | Number of comments |
| `collect_count` | Number | Number of favorites/collects |
| `share_count` | Number | Number of shares |
| `play_count` | Number | Number of plays |
| `recommend_count` | Number | Number of recommendations |
| `admire_count` | Number | Number of admires |
| `hashtags` | Array | List of hashtag names |
| `video_tags` | Array | Video category tags |
| `mix_id` | String | Collection/mix ID (for playlist videos) |
| `mix_name` | String | Collection/mix name |
| `series_id` | String | Series ID |
| `series_name` | String | Series name |
| `series_episode` | Number | Episode number in the series |
| `share_url` | String | Video share URL |
| `is_ads` | Boolean | Whether the video is an ad |
| `region` | String | Video region |
| `aweme_type` | Number | Video type identifier |
| `media_type` | Number | Media type identifier |
| `scraped_at` | String | ISO timestamp of when the data was extracted |

***

### Performance & Limits

- **Bulk Downloads** – Process up to 50 Douyin videos in a single run.
- **Batching** – Data is saved in batches of 10 items to prevent loss during unexpected errors.
- **Rate Limiting** – Built-in 1.5-second delay between video requests for optimal throughput.
- **Key Rotation** – Automatic key rotation and retry logic for smooth, uninterrupted performance.
- **Deduplication** – Duplicate video inputs are automatically removed before processing.
- **Best Quality** – Automatically selects the highest quality MP4 stream (up to 1080p) for no-watermark downloads.

***

### FAQ

- **Q: How do I find the aweme ID of a Douyin video?**
  - The `aweme_id` is the numeric ID in any Douyin video URL. For example, in `https://www.douyin.com/video/7658216586767060264`, the aweme\_id is `7658216586767060264`. You can also paste the full URL directly.
- **Q: Can I use video URLs instead of aweme IDs?**
  - Yes! The actor automatically extracts `aweme_id` from Douyin video URLs (`douyin.com/video/...`), share URLs (`iesdouyin.com/share/video/...`), and short URLs (`v.douyin.com/...`).
- **Q: Can I download multiple videos at once?**
  - Yes! Simply add multiple video URLs or aweme IDs to the `videos` array. Each one will be processed individually with automatic rate limiting.
- **Q: What quality is the no-watermark download?**
  - The actor automatically selects the highest available quality MP4 stream, typically 1080p H.264 for the best compatibility.
- **Q: What if a video doesn't exist or is deleted?**
  - Invalid videos will return an error record with details. The downloader will continue processing remaining videos.
- **Q: What is the difference between download\_url\_no\_watermark and download\_url\_watermark?**
  - `download_url_no_watermark` provides a clean video without any Douyin branding. `download_url_watermark` includes the standard Douyin watermark overlay.
- **Q: Can I get just the audio/music?**
  - Yes! The `music_play_url` field provides a direct link to the audio/music track (MP3 format).
- **Q: What does horizontal\_type mean?**
  - `horizontal_type = 1` means the video is horizontal/landscape. `horizontal_type = 0` means vertical/portrait.
- **Q: What data formats can I export?**
  - Apify supports exporting results as JSON, CSV, Excel (XLSX), XML, HTML, and RSS.
- **Q: Are the download URLs permanent?**
  - No, Douyin CDN URLs are temporary and expire after a few hours. Download the videos promptly after extraction.

***

### Troubleshooting

| Issue | Cause | Solution |
|-------|-------|----------|
| "No videos provided" | Empty or missing `videos` array | Enter at least one video URL or aweme ID |
| Video not found | Invalid, deleted, or private video | Verify the video exists and is publicly accessible on Douyin |
| API server error | Network issues or API downtime | Wait a few minutes and try again |
| Rate limit exceeded | Too many concurrent requests | Wait a few minutes and try again |
| Partial results | Some videos failed while others succeeded | Check error records in the output for details |
| Expired download URLs | CDN URLs are temporary | Re-run the actor to get fresh download URLs |
| No watermark-free URL | Video format limitations | Check `play_url` or `play_url_h264` as alternatives |

***

### Why Choose This Actor?

- No-watermark video downloads in highest quality (up to 1080p)
- Complete video metadata including title, description, and creation date
- Author profile details with follower counts
- Full engagement statistics (likes, comments, shares, collects)
- Music/audio extraction with direct play URLs
- Hashtag and video tag extraction
- Series/playlist information with episode numbers
- Cover image URLs (static, original, and animated)
- Bulk video download support (up to 50 videos per run)
- Downloadable as CSV, Excel, JSON, XML, or HTML

***

### 🔗 You May Also Like

| Actor | Description |
|-------|-------------|
| [Douyin Profile Scraper](https://apify.com/burbn/douyin-profile-scraper) | Get detailed Douyin user profile information including nickname, bio, followers, likes, video count, IP location, verification status, and more. |
| [Douyin Profile Posts Scraper](https://apify.com/burbn/douyin-profile-posts-scraper) | Get detailed Douyin user profile details including nickname, bio, followers, likes, video count, IP location, and verification status. |

### Tags

`douyin video downloader`, `douyin no watermark`, `chinese tiktok downloader`, `douyin video scraper`, `douyin download`, `tiktok china video`, `social media downloader`, `douyin api`, `tiktok china scraper`, `video extraction`, `no watermark download`, `douyin data extraction`, `apify actor`

***

### Get Started Now

1. Enter one or more **Douyin video URLs** or **aweme IDs**
2. Click **Start** to run the downloader
3. Export your data in JSON, CSV, or Excel format
4. Click ["Try for free"](https://apify.com?fpr=free-credits) to test the actor

***

*Built using Apify Platform | Optimized for Performance & Reliability*

# Actor input Schema

## `videos` (type: `array`):

📋 Enter one or more Douyin video URLs or aweme IDs. Supported formats:

• Video URL: `https://www.douyin.com/video/7658216586767060264`
• Share URL: `https://v.douyin.com/abc123`
• aweme ID: `7658216586767060264`

Each video will be processed individually.

## Actor input object example

```json
{
  "videos": [
    "7658216586767060264"
  ]
}
```

# Actor output Schema

## `videos_overview` (type: `string`):

Open the dataset view with an overview of all downloaded Douyin videos including title, author, stats, and download URLs.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "videos": [
        "7658216586767060264"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("burbn/douyin-video-downloader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "videos": ["7658216586767060264"] }

# Run the Actor and wait for it to finish
run = client.actor("burbn/douyin-video-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "videos": [
    "7658216586767060264"
  ]
}' |
apify call burbn/douyin-video-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,burbn/douyin-video-downloader"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DEnA8naMbdOhFG1Bd/builds/xrP0zzfXkNkQoPbZC/openapi.json
