# Sogou WeChat Article Search Scraper (`maximedupre/wechat-article-scraper`) Actor

Find public WeChat Official Account articles by keyword or Sogou search URL, or read article links. Get titles, account names, dates, and links, plus article text and images when accessible.

- **URL**: https://apify.com/maximedupre/wechat-article-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, News, Marketing
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 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

### 🔎 Find and read public WeChat articles

For China market researchers, content teams, and developers, this WeChat article scraper finds public WeChat Official Account articles through Sogou. It returns titles, account names, dates, and links, plus readable text, HTML, and images when accessible. Use the saved data to review topics and feed your own content analysis without copying each article by hand.

- Collect public articles with **[WeChat Article Scraper](https://apify.com/maximedupre/wechat-article-scraper/examples/wechat-article-scraper)**.
- Find articles about a brand with **[WeChat Brand Monitoring](https://apify.com/maximedupre/wechat-article-scraper/examples/wechat-brand-monitoring)**.
- Find articles within a date range with **[WeChat Historical Article Search](https://apify.com/maximedupre/wechat-article-scraper/examples/wechat-historical-article-search)**.
- Collect articles from search pages with **[Sogou WeChat Search Scraper](https://apify.com/maximedupre/wechat-article-scraper/examples/sogou-wechat-search-scraper)**.
- Read available article image links with **[WeChat Article Image Scraper](https://apify.com/maximedupre/wechat-article-scraper/examples/wechat-article-image-scraper)**.

#### 📄 Article details and text in one dataset

Each saved row is one public article or search result. Search results can still have useful titles, summaries, account names, dates, and links when the article body cannot be read. Text, HTML, author details, images, and other optional fields appear when the source provides them.

The Actor saves the first eligible match of an article as it finds it. Later matches from another keyword or URL are ignored and do not change the saved row. `discoveryInput` shows only the keyword or search URL that first led to that row.

#### ▶️ Choose a WeChat article search or link list

1. Choose **Keywords**, **Article links**, or **Search URLs** in the Input tab.
2. Fill in that section. Fields in the other two sections are ignored.
3. For keyword or search URL runs, add dates and a total article limit if needed.
4. Start the Actor, then open **Articles** to review or export your data.

No WeChat login is needed. The Actor reads public search results and accessible public articles. It does not provide all articles ever published by an account or complete coverage of WeChat.

#### ⚙️ Input

| Field | Type | What it does |
| --- | --- | --- |
| `findBy` | string | Required. Choose `keywords`, `articleLinks`, or `searchUrls`. Only the chosen section is used. |
| `keywords` | array of strings | Search terms for finding articles across accounts. All terms share the date range and one total result limit. |
| `articleLinks` | array of objects | Short or long WeChat article links to read. In JSON, each entry has a `url` string. |
| `searchUrls` | array of objects | Sogou WeChat article search URLs to discover articles. In JSON, each entry has a `url` string. |
| `publishedAfter` | string | For Keywords and Search URLs, keep articles published on or after this `YYYY-MM-DD` date. Leave empty for no start date. |
| `publishedBefore` | string | For Keywords and Search URLs, keep articles published on or before this `YYYY-MM-DD` date. Leave empty for no end date. |
| `maxItems` | integer | For Keywords and Search URLs, stop after this many articles in total across all submitted values. Leave empty to return all available results until the source is exhausted. The minimum is 1, with no fixed upper bound. |

**Example input**

This is the public input from the successful current-beta default-input run:

```json
{
  "findBy": "keywords",
  "keywords": [
    "人工智能"
  ],
  "maxItems": 3
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `articles` | string | Opens the saved article rows in the run's dataset. |

**Article row**

Search and direct-link runs use the same article shape. Every row has a `title` and at least one of `articleUrl` or `discoveryUrl`. Other fields appear when available. Search-only fields can be absent in direct-link rows.

| Field | Type | What it does |
| --- | --- | --- |
| `title` | string | Article title from the source. |
| `articleUrl` | string | Resolved WeChat article link. Signed links may expire. |
| `discoveryUrl` | string | Sogou link used to open the search result. |
| `summary` | string | Source summary or digest. |
| `accountName` | string | Name of the publishing WeChat Official Account. |
| `accountId` | string | Source ID for the publishing account. |
| `accountAvatarUrl` | string | Link to the account's avatar. |
| `publishedAt` | string | Publication date or date and time reported by the source. |
| `author` | string | Author named by the source. |
| `coverImageUrl` | string | Source cover-image link. |
| `text` | string | Full readable article text, or an image-post caption, when accessible. |
| `html` | string | Article body HTML with source formatting, links, and images when accessible. |
| `images` | array of strings | Article image links in source order. May be empty. |
| `isOriginal` | boolean | Whether the source marks the article as original. |
| `publisherRegion` | string | Publisher region disclosed by the source. |
| `articleId` | string | Source article ID used to match the same article across results. |
| `searchPosition` | integer | Article position in the source search results. |
| `discoveryInput` | string | Keyword or search URL for the first saved match. Later matches are not added. |

This complete row is from the successful current-beta keyword run. Its source keys and values are unchanged:

```json
{
  "title": "什么是教创赛—人工智能赛道？",
  "discoveryUrl": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0F7hGJIozHKWlmLChp78mloOQSL5SBJ81qXa8Fplpd98jbnL0DMN0G6-dH2LeX2MwJFF7pBUAhhzeCQDQRMxvR2G4nxZ0e53iRZBrmNcCut-TO3gQAbuV4MI7KLZidSTj72_7pCYLgTqRCgwbqR49Coy_wvA39KaDzQws2ve5Rdz_3-pE0_oKhbsISxqZ3KWfU5-vH71JvSSmXVk0ow34LYl_Q5RRZQjg..&type=2&query=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&token=D5224CB29FEA7CBBD1D78DE0D78CDC09D1F34C636AC53B72",
  "summary": "【什么是人工智能赛道】\n你知道教创赛里有个专门的人工智能赛道吗？它不是比谁的AI工具多，而是比谁用AI真正解决了教学问题。全国高校教师教学创新大赛设了9个赛道，人工智能赛道聚焦一件事——用AI系统性地重构教学内容、教学方法、教学环境和教学评价。核心就八个字：以学生为中心，人机协作。你光用AI批改作业不够，你得让AI贯穿课前诊断、课中协同、课后评价的全流程，还得拿出可量化的效果数据和可复制的教学模式。\n\n【第六届回顾】\n第六届教创赛2026年2月启动，9个赛道并跑。人工智能赛道要求提交三样东西：课堂教学实录视频40到50分钟全程连续录制禁止剪辑、教学创新成果报告必须有客观证据和对比数据、教学设计创新汇报。评审看五个维度：教学理念、教学内容、教学过程、教学效果、视频质量。第六届有几个标杆案例——天津科技大学的操作系统课，AI赋能教学评价，模式辐射了全国106所院校；浙江大学的大学英语，&quot;诊断加教学加评价加推送&quot;闭环模式，文科跟AI深度融合。\n\n【第七届三大变化】\n第七届2026年9月启动，跟第六届比有三个大变化。第一，赛道从9个减到7个——新医科和新农科合并进了新工科和新文科，但人工智能赛道保留不变，说明国家对这个方向的持续重视。第二，新增了学院初赛环节——以前是校赛直接选拔，现在要求基层教学组织先搞院级竞赛，备赛研讨要纳入年度活动计划，留存过程性材料。第三，评审标准升级——对教学设计重构、数字技术融合、创新成果凝练都提出了更高标准，明确要求AI和知识图谱等工具要真正落地，不能流于形式。简单说，第七届更看重&quot;真用AI&quot;而不是&quot;摆AI&quot;。\n\n【备赛建议】\n给准备参赛的老师三个建议。第一，模式要图形化——用8到12个字命名你的教学模式，配一张机理图，让评委10秒内抓住你的创新点。第二，数据要闭环——课前AI诊断、课中人机协同、课后AI评价，每个环节都得有数据留痕，用柱状图折线图展示学生成绩的提升。第三，伦理要显性——单独写一节说明数据匿名化、AI内容查重和学术诚信。记住：评委看的不是你用了多少AI工具，而是AI有没有真正改变学生的学习体验。",
  "accountName": "思研AI学堂",
  "publishedAt": "2026-10-06T14:21:51.000Z",
  "coverImageUrl": "http://mmbiz.qpic.cn/sz_mmbiz_jpg/eyLiaQUN730LPicFCYSG4zicZgfNPJMHicerqicER3xXXxDpSg0bLIVbIecdu2jCbhhj4Zl0ZuRvu5VnYsoPMk9NibFZ5pyoWyz32tf8dFZoMESV4/0?wx_fmt=jpeg",
  "searchPosition": 3,
  "discoveryInput": "人工智能",
  "articleUrl": "https://mp.weixin.qq.com/s?src=11&timestamp=1791310706&ver=7010&signature=4BwPET4hFamhsYzL*v5CphMW80STIrxjYfD5HVQpQORRnhQAInbIPCJAGIwhx*thAO-RQd-kpQSSoLpiiX1c7UXuf5X-7oR*PqMHBMBs9jw4z2gKqs5V-CqzAMnBwRoH&new=1",
  "accountId": "gh_19d0c3692210",
  "accountAvatarUrl": "http://wx.qlogo.cn/mmhead/icF4iau8Sj7b0Ln3eSOhsqcZKVuJ5lom1TZ7lYQnWnE6YicLdy4UViaNJlsuic1Xw7RkbwRicR5E8YrFY/132",
  "author": "思研AI学堂",
  "text": "【什么是人工智能赛道】\n你知道教创赛里有个专门的人工智能赛道吗？它不是比谁的AI工具多，而是比谁用AI真正解决了教学问题。全国高校教师教学创新大赛设了9个赛道，人工智能赛道聚焦一件事——用AI系统性地重构教学内容、教学方法、教学环境和教学评价。核心就八个字：以学生为中心，人机协作。你光用AI批改作业不够，你得让AI贯穿课前诊断、课中协同、课后评价的全流程，还得拿出可量化的效果数据和可复制的教学模式。\n\n【第六届回顾】\n第六届教创赛2026年2月启动，9个赛道并跑。人工智能赛道要求提交三样东西：课堂教学实录视频40到50分钟全程连续录制禁止剪辑、教学创新成果报告必须有客观证据和对比数据、教学设计创新汇报。评审看五个维度：教学理念、教学内容、教学过程、教学效果、视频质量。第六届有几个标杆案例——天津科技大学的操作系统课，AI赋能教学评价，模式辐射了全国106所院校；浙江大学的大学英语，\"诊断加教学加评价加推送\"闭环模式，文科跟AI深度融合。\n\n【第七届三大变化】\n第七届2026年9月启动，跟第六届比有三个大变化。第一，赛道从9个减到7个——新医科和新农科合并进了新工科和新文科，但人工智能赛道保留不变，说明国家对这个方向的持续重视。第二，新增了学院初赛环节——以前是校赛直接选拔，现在要求基层教学组织先搞院级竞赛，备赛研讨要纳入年度活动计划，留存过程性材料。第三，评审标准升级——对教学设计重构、数字技术融合、创新成果凝练都提出了更高标准，明确要求AI和知识图谱等工具要真正落地，不能流于形式。简单说，第七届更看重\"真用AI\"而不是\"摆AI\"。\n\n【备赛建议】\n给准备参赛的老师三个建议。第一，模式要图形化——用8到12个字命名你的教学模式，配一张机理图，让评委10秒内抓住你的创新点。第二，数据要闭环——课前AI诊断、课中人机协同、课后AI评价，每个环节都得有数据留痕，用柱状图折线图展示学生成绩的提升。第三，伦理要显性——单独写一节说明数据匿名化、AI内容查重和学术诚信。记住：评委看的不是你用了多少AI工具，而是AI有没有真正改变学生的学习体验。",
  "images": [
    "https://mmbiz.qpic.cn/mmbiz_png/eyLiaQUN730KLS1y8p2ZzEFUpojRVMf4qd8ojz7dpjTpd6RxzPhEg3KJsrfod9YpRyY4fw5pUs0LnqqgEkicc4cUibV8EUHDw43NcYtxGIfqn8/0?wx_fmt=png"
  ],
  "isOriginal": false,
  "publisherRegion": "陕西",
  "articleId": "MzU2NTYxOTkwMA==:2247483679:1"
}
```

#### 💳 Pricing

The Actor uses pay-per-event pricing. The **Article** event charges for each article saved with details from a search. The **Article text** event adds a charge when an article's full readable text is saved. A search article with readable text can incur both charges.

Reading a submitted article link uses the text event when its text is saved. An article without accessible text does not incur a text charge. Empty searches do not incur an article charge. There is no separate start event in this Actor's pricing. Check the Pricing tab for current prices for your Apify plan.

#### 🔌 Integrations

Export your dataset as JSON, CSV, or Excel, or read it through the Apify API. Use Apify schedules for repeat runs and webhooks to tell your workflow when a run ends. Your own analysis tools can use the saved text and source links.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Why does a saved article have no text or HTML?

The article body may be unavailable even when Sogou shows a search result. The saved search details can still help you find and review the article. Optional fields are included only when accessible.

##### Will the saved article links work forever?

No. Signed WeChat links may expire. The text and other details already saved in your dataset remain there even if a source link stops opening.

##### What happens when two keywords find the same article?

The first eligible match is saved. Later matches are ignored. The row is not changed to add later keywords or URLs.

##### Can each keyword have its own dates or limit?

All keywords in one run share the same dates and total limit. Use separate runs for different settings. Date filters and `maxItems` apply to keyword and search URL runs.

##### Can I get every article from one Official Account?

This Actor searches public articles or reads the links you submit. It does not provide a complete account history or all WeChat articles. Leaving `maxItems` empty returns all available results until the source is exhausted, which may still be less than all published articles.

##### Does it return reads, likes, comments, or private articles?

These fields are not part of this Actor's output. Private, restricted, and deleted content is outside its scope.

##### Can I use it through an API instead of running a GitHub scraper?

Yes. You can start this Actor and read its dataset through the Apify API. The input and output fields are listed above. No WeChat login is needed to read the public content this Actor supports.

### 📝 Changelog

**v0.0** (06-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~wechat-article-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Weibo Scraper for Posts and Feeds](https://apify.com/maximedupre/weibo-scraper): Compare public Weibo posts and trends with topics found on WeChat.
- [Zhihu Search Scraper: Q\&A](https://apify.com/maximedupre/zhihu): Find public questions, answers, and articles about the same research topics.
- [Douyin Search Scraper](https://apify.com/maximedupre/douyin-search-scraper): Review public Douyin posts about your keywords alongside WeChat articles.
- [RedNote Note Detail Scraper](https://apify.com/maximedupre/rednote-note-detail-scraper): Read known public Xiaohongshu note links for content and creator research.
- [Webpage Text Extractor](https://apify.com/maximedupre/webpage-text-extractor): Extract text from public web pages outside WeChat for a wider article collection.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `findBy` (type: `string`):

Choose how to find public WeChat Official Account articles.

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

Enter one or more search terms to find articles across accounts. All terms share the date range and one total result limit.

## `articleLinks` (type: `array`):

Add one or more short or long WeChat article links to read their text and other available article details.

## `searchUrls` (type: `array`):

Add one or more Sogou WeChat article search URLs to discover articles from those searches.

## `publishedAfter` (type: `string`):

For Keywords and Search URLs, keep articles published on or after this date. Leave blank for no start date.

## `publishedBefore` (type: `string`):

For Keywords and Search URLs, keep articles published on or before this date. Leave blank for no end date.

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

For Keywords and Search URLs, stop after this many articles in total across all submitted values. Leave blank to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "findBy": "keywords",
  "keywords": [
    "人工智能"
  ],
  "maxItems": 3
}
```

# Actor output Schema

## `articles` (type: `string`):

Open the collected article rows.

# 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 = {
    "findBy": "keywords",
    "keywords": [
        "人工智能"
    ],
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/wechat-article-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 = {
    "findBy": "keywords",
    "keywords": ["人工智能"],
    "maxItems": 3,
}

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

```

## MCP server setup

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