Douyin Search Scraper avatar

Douyin Search Scraper

Pricing

from $1.80 / 1,000 matching posts

Go to Apify Store
Douyin Search Scraper

Douyin Search Scraper

Search public Douyin posts by keyword and save rows with captions, source links, publish times, creators, engagement, sounds, hashtags, media links, and content types. Choose video or mixed video and image-text results, then add video details when needed. No buyer login or cookies are needed.

Pricing

from $1.80 / 1,000 matching posts

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

🔎 Find Public Douyin Posts by Keyword

For researchers, marketers, and developers who need public Douyin data, this Actor searches posts by keyword and saves structured rows with post links, captions, publish times, creators, engagement, sounds, hashtags, topic tags, and source-hosted media links. Choose video or mixed video and image-text results, then add video details when needed. No buyer login or cookies are needed.

Use it to

📦 What Each Douyin Post Row Contains

Each saved row is one matching public Douyin post. It includes the post ID and source URL, caption, publication time, content type, and the keyword that first found it. When Douyin provides them, the row also includes creator details, engagement counts, sound data, hashtags, topic tags, and source-hosted media links.

If the same post matches more than one submitted keyword, the Actor saves the first eligible match and keeps that first keyword in matchedKeyword. It does not rewrite the row with later matching keywords. Optional source fields can be absent when Douyin does not provide them.

  1. Enter one or more search terms. Chinese, English, pinyin, hashtags, brand names, and emoji are supported by the input form.
  2. Choose mixed video and image-text posts or video posts only.
  3. Set a maximum number of posts, or leave it empty to return all available results until the Douyin source is exhausted.
  4. Turn on video details when you need extra fields for matching video posts.
  5. Start the run and open the dataset from the Output panel.

All search terms in one run use the same content type, result limit, and video-detail setting. Use a separate run when you need a different setup.

⚙️ Input

Use one shared setup for all submitted search keywords. The Actor searches public Douyin posts and keeps the first saved match when a post appears for more than one keyword.

Input fields

FieldTypeWhat it does
searchKeywordsarray of stringsSearch terms to submit. Each term uses the same settings in this run.
contentTypesstringChoose videoAndImageText for mixed video and image-text posts, or video for video posts only.
maxItemsintegerSets the maximum number of matching posts to save. Leave it empty to return all available results until the Douyin source is exhausted.
includeVideoDetailsbooleanRequests extra video fields for matching video posts. Image-text posts do not receive these fields, and unavailable source data stays absent.

Example input

This example is copied from the public input of the successful current-beta default-input run.

{
"searchKeywords": [
"douyin"
],
"contentTypes": "videoAndImageText",
"includeVideoDetails": false
}

Work limit

Leave maxItems empty to return all available results until the Douyin source is exhausted. The source can return fewer posts when it has fewer matching posts.

🧾 Output

The Output panel links to the default dataset. Each dataset row is one matching Douyin post.

Output panel

FieldTypeWhat it does
datasetstring URLOpens the run dataset with the saved Douyin post rows.

Standard post row

This shape covers video and image-text rows when video-detail enrichment is not saved. Optional nested fields appear only when Douyin provides them.

FieldTypeWhat it does
postIdstringStable ID for the Douyin post.
postUrlstring URLSource page for the post.
captionstringCaption published with the post.
publishedAtdate-time stringPublication time reported by Douyin.
contentTypestringPublic result type: video or imageText.
matchedKeywordstringSubmitted keyword that first found the post.
creatorobjectPublic creator details when available.
creator.idstringStable creator ID.
creator.displayNamestringCreator name shown by Douyin.
creator.handlestringCreator handle shown by Douyin.
creator.followerCountintegerFollowers reported for the creator.
creator.postCountintegerPosts reported for the creator.
creator.regionstringRegion shown for the creator.
creator.biostringBiography shown for the creator.
creator.isVerifiedbooleanWhether Douyin marks the creator as verified.
creator.profileUrlstring URLSource page for the creator profile.
engagementobjectPublic engagement counts when available.
engagement.likeCountintegerLikes reported for the post.
engagement.commentCountintegerComments reported for the post.
engagement.shareCountintegerShares reported for the post.
engagement.saveCountintegerSaves reported for the post.
engagement.viewCountintegerViews reported for the post.
soundobjectAttached sound or music details when available.
sound.idstringID for the attached sound.
sound.titlestringTitle of the attached sound or music.
sound.authorstringAuthor shown for the sound or music.
sound.urlstring URLSource-hosted direct link to the sound when available.
hashtagsarray of stringsHashtags attached to the post.
topicTagsarray of stringsContent topic tags supplied by Douyin.
mediaobjectSource-hosted direct media links when available.
media.videoUrlstring URLDirect source-hosted link to the post video.
media.coverUrlstring URLDirect source-hosted link to the post cover image.

