# Douyin Related Videos Scraper - Similar & Recommended Videos (`hgservices/douyin-related-videos-scraper`) Actor

Scrape the related videos Douyin (抖音) recommends for any video: captions, authors, likes, comments, shares, saves, hashtags, music and no-watermark MP4 links. Paste video or share links. No login. Export JSON, CSV or Excel.

- **URL**: https://apify.com/hgservices/douyin-related-videos-scraper.md
- **Developed by:** [Harish Garg](https://apify.com/hgservices) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 saved related videos

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Douyin Related Videos Scraper — Similar & Recommended Videos with Stats

Paste any **Douyin (抖音)** video link and get the **related videos Douyin recommends for it** — the same "you may also like" list that the Douyin player shows next to a video. Every related video comes with its **caption, author, likes, comments, shares, saves, hashtags, music, cover and a no-watermark video link**.

No Douyin account, no login, no cookies, no coding. Export the results to **JSON, CSV, Excel or HTML**, connect them to your tools, or ask an AI assistant such as **Claude** or **ChatGPT** to run the scraper for you.

### What does the Douyin Related Videos Scraper do?

- 🔗 **Finds similar videos for any Douyin video.** Give one video or hundreds. For each one you get Douyin's own recommendations, in Douyin's order.
- 📈 **Up to 200 related videos per input video.** You choose the number.
- 📊 **Engagement stats included.** Likes, comments, shares, saves and recommends for every related video.
- 🎬 **No-watermark video links.** A direct MP4 link plus backup links for every video.
- 🧭 **Ranked and traceable.** Each result shows which of your videos it was recommended for and its position in Douyin's list.
- 📱 **Accepts every common link.** Desktop links, mobile links, `v.douyin.com` share links, the full share text copied from the Douyin app, or plain video IDs.
- ✅ **Clear errors, no silent failures.** A deleted video, a profile link or a link from another site gets a row that says what is wrong — never a misleading result.
- 🧹 **Optional de-duplication.** A video recommended for several of your inputs appears only once.

### What data can you extract from Douyin related videos?

| Field | What you get |
|------|-------------|
| Source video | Your input video's ID, caption and author |
| Rank | Position of the related video in Douyin's list (1 = first) |
| Video | Video ID, page URL, caption, publish date (UTC), duration |
| No-watermark video | Direct MP4 link and backup mirror links |
| Author | Display name, handle, `sec_uid`, numeric ID and profile URL |
| Engagement | Likes, comments, shares, saves and recommends |
| Hashtags | All hashtags in the caption |
| Media | Cover image URL, image URLs for photo posts |
| Music | Track title and audio URL |

### How to scrape related videos from Douyin

1. Open the Actor in [Apify Console](https://console.apify.com/) and click **Try for free**.
2. Paste one or more Douyin video links or IDs into **Video URLs or IDs**.
3. Set **Max related videos per input video** (1–200).
4. Choose if a video recommended for several inputs should appear only once.
5. Click **Start**.
6. Open the **Output** tab and download the results as JSON, CSV, Excel or HTML.

#### Which links can I use?

All of these work:

- `https://www.douyin.com/video/7688751380592381222`
- `https://www.douyin.com/jingxuan?modal_id=7690939726009847103` (any link with `modal_id=`)
- `https://v.douyin.com/L2VvNXV/` (share link from the Douyin app)
- The full share text from the app, for example `7.94 复制打开抖音，看看【…的作品】… https://v.douyin.com/L2VvNXV/ …`
- `https://www.iesdouyin.com/share/video/7689227730923031823/` (mobile share page)
- `7688751380592381222` (plain video ID)

Profile links, live-stream links, search pages and links from other sites (TikTok, YouTube) are not video links. They get an error row that tells you what to paste instead.

#### Input example

```json
{
  "videoUrls": [
    "https://www.douyin.com/video/7688751380592381222",
    "https://v.douyin.com/L2VvNXV/",
    "7690939726009847103"
  ],
  "maxRelatedPerVideo": 30,
  "deduplicate": true
}
```

#### Output example

One row for each related video:

```json
{
  "sourceAwemeId": "7688751380592381222",
  "sourceInput": "https://www.douyin.com/video/7688751380592381222",
  "sourceDesc": "#高市喊删“敌国条款”是痴心妄想 …",
  "sourceAuthorName": "央视新闻",
  "rank": 3,
  "awemeId": "7690990335006199091",
  "url": "https://www.douyin.com/video/7690990335006199091",
  "desc": "2026年9月30日是第十三个烈士纪念日，向为国牺牲的先烈们致敬。… #媒体原创",
  "createTime": "2026-09-29T23:00:00+00:00",
  "authorName": "央视新闻",
  "secUserId": "MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M",
  "uniqueId": "cctvnews",
  "authorProfileUrl": "https://www.douyin.com/user/MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M",
  "durationMs": 60900,
  "isVideo": true,
  "videoUrlNoWatermark": "https://www.douyin.com/aweme/v1/play/?video_id=...",
  "videoMirrors": ["https://www.douyin.com/aweme/v1/play/?video_id=...", "https://v3-web-prime.douyinvod.com/..."],
  "cover": "https://p3-pc-sign.douyinpic.com/...jpeg",
  "musicTitle": "@央视新闻创作的原声",
  "hashtags": ["媒体原创"],
  "diggCount": 232729,
  "commentCount": 92,
  "shareCount": 8746,
  "collectCount": 5079,
  "recommendCount": 7879
}
```

An input that cannot be used (not a video link, a deleted video, or a temporary block by Douyin) gives one row with `sourceInput` and an English `error` message.

### How to use the scraper with the Apify API

You can start the Actor and get the results from any programming language. Get your API token from **Settings → API & Integrations** in Apify Console.

#### cURL

This call runs the Actor and returns the results in the same response:

```bash
curl -X POST "https://api.apify.com/v2/acts/hgservices~douyin-related-videos-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"videoUrls": ["https://www.douyin.com/video/7688751380592381222"], "maxRelatedPerVideo": 20}'
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("hgservices/douyin-related-videos-scraper").call(run_input={
    "videoUrls": ["https://www.douyin.com/video/7688751380592381222"],
    "maxRelatedPerVideo": 20,
})
for video in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(video.get("rank"), video.get("authorName"), video.get("diggCount"), video.get("url"))
```

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('hgservices/douyin-related-videos-scraper').call({
    videoUrls: ['https://www.douyin.com/video/7688751380592381222'],
    maxRelatedPerVideo: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

The **API** tab of the Actor page has more examples, including asynchronous runs and webhooks.

### How to use the scraper with Claude, ChatGPT and other AI assistants

The Actor is available through the **Apify MCP server** (`https://mcp.apify.com`). Connect it once, and then ask in plain language, for example: *"Find 30 videos similar to https://www.douyin.com/video/7688751380592381222 and show the ones with the most likes."*

- **Claude (claude.ai and Claude Desktop):** open **Settings → Connectors**, add a custom connector with the URL `https://mcp.apify.com`, and sign in to Apify.
- **Claude Code:** run `claude mcp add --transport http apify https://mcp.apify.com`.
- **ChatGPT:** add the Apify MCP server `https://mcp.apify.com` as a connector (app) in ChatGPT's settings, and sign in to Apify.
- **Cursor, VS Code, Windsurf and other MCP clients:** add `https://mcp.apify.com?actors=hgservices/douyin-related-videos-scraper` as a remote MCP server.

The AI assistant finds this Actor, runs it with your input, and reads the results for you.

### Integrations

Connect the results to the tools you already use with Apify integrations: **Google Sheets, Google Drive, Slack, Make, Zapier, n8n, Airbyte, GitHub** and webhooks. Use **schedules** to run the Actor every day or every week and track how Douyin's recommendations for a video change over time.

### How much does it cost to scrape Douyin related videos?

The Actor uses pay-per-event pricing. You pay for the results you get, not for the server time:

- a small fee when a run starts,
- a fee for each input video that returns related videos,
- a fee for each related video saved to your dataset.

Inputs that fail (invalid links, deleted videos, blocked requests) are free. The **Pricing** tab shows the current prices. You can set a maximum cost for each run; the Actor stops when it reaches your limit and keeps the results it already saved.

### Use cases

- **Content discovery** — find videos and creators similar to a video that performs well.
- **Competitor and niche research** — see which accounts Douyin shows next to your videos or a competitor's videos.
- **Recommendation analysis** — study what Douyin's algorithm connects to a video, topic or brand.
- **Influencer sourcing** — find creators in the same niche from one seed video.
- **Trend research** — follow which topics Douyin recommends around a trending video.
- **Datasets for AI and machine learning** — collect pairs of related videos with captions and engagement data.

### Tips for the best results

- **The closest matches come first.** The first few dozen related videos are closely tied to the topic of your video. Further down the list, the recommendations become broader. Use `rank` to keep only the closest matches.
- **Results change over time.** This is Douyin's live recommendation feed, so two runs can return a different order or set.
- **Download videos soon.** The no-watermark links are temporary. Download the files soon after the run.
- **Douyin sometimes has fewer than 200.** For some videos, Douyin stops recommending earlier. You then get fewer results than your maximum.

### FAQ

**What is a "related video" on Douyin?**
It is a video that Douyin itself recommends next to another video in the Douyin player. This Actor returns that list in Douyin's order.

**How many related videos can I get for one video?**
Up to 200. Douyin sometimes has fewer recommendations for a video.

**Do I need a Douyin account?**
No. The scraper works without an account, a password or cookies.

**Does it work with share links from the Douyin app?**
Yes. Paste the `v.douyin.com` link or the full share text that the app copies.

**Why did one of my inputs give an error?**
The error message tells you why. Common causes: the video was deleted, the link is a profile link, or the link is from another site. Temporary blocks by Douyin are rare; run the input again a few minutes later.

**Are the videos without a watermark?**
Yes. `videoUrlNoWatermark` is a direct MP4 link without a watermark.

**Can I scrape TikTok related videos with this Actor?**
No. This Actor works with Douyin, the Chinese version of TikTok, only.

**Can I use the data in Excel or Google Sheets?**
Yes. Download the results as CSV or Excel, or use the Google Sheets integration.

### Other Douyin scrapers

- **Douyin Profile Scraper** — get a creator's videos with stats and no-watermark links.
- **Douyin Search Scraper** — find Douyin videos by keyword, with sort and date filters.
- **Douyin Comments Scraper** — get the comments on Douyin videos.

### Is it legal to scrape Douyin?

This Actor collects only **publicly available** data. You are responsible for how you use the data. Obey Douyin's terms of service and the laws that apply to you, such as GDPR and copyright law. Do not use the content in ways that infringe the rights of creators.

### Feedback and support

Found a problem or need a new field? Open an issue on the **Issues** tab.

# Actor input Schema

## `videoUrls` (type: `array`):

Douyin video links (https://www.douyin.com/video/7688751380592381222), links with ?modal\_id=<id>, v.douyin.com share links, the full share text copied from the Douyin app, or plain numeric video IDs. You get the related videos Douyin recommends for each one.

## `maxRelatedPerVideo` (type: `integer`):

Maximum number of related videos for each input video. For some videos Douyin has fewer recommendations, so you can get fewer.

## `deduplicate` (type: `boolean`):

When on, a video recommended for several input videos appears only once (under the first input that returned it). Turn off to get the complete related list for every input video.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.douyin.com/video/7688751380592381222"
  ],
  "maxRelatedPerVideo": 20,
  "deduplicate": true
}
```

# Actor output Schema

## `relatedVideos` (type: `string`):

One item per related video: the input video it was recommended for (sourceAwemeId, rank), awemeId, video URL, caption, publish time, author (name, sec\_uid, uid, handle, profile URL), duration, no-watermark MP4 URL plus mirrors, cover, images, music, hashtags and engagement counts (likes, comments, shares, saves, recommends). Failed inputs appear as items with only 'sourceInput' and 'error' fields.

# 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 = {
    "videoUrls": [
        "https://www.douyin.com/video/7688751380592381222"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/douyin-related-videos-scraper").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 = { "videoUrls": ["https://www.douyin.com/video/7688751380592381222"] }

# Run the Actor and wait for it to finish
run = client.actor("hgservices/douyin-related-videos-scraper").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 '{
  "videoUrls": [
    "https://www.douyin.com/video/7688751380592381222"
  ]
}' |
apify call hgservices/douyin-related-videos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hgservices/douyin-related-videos-scraper"
        }
    }
}
```

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/CEyy1IibeuNeVG4iN/builds/hFMK8bifnZFTDy8bf/openapi.json
