The Mine Works
← All posts
tutorial August 16, 2026 · 3 min read

Weibo Scraper: Posts and Profiles by User ID

Pull Weibo posts and profile data by numeric user ID: text, repost and like counts, images, follower stats. Why a China residential IP is mandatory, not optional.

Try the scraper

The actor referenced in this article. Pay only for results delivered.

View the scraper →

Weibo is the main Chinese microblogging platform, and for brand monitoring, KOL tracking and competitor watching in the China market it is where the public conversation happens. The problem is that almost every scraping guide for it is wrong in the same way, and the failure mode misleads you.

Weibo blocks non China IP addresses at the connection level. Not with a 403, not with a captcha, and not with a login wall. The connection simply times out before Weibo’s application layer ever sees the request. So a script that works perfectly in principle produces timeouts, and the natural conclusion is that your parser is broken or that you have been detected as a bot. Neither is true. You are just not in China.

Try it live: Weibo Scraper: Posts and Profiles by User ID. Pay only for results delivered, no result no charge.

The Weibo Scraper handles the routing as part of the run, so the interesting part is left to you.

What you get

Two row types, distinguished by record_type.

post-scraped, one per post:

FieldNotes
post_idStable post identifier
textPost body
published_atPublication timestamp
source_clientThe device or client string Weibo attaches, for example iPhone or Android
reposts_count, comments_count, likes_countThe three engagement metrics Weibo exposes
image_urlsAttached images, as an array

profile-scraped, optional, one per user: display name, follower count, verification status and bio. Off by default because it costs one extra request per user, and most monitoring runs only need the posts.

Finding a user ID

Open the profile in a browser. The URL contains the numeric ID:

https://weibo.com/u/1699432410
                    ^^^^^^^^^^ this is what you pass

Store the numeric ID rather than the handle. Display names on Weibo change, the numeric ID does not.

Tracking engagement over time

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("themineworks/weibo-scraper").call(run_input={
    "profileIds": ["1699432410"],
    "maxPostsPerProfile": 50,
    "includeProfileInfo": True,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CN",
    },
})

posts = []
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row.get("record_type") == "profile-scraped":
        print(f"{row.get('screen_name')}: {row.get('followers_count'):,} followers")
    elif row.get("record_type") == "post-scraped":
        posts.append(row)

posts.sort(key=lambda p: p.get("likes_count") or 0, reverse=True)
for p in posts[:5]:
    print(f"{p['likes_count']:>7} likes  {p['text'][:70]}")

Run this on a schedule and store by post_id. Because engagement counts move after publication, re-reading the same posts over several days tells you how a post actually performed rather than how it started.

Cost reality

This is the one actor in this batch that needs a paid proxy tier, because China residential routing is not optional. That makes it more expensive to run than a no proxy actor, and the pricing reflects it. It is still far cheaper than a browser based approach, because the actor talks to JSON endpoints rather than rendering pages.

If a run returns nothing, check the proxy first. A timeout with zero posts and no error is the signature of a request that never reached China, not of a parsing problem.

Pricing

Pay per result delivered, from $2.25 per 1,000 on higher Apify plans and $3.00 per 1,000 on the free plan. Posts and profile rows are priced identically. A profile that yields nothing is not charged.

Use it from an AI agent

https://mcp.apify.com/?tools=themineworks/weibo-scraper
Related Actor

Explore the scraper referenced in this article: inputs, outputs, and pricing, then run it on Apify.

Frequently asked questions

Why does scraping Weibo need a China IP? +

Weibo refuses connections from outside China before the request reaches its application layer. You do not get a 403 or a captcha, you get a timeout, which is why non China attempts look like a broken scraper rather than a geo block. The actor routes through China residential IPs so requests actually land.

What do I pass in, a username or an ID? +

The numeric user ID, not the display name. Weibo profile URLs contain it, for example weibo.com/u/1699432410 where 1699432410 is the ID. Numeric IDs are stable across display name changes.

Can I search Weibo by keyword? +

This actor works from user IDs, which is the reliable path for tracking known accounts such as competitors, KOLs or your own brand. Keyword search on Weibo is heavily rate limited and gives inconsistent coverage, so it is not something to build a monitoring product on.