# Weibo Profile Scraper - Posts, Followers & Stats (`hgservices/weibo-profile-scraper`) Actor

Scrape Weibo (微博) user posts and profiles without login: newest 100 posts plus older media posts, with full text, likes, comments, reposts, images, MP4 video and the author's followers and bio.

- **URL**: https://apify.com/hgservices/weibo-profile-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 $1.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

Scrape the **posts of any Weibo (微博) user**, together with the user's **profile: followers, following, bio, verification and lifetime likes, comments and reposts**. Give user IDs, profile links or screen names, and get each user's recent posts with **full text, publish time, likes, comments, reposts, images, video, #topics# and IP region (发布于)**.

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

### What does Weibo Profile Scraper do?

It opens each Weibo profile that you give it and saves one row for each post. Every row also carries the full profile of the user who posted it, so one table gives you both the content and the account behind it.

For each post you get:

- **Post:** ID, short ID, link and publish time
- **Full text:** Weibo cuts long posts with a "全文" (full text) link. This Actor always gets the **complete text**
- **Engagement:** the counts of likes, comments and reposts
- **Images:** links to the **large-size images**
- **Video:** the link to the **MP4 file**, the cover image and the length in seconds
- **Topics:** the `#hashtag#` topics of the post
- **IP region:** the province or country that Weibo shows on the post (发布于, for example `上海` or `法国`)
- **Source:** the app or phone that Weibo shows, for example `微博视频号` or `iPhone客户端`
- **Repost source:** for a repost, the ID, link and text of the original post, and its author

For each user (in the `author` field of every row) you get:

- **Identity:** user ID, screen name, profile link, custom link (for example `weibo.com/rmrb`) and avatar
- **Audience:** followers, following and the number of posts
- **Trust:** the verified flag, verification type and reason (for example `《人民日报》法人微博`) and the Sunshine Credit level (阳光信用)
- **Details:** bio, gender, location, registration date, and birthday and company when the user makes them public
- **Lifetime engagement:** the total likes, comments and reposts on all of the user's posts

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

### How many posts can you get?

Weibo shows people who are not logged in only part of a profile. The Actor collects all of that part:

- the **newest 100 posts** of any kind: text, pictures, video, articles and reposts
- the newest 100 **original** posts, **picture** posts, **video** posts and **article** posts, which often reach further back in time

The Actor merges these posts, removes duplicates and saves them **newest first**. A busy account gives up to about **300 posts**. **Max posts per user** keeps only the newest posts (default 100). Set it to `0` to get all of them.

How far back the posts go depends on how often the user posts. For 人民日报, which posts many times each day, the newest 100 posts cover about 3 days, and the picture, video and article posts reach back about a month. For a celebrity who posts a few times each week, the posts can reach back several years.