Example standard row

This unshortened row is copied from the successful current-beta default-input run.

{
"postId": "7618946574072925157",
"postUrl": "https://www.iesdouyin.com/share/video/7618946574072925157/?region=US&mid=6844597190434752513&u_code=0&did=MS4wLjABAAAAhI_xXlyIOBbg-MhlIWkA6wmFOLKt-VuaeAPaRMxm-jEa7C99CQkoLADeBBVh8u1-&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&share_sign=mzWqRysVMH5EQctTrUvnITYrGwpby3ZjZ5MKJYPkOmI-&share_version=290000&ts=1790261938&from_aid=581610&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D",
"caption": "从夯到拉排名抖音分支APP#从夯到拉 #锐评 #排名 #抖音",
"publishedAt": "2026-03-19T12:43:55.000Z",
"contentType": "video",
"matchedKeyword": "douyin",
"creator": {
"id": "7494199450790921276",
"displayName": "熊大爱玩三角洲",
"handle": "XDlove_play_Game",
"followerCount": 0,
"postCount": 0,
"region": "CN",
"bio": "三角洲行动攻略区/爆料区主播\n粉丝🐧🐧1108966072",
"isVerified": true,
"profileUrl": "https://m.douyin.com/share/user/MS4wLjABAAAAqOY0YrSiNSz2m92ELo4LQj4uIe9LOgNOl_0DtrCFngWzzzEFj4i2BzpwnR_RmQfe?scene_from=douyin_h5_search"
},
"engagement": {
"likeCount": 9286,
"commentCount": 396,
"shareCount": 976,
"saveCount": 2680,
"viewCount": 0
},
"sound": {
"id": "6844597190434752513",
"title": "Si Tu Vois Ma Mere",
"author": "Max Greger"
},
"hashtags": [
"从夯到拉",
"锐评",
"排名",
"抖音"
],
"topicTags": [
"个人管理",
"职场技能",
"职场营销"
],
"media": {
"videoUrl": "https://v3-dymsearch.douyinvod.com/94eb25b3e7b0c05c22e8f8096230c602/6ab54918/video/tos/cn/tos-cn-ve-15c000-ce/owVBiDOCeB77BWe7IQC5ifZVQ7d8TEAwrJ97gJ/?a=581610&ch=11&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=276&bt=276&cs=0&ds=3&ft=ukz_CPa1DyjNHwVQ9wzTglHhd.7EPJER3-ApQX&mime_type=video_mp4&qs=0&rc=aWg3ZWk4NDs2OzU4OmVoaEBpajR1ZnU5cmR4OTMzbGkzNUBfXzEyMF8wNjAxMS00Y18tYSNgbi4uMmRzcnFhLS1kLTVzcw%3D%3D&btag=c0000e00028000&dy_q=1790261938&feature_id=f5241e7604dff1d9d6c943fd20bd51a2&l=202609242258575D7A177467F64EA6444A",
"coverUrl": "https://p5-ex-gddgtc-sign.douyinpic.com/tos-cn-i-0813c000-ce/o0QzdQl7uEjwB7ZJET9g4eDeFJfAAF4ACIP7AF~tplv-dy-resize-walign-adapt-aq:540:q75.webp?biz_tag=aweme_video&card_type=153&column_n=0&from=327834062&l=202609242258575D7A177467F64EA6444A&lk3s=138a59ce&s=PackSourceEnum_SEARCH&sc=cover&se=false&x-expires=1791468000&x-signature=Xhn2%2FXs3fOYMvLC7vy3qhrSI9fA%3D"
}
}

