Weibo Scraper | Posts, Profiles and Engagement
Pricing
from $17.00 / 1,000 posts
Weibo Scraper | Posts, Profiles and Engagement
Weibo scraper for public profiles: get every post with exact publish time, reposts, comments, likes, pictures, videos and the original of each repost, plus author followers and verification on every row. No login or cookie needed. Filter by date to monitor KOLs, brands and state media daily.
Pricing
from $17.00 / 1,000 posts
Rating
0.0
(0)
Developer
SilentFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Weibo ๅพฎๅ Scraper
Turn any public Weibo profile into a table: every post with its exact publish time, reposts, comments and likes, its pictures and videos, and the author's followers on each row. 50 posts with full text in 13 seconds, no Weibo account needed.
How it works

- You paste one or more profiles. A profile address, a numeric user id or a nickname all work, in the same field. Post addresses go in a second field when you want single posts.
- The timeline is read newest first. Long posts are read in full, reposts come with the post they quote, and a date floor stops the run at the first post older than the day you pick.
- One row comes back per post. 33 fields: the post with its exact numbers and media, the original it reposts, and the author with followers, verification and bio. Ready for a spreadsheet, a database or an AI pipeline.
โจ Why teams choose this over other Weibo scrapers
Hitting a login wall after two pages of a Weibo profile? Pasting your logged-in browser session into a scraper and hoping it still works tomorrow? Getting "2733.1ไธ" followers and "9ๆ19ๆฅ 22:21" back as text, then cleaning them by hand?
- ๐ Public profiles without an account. No login, no browser session to paste, no phone number. Paste a profile and press Start. The most used Weibo scraper on the Store asks for your logged-in session before it reads a timeline.
- ๐
Dates you can sort and filter. Every row carries the exact publish time in RFC 3339 UTC (
2026-09-19T04:30:20Z), not "ๆจๅคฉ 12:30" in Beijing time. Filter a week, chart a cadence, join on a calendar, no cleaning needed. - ๐ข Numbers as numbers. Reposts, comments and likes are integers on every row, the exact values Weibo shows for the post.
27331000followers, not "2733.1ไธ". - ๐ Long posts in full. Weibo cuts a long post after about 140 characters with "ๅฑๅผๅ จๆ". This scraper reads it again in full by default, and brings back the region it was posted from with it.
- ๐ Reposts with what they quote. A repost is a row with
isRepost: trueandrepostOf: the original's author, text, pictures, counts and time. Measure the spread of a post, or turn reposts off with one switch. - ๐ค The post and its author in the same row. 22 post fields and 11 author fields together: name, verification, bio, gender, followers, following, total posts, avatar. One dataset answers both "how did this post do" and "how big is this account".
- โฑ๏ธ Built for daily monitoring. Set
publishedAfterto1 dayon a schedule and each run returns only the new posts. The timeline is newest first, so the run stops at the first older post and watching 100 accounts stays quick. - ๐งน A clean dataset, every time. One row is one real post. An unknown profile or a deleted post produces no row and a clear message on the run. Unknown values are
null, never an empty string, and no post appears twice.
๐ฏ What you can do with Weibo data
| Team | What they build |
|---|---|
| China market research | A weekly digest of what 50 KOLs published, with likes per post and the topics they used |
| Brand and PR | A spread report of a campaign post: every account that reposted it, with their followers and the text they added |
| Investor relations and equity research | A daily feed of every post by listed-company executives and official accounts, pushed to a database |
| Newsrooms | A monitor of state and regional media accounts (ไบบๆฐๆฅๆฅ, ๅคฎ่งๆฐ้ป), with full text and pictures, minutes after publication |
| Influencer marketing | A vetting sheet per creator before a deal: engagement of the last 50 posts, share of reposts, posting cadence, verification |
| Social listening | A watchlist of 200 accounts read every morning with publishedAfter: 1 day, new posts only |
| Data and AI | A corpus of Chinese social text with topics, mentions, dates and engagement, for classification, sentiment or fine-tuning |
๐ฅ Input parameters
Essentials
| Field | Type | Description |
|---|---|---|
profiles | array | Profiles to read, one per line. Accepts a profile address (https://weibo.com/u/1749127163, https://weibo.com/leijun, https://m.weibo.cn/u/1749127163), a numeric user id (1749127163) or a nickname (้ทๅ). |
postUrls | array | Single posts to read, one per line: a post address (https://weibo.com/1749127163/RiOrRC766, https://m.weibo.cn/detail/5344838319083750) or a post id. Each becomes one row. |
maxItems | integer, default 50 | Maximum rows per profile. Posts read by address do not count. |
๐ Filters
| Field | Type | Description |
|---|---|---|
publishedAfter | string | Keep only posts published after a date (2026-01-31) or within an age (7 days, 2 weeks, 3 months, 1 year). The run stops at the first older post. |
includeReposts | boolean, default true | On: reposts are rows too, with the original in repostOf. Off: only the profile's own posts. |
๐ Output
| Field | Type | Description |
|---|---|---|
includeFullText | boolean, default true | On: a post the timeline cuts short is read again in full, with its region. Off: a faster listing that keeps the preview text of long posts. |
โ๏ธ Advanced
| Field | Type | Description |
|---|---|---|
debugMode | boolean, default false | Adds detailed lines to the run log. Leave it off for normal runs. |
๐ Output data
Each row is one post. A pinned video post of a personal account looks like this:
{"id": "5343890815061589","bid": "RipNDleKx","url": "https://weibo.com/1749127163/RipNDleKx","text": "ๅฐ็ฑณๆพ็จ๏ผๅๅคฉๅๅ๏ผ้ฆๆน่ฝฆไธปไบคไปไปชๅผๅๆปกๅฎๆใ\n\nไปๅพๅทใไธๆตทใๆญๅทใๅฐๆ้ฝ๏ผๆไปฌ่งๅฐไบ็นๅซๅคๅๆฌขๅ่ฎคๅฏๆพ็จ็่ฝฆไธป๏ผไน่ง่ฏไบ็นๅซๅคๅนธ็ฆใๅๆฆ็ๆถๅปใๆ่ฐขๆฏไธไฝ่ฝฆไธป็ไฟกไปปๅๆฏๆใ ๅฐ็ฑณๆพ็จ็ๅพฎๅ่ง้ข","isLongText": false,"isRepost": false,"isPinned": true,"topics": [],"mentions": [],"source": "ๅพฎๅ่ง้ขๅท","userId": "1749127163","userName": "้ทๅ","userUrl": "https://weibo.com/u/1749127163","userDescription": null,"isVerified": true,"verifiedReason": "ๅฐ็ฑณๅๅไบบ๏ผ่ฃไบ้ฟๅ ผCEO๏ผ้ๅฑฑ่ฝฏไปถ่ฃไบ้ฟ๏ผๅคฉไฝฟๆ่ตไบบใ","userGender": "male","followersCount": 27331000,"followingCount": 1642,"postsCount": 21943,"userAvatarUrl": "https://tvax4.sinaimg.cn/crop.0.0.1080.1080.180/001Un9Srly8iguza3zz5rj60u00u0gp602.jpg","repostsCount": 55,"commentsCount": 330,"likesCount": 2311,"location": null,"createdAt": "2026-09-16T13:45:18Z","images": [],"videoUrl": "https://f.video.weibocdn.com/o0/iZPO2nRplx08AQwCoB1u01041200EKGm0E010.mp4?label=mp4_720p","videoCoverUrl": "https://wx1.sinaimg.cn/orj480/f2c9838cly1ih5o026fypj20mi0u0adc.jpg","videoDuration": 61.253,"repostOf": null,"input": "https://weibo.com/u/1749127163","scrapedAt": "2026-09-20T04:20:58Z"}
A repost keeps the same 33 columns and carries the post it quotes in repostOf (author block shortened here):
{"id": "5344838319083750","bid": "RiOrRC766","url": "https://weibo.com/1749127163/RiOrRC766","text": "ๅฅฝ็๏ผ//@ๆฟๅญ็ถ็ถ:่ฟไธช้ข่ฒๆๅธ็ๅฆ๏ผ","isLongText": false,"isRepost": true,"isPinned": false,"topics": [],"mentions": ["ๆฟๅญ็ถ็ถ"],"source": "Xiaomi 18 Fold","userId": "1749127163","userName": "้ทๅ","repostsCount": 70,"commentsCount": 231,"likesCount": 1013,"location": null,"createdAt": "2026-09-19T04:30:20Z","images": [],"videoUrl": null,"repostOf": {"id": "5344060610449545","bid": "Riudv1SWJ","url": "https://weibo.com/4073292684/Riudv1SWJ","userId": "4073292684","userName": "ๅฐ็ฑณๆพ็จ","text": "ๆฉไธๅฅฝ๏ผๅไบซไธ็ป่ด่ถ่ฐท่๏ผๆทๅคๅฎๆๅพใ\nๅจ้ณๅ ็ งๅฐไธ๏ผๅ็ฐๅบๅฎ็ณ่ฌ็็ป่ ปๅ ๆณฝ๏ผ\nๅคงๅฎถ็็่ดจๆๆไนๆ ท๏ผ\n\nๆๆ๏ผ@ๆฎ้ไบบไบบGreyWolfe","images": ["https://wx3.sinaimg.cn/large/f2c9838cly1ih5ttd7yqpj277a4svb2j.jpg","https://wx1.sinaimg.cn/large/f2c9838cly1ih5ttiwly3j270h4obx73.jpg"],"videoUrl": null,"repostsCount": 81,"commentsCount": 23,"likesCount": 140,"createdAt": "2026-09-17T01:00:00Z"},"input": "https://weibo.com/u/1749127163","scrapedAt": "2026-09-20T04:22:46Z"}
๐๏ธ Data fields
33 fields per row: 3 identity, 7 content, 11 author, 3 measures, 2 place and time, 4 media, 1 repost, 2 meta. repostOf is the only nested field, with 12 fields of its own.
| Group | Fields |
|---|---|
| Identity | id (the numeric post id, or mid), bid (the short id in the address), url |
| Content | text (plain text, line breaks kept), isLongText, isRepost, isPinned, topics (the #่ฏ้ข# tags), mentions (the @names), source (the app or device the post was sent from) |
| Author | userId, userName, userUrl, userDescription, isVerified, verifiedReason, userGender, followersCount, followingCount, postsCount, userAvatarUrl |
| Measures | repostsCount, commentsCount, likesCount |
| Place and time | location (the region Weibo shows, ๅไบฌ), createdAt (RFC 3339, UTC) |
| Media | images (large size), videoUrl, videoCoverUrl, videoDuration (seconds) |
| Repost | repostOf: id, bid, url, userId, userName, text, images, videoUrl, repostsCount, commentsCount, likesCount, createdAt |
| Meta | input (the profile or post as you typed it), scrapedAt (RFC 3339, UTC) |
Good to know when you store the data:
idis Weibo's permanent post id anduserIdthe permanent user id.url(https://weibo.com/{userId}/{bid}) anduserUrlare built from them and are permanent. A nickname or a custom address can change; the ids do not.createdAtis the publish time converted to UTC. Weibo shows Beijing time (UTC+8); add 8 hours to read it as a Chinese reader does.locationis the region Weibo attaches to a post (ๅไบฌ,ๅนฟไธ, or a country for posts sent from abroad). It is read with the full text of long posts, and always for posts read by address. Rows read from the timeline only carrynull.imagesare the large versions of the pictures, on Weibo's image servers. They stay valid as long as the post keeps them.videoUrlis a signed link that expires within hours: download it in the same pipeline, or keepvideoCoverUrlandurlfor later.followersCountis rounded by Weibo itself (27331000for "2733.1ไธ",158000000for "1.58ไบฟ"). Post counts are exact.verifiedReasonis the line Weibo shows under a verified name.userDescriptionis the bio, which many verified accounts leave empty.isPinnedmarks the post a profile keeps at the top of its timeline; it can be older than the posts below it.topicsandmentionsare read from the text and never contain the#or@sign.
๐ Examples
Get the 50 latest posts of a profile
{"profiles": ["https://weibo.com/u/1749127163"]}
Pull only what a watchlist published since yesterday
Put this on a daily schedule. Each run returns the new posts and nothing else.
{"profiles": ["ไบบๆฐๆฅๆฅ", "ๅคฎ่งๆฐ้ป", "https://weibo.com/leijun"],"publishedAfter": "1 day","maxItems": 100}
Read three posts by address, with their originals and regions
{"postUrls": ["https://weibo.com/1749127163/RiOrRC766","https://m.weibo.cn/detail/5345185691339516","5344838319083750"]}
Export an account's own posts of the last quarter, reposts left out
{"profiles": ["https://weibo.com/rmrb"],"publishedAfter": "3 months","includeReposts": false,"maxItems": 500}
List a media account as fast as possible, preview text only
{"profiles": ["2803301701"],"includeFullText": false,"maxItems": 200}
Compare the engagement of two executives
{"profiles": ["้ทๅ", "https://weibo.com/u/1195242865"],"maxItems": 100,"includeReposts": false}
๐ค Copy to your AI assistant
Paste this block into Claude, ChatGPT or Cursor to give it full context about this scraper:
You have access to the Weibo Scraper on Apify: silentflow/weibo-scraperInput schema:- profiles (array of strings): profile addresses (weibo.com/u/{id}, weibo.com/{alias}, m.weibo.cn/u/{id}), numeric user ids or nicknames- postUrls (array of strings, optional): post addresses (weibo.com/{userId}/{bid}, m.weibo.cn/detail/{id}) or post ids- maxItems (integer, default 50): max rows per profile- publishedAfter (string, optional): "2026-01-31" or an age like "7 days", "2 weeks", "3 months", "1 year"; the run stops at the first older post- includeReposts (boolean, default true): reposts as rows with the original in repostOf- includeFullText (boolean, default true): long posts read in full, with their region- debugMode (boolean, default false)Output, one row per post (33 fields, null when unknown):- id (string), bid (string), url (string, permanent)- text (string), isLongText, isRepost, isPinned (booleans), topics (string[]), mentions (string[]), source (string)- userId, userName, userUrl, userDescription, verifiedReason, userGender, userAvatarUrl (strings), isVerified (boolean)- followersCount, followingCount, postsCount (integers)- repostsCount, commentsCount, likesCount (integers)- location (string), createdAt (RFC 3339 UTC)- images (string[]), videoUrl (string, expires within hours), videoCoverUrl (string), videoDuration (number, seconds)- repostOf ({id, bid, url, userId, userName, text, images, videoUrl, repostsCount, commentsCount, likesCount, createdAt} or null)- input (string), scrapedAt (RFC 3339 UTC)No account, no login and no API key needed. Use apify-client for Python or JavaScript.
๐ป Integrations
Vet a creator before a campaign (Python)
from statistics import medianfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("silentflow/weibo-scraper").call(run_input={"profiles": ["https://weibo.com/leijun"],"maxItems": 50,})posts = list(client.dataset(run["defaultDatasetId"]).iterate_items())own = [p for p in posts if not p["isRepost"]]author = posts[0]print(author["userName"], author["followersCount"], "followers, verified:", author["isVerified"])print("Own posts:", len(own), "of", len(posts))print("Median likes per own post:", median(p["likesCount"] for p in own))print("Comments per 1,000 followers:", round(1000 * sum(p["commentsCount"] for p in own) / author["followersCount"], 2))
Post new items from a watchlist to Slack (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('silentflow/weibo-scraper').call({profiles: ['ไบบๆฐๆฅๆฅ', 'ๅคฎ่งๆฐ้ป', 'https://weibo.com/leijun'],publishedAfter: '1 day',maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const post of items) {await fetch(process.env.SLACK_WEBHOOK_URL, {method: 'POST',body: JSON.stringify({ text: `${post.userName}: ${post.text.slice(0, 120)} ${post.url}` }),});}
Build a topic table of an account's last 300 posts (Python, CSV export)
import csvfrom collections import Counterfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("silentflow/weibo-scraper").call(run_input={"profiles": ["https://weibo.com/rmrb"],"maxItems": 300,"includeReposts": False,})posts = list(client.dataset(run["defaultDatasetId"]).iterate_items())likes, uses = Counter(), Counter()for p in posts:for topic in p["topics"]:uses[topic] += 1likes[topic] += p["likesCount"]with open("topics.csv", "w", newline="") as f:writer = csv.writer(f)writer.writerow(["topic", "posts", "likes", "likes_per_post"])for topic, n in uses.most_common():writer.writerow([topic, n, likes[topic], round(likes[topic] / n)])
๐ Performance
Measured on 20 September 2026 on real profiles.
| Run | Rows | Time |
|---|---|---|
| 1 personal profile, 50 latest posts, long posts read in full (the default input) | 50 | 13 seconds |
| 1 media profile, 12 own posts, preview text, plus 2 posts by address | 14 | 5 seconds |
| 1 media profile, every post of the last day, long posts read in full | 35 | 14 seconds |
| Metric | Value |
|---|---|
| Fields per row | 33 |
| Posts per timeline page | 45 |
| Columns filled on the default run | all, except location (long posts and posts by address), userDescription (accounts with a bio) and the media and repost fields that depend on the post |
| Limit per run | no fixed limit: the cap is per profile, and you choose it |
๐พ Data export
Every run stores its rows in a dataset you can download as JSON, CSV, Excel, XML or HTML from the Storage tab, or pull from the API:
https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv&token=YOUR_TOKEN
The dataset has two ready-made table views: Posts (post, author, published, likes, comments, reposts, URL) and Author stats (author, verified, verification, followers, following, posts, gender, profile URL). Schedules, webhooks and the Apify integrations (Google Sheets, Slack, Zapier, Make, n8n) work on top of the same dataset.
๐ก Tips for best results
- Monitoring? Use
publishedAfterwith an age."publishedAfter": "1 day"on a daily schedule reads only the top of each profile and returns only new posts. - Use user ids for long-lived pipelines. A nickname or a custom address can change. The numeric id never does, and every row gives it to you in
userId. - Keep full text on when the text matters. Long posts, the region and exact counts come with it. Turn it off only for a fast inventory of what an account posted.
- Turn reposts off to measure an account's own voice. Engagement on a repost belongs partly to the original.
includeReposts: falsekeeps the rows the account wrote itself. - Download videos in the same run.
videoUrlexpires within hours.url,imagesandvideoCoverUrlare the links to keep. - Group rows by
userIdfor account-level reports. The author block is identical on every row of a profile, so the first row of each group is the account's profile.
โ FAQ
What does this scraper extract? Every public post of the profiles you list, one row each, with 33 fields: the post (text, exact time, reposts, comments, likes, topics, mentions, source, region, pictures, video), the original it reposts, and its author (name, verification, bio, gender, followers, following, total posts, avatar). It also reads single posts by address.
What can I type in the profile field?
A profile address in any form (weibo.com/u/{id}, weibo.com/{alias}, weibo.com/n/{nickname}, m.weibo.cn/u/{id}, m.weibo.cn/profile/{id}), a numeric user id or a nickname. Anything else is skipped and named in the run log.
Do I need a Weibo account? No. The scraper reads public profiles and posts. There is no login, no browser session and no key to manage.
How fresh is the data?
Live. Every run reads Weibo at run time, nothing is served from a cache. scrapedAt tells you when each row was read.
Is there a limit on the number of posts?
No fixed limit. maxItems is per profile, and a run walks a timeline page by page, 45 posts per page, until that cap, the date floor or the end of the profile.
Can I scrape many profiles in one run? Yes. List as many profiles as you need. A profile named twice, for instance once by id and once by address, is read once, and no post is ever delivered twice in a run.
How do the filters combine?
They stack. publishedAfter: "30 days" with includeReposts: false and maxItems: 100 returns up to 100 posts the account wrote itself in the last 30 days, newest first.
Why is location null on most rows?
Weibo shows the region of a post on the post's own page, not in the timeline. It is read together with the full text of long posts and for every post read by address. For the region of a specific short post, put its address in postUrls.
Does it search by keyword, read comments or the hot search board? No. This scraper is about profiles and posts. Keyword search, comments and trending boards are different products.
What if a profile does not exist, is private or has no post? No row is written for it. The run log names the profile, and a run that ends with no rows at all says why on the run itself. Your dataset never contains error rows. An account that restricts its timeline to logged-in visitors is reported as not found.
Are the URLs permanent?
url and userUrl are permanent. Picture links stay valid as long as the post keeps them. videoUrl is signed and expires within hours.
What is Weibo? Weibo (ๅพฎๅ, Sina Weibo) is China's public conversation platform, the domestic counterpart of X (Twitter), with government, media, company and celebrity accounts followed by hundreds of millions of readers. A post is a ๅพฎๅ (a "weibo"), a repost a ่ฝฌๅ, a like a ่ต.
โ๏ธ Legal
This Actor extracts publicly available data from Weibo. It does not bypass any login, paywall or CAPTCHA, and it does not download video files. Users are responsible for complying with Weibo's terms of service and with applicable data protection laws (GDPR, CCPA, and PIPL, China's Personal Information Protection Law). The output contains author information that account holders publish themselves (name, bio, gender, avatar) and the names of mentioned users; when you process it as personal data, handle it accordingly. The data returned is informational; verify accuracy for regulated use cases.
๐ Related scrapers
- Douyin Scraper: videos and profiles from Douyin, China's TikTok.
- X Tweet Scraper: the tweets of any public X (Twitter) profile.
- YouTube Channel Scraper: every video, short and live stream of a channel.
- TikTok Scraper: videos and profiles from TikTok.
๐ฌ Support
Need something this scraper does not do yet? We ship features fast.
- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations and high-volume plans
- Pricing details live on the Monetization tab of the actor page
Response time: usually under 24 hours.
Check out our other scrapers: silentflow on Apify