# Weibo Scraper 微博 — Search, Hot Search, Posts, Comments & Users (`china-data/weibo-scraper`) Actor

Scrape Weibo (微博) without login: keyword search in 6 tabs, the 热搜 hot search list, trending posts, posts by URL with full text, comments and replies with IP location, user profiles and latest posts. From $0.50 per 1,000 rows.

- **URL**: https://apify.com/china-data/weibo-scraper.md
- **Developed by:** [China Data](https://apify.com/china-data) (community)
- **Categories:** Social media, Marketing, News
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 posts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 微博 — Search, Hot Search, Posts, Comments & Users

Scrape public data from [Weibo](https://weibo.com) (微博), China's biggest public social network, **without logging in and without cookies**.

- 🔎 **Keyword search** in all six search tabs — All (综合), Real-time (实时), Hot (热门), Video (视频), Pictures (图片) and the #topic# page — with each post saved once.
- 🔥 **Hot search list (热搜榜)**: the ~50 current hot topics with rank, heat, label (新 / 热 / 沸 / 爆), category and the time each topic entered the list, plus the pinned topic. Paid entries are left out.
- 📈 **Trending posts (热门微博)** from Weibo's trending feed — up to 1,000 per run (a test run saved 1,000 different posts from the past 7 days in about 8 minutes).
- 📝 **Posts** with the **full text of long posts**, images, video link, cover, duration and play count, likes, comments and reposts, IP location (IP 属地), #topics#, @mentions, the reposted post and the author with follower count and verification.
- 💬 **Comments and replies**, hottest or newest first: text, likes, reply count, floor, date, IP location and commenter. Replies are linked to their comment.
- 👤 **User profiles**: followers, following, posts, total likes / comments / reposts, verification, registration date, company, 阳光信用 credit level and Weibo's activity labels — plus the user's latest posts.

Typical uses: brand and product monitoring in China, social listening and sentiment analysis, tracking hot topics, influencer research, competitor and campaign analysis, Chinese NLP datasets.

### How to use

1. Add one or more of: search keywords, post URLs, users, the hot search list or trending posts.
2. Optionally turn on **Comments** (and **Replies**).
3. Click **Start**, then download the results as JSON, CSV, Excel or via the API.

#### Input examples

Monitor a brand in all search tabs, with the 20 hottest comments of each post:

```json
{
    "searchQueries": ["小米汽车", "#双11#"],
    "maxPostsPerQuery": 100,
    "includeComments": true,
    "maxCommentsPerPost": 20
}
```

Today's hot search list and 100 trending posts:

```json
{
    "includeHotSearch": true,
    "hotFeedPosts": 100
}
```

Profiles with their latest posts, and every comment and reply of one post (`m.weibo.cn` links, share links and post IDs also work; users can be IDs, profile links or exact nicknames):

```json
{
    "users": ["人民日报", "https://weibo.com/u/1749127163"],
    "postUrls": ["https://weibo.com/1618051664/RpksBkLiS"],
    "includeComments": true,
    "commentsSort": "latest",
    "maxCommentsPerPost": 300,
    "includeReplies": true
}
```

### Output

Every row has a `type`: `post`, `comment`, `user` or `hot_search`. Comments carry the `postId` and `postUrl` of their post, so CSV and Excel exports stay flat. The **Posts**, **Comments**, **Users** and **Hot search** tabs of the dataset show each kind as a table.

Post row (from a real run):

```json
{
    "type": "post",
    "id": "5360515280800508",
    "mblogid": "Rpohi3mfq",
    "url": "https://weibo.com/1749127163/Rpohi3mfq",
    "text": "#小米澎程# 11月权益：\n\n5年低息金融方案，月供2932元起，首付4.99万起！还有「限时轻松还」方案可选，轻松享受自在生活。\n\n详情咨询小米汽车门店或小米汽车APP。",
    "isTextTruncated": false,
    "createdAt": "2026-11-01T18:44:59+08:00",
    "postedVia": null,
    "ipLocation": "北京",
    "repostsCount": 28,
    "commentsCount": 124,
    "likesCount": 852,
    "images": ["https://wx1.sinaimg.cn/mw2000/001Un9Srly1iimrowcmqvj60u0190qf402.jpg"],
    "videoUrl": null,
    "videoCoverUrl": null,
    "videoDurationSec": null,
    "videoPlayCount": null,
    "topics": ["小米澎程"],
    "mentions": null,
    "isRepost": false,
    "repostOf": null,
    "isPinned": false,
    "userId": "1749127163",
    "userName": "雷军",
    "userVerified": true,
    "userVerifiedType": 0,
    "userVerifiedReason": "小米创办人，董事长兼CEO；金山软件董事长；天使投资人。",
    "userFollowersCount": 27335000,
    "userUrl": "https://weibo.com/u/1749127163",
    "source": "search:小米汽车",
    "searchTab": "all",
    "rank": 5,
    "scrapedAt": "2026-11-01T22:30:52Z"
}
```

`source` tells you where a post came from (`search:<keyword>`, `user:<user ID>`, `hot_feed` or `url`), `searchTab` the search tab and `rank` its position there. Video posts fill `videoUrl`, `videoCoverUrl`, `videoDurationSec` and `videoPlayCount`; reposts fill `repostOf` with the original post.

Comment row and a reply to it:

```json
{
    "type": "comment",
    "postId": "5360368534948398",
    "postMblogid": "RpksBkLiS",
    "postUrl": "https://weibo.com/1618051664/RpksBkLiS",
    "commentId": "5360395321868697",
    "text": "是的，你实力更强，尊你为9强好吧[打call]",
    "createdAt": "2026-11-01T10:48:19+08:00",
    "likesCount": 0,
    "repliesCount": 1,
    "floor": 36,
    "ipLocation": "广东",
    "isReply": false,
    "rootCommentId": null,
    "replyToUserName": null,
    "userId": "2289608423",
    "userName": "JimmyBaoBao",
    "userVerified": false,
    "userVerifiedType": 220,
    "userVerifiedReason": null,
    "userFollowersCount": 221,
    "userUrl": "https://weibo.com/u/2289608423",
    "rank": 52,
    "scrapedAt": "2026-11-01T22:21:14Z"
}
```

```json
{
    "type": "comment",
    "postId": "5360368534948398",
    "postMblogid": "RpksBkLiS",
    "postUrl": "https://weibo.com/1618051664/RpksBkLiS",
    "commentId": "5360398838268612",
    "text": "最后一个被淘汰了 封个九强 合理[笑cry]",
    "createdAt": "2026-11-01T11:02:17+08:00",
    "likesCount": 0,
    "repliesCount": null,
    "floor": null,
    "ipLocation": "广东",
    "isReply": true,
    "rootCommentId": "5360395321868697",
    "replyToUserName": "JimmyBaoBao",
    "userId": "3266261304",
    "userName": "深圳市民李先生",
    "userVerified": false,
    "userVerifiedType": -1,
    "userVerifiedReason": null,
    "userFollowersCount": 302,
    "userUrl": "https://weibo.com/u/3266261304",
    "rank": 1,
    "scrapedAt": "2026-11-01T22:21:14Z"
}
```

User row (avatar link shortened):

```json
{
    "type": "user",
    "userId": "2803301701",
    "userName": "人民日报",
    "url": "https://weibo.com/u/2803301701",
    "description": "人民日报法人微博。参与、沟通、记录时代。",
    "gender": "male",
    "location": "北京",
    "followersCount": 158130962,
    "followingCount": 3096,
    "postsCount": 154851,
    "totalInteractions": 4005167141,
    "totalLikes": 2532633565,
    "totalComments": 277208233,
    "totalReposts": 1195325343,
    "verified": true,
    "verifiedType": 3,
    "verifiedReason": "《人民日报》法人微博",
    "avatarUrl": "https://tvax4.sinaimg.cn/crop.0.0.1018.1018.1024/0033ImPzly8h8vgemh8kxj60sa0sadgw02.jpg?…",
    "registeredAt": "2012-07-22T02:28:35+08:00",
    "birthday": "1948-06-15 双子座",
    "company": "人民日报社",
    "creditLevel": "阳光信用极好",
    "labels": ["昨日发博32，阅读数100万+，互动数27万", "视频累计播放量543.95亿"],
    "source": "user",
    "scrapedAt": "2026-11-01T22:21:07Z"
}
```

Hot search rows — the pinned topic (no rank) and number 1:

```json
{
    "type": "hot_search",
    "rank": null,
    "word": "五中全会决定全文",
    "url": "https://s.weibo.com/weibo?q=%23%E4%BA%94%E4%B8%AD%E5%85%A8%E4%BC%9A%E5%86%B3%E5%AE%9A%E5%85%A8%E6%96%87%23",
    "heat": null,
    "label": "热",
    "category": null,
    "onBoardAt": null,
    "isPinned": true,
    "postUrl": "https://weibo.com/1699432410/Rpn1itu2v",
    "scrapedAt": "2026-11-01T22:21:05Z"
}
```

```json
{
    "type": "hot_search",
    "rank": 1,
    "word": "孙颖莎蒙彼利埃站冠军",
    "url": "https://s.weibo.com/weibo?q=%23%E5%AD%99%E9%A2%96%E8%8E%8E%E8%92%99%E5%BD%BC%E5%88%A9%E5%9F%83%E7%AB%99%E5%86%A0%E5%86%9B%23",
    "heat": 431270,
    "label": null,
    "category": "体育",
    "onBoardAt": "2026-11-02T02:01:15+08:00",
    "isPinned": false,
    "postUrl": null,
    "scrapedAt": "2026-11-01T22:21:05Z"
}
```

### Pricing

Pay only for what you get — no monthly rental:

| What | Price |
|---|---|
| Post | **$2.00 per 1,000** ($0.002 each) |
| Comment or reply | **$0.50 per 1,000** ($0.0005 each) |
| User profile | **$2.00 per 1,000** ($0.002 each) |
| Hot search entry | **$0.50 per 1,000** ($0.0005 each) |

Fetching the full text of long posts is free. Set a maximum cost per run in the run options; the actor stops cleanly when it is reached and keeps everything scraped so far.

### Tips and limits

- **Speed**: test runs on Apify saved 244 posts, 3 users and the hot search list in 156 seconds; 6 posts with 416 comments and replies in 70 seconds; and 1,000 trending posts in about 8 minutes. 256 MB of memory is enough.
- **Search**: Weibo shows visitors who are not logged in only the first page of each search tab — about 15 posts in All, 10 in Real-time, 10 in Hot, 15 in Video, 50 in Pictures and 15 on the #topic# page. With all six tabs a keyword gives about 50–110 different posts per run (54 for #双11# in our tests; 小米汽车 reached the limit of 100 we set). For ongoing monitoring, **schedule** the actor (for example every hour) and remove duplicates across runs by `id`.
- **User posts**: visitors see the 10 newest posts of a profile, plus its pinned posts (`isPinned`).
- **Comments**: visitors see about the first 300 comments of a post.
- **Not included**: the lists of reposts (转发列表), likes, followers and following. Weibo does not show them to visitors who are not logged in (for reposts it answers "前方拥堵，请登录后使用").
- **IP location** (`ipLocation`) is the province or country Weibo shows on posts and comments; some accounts, such as many state media accounts, have none.
- **`postedVia`** is the app, phone model or 超话 a post was sent from. In search results Weibo shows a verified author's title in its place, so it is empty there for verified authors.
- **Follower count of the author** (`userFollowersCount`) is not sent by Weibo for trending posts and posts given by URL.
- **Play counts** of videos found by search or on profiles are rounded by Weibo (for example "4万次播放" = 40000); trending posts have exact counts.
- **Links to videos and avatars** are signed by Weibo and expire after some time, so download the files soon after the run if you need them. Weibo images (`sinaimg.cn`) only load with the header `Referer: https://weibo.com/`.
- **Dates** (`createdAt`, `registeredAt`, `onBoardAt`) are Beijing time (UTC+8).
- **Proxy**: Weibo answers visitors without a proxy, so none is used by default. If Weibo starts refusing requests, the actor switches to Apify Proxy by itself.

### 中文说明

免登录、免 Cookie 采集微博公开数据：关键词搜索（综合、实时、热门、视频、图片、话题 6 个栏目，自动去重），实时热搜榜（排名、热度、新/热/沸/爆标签、分类、上榜时间、置顶话题，不含广告），热门微博，指定微博（长微博自动展开全文，含图片、视频、转评赞、IP 属地、话题、@、转发原文），评论和楼中楼回复（按热度或时间，含 IP 属地、点赞、楼层），用户资料（粉丝、关注、微博数、累计转评赞、认证、注册时间、公司、阳光信用、标签）及最新微博。按条计费：微博 $2/千条，评论 $0.5/千条，用户 $2/千条，热搜 $0.5/千条，可设置单次运行费用上限。

### Is it legal?

The actor only collects data that Weibo shows publicly to visitors who are not logged in. Rows include the public Weibo user names and profile links of authors and commenters; if you do not need them, drop the `user…` fields. Make sure your use of the data complies with the laws that apply to you (for example GDPR or China's PIPL) and with Weibo's terms.

# Actor input Schema

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

Search Weibo for these keywords, brands, names or #topics#, in Chinese or English. Each keyword is searched in every tab chosen below and each post is saved once.

## `searchTabs` (type: `array`):

Weibo shows visitors who are not logged in the first page of each search tab, so more tabs give more posts: about 15 from All, 10 from Real-time, 10 from Hot, 15 from Video, 50 from Pictures and 15 from the #topic# page; together about 90 different posts per keyword.

## `maxPostsPerQuery` (type: `integer`):

Posts are charged per row, so this also caps the cost per keyword.

## `includeHotSearch` (type: `boolean`):

Save the current real-time hot search list: about 50 topics with rank, heat, label (新 / 热 / 沸 / 爆), category and the time each topic entered the list, plus the pinned topic. Paid entries are left out. Schedule the actor to track how topics rise and fall.

## `hotFeedPosts` (type: `integer`):

Save this many posts from Weibo's trending feed. 0 turns it off.

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

Full details of specific posts. Accepts weibo.com/<user>/<id>, m.weibo.cn/detail/<id>, m.weibo.cn/status/<id> and share links, or a bare post ID (mid or mblogid).

## `users` (type: `array`):

Profiles to save: a numeric user ID, a profile link (weibo.com/u/<id>, weibo.com/n/<nickname>, weibo.com/<custom name>, m.weibo.cn/u/<id>) or an exact nickname. Each gives a profile row with follower, post and interaction counts.

## `includeUserPosts` (type: `boolean`):

Also save each user's latest posts. Weibo shows visitors who are not logged in the 10 newest posts of a profile, plus its pinned posts (isPinned = true).

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

Save the comments of every post as separate rows (type = comment): text, likes, reply count, date, IP location and commenter. Weibo shows visitors who are not logged in about the first 300 comments of a post.

## `commentsSort` (type: `string`):

Which comments come first: the most-liked ones (hot) or the newest ones (latest).

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

Comments are charged per row, so this also caps the cost per post.

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

Also save the replies under each comment (isReply = true, linked by rootCommentId). Replies are charged as comments.

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

How many replies to save under each top-level comment. Replies are saved as comment rows with isReply = true.

## `fullText` (type: `boolean`):

Search results and user timelines cut long posts short. When on, the actor gets the complete text (one extra request per long post, no extra charge).

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

Weibo answers visitors without a proxy, so none is used by default. If Weibo starts refusing requests, the actor switches to Apify Proxy by itself.

## Actor input object example

```json
{
  "searchQueries": [
    "比亚迪"
  ],
  "searchTabs": [
    "all",
    "realtime",
    "hot",
    "video",
    "pictures",
    "topic"
  ],
  "maxPostsPerQuery": 20,
  "includeHotSearch": false,
  "hotFeedPosts": 0,
  "includeUserPosts": true,
  "includeComments": false,
  "commentsSort": "hot",
  "maxCommentsPerPost": 20,
  "includeReplies": false,
  "maxRepliesPerComment": 10,
  "fullText": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All results are saved to the default dataset. Each item has `type`: `post`, `comment`, `user` or `hot_search`.

# 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 = {
    "searchQueries": [
        "比亚迪"
    ],
    "maxPostsPerQuery": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("china-data/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 = {
    "searchQueries": ["比亚迪"],
    "maxPostsPerQuery": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("china-data/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 '{
  "searchQueries": [
    "比亚迪"
  ],
  "maxPostsPerQuery": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call china-data/weibo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,china-data/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/ONgE3jmUQfVLY9Zud/builds/R8ycYQJCyshHzYYiX/openapi.json