Enriched video row

When includeVideoDetails is true and Douyin provides detail data for a matching video, the row keeps the standard fields and adds videoDetails.

FieldTypeWhat it does
postIdstringStable ID for the Douyin post.
postUrlstring URLSource page for the post.
captionstringCaption published with the post.
publishedAtdate-time stringPublication time reported by Douyin.
contentTypestringPublic result type, which is video for this shape.
matchedKeywordstringSubmitted keyword that first found the post.
creatorobjectPublic creator details when available.
creator.idstringStable creator ID.
creator.displayNamestringCreator name shown by Douyin.
creator.handlestringCreator handle shown by Douyin.
creator.followerCountintegerFollowers reported for the creator.
creator.postCountintegerPosts reported for the creator.
creator.regionstringRegion shown for the creator.
creator.biostringBiography shown for the creator.
creator.isVerifiedbooleanWhether Douyin marks the creator as verified.
creator.profileUrlstring URLSource page for the creator profile.
engagementobjectPublic engagement counts when available.
engagement.likeCountintegerLikes reported for the post.
engagement.commentCountintegerComments reported for the post.
engagement.shareCountintegerShares reported for the post.
engagement.saveCountintegerSaves reported for the post.
engagement.viewCountintegerViews reported for the post.
soundobjectAttached sound or music details when available.
sound.idstringID for the attached sound.
sound.titlestringTitle of the attached sound or music.
sound.authorstringAuthor shown for the sound or music.
sound.urlstring URLSource-hosted direct link to the sound when available.
hashtagsarray of stringsHashtags attached to the post.
topicTagsarray of stringsContent topic tags supplied by Douyin.
mediaobjectSource-hosted direct media links when available.
media.videoUrlstring URLDirect source-hosted link to the post video.
media.coverUrlstring URLDirect source-hosted link to the post cover image.
videoDetailsobjectExtra video fields returned when requested and available.
videoDetails.durationSecondsnumberVideo duration in seconds.
videoDetails.widthintegerVideo width in pixels.
videoDetails.heightintegerVideo height in pixels.
videoDetails.frameRatenumberVideo frame rate.
videoDetails.bitrateKbpsnumberVideo bitrate in kilobits per second.
videoDetails.formatstringVideo format.
videoDetails.codecstringVideo codec.
videoDetails.fileSizeBytesintegerVideo file size in bytes.

Example enriched video row

This unshortened row is copied from the successful current-beta video run with video details enabled.

