# Weibo Scraper | All-In-One (`toolzerhub/weibo-scraper`) Actor

Extract Weibo posts, profiles, comments, videos, and the hot-search board in one Actor. Add a username, post URL, or keyword and get post text, repost, comment and like counts, follower counts, bios, and trending topics from Sina Weibo.

- **URL**: https://apify.com/toolzerhub/weibo-scraper.md
- **Developed by:** [ToolzerHub](https://apify.com/toolzerhub) (community)
- **Categories:** Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Weibo Scraper

Pull Weibo posts, profiles, comments, videos, and the hot-search board from one Actor. Give it a username, a post URL, or a keyword, and it returns structured rows — post text, repost/comment/like counts, follower counts, bios, and trending topics from Sina Weibo. The hot-search board is the one dataset here with no equivalent anywhere else in this domain: a live read of Weibo's current ranked board, roughly fifty entries, refreshed on every run.

### Modes

Set **`scraperType`** to pick what this run collects. Each mode takes its own identifier below the picker.

| Mode | Returns | Needs | Or use the focused Actor |
|---|---|---|---|
| User info | One profile's public data | `profile` | [Weibo Profile Scraper](https://apify.com/toolzerhub/weibo-profile-scraper) |
| User posts | Every public post on a profile's timeline | `profile` | [Weibo Profile Posts Scraper](https://apify.com/toolzerhub/weibo-profile-posts-scraper) |
| User fans | A profile's followers | `profile` | [Weibo Followers Scraper](https://apify.com/toolzerhub/weibo-followers-scraper) |
| User following | The accounts a profile follows | `profile` | [Weibo Followers Scraper](https://apify.com/toolzerhub/weibo-followers-scraper) |
| Post detail | One post's full record | `post` | [Weibo Post Scraper](https://apify.com/toolzerhub/weibo-post-scraper) |
| Post comments | A post's comments | `post` | [Weibo Comments Scraper](https://apify.com/toolzerhub/weibo-comments-scraper) |
| Post sub-comments | Replies to one specific comment | `comment` | [Weibo Comments Scraper](https://apify.com/toolzerhub/weibo-comments-scraper) |
| Post likes | A post's public liker list | `post` | [Weibo Post Engagement Scraper](https://apify.com/toolzerhub/weibo-post-engagement-scraper) |
| Post reposts | A post's public repost list | `post` | [Weibo Post Engagement Scraper](https://apify.com/toolzerhub/weibo-post-engagement-scraper) |
| Search posts | Posts matching a keyword | `query` | [Weibo Search Scraper](https://apify.com/toolzerhub/weibo-search-scraper) |
| Search users | Accounts matching a keyword | `query` | [Weibo User Search Scraper](https://apify.com/toolzerhub/weibo-user-search-scraper) |
| Search topics | Topics matching a keyword | `query` | [Weibo Topic Search Scraper](https://apify.com/toolzerhub/weibo-topic-search-scraper) |
| Search videos | Videos matching a keyword | `query` | [Weibo Video Search Scraper](https://apify.com/toolzerhub/weibo-video-search-scraper) |
| Hot search | The current hot-search ranking | none | [Weibo Hot Search Scraper](https://apify.com/toolzerhub/weibo-hot-search-scraper) |
| User videos | Videos posted by a profile | `profile` | [Weibo Video Scraper](https://apify.com/toolzerhub/weibo-video-scraper) |
| Video detail | One video's full record | `post` | [Weibo Video Scraper](https://apify.com/toolzerhub/weibo-video-scraper) |

**`scraperType`** is the only field this Actor marks required, and every other identifier is checked and reported plainly the moment its mode runs. Leave `profile` blank on User Info, User Posts, User Fans, User Following, or User Videos and the run stops with `Provide a Weibo profile ID or URL`. Leave `post` blank on Post Detail, Post Comments, Post Likes, Post Reposts, or Video Detail and it stops with `Provide a Weibo post ID or URL`. Post Sub-Comments needs `comment` specifically — a comment ID, not the post it's on — and stops with `Provide a Weibo comment ID to fetch replies for` if that's missing. Every search mode needs `query`, and stops with `Provide a search query`. Hot Search is the one mode that needs nothing at all.

### One Actor or twelve?

The sixteen modes above are also sold as twelve focused Actors (a few pair two closely related modes, like User Fans and User Following, behind one Actor). Reach for a focused Actor once you know exactly which dataset you need at scale — one profile's follower list, one post's comments. Reach for this Actor when a research project spans several of those — a post plus its likers plus its reposts plus the hot-search board it's trending on, say — because that's one Actor integration instead of switching between several.

### Input

```json
{
  "scraperType": "hotSearch"
}
```

`profile` and `post` each accept either a bare numeric ID or a Weibo URL (`weibo.com/u/<id>`, `m.weibo.cn/detail|status/<id>`) — one field works the same way across every mode that needs it, even though the modes send it upstream under different names (`status_id` for likes and reposts, `mid` for video detail). `maxItems` (default `100`, `0` for no limit) caps every paginated mode. User Fans, User Following, User Search, and Topic Search each return a single page per run and have no `maxItems` field at all — see below.

### Output

Field names vary by mode. Across the sixteen, the ones you'll see most are:

| Field | Contents |
|---|---|
| **`id`**, **`idstr`**, **`mid`**, **`mblogid`** | Post identifiers |
| **`text`**, **`text_raw`**, **`created_at`** | Post content and timestamp |
| **`reposts_count`**, **`comments_count`**, **`attitudes_count`** | Post engagement |
| **`screen_name`**, **`followers_count`**, **`verified`** | Profile data |
| **`content`**, **`floor_number`**, **`like_counts`** | Comment data |
| **`category`**, **`type`**, **`data`** | Liker/repost rows (Post Likes, Post Reposts) |
| **`rank`**, **`keyword`**, **`heat`**, **`tag`** | Hot-search rows |

```json
{
  "id": 5023918475601234,
  "idstr": "5023918475601234",
  "mid": "5023918475601234",
  "text_raw": "Example post text",
  "created_at": "2026-08-01T10:00:00Z",
  "attitudes_count": 342,
  "comments_count": 51,
  "reposts_count": 12
}
```

### Questions

**What happens if I forget the identifier for my mode?**
Every mode that needs one checks for it before making a request and stops with a plain message naming what's missing — there's no mode here that silently runs and returns nothing. The only mode that needs no identifier at all is Hot Search.

**User Fans returned an error on one account and worked fine on another. Why?**
Large official or organizational accounts can refuse this lookup outright rather than returning an empty list — a national news outlet's account failed on repeated attempts during testing, while an ordinary individual account succeeded on the first try. This looks like a genuine account-type restriction on Weibo's side, not a rate limit, and the same applies to User Following.

**Post Likes returned a row that isn't a real liker. What is it?**
The first row Weibo returns for a post's liker list is a summary card — counts broken down by reaction type — not an individual liker. Every row after it is a real liker. Filter on the `type` field if you need liker rows only.

**Post Sub-Comments needs a comment ID, not the post ID. Where do I get one?**
From a Post Comments run first — every comment row carries its own `id`. Pass that into `comment` on Post Sub-Comments to pull replies to that specific comment; the post's own ID won't work here.

**Why doesn't `maxItems` do anything on Search Users or Search Topics?**
Those two modes return one page and stop — there's no `maxItems` field on either, and they don't check Weibo for a next page even when one might exist. Search Posts and Search Videos both paginate fully and expose `maxItems`.

**How current is the hot-search board?**
Each run is a live, unparameterized read of Weibo's own hot-search summary at request time — there's no cached or stored snapshot behind it. The board runs to roughly fifty ranked entries; pinned entries in particular sometimes carry no numeric `heat` value at all, which is Weibo's own board data, not a missing field on this end.

**Is a Weibo login or session cookie ever required?**
No. Every mode goes through this Actor's own backend with a project API key; no Weibo cookie or session token is sent for any of the sixteen modes.

### Related Actors

| Actor | Purpose |
|---|---|
| [Weibo Profile Scraper](https://apify.com/toolzerhub/weibo-profile-scraper) | One profile's public data |
| [Weibo Post Scraper](https://apify.com/toolzerhub/weibo-post-scraper) | One post's full record |
| [Weibo Comments Scraper](https://apify.com/toolzerhub/weibo-comments-scraper) | A post's comments and replies |
| [Weibo Hot Search Scraper](https://apify.com/toolzerhub/weibo-hot-search-scraper) | The hot-search board on its own |
| [Weibo Search Scraper](https://apify.com/toolzerhub/weibo-search-scraper) | Keyword search across posts |

# Actor input Schema

## `scraperType` (type: `string`):

Choose the dataset for this run, then fill in the section for that mode below.

## `profile` (type: `string`):

A Weibo numeric user ID, or a profile URL (https://weibo.com/u/<id>).

## `post` (type: `string`):

A Weibo numeric post ID, or a post URL (https://m.weibo.cn/detail/<id>).

## `comment` (type: `string`):

A Weibo numeric comment ID, to collect that comment's replies.

## `query` (type: `string`):

Words or phrase to search for.

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

Sort videos by hot or return all matches.

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

Maximum rows to save. Set 0 to keep collecting until the source is exhausted.

## `page` (type: `integer`):

Page number, starting at 1.

## `continueFrom` (type: `string`):

Continuation token from an earlier run's response, to resume a paginated list. Leave blank to start from the first page.

## Actor input object example

```json
{
  "scraperType": "userInfo",
  "profile": "1699432410",
  "post": "5327962377289859",
  "comment": "5327962377289859",
  "query": "travel",
  "mode": "hot",
  "maxItems": 20,
  "page": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

Every record collected during this run

# 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 = {
    "profile": "1699432410",
    "post": "5327962377289859",
    "comment": "5327962377289859",
    "query": "travel",
    "maxItems": 20,
    "page": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("toolzerhub/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 = {
    "profile": "1699432410",
    "post": "5327962377289859",
    "comment": "5327962377289859",
    "query": "travel",
    "maxItems": 20,
    "page": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("toolzerhub/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 '{
  "profile": "1699432410",
  "post": "5327962377289859",
  "comment": "5327962377289859",
  "query": "travel",
  "maxItems": 20,
  "page": 1
}' |
apify call toolzerhub/weibo-scraper --silent --output-dataset

```

## MCP server setup

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