# Weibo Scraper (`muhammad_noman_riaz/weibo-scraper`) Actor

Scrape Weibo hot search and public posts by keyword, topic or account: text, time, reposts, comments, likes, images, video and topics. No login or cookies needed. Pay only for results returned.

- **URL**: https://apify.com/muhammad_noman_riaz/weibo-scraper.md
- **Developed by:** [Muhammad Noman Riaz](https://apify.com/muhammad_noman_riaz) (community)
- **Categories:** Social media, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $17.75 / 1,000 results

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

### What does Weibo Scraper do?

Weibo Scraper collects public data from Weibo (微博), China's largest open social network, without a Weibo account, login or cookies of your own. It returns three kinds of data in one dataset. First, the live Weibo hot search list (微博热搜): about 50 trending topics with rank, heat score, label such as 新 or 热, category and a search link. Second, public posts for any keyword or #topic#. Third, the latest public posts of an account you give by URL. Every post comes with plain text, publish time in ISO format, reposts, comments and likes counts, full-size image URLs, a video URL when there is one, the topic tags used in the text, and a minimal author record (public display name, id and verified flag). Use it for brand monitoring, trend tracking, media research and China market analysis. You pay $17.75 per 1,000 results and only for results actually returned.

### What you can use it for

- Track the Weibo hot search list over time with scheduled runs
- Monitor what people say about a brand, product or #topic# on Weibo
- Follow the latest posts of official accounts, media outlets and brands
- Measure engagement (reposts, comments, likes) of posts on a theme
- Build Chinese social media datasets for research

### Features

- **No login, no account cookies:** uses the same anonymous visitor access a logged-out phone browser gets
- **One input, any mix:** hot search, keywords or topics, and account URLs in the same run
- **Full post text:** long posts are expanded, so text is never cut at "全文"
- **Plain text:** HTML, link icons and emoji images are turned into readable text (emoji as `[name]`)
- **Stable English field names** and ISO dates
- **Duplicates removed:** a post found by several keywords is returned and charged once
- **Retries on a fresh proxy IP** with a fresh visitor session when Weibo rate-limits

### Input

```json
{
  "includeHotSearch": true,
  "searchKeywords": ["咖啡", "#新能源汽车#"],
  "accountUrls": ["https://weibo.com/u/2803301701"],
  "maxPostsPerSource": 30,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

| Field | Description |
|---|---|
| `includeHotSearch` | Adds the current hot search list (about 50 topics) |
| `searchKeywords` | Keywords to find posts for. Wrap a topic in hashes, for example `#咖啡#` |
| `accountUrls` | Numeric account URLs: `weibo.com/u/<id>`, `weibo.com/<id>`, `m.weibo.cn/u/<id>` or `m.weibo.cn/profile/<id>` |
| `maxPostsPerSource` | Upper limit of posts per keyword and per account (default 30) |
| `maxConcurrency` | Sources processed at the same time (default 3) |
| `maxRequestRetries` | Attempts per source, each on a new proxy IP (default 5) |
| `proxy` | Residential proxy recommended (default) |

### Output

Each item has a `type` field: `hotSearch` or `post`. The dataset has a view for each.

Hot search item:

```json
{
  "type": "hotSearch",
  "rank": 1,
  "keyword": "在梅边 夯爆了",
  "heat": 1754902,
  "label": "新",
  "url": "https://s.weibo.com/weibo?q=%E5%9C%A8%E6%A2%85%E8%BE%B9%20%E5%A4%AF%E7%88%86%E4%BA%86",
  "category": "综艺"
}
```

Rank 0 is the item Weibo pins above the list. It has no heat value or category.

Post item:

```json
{
  "type": "post",
  "id": "5355129526292461",
  "mid": "5355129526292461",
  "url": "https://weibo.com/2803301701/Rn8aAqoXj",
  "text": "【#人民日报夜读#：#做人要知足知止知进#】\n[心]守好知足的心：幸福往往就藏在平凡烟火里……",
  "createdAt": "2026-10-17T14:03:55.000Z",
  "reposts": 105,
  "comments": 284,
  "likes": 324,
  "images": [],
  "videoUrl": null,
  "topics": ["人民日报夜读", "做人要知足知止知进"],
  "author": { "id": "2803301701", "name": "人民日报", "verified": true },
  "source": "account: 2803301701"
}
```

`images` holds full-size image URLs. `videoUrl` is the best MP4 link Weibo offers (720p when available). `source` tells you which keyword or account produced the post.

### Pricing

**$17.75 per 1,000 results.** A result is one hot search topic or one post in the dataset. You pay only for results returned. Sources that fail after all retries, accounts with no visible posts and unsupported URLs are not charged. They are listed in `FAILED_ITEMS` in the run's key-value store with the reason.

### Known limits

- **First page only without login.** Weibo shows logged-out visitors one page of results. In our tests that meant **about 10 latest posts per account** and **about 28 to 30 posts per keyword** (the actor reads the latest, popular and default search tabs and merges them). Asking for more than that returns no more.
- **Account URLs must be numeric.** Custom names such as `weibo.com/rmrb` are not resolved. Open the account and copy the URL with the number, for example `weibo.com/u/2803301701`.
- **Video links expire** after about an hour. Download soon after the run.
- **Images may need a Referer** header (`https://weibo.com/`) when you download them from some networks.
- **Reposts** are returned as the reposting post. The original post is not attached.
- No comments, follower lists or profile details. This is by design.

### Responsible use

This actor only reads public content that any logged-out visitor can see, and it keeps author data to a display name, id and verified flag. It does not log in, does not solve or skip captchas or verification checks, and stops retrying when Weibo refuses. You are responsible for using the data lawfully, including China's PIPL and the data protection law where you live.

### FAQ

#### Do I need a Weibo account or cookies?

No. The actor uses the anonymous visitor access Weibo gives every logged-out browser. You never provide account cookies.

#### How many posts can I get per keyword?

About 28 to 30 per keyword in our tests, because Weibo only shows the first page of each search tab to logged-out visitors. Add more related keywords or topics to collect more.

#### How do I scrape a Weibo topic (hashtag)?

Put the topic in `searchKeywords` wrapped in hashes, for example `#咖啡#`. The `topics` field of each post lists every hashtag used in its text.

#### How often does the hot search list change?

Weibo updates it many times a day. Schedule the actor with only `includeHotSearch` enabled to build a history; each run costs about 51 results.

#### Why did a source fail?

Usually rate limiting after all retries, an account with no public posts, or a non-numeric account URL. Check `FAILED_ITEMS` in the key-value store. Failed sources are never charged.

#### Can I get comments or follower lists?

No. To keep personal data to a minimum, this actor does not collect comments, followers or profile details.

# Actor input Schema

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

Adds the current Weibo hot search list (about 50 topics) with rank, heat, label and category.

## `searchKeywords` (type: `array`):

Keywords to find public posts for. For a topic, wrap it in hashes, for example #咖啡#. Each keyword returns up to Max posts per source.

## `accountUrls` (type: `array`):

Public Weibo accounts given by numeric URL, such as https://weibo.com/u/2803301701 or https://m.weibo.cn/u/2803301701. Their latest public posts are returned.

## `maxPostsPerSource` (type: `integer`):

Upper limit of posts for each keyword and each account. Without login Weibo shows only a first page, so expect about 10 posts per account and up to about 30 per keyword.

## `maxConcurrency` (type: `integer`):

How many keywords or accounts are processed at the same time. Keep it low; Weibo rate-limits fast clients.

## `maxRequestRetries` (type: `integer`):

How many times a keyword, account or the hot search list is tried, each time on a new proxy IP, before it is skipped.

## `proxy` (type: `object`):

Proxy used for requests. Residential proxies are recommended to avoid Weibo rate limits.

## Actor input object example

```json
{
  "includeHotSearch": true,
  "searchKeywords": [
    "咖啡"
  ],
  "accountUrls": [
    "https://weibo.com/u/2803301701"
  ],
  "maxPostsPerSource": 30,
  "maxConcurrency": 3,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Hot search topics (type hotSearch) and public posts (type post) in one dataset

# 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 = {
    "searchKeywords": [
        "咖啡"
    ],
    "accountUrls": [
        "https://weibo.com/u/2803301701"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammad_noman_riaz/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 = {
    "searchKeywords": ["咖啡"],
    "accountUrls": ["https://weibo.com/u/2803301701"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("muhammad_noman_riaz/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 '{
  "searchKeywords": [
    "咖啡"
  ],
  "accountUrls": [
    "https://weibo.com/u/2803301701"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call muhammad_noman_riaz/weibo-scraper --silent --output-dataset

```

## MCP server setup

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