Weibo Scraper: Weibo Search, Hot Search, Comments, Profiles
Pricing
from $2.50 / 1,000 posts
Weibo Scraper: Weibo Search, Hot Search, Comments, Profiles
Weibo (微博) scraper, no login: weibo posts by id or link with the full long text, weibo profiles with exact followers, search by keyword or #topic#, comments and replies, likers, followers and following, the 微博热搜 hot search board with changes between runs. Optional sentiment, translation.
Pricing
from $2.50 / 1,000 posts
Rating
0.0
(0)
Developer
Hyperbach
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Weibo (微博) data without a login: posts by id or link with the full long text, exact profiles by id, link or screen name, keyword and #topic# search, comments and replies, likers, followers and following, the hot-search boards with their changes between runs, the hot timeline — one row per entity, and a free row that says why for an input that names nothing. Run it on a schedule and each run delivers only the posts no earlier run delivered. Optional sentiment tags and machine translation. No account, no cookie, no browser, proxies handled for you.
Why this Weibo scraper
- The full long text, every time. Weibo's list pages cut a long post at about 140 characters. In our test of the lane two rivals delivered the cut text as the post. Here every post you name is read whole, and a long post found by search, on a timeline or on the hot timeline is read in full too (
fetchFullText: 49 of 49 long search posts in our test); the few Weibo will not serve are flaggedtext_truncated. - Exact where Weibo is exact, honest where it rounds. A profile row carries the exact follower integer (168,220,053 for 微博小秘书 at the time of writing) where the mobile pages show "1.68亿". A count Weibo only shows rounded is delivered as a number next to the text as written, with a precision word, never passed off as exact. Ready-made: Weibo exact follower counts for a list of accounts.
- One run, any mix. Post ids and links, user ids, links and screen names, keywords and #topics#, the boards and the hot timeline in one run; the same post given in 13 forms (ids, mobile, desktop, share, wrapped and old links) was one row in our test, and a user given twice is charged once; every input that names nothing comes back as a free row that says why (not found, invalid, empty).
- Depth where a visitor has it. Comments to the post's own count (98 % of a 1,577-comment post in our test), replies, likers to 200, following to the full count, fans to the first thousands, a user's videos; the four hot boards with rank, heat, label, category and the promoted entries flagged; the hot timeline (about 100 posts). Not here, because Weibo keeps them behind its login: search past page 1 or by date, a user's posts past the newest 10, the list of reposts. Ready-made: Scrape a Weibo post: full text, comments, replies and likers.
- Built for schedules.
onlyNewdelivers only posts no earlier run delivered; with the memory on, every hot-board row but a promoted entry says whether it is new, rising, falling or steady since the last run, and a row is written for each word that dropped off — never a guess about why. Ready-made: Weibo hot search (热搜): trending words, top posts, rank changes. - Says what Weibo hides. Weibo counts replies it does not list to a visitor: on a 1,579-comment post it listed none of the replies of 21 of the 28 comments that had replies (75 %). The post row says so in
comments_note; a liker list that ends before the like count says so inlikers_note; a list Weibo shows only page 1 of says so inlist_note. - Light and fast. Plain JSON, no browser: about 4 KB per post, 2 KB per profile; 500 rows in 30 seconds on one exit in our test, 0.84–1.68 s a search post with its full text; paced under Weibo's per-IP limit and rotated on the first refusal.
Who it's for
- Marketers and brand teams — what Weibo says about a brand or campaign today: keyword and topic search across the tabs, comments with the commenters' regions, the hot boards, sentiment tags.
- Researchers and analysts — posts with complete text and counts, exact profiles, comment threads, the hot-search board with heat and categories, in one row shape per entity.
- Monitoring teams — a scheduled keyword list or board read that delivers only what is new and says what moved on the board since the last run.
- Developers and agents — typed fields, one row per input in input order, a free labelled row for every miss, and a run summary to check a pipeline against.
Quick start
Posts by id or link, with their full text
{"posts": ["5346699644242007","https://weibo.com/1642909335/RjAS0hNxt"]}
Exact profiles by id, link or screen name
{"users": ["1642909335","https://weibo.com/u/2803301701","@人民日报"],"includeUserDetails": true}
A keyword across the search tabs, and a #topic#
{"keywords": ["亚运会","#热聊亚运会#"],"searchTabs": ["all","realtime","videos"],"maxPostsPerKeyword": 50}
A post with its comments and likers
{"posts": ["5346699644242007"],"maxCommentsPerPost": 200,"includeReplies": true,"maxLikersPerPost": 100}
The hot-search boards and the hot timeline
{"hotBoards": ["realtime","entertainment","topics","social"],"hotTimelinePosts": 50}
A daily monitor: new posts only, board changes
{"keywords": ["亚运会"],"hotBoards": ["realtime"],"onlyNew": true,"stateStoreName": "my-weibo-watch"}
Output
Four row types share one dataset (row_type says which): post, user (an exact profile or a listed user), comment, hot_item:
| field | meaning |
|---|---|
row_type | post, user, comment or hot_item: which columns of the row are filled. |
input | The value you gave that this row answers (the first form, when the same post or user was given several ways); on a search row the keyword; empty on board rows. |
input_index | The 1-based position of the input in its list (posts, users or keywords). |
inputs_merged | Other forms of the same post or user you gave (a mid and a link of one post), merged into this row. |
source_kind | Where the row came from: post (a post you named), search, topic, timeline, hot_timeline, hot_topic, user_videos, profile, author, followers, following, likers, comments, hot_board. |
status | ok = a delivered record; not_found, invalid, empty, failed, duplicate = a free row that says why there is no record for this input. |
status_detail | Why a row is not ok, in words (Weibo's own message where it gave one). |
scraped_at | When this row was read (UTC). |
query | The keyword, topic or hot-board word this row was found for. |
search_tabs | The search tabs the post appeared in (all, realtime, hot, videos, pictures, topic). |
list_note | What the list this row came from shows a visitor (page 1 only; the newest 10 posts). |
mid | The post's 16-digit id, as a string. |
bid | The post's 9-character id used in links (weibo.com/<uid>/<bid>). |
post_url | The post's link on weibo.com. |
created_at | When the post was published, Beijing time with its zone (2026-09-24T15:46:35+08:00). |
created_at_utc | The same moment in UTC. |
text | The post's text, plain: the full long text (a cut text is flagged in text_truncated), emoticons as [name], line breaks kept. |
text_html | The text as Weibo serves it (HTML with the hashtag, mention and emoticon markup). |
is_long_text | Weibo marks the post as a long post (its list rows show about 140 characters). |
text_truncated | true when the row carries a cut text: the long post was not read in full (fetchFullText off, or Weibo did not serve it). |
text_length | Characters in text. |
reposts_count | Reposts of the post. |
comments_count | Comments on the post, as Weibo counts them (roots and replies). |
likes_count | Likes (attitudes) on the post. |
pictures | The post's pictures, largest size URLs. |
picture_count | How many pictures the post has. |
video_url | The post's video (720p where served, else HD); a signed URL that expires in about an hour. |
video_hd_url | The HD stream of the video (signed, expires in about an hour). |
video_duration_s | The video's length in seconds. |
video_title | The video's title or caption. |
video_play_count | Plays of the video as Weibo shows them (1万次播放). |
region | The IP region Weibo shows for the post (发布于 …), without the prefix. |
source_client | The client the post was sent from (微博网页版, iPhone客户端 …). |
hashtags | The #topics# in the text, without the marks. |
mentions | The @users named in the text. |
links | The links in the text. |
is_repost | The post reposts another post. |
repost_of | The original post of a repost, in the same shape (mid, text, counts, pictures, video, the author's id and name). |
edit_count | How many times the post was edited, where Weibo shows it. |
is_ad | Weibo marks the post as promoted. |
matches_query | On a search row: the keyword appears in the text, the hashtags or the reposted original (Weibo's 综合 tab also ranks related posts). |
author_uid | The author's user id. |
author_name | The author's screen name. |
author_url | The author's profile link. |
author_avatar_url | The author's avatar. |
author_verified | The author is verified. |
author_verified_type | Weibo's verification type code (0 personal, 1–7 organisation, 220 none). |
author_verified_reason | The verification text shown on the author's profile. |
author_followers | The author's followers as the post page shows them: a number read from "1.68亿"-style text above 10,000 (see author_followers_precision). Empty on a hot-timeline or video-list row unless the post was read in full: those lists do not carry it. |
author_followers_shown | The author's follower count as written (1.68亿). |
author_followers_precision | exact or rounded: whether author_followers is the exact integer. The exact integer is on the author's user row (includeAuthorProfiles). |
author_following | How many accounts the author follows. |
author_posts_count | The author's post count. |
author_gender | m, f or n as Weibo gives it. |
author_description | The author's bio. |
comments_requested | maxCommentsPerPost as given. |
comments_delivered | Comment rows delivered for this post. |
comments_note | Why fewer comments than asked were delivered, when so, and how many comments Weibo counts replies under but lists none of to a visitor. |
likers_delivered | Liker rows delivered for this post. |
likers_note | Why fewer likers than asked were delivered, when so: Weibo's liker list for a visitor ended short of the post's like count. |
analysis_sentiment | With tagPosts: the text's sentiment from −1 (negative) to 1 (very positive), by a classification model. |
analysis_kind | With tagPosts: news, opinion, promotion, entertainment, personal, complaint, question or other. |
analysis_confidence | With tagPosts: the model's confidence in each tag, 0–1. |
translation | With translateTo: the machine translation of the text (or of the hot-board word). |
translation_note | Which model made the translation, or why there is none. |
raw | With includeRaw: Weibo's own JSON object for the row. |
run_tag | Your runTag, copied onto every row. |
list_of | On a listed user: the user id (followers, following) or post id (likers) the list belongs to. |
list_kind | follower, following, liker, search or author: what kind of list the user row comes from. |
list_total | Weibo's own count of the list (followers, following; the post's like count for likers). It can differ from the profile's follower count: Weibo counts its list apart (188,265,686 on a followers list whose profile said 168,220,042). |
uid | The user's id, as a string. |
screen_name | The user's screen name. |
profile_url | The user's profile link. |
avatar_url | The user's avatar. |
cover_url | The profile's cover image. |
verified | The user is verified. |
verified_type | Weibo's verification type code (0 personal, 1–7 organisation, 220 none). |
verified_kind | personal, organisation or none. |
verified_badge | The V a visitor sees: blue (an organisation), orange (the gold personal V), yellow (a personal V) or none. |
verified_reason | The verification text. |
gender | m, f or n. |
location | The location on the profile (profile rows; Weibo's lists of followers, following and likers do not carry it). |
description | The bio; on a topic row, the topic's description. |
followers | Followers: the exact integer on a profile row (followers_precision exact); a number read from the rounded text on a listed user. |
followers_shown | The follower count as Weibo writes it (1.68亿). |
followers_precision | exact (from the profile page) or rounded (from a list page). |
following | How many accounts the user follows. |
posts_count | The user's post count. |
total_reposts | Lifetime reposts received, on a profile row. |
total_comments | Lifetime comments received, on a profile row. |
total_likes | Lifetime likes received, on a profile row. |
member_rank | Weibo membership rank (mbrank). |
svip | SVIP level. |
birthday | With includeUserDetails: the birthday as shown (1948-06-15 双子座). |
registered_at | With includeUserDetails: when the account was created. |
ip_location | With includeUserDetails: the IP region on the profile, where Weibo serves it. Weibo serves none to a visitor (empty on 17 of 17 profiles we read, 2026-10-08), so the column is empty for now; a post's own region is in region. |
credit_level | With includeUserDetails: the sunshine credit level. |
company | With includeUserDetails: the company on the profile. |
school | With includeUserDetails: the school on the profile. |
labels | With includeUserDetails: the profile's labels (活跃 tags, awards). |
details_note | Why the details could not be read, when so. |
posts_requested | maxPostsPerUser as given. |
posts_delivered | Timeline post rows delivered for this user. |
posts_note | What the timeline shows a visitor, and why fewer rows when so. |
followers_delivered | Follower rows delivered for this user. |
following_delivered | Following rows delivered for this user. |
videos_delivered | Video post rows delivered for this user. |
post_mid | On a comment: the post it belongs to. |
comment_id | The comment's id. |
parent_comment_id | On a reply: the root comment it belongs to. |
is_reply | The row is a reply to a comment. |
reply_to_comment_id | On a reply: the comment it answers (a root or another reply). |
like_count | Likes on the comment. |
reply_count | Replies under the comment, as Weibo counts them (root comments only). |
floor | The comment's floor number. |
user_uid | The commenter's user id. |
user_name | The commenter's screen name. |
user_url | The commenter's profile link. |
user_verified | The commenter is verified. |
user_verified_type | The commenter's verification type code. |
user_verified_reason | The commenter's verification text. |
user_followers | The commenter's followers (exact, from the comment page). |
user_following | How many accounts the commenter follows (from the comment page). |
user_posts_count | The commenter's post count (from the comment page). |
user_total_likes | The likes the commenter's posts have received over the account's life (from the comment page). |
user_location | The commenter's profile location. |
user_gender | The commenter's gender code. |
user_description | The commenter's bio. |
board | realtime, entertainment, topics, social, or search_topics for a topic found by the search's 话题 tab. |
rank | The position on the board (0 = the pinned topic; empty on a promoted entry or a dropped word). |
word | The hot word or topic. |
heat | Weibo's heat number for the entry (the read count on the topics board). |
label | The board's label: 新 (new), 热 (hot), 沸 (boiling), 爆; a grade on the entertainment board. |
category | The category Weibo files the entry under (体育, 艺人 …). |
onboard_time | When the entry came onto the board (UTC), where Weibo gives it. |
is_pinned | The pinned (government) topic at the top of the board. |
is_hot | Weibo's hot flag on the entry. |
star_name | The celebrity Weibo links the entry to, where given. |
subject_label | Weibo's subject label on the entry. |
topic_url | The search page of the word on s.weibo.com. |
read_count | Reads of the topic (topics board, topic search). |
mention_count | Discussions / mentions of the topic. |
claim | Who hosts the topic (topics board). |
summary | Weibo's summary of the topic (topics board). |
change_type | With the memory on: new, rising, falling, steady or dropped since the last delivered board; empty on the first read and on a promoted entry (Weibo shows a different ad on almost every read, so an ad is never new or dropped). |
previous_rank | The entry's rank on the last delivered board. |
rank_change | Places risen (positive) or fallen since the last delivered board. |
previous_heat | The heat on the last delivered board. |
heat_change | The heat's change since the last delivered board. |
first_seen_at | When this memory first saw the word on the board (UTC). |
Example record:
{"row_type": "post","input": "5346699644242007","input_index": 1,"inputs_merged": ["https://m.weibo.cn/detail/5346699644242007","https://weibo.com/1642909335/RjAS0hNxt"],"source_kind": "post","status": "ok","status_detail": null,"scraped_at": "2026-10-08T07:50:53Z","query": null,"search_tabs": null,"list_note": null,"mid": "5346699644242007","bid": "RjAS0hNxt","post_url": "https://weibo.com/1642909335/RjAS0hNxt","created_at": "2026-09-24T15:46:35+08:00","created_at_utc": "2026-09-24T07:46:35Z","text": "🔥名古屋亚运会激战正酣,中秋月圆登场!乒乓球团体决赛、田径飞人大战轮番上演!\n\n💰@微博热点 金橙V专属限时激励来了!9月24日-28日,带#热聊亚运会#发布原创/二创视频(不得搬运、套作、抄袭),每日综合热度TOP 10每条奖励100元!\n\n🎯推荐创作方向:赛场高光时刻——乒乓球夺金名场面、关键球战术拆解、田径冲刺破纪录瞬间;亚运中秋夜——运动员过节花絮、赛场内外温情时刻、趣味内容二创等。\n\n🥮月满名古屋,连续5日独立结算,天天都有机会上榜!发视频,上场!\n\n更多活动信息详见:网页链接","text_html": "🔥名古屋亚运会激战正酣,中秋月圆登场!乒乓球团体决赛、田径飞人大战轮番上演!<br /><br />💰<a href='/n/微博热点'>@微博热点</a> 金橙V专属限时激励来了!9月24日-28日,带<a href=\"https://m.weibo.cn/search?containerid=231522type%3D1%26t%3D10%26q%3D%23%E7%83%AD%E8%81%8A%E4%BA%9A%E8%BF%90%E4%BC%9A%23&extparam=%23%E7%83%AD%E8%81%8A%E4%BA%9A%E8%BF%90%E4%BC%9A%23&launchid=10000360-page_H5\" data-hide=\"\"><span class=\"surl-text\">#热聊亚运会#</span></a>发布原创/二创视频(不得搬运、套作、抄袭),每日综合热度TOP 10每条奖励100元!<br /><br />🎯推荐创作方向:赛场高光时刻——乒乓球夺金名场面、关键球战术拆解、田径冲刺破纪录瞬间;亚运中秋夜——运动员过节花絮、赛场内外温情时刻、趣味内容二创等。<br /><br />🥮月满名古屋,连续5日独立结算,天天都有机会上榜!发视频,上场!<br /><br />更多活动信息详见:<a href=\"https://weibo.com/1642909335/RiospyQov\" data-hide=\"\"><span class='url-icon'><img style='width: 1rem;height: 1rem' src='https://h5.sinaimg.cn/upload/2015/09/25/3/timeline_card_small_web_default.png'></span><span class=\"surl-text\">网页链接</span></a>","is_long_text": true,"text_truncated": false,"text_length": 246,"reposts_count": 14,"comments_count": 110,"likes_count": 56,"pictures": ["https://wx1.sinaimg.cn/mw2000/001NbtLFgy1ihet31cky4j60h82vmdo302.jpg"],"picture_count": 1,"video_url": null,"video_hd_url": null,"video_duration_s": null,"video_title": null,"video_play_count": null,"region": "北京","source_client": "微博网页版","hashtags": ["热聊亚运会"],"mentions": ["微博热点"],"links": ["https://weibo.com/1642909335/RiospyQov"],"is_repost": false,"repost_of": null,"edit_count": null,"is_ad": false,"matches_query": null,"author_uid": "1642909335","author_name": "微博小秘书","author_url": "https://weibo.com/u/1642909335","author_avatar_url": "https://wx1.sinaimg.cn/orj480/001NbtLFly8hyj3qdyilqj60go0gojrz02.jpg","author_verified": true,"author_verified_type": 7,"author_verified_reason": "微博官方账号","author_followers": 168000000,"author_followers_shown": "1.68亿","author_followers_precision": "rounded","author_following": 2949,"author_posts_count": 10072,"author_gender": "f","author_description": "对微博的任何问题请私信@微博客服,或访问客服中心→http://kefu.weibo.com","comments_requested": 20,"comments_delivered": 20,"comments_note": null,"likers_delivered": 39,"likers_note": "Weibo's liker list for a visitor ended at page 3: 39 of the post's 56 likes listed","analysis_sentiment": null,"analysis_kind": null,"analysis_confidence": null,"translation": null,"translation_note": null,"raw": null,"run_tag": null,"list_of": null,"list_kind": null,"list_total": null,"uid": null,"screen_name": null,"profile_url": null,"avatar_url": null,"cover_url": null,"verified": null,"verified_type": null,"verified_kind": null,"verified_badge": null,"verified_reason": null,"gender": null,"location": null,"description": null,"followers": null,"followers_shown": null,"followers_precision": null,"following": null,"posts_count": null,"total_reposts": null,"total_comments": null,"total_likes": null,"member_rank": null,"svip": null,"birthday": null,"registered_at": null,"ip_location": null,"credit_level": null,"company": null,"school": null,"labels": null,"details_note": null,"posts_requested": null,"posts_delivered": null,"posts_note": null,"followers_delivered": null,"following_delivered": null,"videos_delivered": null,"post_mid": null,"comment_id": null,"parent_comment_id": null,"is_reply": null,"reply_to_comment_id": null,"like_count": null,"reply_count": null,"floor": null,"user_uid": null,"user_name": null,"user_url": null,"user_verified": null,"user_verified_type": null,"user_verified_reason": null,"user_followers": null,"user_following": null,"user_posts_count": null,"user_total_likes": null,"user_location": null,"user_gender": null,"user_description": null,"board": null,"rank": null,"word": null,"heat": null,"label": null,"category": null,"onboard_time": null,"is_pinned": null,"is_hot": null,"star_name": null,"subject_label": null,"topic_url": null,"read_count": null,"mention_count": null,"claim": null,"summary": null,"change_type": null,"previous_rank": null,"rank_change": null,"previous_heat": null,"heat_change": null,"first_seen_at": null}
Pricing
Pay only for the rows a run delivers, with no start fee and no platform usage billed to you. Prices fall with your Apify plan.
| per 1,000 | Free | Starter | Scale | Business |
|---|---|---|---|---|
Post (post) | $5.00 | $4.25 | $3.50 | $2.50 |
Profile (profile) | $5.00 | $4.25 | $3.50 | $2.50 |
Comment (comment) | $5.00 | $4.25 | $3.50 | $2.50 |
Listed user (user) | $5.00 | $4.25 | $3.50 | $2.50 |
Hot-board row (hot_item) | $4.60 | $3.91 | $3.22 | $2.30 |
Sentiment and kind tags (post_tags) | +$1.00 | +$0.85 | +$0.70 | +$0.50 |
Translation (translation) | +$3.00 | +$2.55 | +$2.10 | +$1.50 |
A post, an exact profile, a comment or reply, or a listed user (a follower, a following, a liker, a user found by search) is $5.00 per 1,000 rows on the Free plan and $2.50 on Business; a hot-board row is $4.60 per 1,000, so one read of the realtime board (about 52 rows) is about $0.24 on Free. The + fees are charged only on a row that carries the thing: with tagPosts, a post or comment row with its sentiment and kind tags ($1.00 per 1,000 such rows on Free); with translateTo, a post, comment or board row with its translation ($3.00 per 1,000). Free: a row for an input that names nothing (a post or user that does not exist, a value that is not a Weibo id, link or keyword, an empty search, a duplicate of an earlier input), a search tab Weibo did not serve, a post onlyNew skips, and a run that failed before its first row; a run that stops early (a timeout, an abort) is charged for the rows it delivered. maxItems counts the five row types together and is exact; before the first request the log says the most the run can cost at your plan's prices, and your charge limit stops the run before it is passed. Enterprise plans have their own rates — the Actor's Pricing tab shows the price for your plan.
Usage patterns
- Posts and profiles — Paste post ids (16-digit mids or 9-character bids) or any post link in
posts; user ids, profile links or screen names inusers. Each comes back as one row in your order (input_index), or as a freenot_found/invalidrow. AddmaxCommentsPerPost,maxLikersPerPost,maxPostsPerUser(the newest 10 is all a visitor sees),maxFollowersPerUser,maxFollowingPerUser,maxVideosPerUserandincludeUserDetailsfor the rows behind each entity;includeAuthorProfilesadds the exact profile of every author. A user's video rows carry signed video links that expire in about an hour: save the files soon. Ready-made: Weibo account videos: video links, duration, title, plays. - Comments, replies and likers —
maxCommentsPerPostreads the comments of every post row, newest first (commentsOrdertime) or in Weibo's ranking (hot). Each comment row carries its text, time, likes, region and pictures, and the commenter's exact followers, following, posts, lifetime likes and verification (user_*). The replies Weibo shows under a comment on the comments page come as comment rows (charged) even withincludeRepliesoff;includeRepliesreads the rest, one request per comment, counted inmaxCommentsPerPost.maxLikersPerPostadds the users who liked the post (to 200); a liker list can end before the like count (39 of 56 for one post, on every read), and the post row then says so inlikers_note, ascomments_notedoes for comments. Ready-made: Scrape a Weibo post: full text, comments, replies and likers. - Search — A keyword reads page 1 of each tab in
searchTabs(about 10–15 posts a tab, about 50 on 图片 pictures;usersgives about 20 user rows with theverified_badge,topicsup to 10 topic rows with discussion and read counts, each topic once); a#topic#reads the topic page. Weibo shows a visitor page 1 only and no date window: a row'slist_notesays so, andmatches_querysays whether the keyword is in the text. For many posts on a subject, search several related keywords and tabs. Ready-made: Find Weibo accounts and #topics# for a keyword (KOL search). - Hot search —
hotBoardsreads the 热搜 realtime board (50 words, the pinned topic at rank 0, promoted entries flaggedis_ad), the 文娱 board (50), the 话题 board (10 topics with read and mention counts) and the 社会 board (50);postsPerHotTopicadds the top posts of Weibo's 综合 search behind each ranked realtime word (a post two words share is one row, and the second word takes its next post);hotTimelinePostsreads Weibo's hot timeline. WithstateStoreNameset, every board row carries its change since the last run and dropped words get their own rows. Ready-made: Weibo hot search (热搜): trending words, top posts, rank changes. - Add-ons —
tagPostsaddsanalysis_sentiment(−1 to 1) andanalysis_kindto every post and comment row from a classification model;translateToadds a machine translation of posts, comments and hot words by an OpenAI model, next to the original and labelled as such. Both are charged per row they land on. Ready-made: Weibo posts about brands in English, with sentiment tags. - A schedule — Save a task with your keywords and
onlyNewand schedule it: each run reads page 1 of the tabs you chose and delivers only the posts no earlier run of the task delivered; a post skipped this way is free, so a run with nothing new costs nothing. Weibo shows a visitor no older page, so a busy word wants an hourly run.stateStoreNamenames the memory; withhotBoardsit also gives every board row its change since the last run. Ready-made: Monitor Weibo for brand keywords: new posts only.
Input configuration
| field | type | default | what it does |
|---|---|---|---|
posts | array | [] | Weibo posts, one per line, in any form: the 16-digit id (mid) 5346699644242007, the 9-character id (bid) RjAS0hNxt, or a link such as https://weibo.com/1642909335/RjAS0hNxt, https://m.weibo.cn/detail/5346699644242007, https://m.weibo.cn/status/RjAS0hNxt. One row per post: the same post given several ways is one row. A value that is not a Weibo post id or link comes back as a free row that says why. |
users | array | [] | Weibo users, one per line: the numeric id 1642909335, a profile link https://weibo.com/u/1642909335, https://weibo.com/1642909335, https://m.weibo.cn/u/1642909335, https://weibo.com/n/微博小秘书, or a screen name 微博小秘书 / @微博小秘书. One exact profile row per user (the exact follower integer, not the rounded "1.68亿"). |
keywords | array | [] | Search terms, one per line. A plain word or phrase reads page 1 of each tab in searchTabs (about 10–15 posts a tab, about 50 on 图片 pictures); #topic# reads the topic page instead. Weibo shows a visitor page 1 only and no date window: the rows say so. |
searchTabs | array | [] | The search tabs read for each keyword, page 1 each; empty = all (综合). A post found in two tabs is one row with both tabs in search_tabs. users gives user rows, topics gives up to 10 hot_item rows with discussion and read counts, each topic once; the other tabs give post rows. |
maxPostsPerKeyword | integer | 0 | The most post rows per keyword over its tabs (0 = every post of the pages read: about 90 over the five post tabs). |
hotBoards | array | [] | The hot-search boards to read, one hot_item row per entry: rank, word, heat, label (新 / 热 / 沸), category, time on board, the pinned topic and promoted entries flagged. With the memory on (stateStoreName or onlyNew), each row says how it moved since the last run (new, rising, falling, steady) and a row is written for each word that dropped off. |
postsPerHotTopic | integer | 0 | For each ranked word of the realtime board, the top posts of Weibo's 综合 search for it (one search page per word; the pinned topic and promoted entries are skipped; a post two words share is one row, and the second word takes the next post of its page; needs realtime in hotBoards); 0 = none. |
hotTimelinePosts | integer | 0 | How many posts of Weibo's hot (trending) timeline to deliver, 10 a page; 0 = none. The walk ends when a page adds nothing new (about 100 posts in practice). |
fetchFullText | boolean | true | A search, timeline or hot-timeline row cuts a long post at about 140 characters; with this on, each such post is read in full (one request per long post). Off, the row keeps the cut text and text_truncated is true. |
includeAuthorProfiles | boolean | false | After the posts, one exact user row per distinct author (the exact follower integer; charged as a profile). Every post row already carries the author's name, id, verification and counts as the post page shows them. |
maxCommentsPerPost | integer | 0 | Comment rows per post row (comment: text, time, likes, region, the commenter with exact followers), to the post's own count; 0 = none. Applies to every post row of the run. |
commentsOrder | time / hot | "time" | The order Weibo lists the comments in. Time order reaches more of a big post's comments (98 % of 1,577 in our test); hot order follows Weibo's ranking. |
includeReplies | boolean | false | Read the replies under each comment that has them (one request per such comment), as comment rows with is_reply and parent_comment_id. Counted in maxCommentsPerPost. |
maxLikersPerPost | integer | 0 | Who liked the post, as user rows (list_kind liker), up to 200 a post (Weibo shows a visitor no more); 0 = none. |
maxPostsPerUser | integer | 0 | The newest posts of each user in users, as post rows; 0 = the profile only. Weibo shows a visitor the newest 10 and no more. |
maxFollowersPerUser | integer | 0 | The user's followers (fans) as user rows, 10 a request, with the exact total in list_total; 0 = none. Weibo serves a visitor the first few thousand of a big account. |
maxFollowingPerUser | integer | 0 | The accounts the user follows, as user rows, 10 a request, to the full count; 0 = none. |
maxVideosPerUser | integer | 0 | The user's video posts as post rows (video URL, duration, title); 0 = none. |
includeUserDetails | boolean | false | One more request per user in users: registration date, credit level and the profile labels, and the birthday, company and school where the user shows them. Weibo shows a visitor no IP location. |
tagPosts | boolean | false | Typed tags on every post and comment row from a classification model (Jev, pinned version): analysis_sentiment (−1 to 1), analysis_kind (news, opinion, promotion, entertainment, personal, complaint, question, other) and the confidence of each. Charged per tagged row. |
translateTo | string | "" | A language code (en, de, ja, pt-BR): a machine translation of each post, comment and hot-board word by an OpenAI model, next to the original (translation, with the model named in translation_note). Empty = no translation. Charged per translated row. |
includeRaw | boolean | false | Keep Weibo's own JSON object on each row (raw), for fields this Actor does not name. |
onlyNew | boolean | false | Deliver only posts no earlier run of the same task delivered (search, topic, timeline, hot-timeline and video rows); turns the memory on. Hot-board rows then carry their change since the last run. |
stateStoreName | string | "" | Name of the memory between runs. Given, it turns the memory on: hot-board rows get change_type, previous_rank, rank_change, heat_change and dropped words get their own rows; with onlyNew, posts delivered before are skipped. Empty = derived from the inputs when onlyNew is on. |
maxItems | integer | 0 | The most charged rows this run delivers, all types together. 0 = no limit. Free rows (not found, invalid, empty) do not count. |
proxyUrl | string | http://user:pass@host:port — a proxy of yours to read Weibo through, tried before the Actor's own exits. Leave empty: the Actor brings its own proxies and no Chinese exit is needed. | |
runTag | string | "" | A label copied onto every row (run_tag), to tell runs apart in a shared dataset. |
Errors
A run does not fail because of your input. When an input cannot be used — a date that is not a date, an id in the wrong form, two settings that contradict each other — the run ends Succeeded, charges nothing, and says what to change:
- the status message starts with
INPUT REJECTED; - the dataset holds one row,
{"error": true, "code": "…", "message": "…"}, and no results; - the key-value store record
ERRORholds the same object.
From code, check error on the first row before reading results.
A search that matches nothing is not an error: the dataset is empty and nothing is charged. A run that ends Failed is a fault on our side, never your input; it charges nothing, and we are alerted.
FAQ
Can it read a user's older posts, or search by date range?
No. Weibo shows a visitor the newest 10 posts of a user, page 1 of each search tab, and no date filter; the rest is behind a login, and this Actor does not log in or take a cookie. The rows say so (list_note). Comments, likers, following, fans and a user's videos go deeper because Weibo serves those lists to a visitor.
Are the follower counts exact?
On a user row from users or includeAuthorProfiles, yes: followers is the exact integer and followers_precision is exact. On a post's author block and on listed users (followers, following, likers, search) Weibo serves the rounded text ("1.68亿"): the row keeps it as written in *_followers_shown and marks the number rounded.
What is charged?
Delivered rows: a post, a profile, a comment, a listed user, a hot-board row, and the tag or translation add-on on the rows it lands on. Rows for inputs that name nothing (not found, invalid, empty, duplicate), and a run that failed before its first row, are free; a run that stops early (a timeout, an abort) is charged for the rows it delivered. maxItems caps every charged row together.
Does it need a Chinese proxy or a Weibo account?
No. The Actor brings its own exits (datacenter IPs are served; six countries were tested) and uses Weibo's visitor access. proxyUrl lets you put a proxy of your own in front.
Why does a comment say replies exist but none are delivered?
Weibo counts replies under a comment (reply_count) but, for many comments, lists none of them to a visitor: on a 1,579-comment post it hid every reply of 21 of the 28 comments that had replies (75 %), on both of its comment routes. The post row's comments_note says how many comments that happened to.
Why are there fewer likers than likes?
Weibo's liker list for a visitor stops at 200 and can end before the like count (39 of 56 for one post, on every read). The post row then says so in likers_note; list_total on each liker row is Weibo's own like count.
Can an AI agent use it (MCP)?
Yes. Apify's MCP server (https://mcp.apify.com) offers Store Actors as tools to Claude, Cursor and other MCP clients: add this Actor and the agent sends posts, users or keywords and gets the rows back. The synchronous API (run-sync-get-dataset-items) does the same in one HTTP call.
Integration
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('hyperbach/weibo-scraper').call({"posts": ["5346699644242007", "https://weibo.com/1642909335/RjAS0hNxt"]});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('hyperbach/weibo-scraper').call(run_input={'posts': ['5346699644242007', 'https://weibo.com/1642909335/RjAS0hNxt']})items = client.dataset(run['defaultDatasetId']).list_items().items
CLI
$apify call hyperbach/weibo-scraper --input '{"posts": ["5346699644242007", "https://weibo.com/1642909335/RjAS0hNxt"]}'
REST
curl -X POST "https://api.apify.com/v2/acts/hyperbach~weibo-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H 'Content-Type: application/json' -d '{"posts": ["5346699644242007", "https://weibo.com/1642909335/RjAS0hNxt"]}'
Support
This page is generated from the Actor's schemas and a live sample — it cannot describe a field the Actor does not have.