Douyin keyword search API
Based on the 2026-10-25 specification snapshot
Quick answer
POST /douyin/search/task starts an asynchronous crawl of Douyin search results for one keyword, optionally bounded by start_date, end_date and max_pages. Poll GET /douyin/search/task/{task_id}; once DONE the same response carries the video posts and total_count, up to 100 per page. In the illustrative sample each video post has its URL, post_id, author, caption text, timestamp, metadata tags, video length and like, comment and share counts. Data is collected by web crawlers from content publicly published on Douyin.
What teams use it for
- Track short-video coverage of a brand, product or category on Douyin, which is separate from TikTok.
- Rank the videos about a topic by like, comment and share counts.
- Collect the comments of the videos that matter with the Douyin comments API.
Endpoints
Base URL: https://api.infominer.io/api/v2. Send your API key in the auth-header request header.
| Method | Path | What it does |
|---|---|---|
| POST | /douyin/search/task |
Creates a video keyword search task with an optional date range and page limit. |
| GET | /douyin/search/task/{task_id} |
Polls a video search task; once DONE it returns video posts and total_count, up to 100 per page. |
Request parameters
POST /douyin/search/task
| Parameter | In | Type | Required | Default / allowed | Description |
|---|---|---|---|---|---|
keyword |
body | string | Yes | Search keyword. | |
end_date |
body | string | No | Posts newer than this date are not collected (YYYY-MM-DD). | |
max_pages |
body | integer | No | Maximum number of result pages to crawl. | |
start_date |
body | string | No | Collection stops at posts older than this date (YYYY-MM-DD). |
GET /douyin/search/task/{task_id}
| Parameter | In | Type | Required | Default / allowed | Description |
|---|---|---|---|---|---|
task_id |
path | string | Yes | Task ID returned when the task was created. | |
page |
query | integer | No | 1 |
Page number, starting at 1. |
pageSize |
query | integer | No | 100 |
Videos per page, max 100. |
Response fields
| Data | Fields | Endpoint |
|---|---|---|
| Video posts (illustrative sample) | url, post_id, author, content, tm, date, metadata_tags, like_count, comment_count, share_count, video_length | GET /douyin/search/task/{task_id} |
Code examples
curl: create the task
curl -X POST https://api.infominer.io/api/v2/douyin/search/task \
-H "auth-header: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword": "亲子露营", "start_date": "2026-06-01", "end_date": "2026-06-30", "max_pages": 3}'
curl: poll the task by ID
curl "https://api.infominer.io/api/v2/douyin/search/task/$TASK_ID?page=1&pageSize=100" \
-H "auth-header: YOUR_API_KEY"
Python (requests): create, poll, read
import time
import requests
BASE_URL = "https://api.infominer.io/api/v2"
HEADERS = {"auth-header": "YOUR_API_KEY"}
# 1. Create the task
resp = requests.post(
f"{BASE_URL}/douyin/search/task",
headers=HEADERS,
json={
"keyword": "亲子露营",
"start_date": "2026-06-01",
"end_date": "2026-06-30",
"max_pages": 3,
},
timeout=30,
)
resp.raise_for_status()
task = resp.json()
# 2. Poll until the task leaves INIT / RUNNING
for _ in range(120):
resp = requests.get(
f"{BASE_URL}/douyin/search/task/{task['id']}",
headers=HEADERS,
params={
"page": 1,
"pageSize": 100,
},
timeout=30,
)
resp.raise_for_status()
result = resp.json()
status = result.get("status") or result.get("task", {}).get("status")
if status not in ("INIT", "RUNNING"):
break
time.sleep(15)
else:
raise SystemExit("task still running; poll it again later")
if status == "FAILED":
raise SystemExit("task failed")
if status != "DONE":
print("task ended with status", status, "- results may be incomplete")
# 3. Read the records (use page / pageSize to fetch further pages)
for row in result.get("data", []):
print(row.get("url"), (row.get("content") or "")[:60])
Sample response
Illustrative data written by hand: accounts are sample_user_n and IDs are obviously fake. Fields follow the 2026-10-25 specification snapshot; the sample shows a subset, and the full list is in the table above.
Poll response once the task is DONE (illustrative data)
{
"keyword": "亲子露营",
"status": "DONE",
"total_count": 2,
"task": {
"id": "00000000-0000-4000-8000-000000000001",
"status": "DONE"
},
"data": [
{
"source": "douyin.search",
"platform": "douyin",
"url": "https://www.douyin.com/video/0000000000000001",
"post_id": "0000000000000001",
"content": "第一次带孩子露营,帐篷搭建与行李清单整理给大家 #亲子露营",
"author": "sample_user_1",
"tm": 1781056800,
"date": "2026-06-10",
"metadata_tags": [
"亲子露营",
"露营新手"
],
"like_count": 230,
"comment_count": 18,
"share_count": 9,
"video_length": 95
},
{
"source": "douyin.search",
"platform": "douyin",
"url": "https://www.douyin.com/video/0000000000000002",
"post_id": "0000000000000002",
"content": "露营区的早餐怎么准备比较轻松,三个小技巧",
"author": "sample_user_2",
"tm": 1781060400,
"date": "2026-06-10",
"metadata_tags": [
"露营",
"早餐"
],
"like_count": 77,
"comment_count": 6,
"share_count": 3,
"video_length": 48
}
]
}
Limits and notes
- Search results are read up to 100 per page.
- start_date and end_date (YYYY-MM-DD) bound the crawl.
- How far back search can go and refresh frequency are confirmed per project scope.
More Douyin API pages
- Video search
- Comments
- User timeline
Request a trial
In the request form below, mention Douyin and tell us the keywords or accounts, how many comments you need per video, and whether you need video download URLs. We confirm the scope and reply with the arrangements for the trial and API key.
Fill in the form to request a trial. We confirm the scope and reply with trial and integration arrangements.
Fill in the request formFAQ
- Is Douyin data the same as TikTok data?
- No. Douyin is the app used in mainland China, with its own accounts and content; TikTok serves other markets. This API covers Douyin.
- Can I download the videos I find?
- POST /douyin/videos resolves an already collected video post to a download URL that redirects to Douyin's current public playback address. We only redirect; we do not host or store videos, and deleted videos or geographic and IP restrictions can make a video unavailable.
- How many videos does one search task return?
- max_pages caps how many result pages are crawled; volume per task is confirmed per project scope.
- How is the data collected? Is this the official Douyin API?
- By web crawlers, from content publicly published on Douyin. LargitData is not affiliated with Douyin and this is not Douyin's own API. Whether this suits your use depends on the purpose and jurisdiction and is for your legal team to assess; we can provide a description of sources and collection methods.