# Weibo Scraper & API: Posts, Comments, Profiles, Hot Search (`quarra/weibo-scraper`) Actor

Weibo scraper for posts from keywords or #topics# (hundreds per search, full text), user profiles and posts, post links, comments with replies, and the hot search list. No login needed.

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

## Pricing

from $3.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.
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: Posts, Comments, Profiles, Hot Search

Get Weibo (微博) data in bulk, without a Weibo account, cookies or API key. Give it search terms or #topics#, user
profiles, post links, or ask for the hot search list; one run can mix them all. Posts come with their **full text**
(long posts are not cut), images, video, counts, region, topics and mentions; comments come with their replies,
linked to their parent. Export as JSON, CSV or Excel, or read it through the Apify API.

**$3 per 1,000 posts, $1.50 per 1,000 comments, $4 per 1,000 profiles, $1 per 1,000 hot search entries**, plus a
small start fee per run. Posts or accounts that do not exist, and inputs that fail, are not charged.

### How deep a search goes

Most Weibo scrapers read the first page of a search and stop at about 10 to 100 posts. We read every page Weibo
serves. Measured on 13 October 2026 for the term 咖啡 (coffee):

| Run | Posts delivered | Oldest post |
|---|---|---|
| Latest tab alone | 1,593 | January 2026 |
| Combined, no limit (the three tabs, duplicates removed) | **4,665** in 11 minutes | August 2020 |
| of which found on Latest | 1,254 | December 2025 |
| of which found on Top | 1,990 | August 2020 |
| of which found on All | 1,421 | October 2025 |
| Combined, limited to 100 pages per tab | 2,315 (757 / 887 / 671) | June 2022 |

In a combined run a post found on several tabs is counted once, on the first of Latest, Top, All that has it. Top
goes back the furthest in time; Latest is the newest first. How deep a search goes depends on the term and the
moment: a niche term has fewer posts, a hot one more.

### Quick start

1. Type a keyword or a #topic# into **Search terms or #topics#**, paste profile links into **Users**, or post links
   into **Post links or IDs**.
2. Turn on **Include comments** if you want the comments of every post.
3. Click **Start** and read the results in the run's **Output** tab.

Like any Apify Actor, it can also be run and read through the Apify API, scheduled, and connected to webhooks, Make,
Zapier, n8n or Apify's MCP server for AI agents.

### What you get

| Record | Fields |
|---|---|
| `post` | full text, publication time (UTC), author (ID, name, verification, followers, avatar), reposts, comments, likes, images in full size, video (MP4 link, length, plays, cover), #topics#, @mentions, links, region shown by Weibo, app it was posted from, the shared post for reposts, ad flag, pinned flag |
| `comment` | text, time, likes, number of replies, author, region, images; replies carry `parentCommentId` and the user they answer |
| `profile` | name, bio, followers, following, posts, verification type and text, gender, location, birthday or zodiac sign, account creation date, company, school, credit level, total interactions, badges and rankings, avatar, cover |
| `trend` | rank, keyword, heat, label (new, hot…), category, time it entered the list, ad flag |

### Inputs

- **Search terms or #topics#**: `露营`, `#露营#`, `Tesla`, or a Weibo search link. Choose the **Search tab**: Latest
  (newest first), Top (most read, goes back years), All, or Combined (the three tabs, duplicates removed). With
  Combined, **Max posts per search** is shared between the three tabs, and what a short tab leaves goes to the others.
- **Users**: `https://weibo.com/u/1669879400`, `m.weibo.cn/u/…`, a custom link (`weibo.com/yangshiwangnet`), a numeric
  user ID, or a screen name (`人民日报`, `@央视网`). Each user gives a profile record, then up to **Max posts per user**
  posts: the latest posts (about 10, every kind), then the user's photo and video posts going back in time. Set it to
  0 for profiles only.
- **Post links or IDs**: `https://weibo.com/1669879400/RlZog45UR`, `m.weibo.cn/detail/…`, `m.weibo.cn/status/…`, or
  the post ID.
- **Hot search list**: Weibo's real-time hot search list, about 50 entries.
- **Posted after** / **Posted before**: a date (`2026-10-01`), a date and time in UTC (`2026-10-01T08:00:00Z`), or a
  duration back from now (`7 days`, `24 hours`). With the Latest tab the run stops reading as soon as it passes the
  start date. They apply to searches and users; a post link is always read.
- **Include comments**, **Comments order** (top or latest), **Max comments per post**, **Include replies to
  comments**, **Max replies per comment**. When Weibo's top list shows fewer comments than the post has, the run
  completes it with the latest ones (no duplicates). If Weibo announces comments on a post but shows none publicly,
  the run summary says so.
- **Max results**: total records the run delivers (posts, comments, profiles and hot search entries together),
  counted exactly.
- Inputs are read in this order: post links, users, search terms, then the hot search list. When **Max results** is
  reached, the inputs not reached yet are listed in the run summary with the note `not reached`.
- Up to 2,000 search terms, 2,000 users and 2,000 posts per run. A post link put in the search terms (or a profile
  link in the post links) is read as what it is, and the run's notes say so.

Example, through the API:

```json
{
  "searchTerms": ["新能源汽车", "#露营#"],
  "searchMode": "latest",
  "maxPostsPerSearch": 500,
  "postedAfter": "3 days",
  "includeComments": true,
  "maxCommentsPerPost": 20,
  "maxItems": 5000
}
```

### Output

One record per post, comment, profile or hot search entry in the dataset. A shortened post:

```json
{
  "type": "post",
  "status": "ok",
  "postId": "5352803222161012",
  "bid": "Rm9Eu94b2",
  "url": "https://weibo.com/3266943013/Rm9Eu94b2",
  "text": "【#多项先行指标释放积极信号#】 #我国经济回升向好态势持续巩固#国家发展改革委国家信息中心10日发布多项先行指标。…",
  "textTruncated": false,
  "createdAt": "2026-10-11T04:00:01Z",
  "authorId": "3266943013",
  "authorName": "央视网",
  "authorVerified": true,
  "authorVerifiedType": "media",
  "authorFollowers": 20664398,
  "reposts": 346,
  "comments": 924,
  "likes": 4455,
  "images": ["https://wx1.sinaimg.cn/large/6499fbd1gy1ii0bxm0cjbj20u00men16.jpg"],
  "videoPageUrl": "https://video.weibo.com/show?fid=1034:5352767561072660",
  "hashtags": ["多项先行指标释放积极信号", "我国经济回升向好态势持续巩固"],
  "source": "微博视频号",
  "ipRegion": "北京",
  "isRepost": false,
  "isAd": false,
  "searchTerm": "人工智能",
  "searchMode": "all",
  "searchPosition": 1,
  "scrapedAt": "2026-10-13T16:26:32.090Z"
}
```

Fields that need a word of explanation:

- `postId` is Weibo's numeric post ID; `bid` is the short ID used in post links (`weibo.com/<user>/<bid>`).
- `textTruncated` is `true` when the text is only the first part of a long post: either **Full text of long posts**
  is off, or Weibo did not serve the full text at that moment (the run's status message then says how many, and a
  later run gets them).
- `ipRegion`: the province or country Weibo shows under a post or comment. On profiles Weibo usually shows none, so
  it is empty there.
- `authorFollowers` is Weibo's follower count; in search results and account feeds Weibo rounds it to the nearest
  10,000 for large accounts.
- Profile `birthday` is a date only when the account shows one; most show a zodiac sign only, in `zodiacSign`.
- `totalInteractions` (profile) is the exact total of likes, comments and reposts Weibo counts for the account.
- `isAd`: Weibo marks the post as advertising (a paid placement, declared brand content, or a post whose reach the
  author paid for).
- `reposts` and `comments` are capped at 1,000,000 by Weibo for the most popular posts.
- `status`: `ok` (delivered, charged), `notFound` (free: the post or account does not exist, was deleted or is not
  public), `error` (free; `error` says why, `retryable` says if a later run may work).
- **Images and videos**: Weibo's media servers only answer requests that come from Weibo. To download a file, send
  the header `Referer: https://weibo.com/`. Video and avatar links expire: video links about one hour after the run
  reads them, avatar links about three hours. Download what you need right after the run (or read the post again
  later for fresh links).

The run summary (counts per input, why the run stopped) is the `OUTPUT` record of the run's key-value store.

### Pricing

Pay per event:

| Event | Price |
|---|---|
| Post | $3.00 per 1,000 |
| Comment or reply | $1.50 per 1,000 |
| Profile | $4.00 per 1,000 |
| Hot search entry | $1.00 per 1,000 |
| Run start | $0.005 per GB of memory (1 GB minimum; $0.005 at the default 512 MB) |

Never charged: posts and accounts that do not exist, error records, the full text of long posts, duplicates (a post
found by two searches is delivered once). Set **Maximum cost per run** in the run options and the run stops before
going over it.

### Limits

What Weibo only shows to signed-in users is not collected:

- A user's text-only posts beyond the latest 10 or so (their photo and video posts go back years).
- Reposts of a post, full follower and following lists, and likes beyond the first few hundred.
- Weibo shows a few hundred comments per post at most, in either order.

### FAQ

**Do I need a Weibo account or cookies?** No.

**Can I search in English?** Yes, any term Weibo users write; most posts are in Chinese.

**What if the run is restarted by the platform (migration or reboot)?** It resumes where it was: records already in
the dataset are not delivered or charged again, and the comments still missing are added.

**Is it legal?** It collects public posts, comments and profiles shown to any visitor of Weibo. Check the rules that
apply to your use of the data, especially for personal data.

# Actor input Schema

## `searchTerms` (type: `array`):

One per line: a keyword (露营, 人工智能, Tesla) or a #topic# (#露营#), in any language Weibo users write in. Weibo search links work too. Each search returns posts up to 'Max posts per search'.

## `searchMode` (type: `string`):

Which Weibo search tab to read. Latest lists the newest posts first; Top goes back the furthest in time (years for a popular term); Combined reads the three tabs and shares 'Max posts per search' between them, for the widest coverage.

## `maxPostsPerSearch` (type: `integer`):

Posts per search term. Weibo shows hundreds to a few thousand posts per search for a popular term (measured for 咖啡: 1,593 on Latest alone, 4,665 with Combined). With Combined the limit is shared between the three tabs.

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

One per line: a profile link (weibo.com/u/1669879400, m.weibo.cn/u/…, weibo.com/yangshiwangnet), a numeric user ID, or a screen name (人民日报, @央视网). Each gets its full profile, then its posts up to 'Max posts per user'.

## `maxPostsPerUser` (type: `integer`):

Posts per user: the latest posts (about 10, all kinds), then the user's photo and video posts going back in time. 0 = profile only.

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

One per line: Weibo post links (weibo.com/1669879400/RlZog45UR, m.weibo.cn/detail/…, m.weibo.cn/status/…) or post IDs. Each gets the full post.

## `includeTrends` (type: `boolean`):

Also deliver Weibo's real-time hot search list (about 50 entries): rank, keyword, heat, label, category, time on the list. Ads are flagged.

## `postedAfter` (type: `string`):

Only posts published after this moment: a date (2026-10-01), a date and time in UTC (2026-10-01T08:00:00Z), or a duration back from now (7 days, 24 hours). Applies to searches and users.

## `postedBefore` (type: `string`):

Only posts published before this moment (a date alone includes that whole day). Applies to searches and users.

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

Also deliver the comments of every post scraped, one record per comment (text, likes, date, author, region, reply count).

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

Which comments come first.

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

Top-level comments per post. Weibo shows a few hundred comments per post at most.

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

Also deliver the replies under each comment, linked to it by 'parentCommentId'.

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

Replies per comment.

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

Total number of records delivered by the run: posts, comments, profiles and hot search entries together, counted exactly.

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

Weibo cuts long posts in lists; on: the full text is fetched for each (at no extra charge). Off: the first part only, faster.

## Actor input object example

```json
{
  "searchTerms": [
    "露营"
  ],
  "searchMode": "latest",
  "maxPostsPerSearch": 20,
  "users": [
    "https://weibo.com/u/2803301701"
  ],
  "maxPostsPerUser": 10,
  "includeTrends": false,
  "includeComments": false,
  "commentsSort": "top",
  "maxCommentsPerPost": 20,
  "includeReplies": false,
  "maxRepliesPerComment": 10,
  "maxItems": 50,
  "fullText": true
}
```

# Actor output Schema

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

Every record with all its fields, and free error records with the reason.

## `overview` (type: `string`):

A table with one row per record: its type, link, author, text, date and counts.

## `summary` (type: `string`):

Counts per input, why the run stopped, and errors.

# 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 = {
    "searchTerms": [
        "露营"
    ],
    "maxPostsPerSearch": 20,
    "users": [
        "https://weibo.com/u/2803301701"
    ],
    "maxPostsPerUser": 10,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/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 = {
    "searchTerms": ["露营"],
    "maxPostsPerSearch": 20,
    "users": ["https://weibo.com/u/2803301701"],
    "maxPostsPerUser": 10,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("quarra/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 '{
  "searchTerms": [
    "露营"
  ],
  "maxPostsPerSearch": 20,
  "users": [
    "https://weibo.com/u/2803301701"
  ],
  "maxPostsPerUser": 10,
  "maxItems": 50
}' |
apify call quarra/weibo-scraper --silent --output-dataset

```

## MCP server setup

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