# Weibo Scraper 微博 - Posts, Comments, Profiles & Hot Search (`scrapewise/weibo-scraper`) Actor

Scrape Weibo (微博) posts, comments and profiles by keyword, hashtag, user or post link, plus the live hot search board. Text, likes, comments, reposts, media, region and author followers. Black Cat (黑猫投诉) complaints, ad filter, sentiment, translation, only-new mode. No login. Error rows are free.

- **URL**: https://apify.com/scrapewise/weibo-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Social media, News
- **Stats:** 12 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.50 / 1,000 weibo item delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Weibo Scraper

Weibo Scraper turns public Weibo (微博) content into JSON, CSV or Excel without a login. Paste any Weibo link (post, profile, search page, `#topic#` page or the hot search board) and run, or search keywords. It also reads the live hot search board (热搜), the hot timeline, accounts and topics that match a keyword, and Black Cat (黑猫投诉) consumer complaints by company. Each post comes with full text, likes, comments, reposts, media links, publishing region, hashtags, an `isPromoted` flag for paid placements and the author's public profile. Optional: public comments and replies (up to 1,000 per post), lexicon sentiment, and an only-new mode for scheduled monitoring of keywords, hashtags, accounts and the hot search board.

### What the Weibo scraper fixes

- **One keyword, one tab.** Weibo splits search across tabs and serves logged out visitors one page per tab. This Actor goes wider for each keyword and deduplicates the results: about 120 to 135 distinct posts per keyword instead of about 11 on the first tab.
- **Re-paying for the same posts on a schedule.** With `compareWithPreviousRun`, a scheduled run delivers and charges only posts no earlier run delivered, for keywords, hashtags and now accounts (new posts of each profile).
- **Ads mixed into engagement data.** Every post carries `isPromoted`, read from Weibo's own `广告` label; `adFilter` drops or isolates them before charging.
- **Picking a mode.** Links pasted in `startUrls` are each read in the right mode, mixed in one list.

### Weibo scraper at a glance

- **Price:** US$ 15.00 per 1,000 items (US$ 10.50 on Gold and above). No start fee. Repeated posts skipped by the only-new mode are not charged.
- **Login, cookies, API key:** none
- **Simplest input:** paste Weibo links in `startUrls`, or leave the input empty (searches 小米, 30 posts)
- **Error rows** (deleted post, missing profile, empty search, blocked page): free, with an `errorCode`

### Switching from another Weibo scraper? Your existing input works

Field names used by other Weibo Actors are read as they are:

| Their field | Read here as |
|---|---|
| `operation` (`searchWeibo`, `weiboDetail`, `userDetail`, `user_profile`, `post_details`, `post_comments`, `hot_search`, `hot_timeline`, `hot_search_delta`, `user_posts`, `complaints`) | `mode` |
| `keyword`, `searchAliases` | `searchQuery`, `searchQueries` |
| `weiboId`, `postIds` / `userId` | `postUrls` / `userIds` |
| `startDay`, `endDay`, `searchDateFrom`, `searchDateTo` | `publishedAfter`, `publishedBefore` |
| `maxResults`, `maxPages` (20 items per page), `maxComments` | `maxItems`, `maxCommentsPerPost` |
| `fetchFullText`, `sentimentAnalysis`, `deltaMode`, `deltaStateKey`, `complaintCompanyIds` | `includeLongText`, `sentiment`, `compareWithPreviousRun`, `snapshotName`, `complaintCompanies` |
| `targetLanguage`, `translateToEnglish: true` | `translateTo` |

A `cookieString` is ignored, since nothing here needs a login. Fan and follower lists are not offered; asking for them returns one free row with `errorCode: "NOT_OFFERED"`.

### Weibo scraper input examples

```json
{ "startUrls": ["https://weibo.com/u/2803301701", "https://s.weibo.com/top/summary"] }
```

Scheduled brand monitoring, only new posts, with sentiment:

```json
{
  "searchQueries": ["特斯拉", "Tesla"],
  "maxItems": 200,
  "compareWithPreviousRun": true,
  "snapshotName": "tesla-daily",
  "sentiment": true
}
```

Account monitor, only the new posts of each account (schedule it hourly or daily):

```json
{
  "mode": "user",
  "userIds": ["1892653244", "https://weibo.com/u/2803301701"],
  "compareWithPreviousRun": true,
  "snapshotName": "accounts-hourly"
}
```