**Tip:** to build a longer history of an account, run the Actor on a [schedule](#in-apify-console), for example every day, and keep the new posts of each run.

### Why scrape Weibo profiles and posts?

Weibo is one of China's largest social networks. Brands, celebrities, media and government accounts publish there first.

- **Influencer (KOL) marketing:** check a key opinion leader's followers, verification and the engagement of their recent posts before you pay for a campaign.
- **Brand and competitor monitoring:** follow what official brand accounts post, and compare their likes, comments and reposts.
- **Media and news research:** collect the recent posts of news and government accounts, with their topics and full text.
- **Social listening and trend research:** see which `#topics#` a set of accounts posts about, and how their audience reacts.
- **AI and NLP datasets:** build dated, attributed collections of Chinese social media text with engagement numbers and author data.

### How to scrape Weibo user posts in Apify Console

1. Open a Weibo profile in your browser or the Weibo app and copy its link, or copy the user's screen name.
2. Paste one or more users into **Users**.
3. Optional: set **Max posts per user**.
4. Click **Start** and wait for the run to finish.
5. Open the **Output** tab to see the posts, or export them as JSON, CSV, Excel, XML or HTML.

### Input

| Field | What it does | Example |
|-------|--------------|---------|
| **Users** | Weibo user IDs, profile links or screen names | `["2803301701", "https://weibo.com/rmrb"]` |
| **Max posts per user** | The most posts to save for each user, newest first. Default `100`. `0` saves all that Weibo shows (up to about 300) | `20` |

These forms of a user all work, and you can mix them in one list:

- Numeric user IDs: `2803301701`
- Desktop profile links: `https://weibo.com/u/2803301701`, `https://weibo.com/2803301701` and custom links such as `https://weibo.com/rmrb`
- Mobile profile links: `https://m.weibo.cn/u/2803301701` and `https://m.weibo.cn/profile/2803301701`
- Screen names: `人民日报` or `@人民日报`
- The share text that you copy from the Weibo app, for example `人民日报 https://weibo.com/u/2803301701 分享自微博`

Each user is collected one time, even when two entries in the list point to the same user.

#### Example: the newest 20 posts of one user

```json
{
  "userIds": ["2803301701"],
  "maxResults": 20
}
```

#### Example: all visible posts of users in different forms

```json
{
  "userIds": [
    "https://weibo.com/rmrb",
    "https://m.weibo.cn/u/1642634100",
    "Dear-迪丽热巴"
  ],
  "maxResults": 0
}
```

### Output

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

```json
{
  "id": "5352127419648809",
  "mblogid": "RlS4tEu5X",
  "url": "https://weibo.com/2803301701/RlS4tEu5X",
  "text": "【#今年国庆假期8.26亿人次国内出游#】#国庆7天8.26亿人次出游# 经文化和旅游部数据中心测算，国庆节假期7天，全国国内出游8.26亿人次，国内出游总花费7383.75亿元，按可比口径（日均）同比2025年分别增长6.3%、4.3%。（人民日报记者 耿磊）",
  "createdAt": "2026-10-09T15:14:37+08:00",
  "author": {
    "id": "2803301701",
    "name": "人民日报",
    "url": "https://weibo.com/u/2803301701",
    "customUrl": "https://weibo.com/rmrb",
    "description": "人民日报法人微博。参与、沟通、记录时代。",
    "followersCount": 158043484,
    "followingCount": 3096,
    "postsCount": 154054,
    "verified": true,
    "verifiedType": 3,
    "verifiedReason": "《人民日报》法人微博",
    "gender": "male",
    "location": "北京",
    "registeredAt": "2012-07-22T02:28:35+08:00",
    "birthday": "1948-06-15 双子座",
    "company": "人民日报社",
    "creditLevel": "阳光信用极好",
    "totalLikes": 2529032761,
    "totalComments": 276694208,
    "totalReposts": 1184671945,
    "avatarUrl": "https://tvax4.sinaimg.cn/crop.0.0.1018.1018.1024/0033ImPzly8h8vgemh8kxj60sa0sadgw02.jpg?KID=imgbed,tva&Expires=1791559886&ssig=%2BDfRANk4vp"
  },
  "repostsCount": 114,
  "commentsCount": 110,
  "likesCount": 312,
  "images": [
    "https://wx1.sinaimg.cn/mw2000/0033ImPzly1ihw4flr6esj60ob0obgr902.jpg"
  ],
  "videoUrl": null,
  "videoCoverUrl": null,
  "videoDurationSeconds": null,
  "topics": ["今年国庆假期8.26亿人次国内出游", "国庆7天8.26亿人次出游"],
  "location": null,
  "source": "微博网页版",
  "isLongText": false,
  "repostOf": null,
  "scrapedAt": "2026-10-09T12:31:39+00:00"
}
```

The **Output** tab has two tables:

- **Posts:** the time, author, text, reposts, comments, likes, topics, video, IP region and post link
- **Author profiles:** the avatar, name, user ID, followers, following, posts, verification, location, registration date and profile link

You can download the dataset in various formats such as JSON, HTML, CSV or Excel.

#### Post 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 `[心]`, and links show as their link text, for example `网页链接` |
| `createdAt` | Publish time, ISO 8601, China time (UTC+8) |
| `author` | The profile of the user who posted, with the fields in the next table |
| `repostsCount` | Reposts (转发) |
| `commentsCount` | Comments (评论) |
| `likesCount` | Likes (赞) |
| `images` | Links to the large-size images. Empty when the post has no images |
| `videoUrl` | Link to the 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 on the post (发布于): 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 |
| `scrapedAt` | When your run collected the row (UTC) |

#### Author fields

| Field | Description |
|-------|-------------|
| `author.id` | Numeric user ID |
| `author.name` | Screen name |
| `author.url` | Profile link |
| `author.customUrl` | Custom profile link, for example `https://weibo.com/rmrb`, or `null` |
| `author.description` | Bio, or `null` |
| `author.followersCount` | Followers (粉丝) |
| `author.followingCount` | Accounts the user follows (关注) |
| `author.postsCount` | Posts published |
| `author.verified` | `true` for a verified account |
| `author.verifiedType` | Weibo's verification type code |
| `author.verifiedReason` | What Weibo verified the account as, or `null` |
| `author.gender` | `male` or `female`, as the user set it |
| `author.location` | The location in the user's profile, or `null` |
| `author.registeredAt` | When the account was made, China time (UTC+8) |
| `author.birthday` | Birthday or star sign, when public |
| `author.company` | Company, when public |
| `author.creditLevel` | Weibo's Sunshine Credit level (阳光信用) |
| `author.totalLikes` | Likes on all of the user's posts |
| `author.totalComments` | Comments on all of the user's posts |
| `author.totalReposts` | Reposts of all of the user's posts |
| `author.avatarUrl` | Avatar image |

### How to use Weibo Profile Scraper

#### In Apify Console

1. Open the Actor, fill in the **Input** tab and click **Start**.
2. Watch the run's progress in the log, then open the **Output** tab.
3. Click **Save as a new task** to run the same setup again with one click. On the task, add a **Schedule** to collect the new posts of the same accounts every day or week.

#### With the Apify API (HTTP)

Run the Actor and get its results in one request. Replace `YOUR_API_TOKEN` with your token from **Settings → API & Integrations** in Apify Console.

```bash
curl -X POST "https://api.apify.com/v2/acts/hgservices~weibo-profile-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"userIds": ["2803301701"], "maxResults": 20}'
```

Add `&format=csv` or `&format=xlsx` to the URL to get CSV or Excel instead of JSON. A synchronous request waits up to 5 minutes. For many users or `"maxResults": 0`, start the run with `POST /v2/acts/hgservices~weibo-profile-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-profile-scraper').call({
    userIds: ['2803301701', 'https://weibo.com/u/1642634100'],
    maxResults: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const post of items) {
    console.log(post.author.name, post.author.followersCount, post.createdAt, 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-profile-scraper").call(
    run_input={
        "userIds": ["2803301701", "https://weibo.com/u/1642634100"],
        "maxResults": 20,
    }
)
if run is None:
    raise RuntimeError("The run was not found.")

for post in client.dataset(run.default_dataset_id).iterate_items():
    print(post["author"]["name"], 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-profile-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-profile-scraper"`.
- **Apify CLI:** run `apify mcp install claude-code --tools hgservices/weibo-profile-scraper` (also works for `cursor`, `vscode` and `codex`).
- **ChatGPT:** in **Settings → Apps & Connectors**, turn on developer mode, create a connector and paste the URL.
- **Cursor, VS Code and other MCP clients:** add the URL as a remote (HTTP) MCP server.

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

- *"Get the newest 20 Weibo posts of 人民日报 and summarize them in English."*
- *"Compare the followers and the average likes of the last 30 posts of these three Weibo accounts."*
- *"Which #topics did https://weibo.com/rmrb post about this week?"*

#### 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, collect the new posts of a list of KOLs every morning and add them to a Google Sheet.

### Tips

- **Paste any form of a user.** IDs, desktop and mobile profile links, custom links, screen names and app share text all work.
- **Use the real account name.** Many celebrity screen names, such as `迪丽热巴`, belong to banned copy accounts. The real accounts often have a prefix, such as `Dear-迪丽热巴`. A profile link or user ID is always exact.
- **Get only what you need.** Set **Max posts per user** to `20` for a quick check of recent activity, or to `0` for all visible posts.
- **Download videos soon.** Weibo signs each video and avatar link, and video links expire about one hour after the run. Save the files soon after the run.
- **Get the comments too.** Give the post links from the `url` field to **Weibo Comments Scraper** to get the comments and replies of each post.

### Limits

- **Only the posts that Weibo shows to visitors.** Older text-only posts are visible only to logged-in users. This Actor never logs in, so it gets the posts described in [How many posts can you get?](#how-many-posts-can-you-get)
- **Some users hide older posts.** A user can choose to show only recent posts, for example the last six months, to everyone. Then the Actor gets fewer posts.
- **Comment and repost counts stop at 1,000,000.** Weibo shows these counts as "100万+" when they are higher, and the Actor saves `1000000`. Like counts are always exact.
- **Reposts show the start of long originals.** For a repost of a long post, `repostOf.text` can end with "...". Give the `repostOf.url` link to **Weibo Post Scraper** to get its full text.
- **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.
- **Unknown, banned and hidden users are skipped.** So are users who show no posts. The log names each user that was skipped and tells you why.

### Related Actors

- **Weibo Post Scraper** gets posts by link, with full text and stats.
- **Weibo Comments Scraper** gets the comments and replies of posts.
- **Weibo Video Scraper** gets the full video history of a user.
- **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.

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

**Can I get all the posts a user ever made?**
No. Weibo shows the full post history only to logged-in users. The Actor gets the newest posts and the newest original, picture, video and article posts, up to about 300 for each user. For a user's full video history, use **Weibo Video Scraper**.

**Why are the profile fields repeated on every row?**
So that each row is complete on its own. You can filter, sort or chart the posts by follower count or verification without joining two tables. The **Author profiles** table in the **Output** tab shows the profile fields only.

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

**Is it legal to scrape Weibo profiles and posts?**
The Actor collects only data that is publicly available. Profiles and 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

## `userIds` (type: `array`):

Numeric user IDs (2803301701), profile URLs (https://weibo.com/u/2803301701, https://weibo.com/rmrb, https://m.weibo.cn/u/2803301701) or screen names (人民日报).

## `maxResults` (type: `integer`):

The most posts to save for each user, newest first. Set 0 for all that Weibo shows to visitors (up to about 300).

## Actor input object example

```json
{
  "userIds": [
    "2803301701",
    "https://weibo.com/rmrb"
  ],
  "maxResults": 20
}
```

# 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 = {
    "userIds": [
        "2803301701",
        "https://weibo.com/rmrb"
    ],
    "maxResults": 20
};

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

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

```

## MCP server setup

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