# WeChat Album Scraper (微信公众号合集 Articles) (`hgservices/wechat-album-scraper`) Actor

Scrape every article of a WeChat Official Account album (合集) by album link or article link. Get titles, publish dates, covers, full text, HTML and images. No login and no cookie needed.

- **URL**: https://apify.com/hgservices/wechat-album-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 $0.90 / 1,000 scraped articles

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

### What does WeChat Album Scraper do?

**WeChat Album Scraper** downloads **every article of a WeChat Official Account album** (**微信公众号合集**). Paste an **album link**, an **album ID** or **any article link**, and get each article with its **title, link, publish date, cover image, full text, HTML, author and image URLs**.

**No login, no cookie and no WeChat account are needed.** Albums are public pages, so you can start right away.

Run it on the Apify platform and you get **API access, scheduling, integrations, proxy rotation and run monitoring**. Export the data as JSON, CSV or Excel, or ask for WeChat articles from an AI assistant such as Claude or ChatGPT.

Official Accounts on [WeChat](https://mp.weixin.qq.com) put their articles into **albums** (合集): a series, a column, a topic or a course. One album can hold hundreds of articles. The Actor reads the full list of an album and gives **one row per article, newest first**:

- **Album data:** album title, description, number of articles, account name and account ID
- **Article data:** title, link, publish date and time, square cover image, paid flag and position in the album
- **Full content (optional):** article text, HTML, author and all image URLs

When you give an **article link**, the Actor finds every album that the article belongs to and scrapes all of them.

### Why use WeChat Album Scraper?

- **China research and policy analysis:** collect a full series of reports, columns or speeches from a government body, a university or a think tank.
- **Brand, market and competitor intelligence:** get a brand's complete topic series in one run, with dates.
- **AI, LLM and NLP datasets:** collect long-form, dated Chinese text with its source, already grouped by topic.
- **Media monitoring:** schedule a run and get the new articles of an album every day.
- **Archives and journalism:** save a full series of articles before the account deletes them.

### How to scrape a WeChat Official Account album

1. Open a WeChat article in the WeChat app or in your browser.
2. Under the title, click the **album name** (#合集) and copy the album link. You can also copy the **article link** itself.
3. Paste one or more links into **Album or article links**.
4. Set **Max articles per album**. The default is 100, and `0` gets the whole album.
5. Optional: turn off **Include full article content** to get only titles, dates and links.
6. Click **Start**.
7. Open the **Output** tab when the run finishes. Export the data as JSON, CSV, Excel, XML or HTML.

### Input

Set the input on the **Input** tab, or send it as JSON through the API.

| Field | What it does | Default |
|-------|--------------|---------|
| **Album or article links** (`startUrls`) | Album links, album IDs or article links, one per line. Required. | – |
| **Max articles per album** (`maxArticles`) | The maximum number of articles from each album, newest first. `0` gets the whole album. | `100` |
| **Include full article content** (`includeContent`) | Adds the article text, HTML, author and image URLs. Turn it off to get titles, dates and links only, which is much faster. | `true` |

These link types all work:

- Album link: `https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA3Nzg0ODUzMQ==&action=getalbum&album_id=4249242728875540493`
- Album ID: `4249242728875540493`
- Article link, short or long: `https://mp.weixin.qq.com/s/...` or `https://mp.weixin.qq.com/s?__biz=...`

#### Example: a whole album, titles and dates only

```json
{
  "startUrls": ["https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA3Nzg0ODUzMQ==&action=getalbum&album_id=4249242728875540493"],
  "maxArticles": 0,
  "includeContent": false
}
```

#### Example: the 50 newest articles of each album of one article, with full text

```json
{
  "startUrls": ["https://mp.weixin.qq.com/s?__biz=MzA3Nzg0ODUzMQ==&mid=2659577944&idx=1&sn=7b41bf29bd61d44298a00390ffdb0e8e&chksm=843a9ae4b34d13f249d4780341b2386ca7f62537d3801be725f99c7d1a911f73d3c29036e7dc"],
  "maxArticles": 50,
  "includeContent": true
}
```

### Output

You get one row per article. This example comes from a real run, with the text shortened:

```json
{
  "albumId": "4249242728875540493",
  "albumTitle": "刘 非书记报道集",
  "albumUrl": "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA3Nzg0ODUzMQ==&action=getalbum&album_id=4249242728875540493",
  "albumDescription": null,
  "albumArticleCount": 340,
  "accountName": "杭州发布",
  "accountId": "gh_f7279d1fbdc9",
  "biz": "MzA3Nzg0ODUzMQ==",
  "position": 1,
  "articleId": "2659577944_1",
  "title": "省委书记王浩在淳安调研并召开项目推进座谈会时强调：推进重点项目 做强特色产业……",
  "url": "https://mp.weixin.qq.com/s?__biz=MzA3Nzg0ODUzMQ==&mid=2659577944&idx=1&sn=…&chksm=…",
  "publishedAt": "2026-10-09T20:31:02+08:00",
  "coverUrl": "https://mmbiz.qpic.cn/mmbiz_jpg/…/300",
  "isPaid": false,
  "author": null,
  "contentText": "王浩在淳安调研并召开项目推进座谈会时强调……",
  "contentHtml": "<section>……</section>",
  "contentLength": 1297,
  "imageUrls": ["https://mmbiz.qpic.cn/…/640"],
  "scrapedAt": "2026-10-09T17:00:20+00:00"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The **Output** tab has two views: **Articles** (a short table with covers) and **Articles with full text**.

#### WeChat article data fields

| Field | Description |
|-------|-------------|
| `albumId` | The album ID |
| `albumTitle` | The album title |
| `albumUrl` | The link to the album |
| `albumDescription` | The album description, when the account wrote one |
| `albumArticleCount` | The number of articles in the album |
| `accountName` | The name of the Official Account |
| `accountId` | The original ID of the account (`gh_…`) |
| `biz` | The `__biz` ID of the account |
| `position` | The position in the album, newest first (1 = newest) |
| `articleId` | The article ID |
| `title` | The article title |
| `url` | A link that opens the article |
| `publishedAt` | The publish time, ISO 8601, China time (UTC+8) |
| `coverUrl` | The square cover image |
| `isPaid` | `true` when the article is behind a paywall |
| `author` | The article author, when the account shows one |
| `contentText` | The full article as plain text |
| `contentHtml` | The full article as HTML |
| `contentLength` | The length of the text in characters |
| `imageUrls` | The images in the article body |
| `scrapedAt` | The time when your run collected the row (UTC) |

The full-content fields are empty when **Include full article content** is off.

### How to use WeChat Album Scraper

#### In Apify Console

1. Open the Actor, fill in the **Input** tab and click **Start**.
2. Watch the progress of the run 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 get the new articles of an album every day.

#### 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~wechat-album-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": ["4249242728875540493"], "maxArticles": 20}'
```

Add `&format=csv` or `&format=xlsx` to the URL to get CSV or Excel instead of JSON. For long runs, start the run with `POST /v2/acts/hgservices~wechat-album-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/wechat-album-scraper').call({
    startUrls: [
        'https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA3Nzg0ODUzMQ==&action=getalbum&album_id=4249242728875540493',
    ],
    maxArticles: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const article of items) {
    console.log(article.position, article.publishedAt, article.title);
}
```

#### With the Python client

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

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("hgservices/wechat-album-scraper").call(
    run_input={
        "startUrls": ["4249242728875540493"],
        "maxArticles": 20,
    }
)

for article in client.dataset(run.default_dataset_id).iterate_items():
    print(article["position"], article["publishedAt"], article["title"])
```

#### 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/wechat-album-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/wechat-album-scraper"`.
- **Apify CLI:** run `apify mcp install claude-code --tools hgservices/wechat-album-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:

- *"Scrape the WeChat album 4249242728875540493 and summarize each article in English."*
- *"Get all the albums of this WeChat article and list their articles by date: https://mp.weixin.qq.com/s/..."*
- *"Get the 30 newest articles of this WeChat album and find the main topics: https://mp.weixin.qq.com/mp/appmsgalbum?..."*

#### 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, run every day for a list of albums and add the new articles to a Google Sheet or a database.

### Tips for scraping WeChat articles

- **Find albums fast.** Paste an article link. The Actor finds every album that the article belongs to.
- **Monitor an album.** Schedule a daily run with a small **Max articles per album**, such as 10. The newest articles come first. Remove duplicates by `articleId` after the run.
- **Large albums.** First run with **Include full article content** off to see the full list quickly. Then get the full text of only the articles that you need.
- **Keep runs short.** Use **Max articles per album** to get only the newest articles.

### FAQ

#### Do I need a WeChat account or a cookie?

No. Album lists and article pages are public.

#### Can I get every article of an Official Account?

This Actor gets only the articles that the account put into albums. An article that is in no album does not appear.

#### Why is the text of an article empty?

The article was deleted, it is behind a paywall, or WeChat did not serve the page during the run. The row still has the title, link and date, and the log names the article.

#### Why does one article appear twice?

An article can belong to more than one album. You get one row for each album, with the `albumId` of that album. Remove duplicates by `articleId` if you need each article only once.

#### Does it get read counts, likes or comments?

No. WeChat shows these only inside the WeChat app.

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

The Actor collects only articles that are published to the public, with no login. You are responsible for how you use the data. Follow WeChat's terms of service, copyright law and data-protection rules such as the GDPR and China's PIPL. If you are not sure, ask a lawyer.

#### I found a problem or I need a new feature

Open an issue on the **Issues** tab. We read every issue. Custom solutions for Chinese websites are also available on request.

# Actor input Schema

## `startUrls` (type: `array`):

One per line. Use an album link (`https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&action=getalbum&album_id=...`), a bare album ID (`4249242728875540493`), or an article link (`https://mp.weixin.qq.com/s/...`). For an article link, the Actor scrapes every album that the article belongs to.

## `maxArticles` (type: `integer`):

Cap the number of articles scraped per album (newest first). Defaults to 100. Set to 0 to scrape the whole album.

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

Fetch each article page and include its full text, HTML, author and image URLs. Turn off for a metadata-only run (title, link, date, cover) — much faster.

## Actor input object example

```json
{
  "startUrls": [
    "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA3Nzg0ODUzMQ==&action=getalbum&album_id=4249242728875540493"
  ],
  "maxArticles": 20,
  "includeContent": true
}
```

# Actor output Schema

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

No description

## `content` (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 = {
    "startUrls": [
        "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA3Nzg0ODUzMQ==&action=getalbum&album_id=4249242728875540493"
    ],
    "maxArticles": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/wechat-album-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 = {
    "startUrls": ["https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA3Nzg0ODUzMQ==&action=getalbum&album_id=4249242728875540493"],
    "maxArticles": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("hgservices/wechat-album-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 '{
  "startUrls": [
    "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA3Nzg0ODUzMQ==&action=getalbum&album_id=4249242728875540493"
  ],
  "maxArticles": 20
}' |
apify call hgservices/wechat-album-scraper --silent --output-dataset

```

## MCP server setup

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