The first run delivers each profile row and its latest posts; later runs deliver only posts published since, and nothing when there is nothing new (the run status says so).

Full comment thread of one post, with replies:

```json
{ "mode": "posts", "postUrls": ["https://m.weibo.cn/detail/5346411605394884"],
  "includeComments": true, "maxCommentsPerPost": 300, "includeReplies": true, "maxRepliesPerComment": 5 }
```

Other modes: `{ "mode": "hot" }` for the hot search board, `{ "mode": "profiles", "searchQuery": "小米" }` for matching accounts, `{ "mode": "topics", "searchQuery": "小米" }` for matching topics, `{ "mode": "hot_posts", "hotCategory": ["科技"] }` for a hot timeline channel, `{ "mode": "complaints", "complaintCompanies": ["小米", "京东"] }` for Black Cat.

### Translate Weibo posts to English

Weibo is in Chinese. Set `translateTo` to a language code (`en`, `es`, `pt`, `fr`, `de`, `ru`, `ja`, `ko`, `vi`, `id`, `ar`, `tr`) and each row gets a machine translation next to the original: `textTranslated` (post, long post, comment, reply, profile bio or complaint text), `topicTranslated`, `authorDescriptionTranslated`, `complaintTitleTranslated`, `repostOf.textTranslated` and `translatedTo`. The Chinese fields stay exactly as they were. Off by default.

```json
{ "mode": "posts", "postUrls": ["https://m.weibo.cn/detail/5343350941032693"],
  "includeComments": true, "maxCommentsPerPost": 5, "translateTo": "en" }
```

Two comment rows from that run (other fields left out):

```json
[
  { "type": "comment", "text": "买了18fold的咋办", "textTranslated": "What should I do if I buy 18fold?", "translatedTo": "en" },
  { "type": "comment", "text": "一定要一起发没有背屏的max版，我不要背屏",
    "textTranslated": "We must send the max version without the back screen together, I don’t want the back screen",
    "translatedTo": "en" }
]
```

The post row of the same run has `authorDescription: "科技普惠大众"` and `authorDescriptionTranslated: "Technology benefits the public"`. If the translation service fails for a row, the row is still delivered, only without the translated fields. Translation is free during the launch; later it is charged once per row that comes back with at least one translated field.

### Weibo data: output example

A real post row from a cloud run of 2026-09-16 (input `{ "searchQuery": "小米" }`), trimmed:

```json
{
  "type": "post",
  "id": "5343350941032693",
  "bid": "RibKS4kEl",
  "url": "https://m.weibo.cn/detail/5343350941032693",
  "text": "全新小米18 Pro系列\n全新百变背屏\n明日敬请期待\n#小米18Pro系列# 卢伟冰的微博视频",
  "createdAt": "2026-09-15T02:00:02+00:00",
  "likeCount": 2120,
  "commentCount": 466,
  "repostCount": 108,
  "region": "北京",
  "hashtags": ["小米18Pro系列"],
  "videoDuration": 8,
  "isPromoted": false,
  "authorId": "1892653244",
  "authorName": "卢伟冰",
  "authorVerified": true,
  "authorFollowersCount": 3752000,
  "source": "search:小米",
  "errorCode": null,
  "scrapedAt": "2026-09-16T01:17:41.069454+00:00"
}
```

A hot search topic row from the same day:

```json
{ "type": "topic", "topic": "隐翅虫被女生用手掐着玩", "rank": 2, "heat": 1237211,
  "board": "实时热点，每分钟更新一次", "source": "hot" }
```

### Weibo scraper output fields

One flat row per item; `type` says what it is (`post`, `topic`, `profile`, `comment`, `complaint`) and fields that do not apply are `null`.

