
Instagram Reel Scraper
scrape.ly/store/echofield/instagram-reel-scraperSocial mediaVideos
1 monthly user

Scrape public Douyin posts from a profile or a video URL: caption, counts, music, and author.
Collect public Douyin posts from a creator profile or a single video link: caption, hashtags, mentions, music, author, video and cover links, and like, comment, share, and collect counts. No Douyin login, cookies, or session needed. The result fee is $1.00 per 1,000 posts, plus platform usage for the browser session.
Paste profile or video URLs, set how many posts you want and a date window, and export the rows as JSON, CSV, or Excel.
v.douyin.com short links.30 days.| Field | Type | Description |
|---|---|---|
profileUrls | array | Public profile URLs or sec user IDs. When set, post URLs are not used. |
postUrls | array | Public video URLs, including v.douyin.com short links. Used only when no profile URL is set. |
maxItemsPerUrl | integer | Posts to save per profile. Default 10. Single post URLs ignore it. |
profileOldestPostDate | string | YYYY-MM-DD or a window like 30 days, 2 months, 1 year. UTC. |
profileNewestPostDate | string | YYYY-MM-DD, UTC. |
proxyConfiguration | object | Accepted for compatibility. The browser session uses its own exit. |
Ten recent posts from a profile:
{
"profileUrls": [
"https://www.douyin.com/user/MS4wLjABAAAAexampleSecUid"
],
"maxItemsPerUrl": 10
}
One video:
{
"profileUrls": [],
"postUrls": ["https://www.douyin.com/video/7429767354541788468"]
}
One row per public post.
| Field | Description |
|---|---|
id, url, inputUrl | Post id, public video page, and the input it came from. |
text, hashtags, mentions | Caption, hashtags, and mentions. |
createTime, createDate | Unix time and a DD/MM/YYYY date. |
authorMeta | Author id, sec uid, name, and avatar. |
musicMeta | Music id, name, author, and duration. |
videoMeta | Cover images, size, duration, and play URL. |
statistics | Digg (like), share, comment, and collect counts. |
A trimmed item (the author shown is a fictional example):
{
"id": "7429767354541788468",
"url": "https://www.douyin.com/video/7429767354541788468",
"text": "35 岁后,要选择可以做一辈子的生意#商业思维 #干货分享 #创业 #赚钱思维",
"createTime": 1729877604,
"createDate": "25/10/2024",
"authorMeta": {
"id": "100000000001",
"secUid": "MS4wLjABAAAAexampleSecUid",
"name": "Jane Doe",
"followersCount": null
},
"musicMeta": { "id": "7429767555620834067", "name": "Original sound - Jane Doe", "author": "Jane Doe", "isOriginal": true, "duration": 413 },
"videoMeta": { "height": 1920, "width": 1080, "duration": 413000 },
"statistics": { "diggCount": 362407, "shareCount": 136960, "commentCount": 18430, "collectCount": 208636, "downloadCount": null },
"mentions": [],
"hashtags": [
{ "id": "1609184230334532", "name": "商业思维" },
{ "id": "1591638955662429", "name": "干货分享" }
]
}
Follower totals and play counts are left empty because the public post list does not include them.
You pay $0.001 per saved post, which is $1.00 per 1,000 posts. Each run also uses platform usage: compute at $0.30 per GB-hour and browser credits at $0.00075 each, because the public post list is loaded in a browser session. Browser credits are the larger part of a small run.
Worked example: a 10-post profile costs 10 x $0.001 = $0.01 in result fees. With the usage measured on a billed staging run of that size (about $0.048 in browser credits and about $0.008 compute), that comes to about $0.066 in total.
No. Only posts that load on a public page are collected.
It reads public pages. You are responsible for following Douyin's terms and the laws that apply to your use of the data, including for personal data.
Douyin returns a login prompt for search when no account is signed in, and this actor does not take your login.
Posts already saved stay in the dataset.
Some fields, such as follower totals, play counts, and download counts, are not on the public post list and stay null.
Yes. Schedule runs, start them through the API, and read the dataset in any export format.
If you are moving from another Douyin post scraper, profile URLs, post URLs, and the per-profile limit cover the same public posts.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
profileUrlsarrayOptionalProfile URLs
Public profile URLs or sec user IDs. When this list is set, post URLs are not used.
postUrlsarrayOptionalPost URLs
Public video URLs, including v.douyin.com short links. Used only when no profile URL is set.
maxItemsPerUrlintegerOptionaldefault 10Maximum posts per profile
How many posts to save from each profile. A single post URL ignores this.
Optional date window for profile posts. Leave both empty to keep the newest posts.
profileOldestPostDatestringOptionalPosts published after
Profile posts only. A date (YYYY-MM-DD) or a relative window such as 30 days, 2 months, or 1 year. Dates are UTC.
profileNewestPostDatestringOptionalPosts published before
Profile posts only. A date in YYYY-MM-DD, UTC.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Accepted for compatibility. Post data is loaded in a browser session, which uses its own exit.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | |
| text | string | |
| createTime | integer | null | |
| createDate | string | null | |
| thumb | string | null | |
| url | string | |
| authorMeta | object | |
| musicMeta | object | |
| videoMeta | object | |
| statistics | object | |
| mentions | array | |
| hashtags | array | |
| inputUrl | string |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Result | One public post saved. | $0.001 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('echofield/douyin-scraper').call({
"profileUrls": [
"https://www.douyin.com/user/MS4wLjABAAAAjb1juHnK9tygA0nuoGgSEMW7ZuJzXNnTMx9XwaQh19k"
],
"postUrls": [
"https://www.douyin.com/video/7429767354541788468"
],
"maxItemsPerUrl": 10,
"profileOldestPostDate": "30 days",
"profileNewestPostDate": "2024-12-31",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run echofield/douyin-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=echofield/douyin-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Video details and stats.
Recent posts from one profile.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.