# Douyin Live Scraper - Live Status, Viewers & Stream URLs (`hgservices/douyin-live-room-scraper`) Actor

Check Douyin (抖音) live rooms and creators: is the creator live now, room title, viewers watching now, total viewers, likes, category, streamer and HLS/FLV stream links. Paste live links, room IDs or profile links. No login. Schedule it to monitor streamers.

- **URL**: https://apify.com/hgservices/douyin-live-room-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 $4.00 / 1,000 scraped rooms

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 Live Scraper — Live Status, Viewers & Stream URLs (抖音直播)

Check any **Douyin (抖音) live room** or creator in seconds. This Douyin live scraper tells you **if a creator is live now** and gives you the **room title, viewers watching now, total viewers, likes, category, streamer profile and HLS and FLV stream URLs** of the live stream.

Paste live links, room IDs or creator profile links. You do not need a Douyin account, cookies or a login. Export the results to **JSON, CSV, Excel or HTML**, schedule the Actor to monitor streamers, or ask an AI assistant such as **Claude** or **ChatGPT** to run it for you.

### What does Douyin Live Scraper do?

The Actor checks a list of Douyin live rooms and creators and returns one result for each input.

- 🔴 **Live status check** – a clear `isLive` flag and a status for each input: `live`, `ended` or `offline`.
- 👀 **Live audience numbers** – the exact number of viewers watching now, Douyin's total-viewers text (for example `10万+`) and the likes of the live session.
- 🏷️ **Live room details** – room title, category, cover image and a flag for rooms that sell products (live commerce).
- 🎥 **Live stream URLs** – the HLS (`.m3u8`) and FLV links of the stream in the best quality, plus HLS links for every quality.
- 👤 **Streamer profile** – name, `sec_uid`, numeric user ID, profile link and avatar.
- 🔗 **Flexible input** – live links, room IDs, creator profile links, `v.douyin.com` share links or the full share text from the Douyin app.
- 🧹 **Clean results** – the results come in the order of your input, and a room that you give two times (for example its live link and its streamer's profile link) shows only one time.

### What data can you get from Douyin live rooms?

| Field | Description | Example |
|------|-------------|---------|
| `isLive` | The room is live at the time of the check | `true` |
| `status` | `live`, `ended` or `offline` | `live` |
| `webRid` | Room ID, the number in the live link | `141601416352` |
| `roomId` | Douyin's ID of this live session | `7695781264460876544` |
| `liveUrl` | Link to the live room | `https://live.douyin.com/141601416352` |
| `title` | Live room title | `1` |
| `viewersNow` | Viewers watching now | `32228` |
| `viewersNowText` | Viewers now, as Douyin shows them | `3万+` |
| `totalViewersText` | All viewers of this live session, as Douyin shows them | `10万+` |
| `likeCount` | Likes in this live session | `619856` |
| `category` | Live category | `角色扮演` |
| `hasProducts` | The room has a product cart (live commerce) | `true` |
| `streamerName` | Streamer's display name | `看海老师` |
| `streamerSecUid` | Streamer's `sec_uid` | `MS4wLjABAAAA...` |
| `streamerUid` | Streamer's numeric Douyin user ID | `3457305561275172` |
| `streamerProfileUrl` | Link to the streamer's Douyin profile | `https://www.douyin.com/user/MS4wLjABAAAA...` |
| `streamerAvatarUrl` | Streamer's avatar image | image URL |
| `coverUrl` | Cover image of the live room | image URL |
| `hlsUrl` | HLS (`.m3u8`) stream link, best quality | stream URL |
| `flvUrl` | FLV stream link, best quality | stream URL |
| `hlsUrlsByQuality` | HLS stream links by quality (`FULL_HD1`, `HD1`, `SD1`, `SD2`) | object |
| `scrapedAt` | Time of the check (ISO 8601, UTC) | `2026-10-12T16:59:13+00:00` |
| `sourceInput` | Your input, exactly as you gave it | `https://live.douyin.com/141601416352` |
| `error` | Only on failed inputs: why the input gave no result | text |

### Input

The Actor has one input field.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `liveUrls` | array of strings | Yes | Douyin live links, room IDs, creator profile links or share links. |

You can use these kinds of input:

- **A live link:** `https://live.douyin.com/141601416352`
- **A room ID** (the number at the end of a live link): `141601416352`
- **A creator profile link:** `https://www.douyin.com/user/MS4wLjABAAAA...` — the Actor tells you if the creator is live now. If the creator is live, you get the full live room data.
- **A `sec_uid`** of a creator: `MS4wLjABAAAA...`
- **A share link** from the Douyin app: `https://v.douyin.com/...` for a live room or a profile. You can also paste the full share text, and the Actor finds the link in it.

Example input:

```json
{
    "liveUrls": [
        "https://live.douyin.com/141601416352",
        "https://www.douyin.com/user/MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M"
    ]
}
```

### Output

Each input gives one item in the dataset. This is a sample item for a room that is live (the stream URLs are shortened):

```json
{
    "sourceInput": "https://live.douyin.com/141601416352",
    "isLive": true,
    "status": "live",
    "webRid": "141601416352",
    "roomId": "7695781264460876544",
    "liveUrl": "https://live.douyin.com/141601416352",
    "title": "1",
    "viewersNow": 32228,
    "viewersNowText": "3万+",
    "totalViewersText": "10万+",
    "likeCount": 619856,
    "category": "角色扮演",
    "streamerName": "看海老师",
    "streamerSecUid": "MS4wLjABAAAAx56FMyWVsN8B8Tv4fTC51eA8JbyjOMvxwa0KAluSxq_PzfdejZcfxQY7Gcuyyo4u",
    "streamerUid": "3457305561275172",
    "streamerProfileUrl": "https://www.douyin.com/user/MS4wLjABAAAAx56FMyWVsN8B8Tv4fTC51eA8JbyjOMvxwa0KAluSxq_PzfdejZcfxQY7Gcuyyo4u",
    "streamerAvatarUrl": "https://p11.douyinpic.com/aweme/100x100/aweme-avatar/...jpeg",
    "coverUrl": "https://p3-webcast-sign.douyinpic.com/webcast-cover/...image",
    "hasProducts": true,
    "hlsUrl": "https://pull-hls-q26.douyincdn.com/thirdgame/stream-696707335027163966_or4.m3u8?expire=...",
    "flvUrl": "https://pull-flv-q26.douyincdn.com/thirdgame/stream-696707335027163966_uhd.flv?expire=...",
    "hlsUrlsByQuality": {
        "FULL_HD1": "https://pull-hls-q26.douyincdn.com/...m3u8?expire=...",
        "HD1": "https://pull-hls-q26.douyincdn.com/...m3u8?expire=...",
        "SD1": "https://pull-hls-q26.douyincdn.com/...m3u8?expire=...",
        "SD2": "https://pull-hls-q26.douyincdn.com/...m3u8?expire=..."
    },
    "scrapedAt": "2026-10-12T16:59:13+00:00"
}
```

Other inputs give shorter items:

- **A creator who is not live** gives `"isLive": false`, `"status": "offline"` and the creator's name, `sec_uid`, user ID, profile link and avatar.
- **An ended live room** gives `"isLive": false`, `"status": "ended"` and the room data that Douyin still shows, without the live audience numbers.
- **An input that fails** gives an item with `sourceInput` and an `error` text that tells you what to fix. Examples are a video link instead of a live link, a TikTok link, or a room ID that does not exist.

A `live`, `ended` or `offline` item is a checked result, and you pay for it. An `error` item is free. Refer to [How am I charged?](#how-am-i-charged).

Fields that Douyin does not show for a room are `null`. In Apify Console, the **Live rooms** view of the dataset shows the most important fields in a table.

### How to use Douyin Live Scraper

You can run the Actor in Apify Console, through the Apify API, or from an AI assistant. The examples below use the Actor ID `HGServices/douyin-live-room-scraper`. In API URLs, the slash becomes a tilde: `HGServices~douyin-live-room-scraper`.

#### Apify Console

1. Open the Actor in Apify Console.
2. Click **Try for free**.
3. In **Live links, room IDs or profile links**, paste one link or ID on each line.
4. Click **Start**.
5. When the run is done, open the **Output** tab.
6. Click **Export** to download the results as JSON, CSV, Excel, XML or HTML.

To check your streamers at regular times, open the Actor and click **Schedule**.

#### Apify API (HTTP)

Get your API token from **Settings › API & Integrations** in Apify Console. This request runs the Actor, waits for the run to finish, and returns the dataset items:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/HGServices~douyin-live-room-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
        "liveUrls": [
          "https://live.douyin.com/141601416352",
          "https://www.douyin.com/user/MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M"
        ]
      }'
```

The synchronous endpoint waits up to 300 seconds. For a long list of inputs, start the run with `POST /v2/acts/HGServices~douyin-live-room-scraper/runs`. Then get the items from `GET /v2/datasets/{defaultDatasetId}/items` when the run is done.

#### JavaScript (Node.js) with apify-client

Install the client with `npm install apify-client`.

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

// Start the Actor and wait for the run to finish.
const run = await client.actor('HGServices/douyin-live-room-scraper').call({
    liveUrls: [
        'https://live.douyin.com/141601416352',
        'https://www.douyin.com/user/MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M',
    ],
});

// Read the results from the run's dataset.
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const room of items) {
    console.log(room.streamerName, room.status, room.viewersNow, room.hlsUrl);
}
```

#### Python with apify-client

Install the client with `pip install apify-client`.

```python
import os

from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

## Start the Actor and wait for the run to finish.
run = client.actor("HGServices/douyin-live-room-scraper").call(
    run_input={
        "liveUrls": [
            "https://live.douyin.com/141601416352",
            "https://www.douyin.com/user/MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M",
        ],
    }
)

## Read the results from the run's dataset.
for room in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(room.get("streamerName"), room.get("status"), room.get("viewersNow"))
```

#### AI assistants (Claude, ChatGPT and other MCP clients)

The [Apify MCP server](https://mcp.apify.com) lets AI assistants run this Actor and read the results. Use this server URL to give the assistant access to this Actor only:

```text
https://mcp.apify.com/?tools=HGServices/douyin-live-room-scraper
```

**Claude (claude.ai and Claude Desktop):**

1. Open **Settings › Connectors**.
2. Click **Add custom connector**.
3. Paste the server URL above.
4. Sign in to Apify when Claude asks you.

**Claude Code:**

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=HGServices/douyin-live-room-scraper"
```

**ChatGPT:**

1. Open **Settings › Apps & Connectors**.
2. Turn on **Developer mode** in the advanced settings.
3. Create a new connector with the server URL above.
4. Sign in to Apify when ChatGPT asks you.

**Other MCP clients (Cursor, VS Code and more):**

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com/?tools=HGServices/douyin-live-room-scraper"
        }
    }
}
```

Then ask the assistant in plain language. Example prompts:

- "Which of these Douyin creators are live now? Show the room title, viewers now and live link for each one."
- "Check the Douyin live room https://live.douyin.com/141601416352 and give me its HLS stream URL."
- "Make a table of these Douyin live rooms, sorted by viewers now, and show which ones sell products."

### Integrations

Send the results to the tools you already use with Apify integrations: **Google Sheets, Google Drive, Slack, Make, Zapier, n8n, Airbyte, GitHub** and webhooks. For example, schedule the Actor to check a list of streamers every 15 minutes. Then use Make, Zapier or n8n to send a message for each item with `"isLive": true`.

### Use cases for Douyin live data

- **Streamer monitoring** – know when creators go live and how large their live audience is.
- **Live commerce research** – find Douyin live rooms that sell products and compare their audiences.
- **Influencer marketing** – check the live reach of Douyin creators before you work with them.
- **Audience tracking** – schedule the Actor and chart viewers and likes during a live session.
- **Stream recording and archiving** – get the HLS and FLV stream URLs of a live room for recording tools.

### Tips and limitations

- **Use profile links to monitor creators.** A live link points to one room. A profile link always finds the creator's current live room, if there is one.
- **Stream URLs expire.** The HLS and FLV links are signed. They stop working when the stream ends or when the signature expires. Use them soon after the run.
- **Stream URLs use `https://`.** You can use them in recording tools such as FFmpeg, VLC and Streamlink, or in an HTTPS web page.
- **Numbers change every second.** `viewersNow` and `likeCount` are a snapshot at the time in `scrapedAt`. Schedule the Actor to follow them over time.
- **Douyin rounds the text numbers.** `viewersNowText` and `totalViewersText` are Douyin's own rounded values. For example, `3万+` means 30,000 or more.
- **Room IDs have up to 14 digits.** A longer number is usually a video ID. Paste the live link or the creator's profile link instead.

### FAQ

#### Do I need a Douyin account or cookies?

No. The Actor works without a Douyin account, a password or cookies.

#### Do I need a proxy?

No. You do not need to configure a proxy. The Actor manages its connection to Douyin.

#### What is the difference between "ended" and "offline"?

`ended` means that the live room from your link exists, but its stream is over. `offline` means that the creator from your profile link is not live now.

#### How am I charged?

You pay for each room or creator that the Actor checks. The price is the same for `live`, `ended` and `offline` results, because the Actor does the same work to check each one. You do not pay for an input that fails and gives an `error` item. If you give the same room or creator two times, you pay for it one time. The **Pricing** tab shows the price for each result.

#### How do I find live Douyin rooms?

This Actor checks the rooms and creators that you give it. To find rooms that are live now, use the [Douyin Trending Live Rooms Scraper](https://apify.com/HGServices/douyin-trending-live-rooms-scraper). Then give its room links to this Actor to check them again later.

#### Can I record a Douyin live stream?

The Actor gives you the stream URLs. Use them with a tool such as FFmpeg to record the stream. Respect the creator's rights and obey the law.

#### Can I get the live chat or gifts?

No. This Actor gives you the room data, not the chat messages or gifts.

#### Can I scrape TikTok LIVE with this Actor?

No. This Actor works only with Douyin, the Chinese version of TikTok.

### Other Douyin scrapers

- [Douyin Trending Live Rooms Scraper](https://apify.com/HGServices/douyin-trending-live-rooms-scraper) – find the rooms that are live now in each Douyin live category.
- [Douyin Profile Scraper](https://apify.com/HGServices/douyin-profile-scraper) – get a creator's profile and videos.
- [Douyin Video Downloader & Scraper](https://apify.com/HGServices/douyin-scraper) – get Douyin videos without a watermark.
- [Douyin Hot Search Scraper](https://apify.com/HGServices/douyin-hot-search-scraper) – get Douyin's trending topics and hot list.
- [Douyin Danmaku Scraper](https://apify.com/HGServices/douyin-danmaku-scraper) – get the bullet comments (弹幕) of Douyin videos.
- [Douyin Comments Scraper](https://apify.com/HGServices/Douyin-Comments-Scraper) – get the comments and replies under Douyin videos.

### Is it legal to scrape Douyin?

This Actor collects only data that Douyin shows publicly to every visitor. The output includes public streamer profile data. You are responsible for using it in line with the Douyin terms of service and data protection laws such as GDPR and the Chinese PIPL. Read more in the Apify blog post [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

### Feedback and support

Did you find a bug, or do you need a new field? Open an issue in the **Issues** tab of the Actor. We read every report.

# Actor input Schema

## `liveUrls` (type: `array`):

Douyin live links (https://live.douyin.com/141601416352), the number at the end of a live link, creator profile links (https://www.douyin.com/user/MS4wLjABAAAA...) or v.douyin.com share links. A live room gives its full live data; a creator who is not live now gives a status row.

## Actor input object example

```json
{
  "liveUrls": [
    "https://live.douyin.com/141601416352"
  ]
}
```

# Actor output Schema

## `rooms` (type: `string`):

One item per input: live status, room ID and link, title, viewers now, total viewers, likes, category, streamer (name, sec_uid, uid, profile link, avatar), cover, products flag, HLS and FLV stream links, scrape time.

# 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 = {
    "liveUrls": [
        "https://live.douyin.com/141601416352"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/douyin-live-room-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 = { "liveUrls": ["https://live.douyin.com/141601416352"] }

# Run the Actor and wait for it to finish
run = client.actor("hgservices/douyin-live-room-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 '{
  "liveUrls": [
    "https://live.douyin.com/141601416352"
  ]
}' |
apify call hgservices/douyin-live-room-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hgservices/douyin-live-room-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/SkawXOILduUUneWJS/builds/M7S21KjcTQ9KIrROC/openapi.json