| Field | Meaning |
|---|---|
| `id`, `bid`, `url` | Numeric id, short id and `m.weibo.cn` link |
| `text`, `isLongText` | Full plain text (long posts already opened) |
| `createdAt` | Publish time, ISO 8601 UTC |
| `likeCount`, `commentCount`, `repostCount` | Engagement counts |
| `region`, `hashtags`, `pictures`, `videoUrl` | Publishing region, topics, image links, MP4 link |
| `isRepost`, `repostOf` | Whether it quotes another post, and that original |
| `authorName`, `authorVerified`, `authorFollowersCount`, `authorPostCount` | Author's public profile (万 and 亿 converted to integers) |
| `isPromoted`, `promotionLabel` | Paid placement flag and Weibo's label |
| `topic`, `rank`, `heat`, `discussionCount`, `readCount` | On topic rows |
| `postId`, `parentCommentId` | On comment rows (display name only) |
| `sentiment`, `sentimentScore`, `sentimentTerms` | With `sentiment: true` |
| `trend`, `previousRank`, `rankChange`, `heatChange` | With `compareWithPreviousRun` |
| `complaintTitle`, `complaintAppeal`, `complaintStatus`, `complaintAmountCny`, `companyName` | On Black Cat complaint rows |
| `textTranslated`, `topicTranslated`, `authorDescriptionTranslated`, `complaintTitleTranslated`, `translatedTo` | With `translateTo`: machine translation next to the Chinese original |
| `source`, `errorCode`, `scrapedAt` | Where the row came from, error code, collection time |

### Weibo scraper pricing

One charge per row with content: a post, topic, profile, comment, reply or complaint. Error rows are free and duplicates are removed before charging. US$ 15.00 per 1,000 (Bronze 13.50, Silver 12.00, Gold and above 10.50). The default 30 item run costs US$ 0.45. With `compareWithPreviousRun`, posts an earlier run already delivered are skipped and not charged. There is no compute bill on top. Translation (`translateTo`) is free during the launch; later it is charged once per translated row.

### Weibo scraper limitations

- **Weibo serves one page per list to a logged out visitor.** Search, profile, topic and comment lists answer page 2 with a login redirect. The Actor compensates by width, so expect about 120 to 135 posts per keyword, 25 to 40 per topic, 10 to 12 per profile and 60 to 85 hot topics. Comments above 20 per post are paged through in full. For more volume, use more keywords or schedule runs and accumulate.
- **Date filters filter, they do not dig.** `publishedAfter` and `publishedBefore` drop posts outside the window; Weibo does not serve older posts to a logged out visitor.
- **Sentiment is a word list, not a language model.** It handles negation, intensifiers, emoticons and common slang but misses sarcasm. On 20 posts it agreed with a human reading on 15.
- **Some content is hidden** from logged out visitors (follower-only, age gated), and the Actor does not use an account to reach it.
- **Black Cat is read by company**, since its keyword search and detail pages need a login. Complainant nicknames are left out.
- **Media links expire** because Weibo signs them; download files within a few hours.
- **No follower or fan lists**, and commenters are display name only.

### Weibo scraper error codes (never charged)

| errorCode | Meaning |
|---|---|
| `POST_NOT_FOUND` | Post deleted, hidden or never existed |
| `PROFILE_NOT_FOUND` | No profile matches that uid, link or name |
| `INVALID_POST_ID`, `INVALID_DATE`, `INVALID_INPUT`, `INVALID_CATEGORY` | A value in the input could not be read; the message says which |
| `NO_RESULTS` | Nothing public matches the keyword, hashtag or profile |
| `COMPANY_NOT_FOUND` | No Black Cat company matches that name |
| `BLOCKED` | Weibo served the login page on every retry for that request |
| `NO_DATA`, `ITEM_UNREADABLE`, `UNEXPECTED` | One tab, item or request could not be read; the rest of the run still delivers |

### Use it from code and AI agents

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("scrapewise/weibo-scraper").call(run_input={"mode": "search", "searchQuery": "Tesla", "maxItems": 30})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(post["createdAt"], post["likeCount"], post["url"], post["text"])
```

The same works from the HTTP API (`run-sync-get-dataset-items`), n8n, Make, Zapier and Google Sheets. For AI agents: `https://mcp.apify.com/?actors=scrapewise/weibo-scraper`.