{
"postId": "7665457860315743161",
"postUrl": "https://www.iesdouyin.com/share/video/7665457860315743161/?region=US&mid=7665457675165862698&u_code=0&did=MS4wLjABAAAAQn6FJUle4o4qrHa0PmxvwXd89yWgveNiK8jtnEzvYm7rxF3ThNUi3m852xpbOLxk&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&video_share_track_ver=&titleType=title&share_sign=UBZsnpOaNAtomAfEpaIHBL0xBfkwU0aMbDt._4cIH9Q-&share_version=290000&ts=1790261472&from_aid=581610&from_ssr=1&share_track_info=%7B%22link_description_type%22%3A%22%22%7D",
"caption": "#抖音如何升级最新版本新功能全都有。#手机使用小妙招 #实用数码小技巧 #抖音小技巧",
"publishedAt": "2026-07-22T20:51:28.000Z",
"contentType": "video",
"matchedKeyword": "douyin",
"creator": {
"id": "3123038106943695",
"displayName": "娟子「砥砺前行」",
"handle": "J3876888",
"followerCount": 34367,
"postCount": 0,
"region": "CN",
"bio": "强大自己是解决问题的唯一方法\n以视频传递知识,用内容记录热爱\n每天分享手机技巧小知识",
"isVerified": true,
"profileUrl": "https://m.douyin.com/share/user/MS4wLjABAAAAPN7CC1Sn0wYT3Q7iz89e2X7XB95OMVNisQs7XSUkALayZAAr4sFpm3-icfCU0A3p?scene_from=douyin_h5_search"
},
"engagement": {
"likeCount": 2090,
"commentCount": 140,
"shareCount": 647,
"saveCount": 1567,
"viewCount": 0
},
"sound": {
"id": "7665457675165862698",
"title": "@娟子「砥砺前行」创作的原声",
"author": "娟子「砥砺前行」",
"url": "https://sf3-sign.douyinstatic.com/ies-music-hj/7665457798964054833.mp3?x-expires=1790347872&x-signature=vbp9oEYsg8dH52y2KsAPhx8ToS0%3D"
},
"hashtags": [
"抖音如何升级最新版本新功能全都有。",
"实用数码小技巧",
"抖音小技巧"
],
"topicTags": [
"科技",
"手机",
"手机功能教程"
],
"media": {
"videoUrl": "https://v3-dymsearch.douyinvod.com/438491e52ba22e4664c36af43a9eb970/6ab546fc/video/tos/cn/tos-cn-ve-15c000-ce/oMepBw21DGGhihoIILLQfIgVTfsiEAGfLzGg8A/?a=581610&ch=11&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=281&bt=281&cs=0&ds=3&ft=ukz_CPa1DyjNHwVQ9wKoglHhd.UfGUAg3-ApQX&mime_type=video_mp4&qs=0&rc=ZzozOzw3ODhmaGg8PGQ3ZEBpanM4N3k5cjZsPDMzbGkzNUBiLjMwLV8tNTYxNi40NjZgYSNzZF5zMmRzbmRhLS1kLTVzcw%3D%3D&btag=c0000e00008000&dy_q=1790261472&feature_id=f5241e7604dff1d9d6c943fd20bd51a2&l=20260924225111A4DF505215765E6EB919",
"coverUrl": "https://p26-sign.douyinpic.com/tos-cn-p-0015c000-ce/o8nfWpkD8AG2BFMfDpVCQ5QAFX2eLhXjhgQITe~tplv-dy-resize-walign-adapt-aq:540:q75.webp?lk3s=138a59ce&x-expires=1791468000&x-signature=Lobbjs0ZkTGq03d5NZaKho5n3Bw%3D&from=327834062&s=PackSourceEnum_SEARCH&se=false&sc=cover&biz_tag=aweme_video&l=20260924225111A4DF505215765E6EB919"
},
"videoDetails": {
"durationSeconds": 12.168,
"width": 1080,
"height": 1920,
"frameRate": 30,
"bitrateKbps": 288.492,
"format": "mp4",
"codec": "h264",
"fileSizeBytes": 438797
}
}

💳 Pricing

This Actor uses pay-per-event pricing. The charged events describe saved outcomes in the dataset.

EventCharged for
Matching postOne matching post saved to the dataset.
Video detailsVideo details saved for one matching video when requested.

🔌 Integrations

Open the dataset in Apify or read it through the Apify API. The source-hosted media and profile links in each row can be passed to your own workflow when available.

Watch the walkthrough

❓ FAQ

What happens when one post matches more than one keyword?

The Actor saves the first eligible match and keeps the first submitted keyword in matchedKeyword. It does not replace that row with a later match.

Can a mixed search return image-text posts?

Yes. Set contentTypes to videoAndImageText for mixed results. Set it to video when you want video posts only.

What does video-detail enrichment add?

When requested, matching video posts can include duration, size, frame rate, bitrate, format, codec, and file size fields. Image-text posts do not receive video details, and unavailable source fields stay absent.

What happens when I leave the result limit empty?

The Actor returns all available results until the Douyin source is exhausted. The source can return fewer posts when it has fewer matching posts.

Do I need a Douyin login or cookies?

No buyer-supplied Douyin login credentials or cookies are needed. The Actor searches public Douyin content.

Can one run use different settings for each keyword?

No. All keywords in one run use the same content type, result limit, and video-detail choice. Use separate runs for different setups.

Does the Actor store video or image files?

No. It returns source-hosted direct media links when Douyin provides them. It does not archive media files in Apify Storage.

Can I search profiles, comments, live streams, or hot-search boards?

No. This Actor searches public posts. Account search, comment search, live-stream search, and hot-search-board data are separate products.

📝 Changelog

v0.0 (24-09-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré