# Weibo Post Scraper - 微博 Full Text, Stats & Media (`hgservices/weibo-post-scraper`) Actor

Scrape Weibo (微博) posts by URL. Get full text, publish time, likes, comments, reposts, images, MP4 video, #topics#, IP region (发布于) and author. No login or cookies needed.

- **URL**: https://apify.com/hgservices/weibo-post-scraper.md
- **Developed by:** [Harish Garg](https://apify.com/hgservices) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 scraped 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 Post Scraper** gets **Weibo (微博, Sina Weibo) posts by URL or ID**. Give post links, and get each post's **full text, publish time, likes, comments, reposts, full-size images, MP4 video, #topics#, IP region (发布于), author** and **repost source** as structured data.

**No Weibo account, login or cookies are needed.** Download the data as JSON, CSV or Excel, use it like a Weibo post API from your own code, run it on a schedule, or ask an AI assistant such as Claude or ChatGPT to get Weibo posts for you.

### What does Weibo Post Scraper do?

It opens each Weibo post that you give it and saves one row for each post. For each post you get:

- **Post:** numeric ID, short ID, link and publish time
- **Full text:** Weibo cuts long posts with a "展开" (show more) link. This Actor always gets the **complete text**
- **Engagement:** the counts of likes (赞), comments (评论) and reposts (转发)
- **Images:** links to the **full-size images** and GIFs
- **Video:** the link to the **best-quality MP4**, the cover image and the length in seconds
- **Topics:** the `#hashtag#` topics of the post
- **IP region:** the province or country that Weibo shows under the post (发布于, for example `浙江` or `中国香港`)
- **Source:** the app or phone that Weibo shows, for example `iPhone客户端` or `vivo S60`
- **Author:** user ID, name, profile link and verification
- **Repost source:** for a repost, the ID, link and text of the original post, and its author

Because it runs on the Apify platform, you also get API access, scheduling, integrations and run monitoring.

### Why scrape Weibo posts?

Weibo is one of China's largest social networks. Brands, celebrities, media and government accounts publish there first. Weibo data shows what Chinese audiences see and how they react.

- **Brand and campaign monitoring:** track the likes, comments and reposts of a brand's posts, or of a competitor's posts, every day.
- **Influencer (KOL) research:** compare the engagement of posts from different key opinion leaders before a campaign.
- **Celebrity and entertainment tracking:** follow how fans react to the posts of stars, dramas and shows.
- **News and media research:** save the full text and media of important posts before they are edited or deleted.
- **Content archiving:** keep the images and videos of a post together with its text and stats.
- **AI and NLP datasets:** build dated, attributed collections of Chinese social media text with engagement numbers.

### Input

The Actor has one input field. It is required.

| Field | What it does | Example |
|-------|--------------|---------|
| **Post URLs** (`postUrls`) | Links to Weibo posts, or post IDs | `["https://weibo.com/2731935637/RlGCjeiMC"]` |

All these forms of a post link work:

- Desktop links: `https://weibo.com/{user ID}/{post ID}` and `https://weibo.com/detail/{post ID}`
- Mobile links: `https://m.weibo.cn/detail/{post ID}` and `https://m.weibo.cn/status/{post ID}`
- Bare post IDs, short (`RlGCjeiMC`) or numeric (`5351687113408798`)
- The share text that you copy from the Weibo app, for example `【标题】 https://weibo.com/... 分享自微博`

Each post is saved one time, also when two links in the list point to the same post. Links that are not Weibo post links, such as profile links, are skipped, and the log tells you which.

#### Example: one post

```json
{
  "postUrls": ["https://weibo.com/2731935637/RlGCjeiMC"]
}
```

#### Example: many posts in different forms

```json
{
  "postUrls": [
    "https://weibo.com/2731935637/RlGCjeiMC",
    "https://m.weibo.cn/detail/5350637122358655",
    "RlQ321ZpQ"
  ]
}
```

### Output

You get one row for each post. Here is a row from a real run:

```json
{
  "id": "5351687113408798",
  "mblogid": "RlGCjeiMC",
  "url": "https://weibo.com/2731935637/RlGCjeiMC",
  "text": "半幅车帷，双姝初见。同样的面容，却是两样的人生。往后谁能站稳脚跟？且看我们各凭本事。#嫁金钗#",
  "createdAt": "2026-10-08T10:05:00+08:00",
  "author": {
    "id": "2731935637",
    "name": "田曦薇",
    "url": "https://weibo.com/u/2731935637",
    "verified": true
  },
  "repostsCount": 189935,
  "commentsCount": 76949,
  "likesCount": 205083,
  "images": [
    "https://wx2.sinaimg.cn/large/a2d60795gy1ihu89nmojbj20u01hcduo.jpg"
  ],
  "videoUrl": null,
  "videoCoverUrl": null,
  "videoDurationSeconds": null,
  "topics": ["嫁金钗"],
  "location": "浙江",
  "source": "vivo S60",
  "isLongText": false,
  "repostOf": null,
  "scrapedAt": "2026-10-23T10:22:27+00:00"
}
```

A post with a video also has `videoUrl` (an `.mp4` link), `videoCoverUrl` and `videoDurationSeconds`, for example `19`.

The **Output** tab shows the posts in a table with the time, author, text, reposts, comments, likes, topics, video, IP region and post link. You can download the dataset as JSON, CSV, Excel, XML or HTML.

#### Data fields

| Field | Description |
|-------|-------------|
| `id` | Numeric post ID |
| `mblogid` | Short post ID, as in the post link |
| `url` | Link to the post |
| `text` | The full post text, also for long posts. Weibo emoji show as `[name]`, for example `[心]` |
| `createdAt` | Publish time, ISO 8601, China time (UTC+8) |
| `author` | `id`, `name`, `url`, `verified` |
| `repostsCount` | Reposts (转发) |
| `commentsCount` | Comments (评论) |
| `likesCount` | Likes (赞) |
| `images` | Links to the full-size images and GIFs. Empty when the post has no images |
| `videoUrl` | Link to the best-quality MP4 file, or `null` |
| `videoCoverUrl` | The video's cover image, or `null` |
| `videoDurationSeconds` | The video's length in seconds, or `null` |
| `topics` | The `#hashtag#` topics, without the `#` marks |
| `location` | The IP region that Weibo shows (发布于): a Chinese province or a country. `null` when Weibo shows none |
| `source` | The app or phone that Weibo shows, or `null` |
| `isLongText` | `true` when Weibo shortens the post in the feed. The `text` field always has the full text |
| `repostOf` | For a repost: the original post's `id`, `url`, `text`, `authorId` and `authorName`. `null` for an original post. A long original can have a shortened `text` here; give its `url` to the Actor to get its full text |
| `scrapedAt` | When your run collected the row (UTC) |

### How to use Weibo Post Scraper

All the examples below get the same posts. Replace `YOUR_API_TOKEN` with your token from **Settings → API & Integrations** in Apify Console.

#### In Apify Console

1. Open a Weibo post in your browser or the Weibo app and copy its link.
2. On the Actor's page, paste one or more links into **Post URLs** on the **Input** tab.
3. Click **Start** and wait for the run to finish. The log shows each saved post.
4. Open the **Output** tab to see the posts, or export them as JSON, CSV, Excel, XML or HTML.
5. Click **Save as a new task** to run the same setup again with one click. On the task, add a **Schedule** to track the stats of the same posts every day or week.

#### With the Apify API (HTTP)

Run the Actor and get its results in one request:

```bash
curl -X POST "https://api.apify.com/v2/acts/hgservices~weibo-post-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"postUrls": ["https://weibo.com/2731935637/RlGCjeiMC", "https://m.weibo.cn/detail/5350637122358655"]}'
```

The response is a JSON array with one object for each post. Add `&format=csv` or `&format=xlsx` to the URL to get CSV or Excel instead.

This request waits up to 5 minutes. For long lists, start the run with `POST https://api.apify.com/v2/acts/hgservices~weibo-post-scraper/runs`, and then read the items of the run's default dataset when it finishes.

#### With the JavaScript client

Install the client with `npm install apify-client`, then run:

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('hgservices/weibo-post-scraper').call({
    postUrls: [
        'https://weibo.com/2731935637/RlGCjeiMC',
        'https://m.weibo.cn/detail/5350637122358655',
    ],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const post of items) {
    console.log(post.createdAt, post.author?.name, post.likesCount, post.text);
}
```

#### With the Python client

Install the client with `pip install apify-client` (version 3.0 or later), then run:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("hgservices/weibo-post-scraper").call(
    run_input={
        "postUrls": [
            "https://weibo.com/2731935637/RlGCjeiMC",
            "https://m.weibo.cn/detail/5350637122358655",
        ],
    }
)
if run is None:
    raise RuntimeError("The run was not found.")

for post in client.dataset(run.default_dataset_id).iterate_items():
    print(post["createdAt"], post["likesCount"], post["commentsCount"], post["text"])
    for image in post["images"]:
        print("    image:", image)
```

#### With Claude, ChatGPT and other AI assistants (MCP)

Connect your AI assistant to the **Apify MCP server**. The assistant can then run this Actor for you and answer from the results. To give the assistant this Actor as a tool, use this server URL:

```
https://mcp.apify.com?tools=hgservices/weibo-post-scraper
```

- **Claude (claude.ai or Claude Desktop):** open **Settings → Connectors**, click **Add custom connector** and paste the URL.
- **Claude Code:** run `claude mcp add --transport http apify "https://mcp.apify.com?tools=hgservices/weibo-post-scraper"`.
- **ChatGPT:** in **Settings → Apps & Connectors**, turn on developer mode, create a connector and paste the URL.
- **Cursor, VS Code, Codex and other MCP clients:** add the URL as a remote (HTTP) MCP server, or run `apify mcp install cursor --tools hgservices/weibo-post-scraper` with the Apify CLI (also `vscode`, `codex` and `claude-code`).

Sign in with your Apify account when asked. Then ask in plain language, for example:

- *"Get the Weibo post https://weibo.com/2731935637/RlGCjeiMC and translate its full text into English."*
- *"Scrape these Weibo posts and make a table of their likes, comments and reposts."*
- *"Get these Weibo posts and list the hashtag topics and IP regions that they show."*

#### With integrations

Send the results to **Google Sheets, Slack, email, Zapier, Make, n8n, Airbyte** or any **webhook** from the Actor's **Integrations** tab. For example, check the stats of a campaign's posts every day and add them to a Google Sheet.

### Tips

- **Paste any post link.** Desktop links, mobile links, app share text and bare post IDs all work.
- **Download videos soon.** Each Weibo video link expires about one hour after the post is scraped. Save the files soon after the run.
- **Find the posts first.** Use **Weibo Profile Scraper** to get the newest posts of a user, or **Weibo Video Scraper** to get the video posts of a user. Use **Weibo Hot Search Scraper** to see what is trending, and open a topic's link to find posts about it.
- **Get the comments too.** Give the same links to **Weibo Comments Scraper** to get the comments and replies of each post.

### Limits

- **The Actor needs post links or IDs.** Weibo shows keyword search only to logged-in users. This Actor never logs in.
- **The IP region is what Weibo shows.** It is the region of the poster's IP address, not a verified home address. Weibo does not show it for all posts.
- **Deleted, private and unknown posts are skipped.** The log tells you which posts were skipped.

### Related Actors

- **Weibo Comments Scraper** gets the comments and replies of posts.
- **Weibo Video Scraper** finds a user's video posts, with MP4 links and stats.
- **Weibo Profile Scraper** gets the newest posts of users, with their followers, bios and verification.
- **Weibo Hot Search Scraper** gets the 微博热搜 trending topics.

### FAQ, disclaimers and support

**Do I need a Weibo account or cookies?**
No. The Actor reads only what Weibo shows to any visitor. It never logs in, so your account is never at risk.

**Is this a Weibo API?**
It works like one. You send post links and get structured JSON back, from the Apify API, the API clients or an AI assistant. You do not need a Weibo developer account.

**Do I need a proxy?**
No. You do not need to set up a proxy.

**Why does the Weibo feed show a shorter text than the Actor?**
Weibo cuts long posts in the feed and shows a "展开" (show more) link. The Actor always saves the full text. The `isLongText` field tells you which posts Weibo cut.

**Can it scrape all the posts of a user, or the results of a keyword search?**
Not with this Actor. It takes post links. Use **Weibo Profile Scraper** to get the newest posts of a user, and **Weibo Video Scraper** to get the video posts of a user. Weibo shows keyword search only to logged-in users.

**Is it legal to scrape Weibo posts?**
The Actor collects only data that is publicly available. Posts can contain personal data, which is protected by laws such as the GDPR and China's PIPL. You are responsible for using the data in line with Weibo's terms of service and these laws. Scrape only what you have a legitimate reason to use.

**I found a problem or need a feature.**
Open an issue on the **Issues** tab, and we will look into it. Custom solutions for Weibo and other Chinese websites are available on request.

# Actor input Schema

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

Post URLs such as https://weibo.com/2803301701/RlKmbFVUl or https://m.weibo.cn/detail/5351830879994049, or bare post IDs.

## Actor input object example

```json
{
  "postUrls": [
    "https://weibo.com/2803301701/RlKmbFVUl"
  ]
}
```

# Actor output Schema

## `results` (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 = {
    "postUrls": [
        "https://weibo.com/2803301701/RlKmbFVUl"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/weibo-post-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 = { "postUrls": ["https://weibo.com/2803301701/RlKmbFVUl"] }

# Run the Actor and wait for it to finish
run = client.actor("hgservices/weibo-post-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 '{
  "postUrls": [
    "https://weibo.com/2803301701/RlKmbFVUl"
  ]
}' |
apify call hgservices/weibo-post-scraper --silent --output-dataset

```

## MCP server setup

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