# WeChat Official Accounts Scraper (微信公众号) (`parsebird/wechat-official-accounts-scraper`) Actor

Scrape WeChat Official Account (微信公众号) articles by keyword, account name or link: title, account, author, date, full text, HTML, Markdown, images and video IDs, or discover accounts by topic.

- **URL**: https://apify.com/parsebird/wechat-official-accounts-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.49 / 1,000 records

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

### WeChat Official Accounts Scraper (微信公众号)

**WeChat Official Accounts Scraper** extracts public WeChat Official Account (微信公众号) articles by keyword, account name or article link: title, account, WeChat ID, author, publish date, summary, full text, HTML, Markdown, images, video IDs and links. It can also discover the Official Accounts writing about a topic. Export everything as JSON, CSV or Excel.

<table><tr>
<td style="border-left:4px solid #07C160;padding:12px 16px;font-weight:600">
Search WeChat articles in Chinese or English, collect an account's indexed articles, read any public mp.weixin.qq.com link, or find the accounts behind a topic, and get clean article text and Markdown ready for analysis or AI pipelines.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/wechat-official-accounts-scraper. Scrapes public WeChat Official Account (微信公众号) articles found through Sogou WeChat search (weixin.sogou.com) or from mp.weixin.qq.com links. Call via ApifyClient: client.actor("parsebird/wechat-official-accounts-scraper").call(run_input={"mode": "search", "keywords": ["人工智能"], "sortBy": "recent", "maxItems": 50}). Inputs: mode (string: auto | search | articles | account_search | account_history; default auto = run every filled field: keywords as search, articleUrls directly, accounts as account history), keywords (array of strings, Chinese or English, one Sogou article search each, at most 100 results per keyword), articleUrls (array of mp.weixin.qq.com/s/... or /s?__biz=...&mid=...&idx=...&sn=... links), accounts (array: exact account names for account_history, or topics for account_search), sortBy (relevance | recent, default relevance), includeContent (boolean, default true: contentText, contentHtml, contentMarkdown), includeImages (boolean, default true: coverImage, accountAvatar, images), maxItems (integer, total records, default 100), maxConcurrency (integer, default 6), proxyConfiguration (object, default Apify Proxy). Article record fields: recordType "article", title, accountName, accountId (WeChat ID / alias), accountUsername (gh_ ID), author, publishedAt, articleUrl, summary, coverImage, accountDescription, accountAvatar, contentText, contentHtml, contentMarkdown, images, videoIds, links [{text, url}], linkCount, wordCount, characterCount, imageCount, videoCount, biz, mid, idx, sn, isOriginal, searchKeyword, sourceUrl, scrapedAt. Account record fields (account_search): recordType "account", accountName, accountId, accountUsername, description, avatar, biz, latestArticleTitle, latestArticleUrl, latestPublishedAt, articlesInResults, searchKeyword, scrapedAt. Pricing: per record saved, plus an official-account-profile event per profile in account_search mode. Full API spec: https://apify.com/parsebird/wechat-official-accounts-scraper/api. Get your token: https://console.apify.com/settings/integrations.
```

### What is WeChat Official Accounts Scraper?

WeChat Official Accounts (微信公众号) are where Chinese media, brands, government bodies and independent writers publish long-form articles. The articles live on `mp.weixin.qq.com`, and most of them are indexed by [Sogou WeChat search](https://weixin.sogou.com) (搜狗微信搜索).

**WeChat Official Accounts Scraper** turns that index into a dataset. Enter a keyword such as `人工智能` or `新能源汽车`, press Start, and get each article's title, account, author, date, full text and images. No WeChat account, app or API key is needed. It works as a **WeChat article API alternative** for monitoring, research and content analysis.

### What can WeChat Official Accounts Scraper do?

- 🔎 **Article search by keyword.** Search Chinese or English keywords and get up to 100 articles per keyword, by relevance or newest first.
- 🔗 **Article links.** Paste public `mp.weixin.qq.com` links to scrape known articles.
- 📣 **Articles from an account.** Enter an account's exact name, such as `环球时报`, to collect its articles that Sogou has indexed.
- 🧭 **Account discovery.** Enter a topic to get one profile per Official Account writing about it: name, WeChat ID, description, avatar and latest article.
- 📄 **Full content in three formats.** Plain text, cleaned HTML and Markdown, with real image links, ready for search indexes or LLM pipelines.
- 🖼️ **Media and links.** Cover image, every image in the article, WeChat video IDs and outbound links.
- 📊 **Statistics.** Word count (Chinese characters and English words), character count, image, video and link counts, and whether the article is marked original (原创).
- 📅 **Scheduling and integrations.** Run daily with [Apify Schedules](https://docs.apify.com/platform/schedules) and send results to Google Sheets, Slack, Zapier, Make or a webhook with [Apify integrations](https://docs.apify.com/platform/integrations).
- 🔌 **API access.** Start runs and read results from your own code with the [Apify API](https://docs.apify.com/api/v2).

### What data can you extract from WeChat Official Accounts?

| Group | Fields |
|-------|--------|
| 📰 Article | `title`, `author`, `publishedAt`, `articleUrl`, `summary` |
| 📣 Publisher | `accountName`, `accountId` (WeChat ID), `accountUsername` (gh\_ ID), `accountDescription`, `accountAvatar` |
| 📄 Content | `contentText`, `contentHtml`, `contentMarkdown` |
| 🖼️ Media | `coverImage`, `images`, `videoIds` |
| 🔗 Links | `links`, `linkCount` |
| 📊 Statistics | `wordCount`, `characterCount`, `imageCount`, `videoCount` |
| 🔬 Identifiers | `biz`, `mid`, `idx`, `sn`, `isOriginal` |
| 🧭 Context | `recordType`, `searchKeyword`, `sourceUrl`, `scrapedAt` |

Account profiles from **Discover accounts** have `accountName`, `accountId`, `accountUsername`, `description`, `avatar`, `biz`, `latestArticleTitle`, `latestArticleUrl`, `latestPublishedAt` and `articlesInResults` (how many of the topic's results came from that account).

Picture posts and video posts have no article body. For them, `contentText` is the post's description, and `images` lists the pictures in the post.

### How to scrape WeChat Official Account articles

1. Open [WeChat Official Accounts Scraper](https://apify.com/parsebird/wechat-official-accounts-scraper) and click **Try for free**.
2. Enter one or more **keywords**, paste **article links**, or enter **account names**.
3. Keep **Mode** on **Auto**, or choose a single mode such as **Discover accounts by topic**.
4. Choose **Relevance** or **Newest first**, and whether to include content and images.
5. Set **Max results** and click **Start**.
6. Download the data from the **Output** tab as JSON, CSV, Excel or HTML.

### How much does it cost to scrape WeChat articles?

This scraper uses pay-per-event pricing. You pay for each record saved. Compute and proxy costs are included.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| Record: article or account saved (`record`) | $10.99 / 1,000 | $9.99 / 1,000 | $8.99 / 1,000 | $8.49 / 1,000 |
| Official account profile (`official-account-profile`) | $11.99 / 1,000 | $10.99 / 1,000 | $9.99 / 1,000 | $9.49 / 1,000 |

The **Official account profile** event is an extra charge for each unique account profile returned by **Discover accounts by topic**, on top of its record. Articles are charged only as records.

For example, on the Free plan 100 articles cost **$1.10**, and 100 account profiles cost $1.10 + $1.20 = **$2.30**. Articles that can't be loaded (deleted or removed by WeChat) are skipped and not charged. Apify's free plan includes monthly platform credit you can use to try the scraper. Set a maximum cost per run in the run options and the scraper stops when it reaches it.

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | string | `auto` | `auto`, `search`, `articles`, `account_search`, `account_history` |
| `keywords` | array | — | Topics, brands, industries or phrases |
| `articleUrls` | array | — | Public mp.weixin.qq.com article links |
| `accounts` | array | — | Exact account names (`account_history`) or topics (`account_search`) |
| `sortBy` | string | `relevance` | `relevance` or `recent` (newest first) |
| `includeContent` | boolean | `true` | Add text, HTML and Markdown |
| `includeImages` | boolean | `true` | Add cover, avatar and inline image links |
| `maxItems` | integer | `100` | Maximum articles or account profiles saved |
| `maxConcurrency` | integer | `6` | Articles opened in parallel |
| `proxyConfiguration` | object | Apify Proxy | Proxy settings |

In **Auto** mode, pasted links are scraped first, then keywords and account names share the rest of `maxItems`.

**Search by keyword**

```json
{
    "mode": "search",
    "keywords": ["人工智能", "新能源汽车"],
    "sortBy": "recent",
    "maxItems": 100
}
```

**Scrape known article links**

```json
{
    "mode": "articles",
    "articleUrls": ["https://mp.weixin.qq.com/s/_2kC-fXw7UjneZSrsC9CVQ"]
}
```

**Discover Official Accounts by topic**

```json
{
    "mode": "account_search",
    "accounts": ["咖啡"],
    "maxItems": 20
}
```

**Collect an account's indexed articles**

```json
{
    "mode": "account_history",
    "accounts": ["环球时报"],
    "maxItems": 50
}
```

### Output example

An article record (content and long values shortened):

```json
{
    "recordType": "article",
    "title": "中国驻菲使馆回应《环球时报》：是我们的一寸也不能丢",
    "accountName": "环球时报",
    "accountId": "hqsbwx",
    "accountUsername": "gh_95b0feda9646",
    "author": "樊帆 唐亚 张玉滢",
    "publishedAt": "2026-03-19T01:41:09.000Z",
    "articleUrl": "https://mp.weixin.qq.com/s?src=11&timestamp=1791902153&ver=7024&signature=3tamwTPxmY...",
    "summary": "就菲方近期种种闹剧,中国驻菲律宾大使馆18日独家回应《环球时报》称,中方在南海问题上的立场是一贯的、明确的,是我们的一寸...",
    "coverImage": "https://mmbiz.qpic.cn/mmbiz_jpg/z8icaWS616QXOZkM9Vy2zZic6h9pjlRWrx.../0?wx_fmt=jpeg",
    "accountDescription": "看环球时报，与世界零距离",
    "accountAvatar": "https://mmbiz.qpic.cn/mmbiz_png/wlCrBZoK8HGKibibrZBXcyf4EUbmkg5Aky.../0?wx_fmt=png",
    "contentText": "黄岩岛主权铁证如山，菲炒作徒劳！中国驻菲使馆：是我们的一寸也不能丢。\n南部战区新闻发言人表示...",
    "contentHtml": "<div class=\"rich_media_content js_underline_content ...\" id=\"js_content\">...",
    "contentMarkdown": "黄岩岛主权铁证如山，菲炒作徒劳！中国驻菲使馆：是我们的一寸也不能丢。\n\n南部战区新闻发言人表示...",
    "images": ["https://mmbiz.qpic.cn/mmbiz_png/z8icaWS616QWM45I0WxpTNNibIbtc2y4u8l.../640?wx_fmt=png&from=appmsg"],
    "videoIds": [],
    "links": [],
    "linkCount": 0,
    "wordCount": 1476,
    "characterCount": 1677,
    "imageCount": 3,
    "videoCount": 0,
    "biz": "MjM5MDk1NzQzMQ==",
    "mid": "2654110574",
    "idx": "2",
    "sn": null,
    "isOriginal": true,
    "searchKeyword": "环球时报",
    "sourceUrl": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci...",
    "scrapedAt": "2026-10-13T14:36:11.000Z"
}
```

An account profile record from **Discover accounts by topic** (shortened):

```json
{
    "recordType": "account",
    "accountName": "企鹅吃喝指南",
    "accountId": "qiechihe",
    "description": "客观独立，亲身实测，专业严选，找遍来自全世界的好东西，和你分享...",
    "latestArticleTitle": "咖啡界卷到尽头，是这。",
    "latestPublishedAt": "2022-10-04T04:20:50.000Z",
    "articlesInResults": 4,
    "searchKeyword": "咖啡"
}
```

Download the dataset as JSON, CSV, Excel, XML or HTML from the Output tab or through the API. The **Articles** and **Accounts** views show the most-used columns.

### Use the WeChat Official Accounts Scraper API

With the [Apify API client for Python](https://docs.apify.com/api/client/python):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/wechat-official-accounts-scraper").call(run_input={
    "mode": "search",
    "keywords": ["人工智能"],
    "sortBy": "recent",
    "maxItems": 50,
})
for article in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(article["publishedAt"], article["accountName"], article["title"])
```

