Weibo Scraper: Weibo Search, Hot Search, Comments, Profiles avatar

Weibo Scraper: Weibo Search, Hot Search, Comments, Profiles

Pricing

from $2.50 / 1,000 posts

Go to Apify Store
Weibo Scraper: Weibo Search, Hot Search, Comments, Profiles

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

Hyperbach

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

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 flagged text_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. onlyNew delivers 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 in likers_note; a list Weibo shows only page 1 of says so in list_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:

fieldmeaning
row_typepost, user, comment or hot_item: which columns of the row are filled.
inputThe 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_indexThe 1-based position of the input in its list (posts, users or keywords).
inputs_mergedOther forms of the same post or user you gave (a mid and a link of one post), merged into this row.
source_kindWhere 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.
statusok = a delivered record; not_found, invalid, empty, failed, duplicate = a free row that says why there is no record for this input.
status_detailWhy a row is not ok, in words (Weibo's own message where it gave one).
scraped_atWhen this row was read (UTC).
queryThe keyword, topic or hot-board word this row was found for.
search_tabsThe search tabs the post appeared in (all, realtime, hot, videos, pictures, topic).
list_noteWhat the list this row came from shows a visitor (page 1 only; the newest 10 posts).
midThe post's 16-digit id, as a string.
bidThe post's 9-character id used in links (weibo.com/<uid>/<bid>).
post_urlThe post's link on weibo.com.
created_atWhen the post was published, Beijing time with its zone (2026-09-24T15:46:35+08:00).
created_at_utcThe same moment in UTC.
textThe post's text, plain: the full long text (a cut text is flagged in text_truncated), emoticons as [name], line breaks kept.
text_htmlThe text as Weibo serves it (HTML with the hashtag, mention and emoticon markup).
is_long_textWeibo marks the post as a long post (its list rows show about 140 characters).
text_truncatedtrue when the row carries a cut text: the long post was not read in full (fetchFullText off, or Weibo did not serve it).
text_lengthCharacters in text.
reposts_countReposts of the post.
comments_countComments on the post, as Weibo counts them (roots and replies).
likes_countLikes (attitudes) on the post.
picturesThe post's pictures, largest size URLs.
picture_countHow many pictures the post has.
video_urlThe post's video (720p where served, else HD); a signed URL that expires in about an hour.
video_hd_urlThe HD stream of the video (signed, expires in about an hour).
video_duration_sThe video's length in seconds.
video_titleThe video's title or caption.
video_play_countPlays of the video as Weibo shows them (1万次播放).
regionThe IP region Weibo shows for the post (发布于 …), without the prefix.
source_clientThe client the post was sent from (微博网页版, iPhone客户端 …).
hashtagsThe #topics# in the text, without the marks.
mentionsThe @users named in the text.
linksThe links in the text.
is_repostThe post reposts another post.
repost_ofThe original post of a repost, in the same shape (mid, text, counts, pictures, video, the author's id and name).
edit_countHow many times the post was edited, where Weibo shows it.
is_adWeibo marks the post as promoted.
matches_queryOn a search row: the keyword appears in the text, the hashtags or the reposted original (Weibo's 综合 tab also ranks related posts).
author_uidThe author's user id.
author_nameThe author's screen name.
author_urlThe author's profile link.
author_avatar_urlThe author's avatar.
author_verifiedThe author is verified.
author_verified_typeWeibo's verification type code (0 personal, 1–7 organisation, 220 none).
author_verified_reasonThe verification text shown on the author's profile.
author_followersThe 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_shownThe author's follower count as written (1.68亿).
author_followers_precisionexact or rounded: whether author_followers is the exact integer. The exact integer is on the author's user row (includeAuthorProfiles).
author_followingHow many accounts the author follows.
author_posts_countThe author's post count.
author_genderm, f or n as Weibo gives it.
author_descriptionThe author's bio.
comments_requestedmaxCommentsPerPost as given.
comments_deliveredComment rows delivered for this post.
comments_noteWhy fewer comments than asked were delivered, when so, and how many comments Weibo counts replies under but lists none of to a visitor.
likers_deliveredLiker rows delivered for this post.
likers_noteWhy fewer likers than asked were delivered, when so: Weibo's liker list for a visitor ended short of the post's like count.
analysis_sentimentWith tagPosts: the text's sentiment from −1 (negative) to 1 (very positive), by a classification model.
analysis_kindWith tagPosts: news, opinion, promotion, entertainment, personal, complaint, question or other.
analysis_confidenceWith tagPosts: the model's confidence in each tag, 0–1.
translationWith translateTo: the machine translation of the text (or of the hot-board word).
translation_noteWhich model made the translation, or why there is none.
rawWith includeRaw: Weibo's own JSON object for the row.
run_tagYour runTag, copied onto every row.
list_ofOn a listed user: the user id (followers, following) or post id (likers) the list belongs to.
list_kindfollower, following, liker, search or author: what kind of list the user row comes from.
list_totalWeibo'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).
uidThe user's id, as a string.
screen_nameThe user's screen name.
profile_urlThe user's profile link.
avatar_urlThe user's avatar.
cover_urlThe profile's cover image.
verifiedThe user is verified.
verified_typeWeibo's verification type code (0 personal, 1–7 organisation, 220 none).
verified_kindpersonal, organisation or none.
verified_badgeThe V a visitor sees: blue (an organisation), orange (the gold personal V), yellow (a personal V) or none.
verified_reasonThe verification text.
genderm, f or n.
locationThe location on the profile (profile rows; Weibo's lists of followers, following and likers do not carry it).
descriptionThe bio; on a topic row, the topic's description.
followersFollowers: the exact integer on a profile row (followers_precision exact); a number read from the rounded text on a listed user.
followers_shownThe follower count as Weibo writes it (1.68亿).
followers_precisionexact (from the profile page) or rounded (from a list page).
followingHow many accounts the user follows.
posts_countThe user's post count.
total_repostsLifetime reposts received, on a profile row.
total_commentsLifetime comments received, on a profile row.
total_likesLifetime likes received, on a profile row.
member_rankWeibo membership rank (mbrank).
svipSVIP level.
birthdayWith includeUserDetails: the birthday as shown (1948-06-15 双子座).
registered_atWith includeUserDetails: when the account was created.
ip_locationWith 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_levelWith includeUserDetails: the sunshine credit level.
companyWith includeUserDetails: the company on the profile.
schoolWith includeUserDetails: the school on the profile.
labelsWith includeUserDetails: the profile's labels (活跃 tags, awards).
details_noteWhy the details could not be read, when so.
posts_requestedmaxPostsPerUser as given.
posts_deliveredTimeline post rows delivered for this user.
posts_noteWhat the timeline shows a visitor, and why fewer rows when so.
followers_deliveredFollower rows delivered for this user.
following_deliveredFollowing rows delivered for this user.
videos_deliveredVideo post rows delivered for this user.
post_midOn a comment: the post it belongs to.
comment_idThe comment's id.
parent_comment_idOn a reply: the root comment it belongs to.
is_replyThe row is a reply to a comment.
reply_to_comment_idOn a reply: the comment it answers (a root or another reply).
like_countLikes on the comment.
reply_countReplies under the comment, as Weibo counts them (root comments only).
floorThe comment's floor number.
user_uidThe commenter's user id.
user_nameThe commenter's screen name.
user_urlThe commenter's profile link.
user_verifiedThe commenter is verified.
user_verified_typeThe commenter's verification type code.
user_verified_reasonThe commenter's verification text.
user_followersThe commenter's followers (exact, from the comment page).
user_followingHow many accounts the commenter follows (from the comment page).
user_posts_countThe commenter's post count (from the comment page).
user_total_likesThe likes the commenter's posts have received over the account's life (from the comment page).
user_locationThe commenter's profile location.
user_genderThe commenter's gender code.
user_descriptionThe commenter's bio.
boardrealtime, entertainment, topics, social, or search_topics for a topic found by the search's 话题 tab.
rankThe position on the board (0 = the pinned topic; empty on a promoted entry or a dropped word).
wordThe hot word or topic.
heatWeibo's heat number for the entry (the read count on the topics board).
labelThe board's label: 新 (new), 热 (hot), 沸 (boiling), 爆; a grade on the entertainment board.
categoryThe category Weibo files the entry under (体育, 艺人 …).
onboard_timeWhen the entry came onto the board (UTC), where Weibo gives it.
is_pinnedThe pinned (government) topic at the top of the board.
is_hotWeibo's hot flag on the entry.
star_nameThe celebrity Weibo links the entry to, where given.
subject_labelWeibo's subject label on the entry.
topic_urlThe search page of the word on s.weibo.com.
read_countReads of the topic (topics board, topic search).
mention_countDiscussions / mentions of the topic.
claimWho hosts the topic (topics board).
summaryWeibo's summary of the topic (topics board).
change_typeWith 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_rankThe entry's rank on the last delivered board.
rank_changePlaces risen (positive) or fallen since the last delivered board.
previous_heatThe heat on the last delivered board.
heat_changeThe heat's change since the last delivered board.
first_seen_atWhen 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,000FreeStarterScaleBusiness
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 in users. Each comes back as one row in your order (input_index), or as a free not_found / invalid row. Add maxCommentsPerPost, maxLikersPerPost, maxPostsPerUser (the newest 10 is all a visitor sees), maxFollowersPerUser, maxFollowingPerUser, maxVideosPerUser and includeUserDetails for the rows behind each entity; includeAuthorProfiles adds 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 — maxCommentsPerPost reads the comments of every post row, newest first (commentsOrder time) 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 with includeReplies off; includeReplies reads the rest, one request per comment, counted in maxCommentsPerPost. maxLikersPerPost adds 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 in likers_note, as comments_note does 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; users gives about 20 user rows with the verified_badge, topics up 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's list_note says so, and matches_query says 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 — hotBoards reads the 热搜 realtime board (50 words, the pinned topic at rank 0, promoted entries flagged is_ad), the 文娱 board (50), the 话题 board (10 topics with read and mention counts) and the 社会 board (50); postsPerHotTopic adds 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); hotTimelinePosts reads Weibo's hot timeline. With stateStoreName set, 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 — tagPosts adds analysis_sentiment (−1 to 1) and analysis_kind to every post and comment row from a classification model; translateTo adds 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 onlyNew and 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. stateStoreName names the memory; with hotBoards it also gives every board row its change since the last run. Ready-made: Monitor Weibo for brand keywords: new posts only.

Input configuration

fieldtypedefaultwhat it does
postsarray[]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.
usersarray[]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亿").
keywordsarray[]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.
searchTabsarray[]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.
maxPostsPerKeywordinteger0The most post rows per keyword over its tabs (0 = every post of the pages read: about 90 over the five post tabs).
hotBoardsarray[]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.
postsPerHotTopicinteger0For 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.
hotTimelinePostsinteger0How 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).
fetchFullTextbooleantrueA 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.
includeAuthorProfilesbooleanfalseAfter 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.
maxCommentsPerPostinteger0Comment 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.
commentsOrdertime / 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.
includeRepliesbooleanfalseRead 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.
maxLikersPerPostinteger0Who liked the post, as user rows (list_kind liker), up to 200 a post (Weibo shows a visitor no more); 0 = none.
maxPostsPerUserinteger0The newest posts of each user in users, as post rows; 0 = the profile only. Weibo shows a visitor the newest 10 and no more.
maxFollowersPerUserinteger0The 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.
maxFollowingPerUserinteger0The accounts the user follows, as user rows, 10 a request, to the full count; 0 = none.
maxVideosPerUserinteger0The user's video posts as post rows (video URL, duration, title); 0 = none.
includeUserDetailsbooleanfalseOne 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.
tagPostsbooleanfalseTyped 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.
translateTostring""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.
includeRawbooleanfalseKeep Weibo's own JSON object on each row (raw), for fields this Actor does not name.
onlyNewbooleanfalseDeliver 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.
stateStoreNamestring""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.
maxItemsinteger0The most charged rows this run delivers, all types together. 0 = no limit. Free rows (not found, invalid, empty) do not count.
proxyUrlstringhttp://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.
runTagstring""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 ERROR holds 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 ApifyClient
client = 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

apify@hyperbach.com

This page is generated from the Actor's schemas and a live sample — it cannot describe a field the Actor does not have.