Video guides from Apify: [how to schedule an Actor](https://www.youtube.com/watch?v=1jI7WcVQmwM) and [how to connect it to other apps](https://www.youtube.com/watch?v=bNACk1_S_6w).

Requests an agent can pass straight through:

- "What is on Weibo's hot search board right now?" -> `{"mode": "hot", "maxItems": 50}`
- "How do Chinese users feel about BYD? Include sentiment" -> `{"mode": "search", "searchQueries": ["比亚迪", "BYD"], "sentiment": true, "maxItems": 100}`
- "Show me the latest consumer complaints against Xiaomi on Black Cat" -> `{"mode": "complaints", "complaintCompanies": ["小米"], "maxItems": 30}`

### Weibo scraper FAQ

**Do I need a Weibo account or cookies?** No. The Actor reads Weibo as a logged out visitor.

**Why not the official Weibo API?** Weibo's Open Platform API needs a registered developer app, approval and OAuth, and mainly covers the authorized account's own content. This Actor needs no app or account and reads public search, profiles, topics, comments and the hot search board.

**How do I get only new posts every day?** Set `compareWithPreviousRun: true` and a `snapshotName`, then schedule the run. It works for keywords, hashtags and accounts (`mode: user`). Seen ids are kept in a key-value store in your own Apify account; delete it to start over.

**Can I search in English?** Yes. `Tesla` or `Xiaomi` return the posts Weibo indexes for them, mostly Chinese text with the Latin term inside. Search both names for full coverage.

**Can I use it from an AI agent or n8n?** Yes, see "Use it from code and AI agents" above. The output is flat with a `type` column.

**Is it legal?** It collects only what Weibo shows any logged out visitor, never private messages or restricted content. How you use the data is your responsibility under Weibo's terms and the privacy laws that apply to you.

**What if Weibo changes its site?** The affected request comes back as a free row with an `errorCode` and a message naming what changed, instead of a silent empty dataset. Open an issue on the Actor page.

### Related scrapers

- [WeChat Articles Scraper](https://apify.com/scrapewise/wechat-articles): WeChat official account articles, search and full text.
- [Douyin Hot Search](https://apify.com/scrapewise/china-trending-scraper): China trends from Douyin, Baidu, Zhihu and Toutiao.
- [Xiaohongshu (RedNote) Scraper](https://apify.com/scrapewise/xiaohongshu-scraper): RedNote notes, profiles and feeds.
- [Douban Scraper](https://apify.com/scrapewise/douban-scraper): Douban reviews and ratings of movies and books.
- [Bilibili Scraper](https://apify.com/scrapewise/bilibili-scraper): Bilibili videos, comments, channels and stats.

### Changelog

- **23 Oct 2026:** output fields updated.
- **2026-10-21:** faster scheduled runs when nothing is new: a `compareWithPreviousRun` search with few new posts now finishes in about half the time, with the same results.
- **2026-10-20:** optional translation of titles and texts (`translateTo`).
- **2026-10-19:** examples for AI agents (Apify MCP server).
- **2026-10-18:** `compareWithPreviousRun` in `user` mode: an account monitor that delivers only each profile's new posts.
- **2026-10-08:** `startUrls` (paste any Weibo link), `profile_only` mode, `adFilter`, and input field names from other Weibo Actors accepted.
- **2026-10-05:** up to 1,000 comments per post and replies under each comment (`includeReplies`).
- **2026-10-01:** `sentiment`, `isPromoted`, and `compareWithPreviousRun` in `search` and `hashtag` mode.

# Actor input Schema

## `startUrls` (type: `array`):

Weibo links or plain keywords, one per line. Accepted: post links (m.weibo.cn/detail/5343350941032693, weibo.com/<uid>/<bid>), profile links (weibo.com/u/1749127163), search pages (s.weibo.com/weibo?q=...), #topic# pages, the hot search board (s.weibo.com/top/summary) and Black Cat company pages (tousu.sina.com.cn/company/view/?couid=...). Links can be mixed: each one is read in its own mode, so you do not need to set 'Mode'. A plain word is searched as a keyword. When this field has entries, the keyword, hashtag, profile and post fields below are ignored. Empty by default.

## `mode` (type: `string`):

What to scrape when 'Weibo links' is empty. Default 'search'. search: posts for each keyword, deduplicated (about 120 to 135 per keyword). user: a profile row plus the public posts of each profile. profile_only: just the profile row. posts: one post per URL or id. hashtag: the public timeline of each topic. hot: the live hot search board (热搜), 60 to 85 topics. profiles: accounts that match a keyword. topics: #topics# that match a keyword, with discussions and reads. hot_posts: the hot timeline. complaints: Black Cat (黑猫投诉) complaints per company. If you leave 'search' but fill another field (hashtags, profiles, post URLs), the Actor follows the field you filled.

## `searchQuery` (type: `string`):

One keyword for 'search', 'profiles' and 'topics' modes, in Chinese (小米) or Latin script (Tesla). In 'search' it returns up to 'Max items' posts, deduplicated. Empty by default; with an empty input the Actor uses 小米.

## `searchQueries` (type: `array`):

More keywords, one per line, for the same modes as 'Search keyword' (for example 特斯拉 and Tesla to cover a brand in both scripts). Each keyword returns up to 'Max items' items. Posts found by two keywords are delivered and charged once.

## `hashtags` (type: `array`):

For 'hashtag' mode: topic names with or without the # marks, one per line (小米18 or #小米18#). Each topic returns up to 'Max items' posts from its public timeline, usually 25 to 40 because Weibo serves logged out visitors one page per list.

## `userIds` (type: `array`):

For 'user' and 'profile_only' modes: numeric uid (1749127163), profile link (weibo.com/u/1749127163 or m.weibo.cn/u/1749127163) or display name (小米公司), one per line. A display name is resolved through Weibo's public account search. Each profile gives one profile row (when 'Profile row in user mode' is on) plus about 10 to 12 recent posts.

## `postUrls` (type: `array`):

For 'posts' mode: post links (m.weibo.cn/detail/<id>, weibo.com/<uid>/<bid>), numeric ids (5343350941032693) or short bids (RibKS4kEl), one per line. Each line returns one post row with full text and stats; a deleted or hidden post returns a free row with errorCode POST_NOT_FOUND.

## `publishedAfter` (type: `string`):

Keep only posts published on or after this day, format YYYY-MM-DD (2026-10-01). DD/MM/YYYY and MM/DD/YYYY are read when the day is above 12. It filters what Weibo returns and cannot make Weibo serve older posts. A date that cannot be read returns one free row with errorCode INVALID_DATE. Empty means no lower limit.

## `publishedBefore` (type: `string`):

Keep only posts published on or before this day (inclusive), format YYYY-MM-DD. Same formats and same caveat as 'Published after': it filters, it does not dig into history. Empty means no upper limit.

## `includeComments` (type: `boolean`):

Off by default. When on, adds the public comments of each post as rows with type 'comment': text, date, likes, reply count, region and the commenter's display name (never their id, link or picture). Each comment is one charged item, so 20 comments on 30 posts add 600 items.

## `maxCommentsPerPost` (type: `integer`):

Comments taken per post when 'Public comments' is on. Default 20, maximum 1,000. Above 20 it pages through the post's full list, hottest first and then newest, without duplicates, at about 2 to 4 seconds per 20 comments. Every comment is one item: 200 comments on 10 posts are 2,000 items.

## `includeReplies` (type: `boolean`):

Off by default; needs 'Public comments' on. Adds the public replies (楼中楼) under each comment, right below it, as comment rows with parentCommentId set to the comment they answer. Same privacy rule as comments (display name only). Each reply is one charged item.

## `maxRepliesPerComment` (type: `integer`):

Replies taken under each comment when 'Replies to comments' is on. Default 20, maximum 200. Worst case per post is 'Max comments per post' x (1 + this number) items, so keep it low (3 to 5) on busy posts.

## `includeProfile` (type: `boolean`):

On by default. In 'user' mode, adds one row with type 'profile' per account: followers, following, post count, bio, verification badge and avatar. The row is one charged item; turn it off if you only want the posts.

## `includeLongText` (type: `boolean`):

On by default. Weibo cuts long posts in lists; when on, each truncated post is opened once so 'text' holds the full text. No extra charge, slightly longer runs. Turn it off only if you need speed and the first 140 characters are enough.

## `adFilter` (type: `string`):

Default 'all': every post is kept and carries isPromoted (true when Weibo serves it as a paid placement with its 广告 label). 'organic_only' drops promoted posts, useful for engagement studies. 'promo_only' keeps only them, to see which brands buy reach. Dropped posts are not charged.

## `sentiment` (type: `boolean`):

Off by default. Adds sentiment (positive, neutral or negative), sentimentScore (-1 to 1) and sentimentTerms (the words that counted) to every post and comment row. Computed inside the Actor from a Simplified Chinese word list with negation and intensifiers: no AI model, no extra charge. It misses irony; in a check of 20 posts it agreed with a human reading on 15. Use it to triage, not to judge one post.

## `hotCategory` (type: `array`):

Only for 'hot_posts'. One or more hot timeline channels, one per line: 社会 (society), 科技 (tech), 明星 (celebrity), 电影 (movies), 音乐 (music), 情感 (relationships), 时尚 (fashion), 美妆 (beauty), 榜单 (ranking), 同城 (local). Chinese names and the English words both work. Each channel returns about 15 to 20 posts and 'Max items' applies per channel. An unknown name returns a free INVALID_CATEGORY row listing the valid ones. Empty means the general hot timeline.

## `complaintCompanies` (type: `array`):

Only for 'complaints'. Company or brand names as Black Cat shows them (小米, 京东, 美团), a numeric company id (couid) or a company link such as https://tousu.sina.com.cn/company/view/?couid=1003627, one per line. 'Max items' applies per company. A name with no match returns a free COMPANY_NOT_FOUND row. Empty means the newest complaints on the Black Cat home feed, all companies.

## `complaintStatus` (type: `string`):

Only for 'complaints' with companies listed. Default 'latest' (newest complaints). 'replied' reads complaints the company answered but did not resolve; 'completed' reads resolved ones. Ignored for the home feed.

## `compareWithPreviousRun` (type: `boolean`):

Off by default. In 'search', 'hashtag' and 'user' mode: delivers and charges only posts that no previous run with the same 'Snapshot name' delivered (tagged trend 'new'); ids are kept in a key-value store in your own account, up to 20,000 per keyword or profile. The first run delivers everything. In 'user' mode the profile row comes only on the first run, so a schedule gets just each account's new posts. In 'hot' mode: tags each topic new, up, down or same with previousRank, rankChange and heatChange, and adds one 'dropped' row per topic that left the board (charged like a topic). Use it with a schedule.

## `snapshotName` (type: `string`):

Only with 'Only what changed since the previous run'. A name that keeps separate histories for separate schedules, for example tesla-daily or hot-hourly. Letters, numbers and hyphens. Empty uses the default history.

## `maxItems` (type: `integer`):

Default 30, maximum 5,000. Maximum items per keyword, hashtag, profile, hot timeline channel or Black Cat company; for 'posts' and 'hot' it is the run total. Comments and replies count toward it. One keyword returns at most about 120 to 135 distinct posts, because Weibo serves logged out visitors one page per tab; add keywords for more volume. You pay per item delivered.

## `translateTo` (type: `string`):

Adds an English (or other language) version of the Chinese text next to the original, for readers who do not read Chinese. Translated: post text (including long text), each comment and reply, the profile bio, the topic name on the hot search and topic modes, and the complaint title. New fields end in 'Translated' (textTranslated, topicTranslated, authorDescriptionTranslated...) plus translatedTo with the language code; the original Chinese fields are never changed. Machine translation, so slang and names can come out literal. Free during the launch; later charged once per row that comes back with at least one translated field. Off (default): output and price exactly as without this option. 'targetLanguage' and 'translateToEnglish': true also work.

## `proxyConfiguration` (type: `object`):

Default: Apify Proxy, which works for Weibo. Change it only if you see BLOCKED rows.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "小米",
  "hashtags": [
    "小米18"
  ],
  "userIds": [
    "1749127163"
  ],
  "postUrls": [
    "https://m.weibo.cn/detail/5343350941032693"
  ],
  "includeComments": false,
  "maxCommentsPerPost": 20,
  "includeReplies": false,
  "maxRepliesPerComment": 20,
  "includeProfile": true,
  "includeLongText": true,
  "adFilter": "all",
  "sentiment": false,
  "complaintStatus": "latest",
  "compareWithPreviousRun": false,
  "maxItems": 30,
  "translateTo": "",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "searchQuery": "小米",
    "hashtags": [
        "小米18"
    ],
    "userIds": [
        "1749127163"
    ],
    "postUrls": [
        "https://m.weibo.cn/detail/5343350941032693"
    ],
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/weibo-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "searchQuery": "小米",
    "hashtags": ["小米18"],
    "userIds": ["1749127163"],
    "postUrls": ["https://m.weibo.cn/detail/5343350941032693"],
    "maxItems": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/weibo-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "searchQuery": "小米",
  "hashtags": [
    "小米18"
  ],
  "userIds": [
    "1749127163"
  ],
  "postUrls": [
    "https://m.weibo.cn/detail/5343350941032693"
  ],
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/weibo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/weibo-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Db9SrctccrnKJwa4R/builds/bHUResfIfdNqpeBBD/openapi.json
