Weibo Scraper: Posts, Comments & Profiles, No Login
Pricing
from $1.90 / 1,000 result rows
Weibo Scraper: Posts, Comments & Profiles, No Login
Scrape public Weibo (微博) data with no login: keyword search with date ranges, user profiles with their latest posts, post details by link and comments. Text, likes, reposts, comments, images, video, hashtags and region in clean rows, with a free status row for not-found inputs.
Pricing
from $1.90 / 1,000 result rows
Rating
0.0
(0)
Developer
Cliqto Media
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape public Weibo data with no login. Search posts by keyword and date, read users' profiles and latest posts, or get full details for post links, with up to 40 comments per post. Each item is one clean row with full text, likes, reposts, comments, images, video, hashtags and region. A typical run with 10 rows takes about 8 seconds and costs $0.034 on the Free plan.
Use it for brand monitoring, trend research and audience studies on Weibo (微博), the Chinese microblogging platform. Start with the keyword 苹果 and 10 results.

Table of contents
- What it does
- Quick start
- Input
- Output
- Pricing and limits
- Use cases
- Scheduling and monitoring
- API, export and integrations
- Limitations and partial results
- Troubleshooting
- FAQ
- Related Actors
- Support
What it does
The Actor has three modes. You pick one mode per run.
| Mode | You give | You get |
|---|---|---|
search | Up to 20 keywords or hashtags | Post rows, newest first, up to 5,000 per keyword, with an optional date range |
user | Up to 100 user IDs or profile links | One profile row per user, plus their latest posts (about 10) |
post | Up to 250 post links or IDs | One post row with full details for each post |
In every mode you can turn on Include comments to add up to 40 comments per post (hot comments first, then the latest).
It reads the public guest pages of Weibo. It does not sign in, does not need your cookies, and does not read private or follower-only posts.
Data you get
- Posts: post ID, short ID, URL, full text (long posts are expanded), created time, likes, reposts, comments, image URLs, video URL, cover and length, hashtags, mentions, region, source app, the original post of a repost, and the author's ID, name, verified flag and followers.
- Comments: comment ID, post ID, text, created time, likes, reply count, region and the commenter's public name and ID.
- Profiles: user ID, name, URL, public bio, followers, following, post count, verified flag and reason, location and avatar URL.
- Status: one free row that lists inputs that were not found, invalid, duplicate or not processed, with a reason for each.
Quick start
- Open Input.
- Keep What to scrape as
search, Search keywords as苹果and Max posts per keyword or user as10. - Click Start.
- Open the Posts tab of the Output to see the rows. Open Run summary to check each input.
The example returns 10 post rows in about 8 seconds. Search results are live and change every minute.
Input
Only mode is required. Each mode also needs its list: keywords for search, userIds for user, postIds for post. The new form prefills mode: "search", keywords: ["苹果"] and maxPosts: 10. The default build is latest.
| Field | Type | Default / prefill | Allowed values | What it changes / advice |
|---|---|---|---|---|
mode | string | search / same | search, user, post | What to scrape. Only the list for this mode is used. |
keywords | array of strings | none / ["苹果"] | 1–20 keywords | Search mode. Chinese or English words, or hashtags like #topic#. Exact duplicates are merged. |
userIds | array of strings | none | 1–100 | User mode. Numeric user ID (1669879400), https://weibo.com/u/1669879400 or https://m.weibo.cn/u/1669879400. Custom names like weibo.com/name are not supported. |
postIds | array of strings | none | 1–250 | Post mode. https://m.weibo.cn/detail/<id>, https://weibo.com/<uid>/<short id>, a numeric ID (5343871682741457) or a short ID (RipiMbvb3). Short t.cn links are not supported. |
maxPosts | integer | 100 / 10 | 1–5,000 | Search: posts per keyword. User: posts per user; Weibo shows guests only about the latest 10. Not used in post mode. |
startDate | string | empty | YYYY-MM-DD | Search mode. Oldest day to include, Beijing time. |
endDate | string | empty | YYYY-MM-DD | Search mode. Newest day to include (the whole day), Beijing time. Empty means up to now. |
includeComments | boolean | false | true, false | Also save comments of each post. Each comment is one paid row. |
maxCommentsPerPost | integer | 20 | 1–40 | With includeComments. Weibo shows guests up to about 40 comments per post. |
includeProfile | boolean | true | true, false | User mode. false returns only the users' posts. |
proxyConfiguration | object | {"useApifyProxy": true} | Apify Proxy settings | Apify Proxy datacenter IPs work for Weibo. Keep the default. |
How settings work together
startDateandendDateapply only in search mode. With a date range, the run walks back in time fromendDateuntilstartDateormaxPosts, whichever comes first.maxPostscounts posts only. Comments and profile rows are extra rows on top of it.- In user mode,
includeCommentsadds comments for each of the user's posts.
Input examples
Posts about two brands in October 2026:
{ "mode": "search", "keywords": ["华为", "比亚迪"], "maxPosts": 250, "startDate": "2026-10-01", "endDate": "2026-10-14" }
Returns up to 250 post rows per keyword from that date range, newest first, with keyword set on each row.
Profiles and latest posts of two users:
{ "mode": "user", "userIds": ["1669879400", "https://weibo.com/u/1195230310"], "maxPosts": 10 }
Returns two profile rows and about 10 post rows per user.
One post with its comments:
{ "mode": "post", "postIds": ["https://m.weibo.cn/detail/5343871682741457"], "includeComments": true, "maxCommentsPerPost": 40 }
Returns one post row and up to 40 comment rows.
Output
All rows go to the default Dataset. The type field tells the row kind: post, comment, profile or status.
Output examples
A post row (video and avatar links shortened; signed CDN links expire, see Limitations):
{"type": "post","postId": "5343871682741457","bid": "RipiMbvb3","url": "https://m.weibo.cn/detail/5343871682741457","userId": "6529876887","userName": "老师好我叫何同学","userVerified": true,"userFollowers": 3909000,"text": "iPhone 18 Pro系列的首发体验视频来了!希望大家喜欢!#何同学##iPhone18上手评测##苹果发布会##苹果发布会有何亮点# 老师好我叫何同学的微博视频","textTruncated": false,"createdAt": "2026-09-16T20:29:16+08:00","reposts": 550,"comments": 323,"likes": 4430,"countsCapped": false,"images": [],"video": {"url": "https://f.video.weibocdn.com/o0/KqY4XIfNlx08AQGVnw3S010412092Cjm0E040.mp4?label=mp4_720p&…","cover": "https://wx4.sinaimg.cn/orj480/0077UHgXly1ih5sd4iqooj31hc0u0hdt.jpg","durationSec": 1316},"hashtags": ["何同学", "iPhone18上手评测", "苹果发布会", "苹果发布会有何亮点"],"mentions": [],"region": "浙江","sourceApp": "微博视频号","repostOf": null,"keyword": null,"input": "5343871682741457","fetchedAt": "2026-10-15T04:06:33.763Z"}
A comment row (commenter shortened):
{"type": "comment","commentId": "5343902530801751","postId": "5343871682741457","userId": "1783…","userName": "李…","text": "何同学还是稳啊,每年都能搞出新名堂,今年还搭了个实景边转场边讲解,很牛逼。[good]","createdAt": "2026-09-16T22:31:51+08:00","likes": 83,"replies": 2,"region": "广东","replyToCommentId": null,"input": "5343871682741457","fetchedAt": "2026-10-15T04:06:36.224Z"}
A profile row:
{"type": "profile","userId": "1669879400","userName": "Dear-迪丽热巴","url": "https://weibo.com/u/1669879400","description": "一只喜欢默默表演的小透明。工作联系[email removed] 🍒","followers": 82550492,"following": 294,"postsCount": 1937,"verified": true,"verifiedReason": "嘉行传媒签约演员","location": "上海","avatar": "https://tvax1.sinaimg.cn/crop.0.0.1080.1080.1024/63885668ly8geyrcrw0zjj20u00u0mz6.jpg?KID=imgbed,tva&…","input": "1669879400","fetchedAt": "2026-10-15T04:09:45.307Z"}
Post fields
| Field | Type | Null? | Meaning / example |
|---|---|---|---|
postId | string | no | Numeric post ID, e.g. 5343871682741457. |
bid | string | yes | Short post ID used in weibo.com links, e.g. RipiMbvb3. |
url | string | no | Public post URL. |
userId | string | yes | Author user ID. |
userName | string | yes | Author public name. |
userVerified | boolean | yes | true for a verified account. |
userFollowers | integer | yes | Author followers. Exact in user mode; search and post mode can be rounded by Weibo (e.g. 3909000). |
text | string | no | Post text, HTML removed. Can be "" for a post with only images or video. |
textTruncated | boolean | no | true when Weibo did not serve the full text of a long post and the row has the preview. |
createdAt | string | yes | Post time, ISO with Beijing offset +08:00. |
reposts | integer | yes | Repost count. |
comments | integer | yes | Comment count. |
likes | integer | yes | Like count. |
countsCapped | boolean | no | true when Weibo shows a counter as "1,000,000+" (the field is then 1000000). |
images | array of strings | no | Image URLs, largest size. [] when none. |
video | object | yes | url, cover, durationSec. Null for posts without video. |
hashtags | array of strings | no | Hashtags without #. |
mentions | array of strings | no | Mentioned user names without @. |
region | string | yes | "Posted from" region shown by Weibo, e.g. 浙江. |
sourceApp | string | yes | Client or source label, e.g. 微博视频号. |
repostOf | object | yes | For a repost: the original postId, bid, userId, userName and text. Null otherwise. |
keyword | string | yes | The search keyword in search mode, else null. |
input | string | no | The input line that produced the row. |
fetchedAt | string | no | UTC fetch time, ISO format. |
Comment fields
| Field | Type | Null? | Meaning / example |
|---|---|---|---|
commentId | string | no | Comment ID. |
postId | string | no | The post the comment belongs to. |
userId | string | yes | Commenter user ID. |
userName | string | yes | Commenter public name. |
text | string | no | Comment text, HTML removed; emoji codes stay as [good]. |
createdAt | string | yes | Comment time, ISO +08:00. |
likes | integer | yes | Likes on the comment. |
replies | integer | yes | Number of replies. Replies themselves are not collected. |
region | string | yes | Commenter region shown by Weibo. |
replyToCommentId | string | yes | Parent comment ID when Weibo gives it; usually null. |
input | string | no | The input line. |
fetchedAt | string | no | UTC fetch time. |
Profile fields
| Field | Type | Null? | Meaning / example |
|---|---|---|---|
userId | string | no | User ID, e.g. 1669879400. |
userName | string | no | Public name. |
url | string | no | Profile URL. |
description | string | yes | Public bio. E-mail addresses and phone numbers are replaced with [email removed] / [phone removed]. |
followers | integer | yes | Exact follower count. |
following | integer | yes | Accounts the user follows. |
postsCount | integer | yes | Total posts on the profile. |
verified | boolean | yes | true for a verified account. |
verifiedReason | string | yes | Verification text, e.g. 嘉行传媒签约演员. |
location | string | yes | Location from the profile. |
avatar | string | yes | Avatar image URL (signed, expires). |
input | string | no | The input line. |
fetchedAt | string | no | UTC fetch time. |
Status row
When some inputs give no new data, the run adds one free type: "status" row. It has a message (for example 2 input(s) returned no new data: 1 not found, 1 duplicate, 0 failed or not processed. Free row.) and an inputs list. Each entry has input, status (not_found, error, duplicate or not_processed), code and reason.
Output tabs
The Output has Posts, Profiles and Comments tabs and a Run summary. The Dataset also has a Skipped, not found and errors view for status rows. Each view shows the columns for its row kind. Apify Dataset views cannot filter rows, so every view lists all rows of the run, and rows of other kinds show empty cells. For clean exports, filter by type or use the JSON export.
Run summary is the RUN_SUMMARY record in the default key-value store. It has status, partialReason, message, counts (rows by kind, charged rows, inputs complete, partial, not found, errors, not processed), per-input inputs, http (requests, retries, blocks) and timing.
| Situation | Dataset | Run result |
|---|---|---|
| Results found | Data rows | Succeeded, COMPLETE. |
| Keyword matches nothing | Empty | Succeeded, NO_RESULTS. Not an error. |
| Post or user does not exist or is hidden | Status row lists it | Succeeded. NOT_FOUND when nothing at all was found. |
| Same post or user given twice | One data row; status duplicate | Succeeded. The repeat is not charged. |
| Your maximum cost per run reached | Rows that fit the budget | Succeeded, partial CHARGE_LIMIT. Other inputs are not_processed. |
| Run time almost over | Rows saved so far | Succeeded, partial TIME_LIMIT. The status message tells you to raise the timeout or split the input. |
| Weibo refuses or fails repeatedly | Rows saved so far stay | Failed, partial SOURCE_ERROR. Not the same as "no results". |
| Invalid input | Empty | Failed before any Weibo request. |
Coming from another Weibo scraper
Field names are this Actor's own, and counters are numbers, not strings. The common fields map like this:
| Other Weibo scrapers | This Actor |
|---|---|
weiboId, id | postId |
bid | bid |
userId, user_id | userId |
screenName, screen_name | userName |
repostCount, reposts_count | reposts |
commentCount, comments_count | comments |
attitudeCount, attitudes_count | likes |
postedAt, created_at | createdAt (ISO +08:00) |
topics | hashtags |
atUsers | mentions |
regionName, region_name | region (without 发布于) |
picUrls, pics | images |
weiboPageUrl | url |
followersCount, followers_count | followers |
friendsCount, friends_count | following |
statusesCount, statuses_count | postsCount |
Pricing and limits
Pay per event: a start fee per run plus each saved data row (post, comment or profile). The status row is free. Platform compute and proxy traffic are included.
| Plan | Start fee per run | Per data row | Per 1,000 rows, excluding start |
|---|---|---|---|
| Free | $0.009 | $0.0025 | $2.50 |
| Bronze | $0.009 | $0.0023 | $2.30 |
| Silver | $0.009 | $0.0021 | $2.10 |
| Gold / Platinum / Diamond | $0.009 | $0.0019 | $1.90 |
The start fee is charged once per run (the Actor runs with up to 512 MB). It also applies when nothing is found. Duplicates, not-found inputs and invalid inputs are not charged as rows. Partial and failed runs charge only the start fee and the rows that were saved.
| Saved rows | Free-plan total | Gold-plan total |
|---|---|---|
| 0 | $0.009 | $0.009 |
| 1 | $0.0115 | $0.0109 |
| 10 | $0.034 | $0.028 |
| 100 | $0.259 | $0.199 |
| 1,000 | $2.509 | $1.909 |
| 5,000 | $12.509 | $9.509 |
These are price calculations, not promised result counts. Set Maximum cost per run to control spending. The run stops cleanly when it reaches your limit.
Limits per run: 20 keywords and up to 5,000 posts per keyword, 100 users, 250 posts in post mode, 40 comments per post. Measured on Apify with 256 MB: 10 search rows in about 8 s, 500 rows in 130 s, 2,000 rows in 425 s, 5,000 rows in about 20 minutes (timeout raised to 2,400 s). 12 users with their posts (112 rows) in 19 s, 7 posts with 76 comments in 10 s. The default timeout is 300 seconds, which fits about 1,300 search rows; raise it for larger runs. A run stops at 30 minutes of work at the latest and saves what it has. Search runs that ask for more than 2,000 posts in total get 512 MB automatically; other runs use 256 MB.
Use cases
| Task | Input | Useful fields | Next step |
|---|---|---|---|
| Monitor a brand or product | search, brand keywords, startDate | text, likes, reposts, createdAt, region | Track mentions and engagement by day. |
| Follow a trending hashtag | search, #topic#, maxPosts: 1000 | hashtags, mentions, userFollowers | Find the accounts that drive the topic. |
| Study audience reactions | post with post links, includeComments | comment text, likes, region | Run sentiment or keyword analysis. |
| Benchmark creators and brands | user with user IDs | followers, postsCount, verifiedReason, posts | Compare accounts and their latest posts. |
Scheduling and monitoring
You can save the input as an Apify task and schedule it, for example daily for the same keywords with startDate set to yesterday. Each run is a new snapshot and is charged normally. There is no "only new items" mode. Compare snapshots in your own system by postId, commentId or userId and fetchedAt.
API, export and integrations
Start the Actor with the Apify API using the same JSON input. When the run ends, read the default Dataset and the RUN_SUMMARY record. Export as JSON, CSV, Excel or XML from the Dataset. images, hashtags and mentions are lists; in CSV they become several columns.
Apify webhooks, Make, Zapier and n8n can start runs and pass the Dataset ID on. Use postId as the key for posts, commentId for comments and userId for profiles.
Use with AI agents (MCP)
Add https://mcp.apify.com?tools=cliqtomedia/weibo-scraper to your MCP client. A small input:
{ "mode": "search", "keywords": ["苹果"], "maxPosts": 10 }
Read text, url, likes, reposts, comments, hashtags and createdAt. This run took about 8 seconds and costs $0.034 on the Free plan. Check RUN_SUMMARY.status before you treat a partial run as complete.
Limitations and partial results
- Weibo search is live: the same keyword gives different posts minutes later. Use
startDateandendDatefor repeatable windows. - Weibo shows guests only about the latest 10 posts of a user. For older posts of an account, search by its name or topic with dates.
- Guests see up to about 40 comments per post (hot first, then latest). Replies to comments are counted in
repliesbut not collected. - Counters over one million are shown by Weibo as "100万+"; the row then has
1000000andcountsCapped: true. - Video and avatar links are signed by Weibo's CDN and stop working after about 1–3 hours. Download media soon after the run if you need it. Image links do not expire.
- Posts that are deleted, private, follower-only or hidden from guests get status
not_found. - The Actor waits about 1 second between requests on each of 3 guest sessions to stay polite.
- Bios can hold contact details. E-mail addresses and phone numbers are removed from bios and texts of profiles; treat the rest of the data as personal data.
- This Actor is not affiliated with or endorsed by Weibo or Sina. It reads public data only, without login. Use the data in line with Weibo terms and local law, and respect the privacy of users and commenters.
Troubleshooting
| Symptom | Possible reason | Check | Action |
|---|---|---|---|
| Run fails with "Invalid input" | Missing list for the mode, or a value over a limit | The message in the run log | Use an example above and change one field at a time. |
NO_RESULTS | No posts for the keyword in the date range | Search the keyword on weibo.com | Widen the dates or change the keyword. |
NOT_FOUND, no data rows | Posts or users do not exist or are hidden from guests | The status row | Open the link in a browser while logged out. |
INVALID_INPUT for a user name link | weibo.com/name links are not supported | The status row | Open the profile and copy the numeric ID from weibo.com/u/<id>. |
Partial CHARGE_LIMIT | Your maximum cost per run was reached | counts.chargedRows in Run summary | Raise the limit if you need more rows. |
Partial TIME_LIMIT | Too much work for the run timeout | Status message | Raise the timeout or split the input into several runs. |
Partial SOURCE_ERROR | Weibo refused or failed repeatedly | http.blocked in Run summary | Run again later; keep the default Apify Proxy. |
| Video link gives 403 | The signed CDN link expired | fetchedAt of the row | Run again and download the video right away. |
FAQ
Do I need a Weibo account or cookies?
No. The Actor uses public guest access. Do not add your cookies.
Can I get posts older than the latest 10 of a user?
Not in user mode, because Weibo hides them from guests. Search mode with startDate and endDate reaches older posts by keyword.
Are short IDs and numeric IDs both supported?
Yes. RipiMbvb3, 5343871682741457 and the full link point to the same post, and the Actor saves and charges it once.
Why did a search return fewer rows than maxPosts?
Weibo had fewer posts for that keyword in the date range.
Do empty runs cost money?
Only the start fee of $0.009. Inputs that are not found do not create paid rows.
Is the data the same as on the website?
Yes, it comes from the same public pages. Counters change quickly, so values can differ a little minutes later.
Related Actors
- Bluesky Scraper — public Bluesky posts, profiles, feeds and threads.
- YouTube Comments Scraper — public comments for YouTube videos.
- YouTube Subtitles & Transcript Scraper — transcripts for selected YouTube videos.
Support
Use the Actor's Issues tab for questions or bugs. Include the run ID and the error code from the Run summary. Do not send API tokens or cookies.