With the [Apify API client for JavaScript](https://docs.apify.com/api/client/js):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/wechat-official-accounts-scraper').call({
    mode: 'account_search',
    accounts: ['新能源汽车'],
    maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((a) => console.log(a.accountName, a.accountId, a.description));
```

See the [API tab](https://apify.com/parsebird/wechat-official-accounts-scraper/api) for HTTP endpoints, including a single call that runs the scraper and returns the dataset.

### Use cases

- **Media and brand monitoring.** Track what WeChat accounts publish about your brand, product or industry.
- **Market research in China.** Follow topics such as new energy vehicles, AI or consumer trends through the articles published about them.
- **Competitor and KOL research.** Find the Official Accounts active on a topic and read their latest articles.
- **Content archives and AI datasets.** Save articles as Markdown with images for search indexes, RAG pipelines or translation.
- **Academic research.** Collect public articles for text analysis of Chinese online media.

### How it works

1. Keywords and account names are searched on Sogou WeChat search, which indexes public Official Account articles. Sogou shows up to 10 pages of 10 results per query to visitors who aren't logged in.
2. Each result is opened on mp.weixin.qq.com, and the article page is parsed for its text, images, account details and identifiers.
3. For account history, only results published by the account with exactly that name are kept. For account discovery, results are grouped by account, and each account's latest article supplies its profile.
4. When Sogou starts refusing searches from one IP, the scraper switches to a new proxy IP and continues.

### FAQ

**Why are there at most 100 articles per keyword?**
Sogou shows 10 pages of results per query to visitors who aren't logged in, and its date filters also require a login. Add more specific keywords to collect more articles.

**Does account history return every article an account has published?**
No. It searches Sogou for the account's name and keeps the results published by that account, so it returns the indexed articles that appear in the first 100 results. For very widely quoted names, those 100 results can all come from other accounts that mention the name (in our tests, a search for 人民日报 returned no articles by 人民日报 itself). A full history needs the WeChat app, which this scraper does not use.

**Why does `articleUrl` look different for search results?**
Articles found through Sogou open on a signed `mp.weixin.qq.com/s?src=11&timestamp=...&signature=...` link, because WeChat hides the permanent link (and `sn`) on pages reached from Sogou. These links worked for hours in our tests, but WeChat may expire them, so save the content you need. `biz`, `mid` and `idx` identify the article permanently. Links you paste yourself are kept as they are.

**Why is `sn` empty?**
WeChat doesn't include it on pages opened from Sogou. It is filled for article links that contain it.

**How long does a run take?**
About 1–2 minutes for 10 articles and 10–15 minutes for 100. Each article page is large (several MB), and Sogou limits how fast one IP can search, so the scraper paces itself and switches IPs as it goes.

**What happens with deleted articles?**
Articles deleted by the publisher or removed by WeChat are skipped, logged, and not charged.

**Does it need a WeChat account?**
No. It only reads public article pages and Sogou's public search results.

**Something doesn't work. What should I do?**
Open an issue on the **Issues** tab with your input and run link.

### Is it legal to scrape WeChat Official Account articles?

This scraper reads only public articles that anyone can open in a browser, and public search results. Articles are copyrighted by their publishers, and some contain personal data such as author names. Use the data for research, monitoring or analysis, respect copyright when republishing, and follow the laws that apply to you, including China's Personal Information Protection Law (PIPL) and the GDPR. Read more in Apify's blog post on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Other scrapers by ParseBird

- [Made-in-China.com Scraper & API](https://apify.com/parsebird/made-in-china-scraper) – Chinese suppliers and products
- [Naver Blog & Cafe Scraper](https://apify.com/parsebird/naver-blog-cafe-scraper) – Korean blog and cafe posts
- [PR Newswire Scraper](https://apify.com/parsebird/pr-newswire-scraper) – press releases
- [Reddit Search Scraper](https://apify.com/parsebird/reddit-search-scraper) – Reddit posts by keyword
- [Facebook Group Posts & Comments Scraper](https://apify.com/parsebird/facebook-group-posts-comments-scraper) – posts and comments from public Facebook groups

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/wechat-official-accounts-scraper/changelog.md

# Actor input Schema

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

Auto runs every field you fill in: keywords as an article search, article links directly, and account names as account history. Pick a mode to run only one of them, or 'Discover accounts' to get account profiles for a topic.

## `keywords` (type: `array`):

Topics, brands, industries or phrases, one per line, in Chinese or English. Each keyword runs as its own article search.

## `articleUrls` (type: `array`):

Public mp.weixin.qq.com article links, such as https://mp.weixin.qq.com/s/xxxx or https://mp.weixin.qq.com/s?\_\_biz=...\&mid=...\&idx=...\&sn=...

## `accounts` (type: `array`):

For 'Articles from an account': the exact account name, such as 人民日报. For 'Discover accounts by topic': a topic, such as 人工智能.

## `sortBy` (type: `string`):

Relevance keeps Sogou's order. Newest first reads all available results and sorts them by publish time.

## `includeContent` (type: `boolean`):

Add the full article as plain text, HTML and Markdown.

## `includeImages` (type: `boolean`):

Add the cover image, account avatar and the image links inside the article.

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

Maximum number of articles (or account profiles in 'Discover accounts') to save in total.

## `maxConcurrency` (type: `integer`):

How many articles are opened in parallel.

## `proxyConfiguration` (type: `object`):

Sogou limits how many searches one IP can make, so the scraper changes IP when it is blocked. Apify Proxy (datacenter) works well.

## Actor input object example

```json
{
  "mode": "auto",
  "keywords": [
    "人工智能"
  ],
  "sortBy": "relevance",
  "includeContent": true,
  "includeImages": true,
  "maxItems": 10,
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "keywords": [
        "人工智能"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/wechat-official-accounts-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 = {
    "keywords": ["人工智能"],
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/wechat-official-accounts-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 '{
  "keywords": [
    "人工智能"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call parsebird/wechat-official-accounts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/wechat-official-accounts-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/8b7auWKCxELfkhJb9/builds/mcib1MgrIVkrPdkh8/openapi.json
