# WeChat Article Scraper API – 公众号 Search, Full Text & Markdown (`deadc0dex/wechat-article-scraper`) Actor

WeChat article scraper API, no login: search 公众号 (Official Account) articles by keyword via Sogou or pass links; get title, account, publish time, summary, link and full text as Markdown + images. Batch keywords, date filter, only-new monitoring, lean output. $0.0025/article, $0.012/full text.

- **URL**: https://apify.com/deadc0dex/wechat-article-scraper.md
- **Developed by:** [AsiaData](https://apify.com/deadc0dex) (community)
- **Categories:** Social media, News, AI
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 article (search row)s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Article Scraper API – 公众号 Search, Full Text & Markdown

**Search WeChat Official Account articles (微信公众号文章) by keyword, or pass article links, and get clean JSON back — no login, no cookies, no WeChat account.** Each row has the title, account name, publish time, summary, cover and article link; full-text rows add the whole article as **Markdown + plain text + image list**. Built for AI agents and data pipelines: array inputs, filters, only-new monitoring, a lean mode of ~140 tokens per search row, free dry runs, and error rows that say what to fix.

| You give | You get | Price |
|---|---|---|
| `keywords[]` | `article` rows: title, summary, accountName, publishedAt, coverUrl, articleUrl, sogouUrl | $0.0025 / row |
| `keywords[]` + `operation: "search_and_read"` | `articleFull` rows: all of the above + contentMarkdown, images, author, 原创 flag, IP region, word count | $0.012 / row |
| `urls[]` (Sogou, signed or short mp.weixin.qq.com links) | `articleFull` rows | $0.012 / row |
| `keywords[]` + `operation: "keyword_digest"` | `articleFull` rows + one `insights` row per keyword (top terms, top accounts, publish timeline, original share, heuristic sentiment) | $0.012 / article, insights row free |

- **WeChat article search** via Sogou WeChat search (搜狗微信): up to 100 articles per keyword, many keywords per run.
- **WeChat article to Markdown**: headings, bold, lists, links and images kept; word/image/video counts, author, original (原创) flag, publisher IP region, account WeChat id and bio.
- **Sogou WeChat links** resolved to the mp.weixin.qq.com article.
- **Monitor WeChat keywords**: `deltaKey` returns only articles you have not seen before; `trackMetrics` returns every row with `isNew`, `firstSeenAt` and rank change vs the last run.
- **Keyword digest**: one input → full text of the top articles → a free statistics row (no AI model, formulas in the capabilities manifest).
- **Fast**: a 10-row search answers in ~2 s of run time; 10 full articles in ~13 s (Apify, 256 MB, v1.1 benchmark).
- **Pay per result**: $0.0025 per search row, $0.012 per full-text article, $0.00005 per run start. Errors, the summary row, dry runs and the capabilities manifest are free.

> Unofficial; not affiliated with Tencent, WeChat or Sogou. Reads only public pages.

**Not available (needs a logged-in WeChat client, so we do not pretend):** account search, account history / all articles of an account, read / like / share / "looking" counts, comments, mini-program search, WeChat Index. The `accounts` filter keeps only results from accounts you name (it filters keyword results; Sogou search is by topic, not by account).

### Quick start

```json
{ "keywords": ["人工智能", "新能源汽车"], "maxItemsPerInput": 20 }
```

Returns 40 article rows (20 per keyword) plus one summary row. Add `"operation": "search_and_read"` to get the full text of each hit.

### WeChat article search

`operation: "search_articles"` (or just pass `keywords` in `auto` mode).

```json
{ "operation": "search_articles", "keywords": ["新能源汽车", "半导体"], "maxItemsPerInput": 30, "dateFrom": "7d", "sortBy": "latest" }
```

Each `article` row: `title, summary, accountName, publishedAt (ISO, +08:00), publishTimestamp, coverUrl, articleUrl, sogouUrl, position, docId, matchedKeyword` + the envelope `type, operation, input, queryUsed, id, url, fetchedAt`.

### WeChat article full text

`operation: "search_and_read"` = search + full text of every hit (filters run first, so you never pay for bodies you filtered out). `operation: "article_details"` = full text of links you already have.

```json
{ "operation": "search_and_read", "keywords": ["大模型"], "maxItemsPerInput": 5, "outputMode": "lean" }
```

```json
{ "operation": "article_details", "urls": ["https://mp.weixin.qq.com/s/3CQSkf_kBnXiCDgS4L-Cgg"] }
```

Each `articleFull` row adds: `contentMarkdown, contentText (full mode), images[], links[], wordCount, imageCount, videoCount, author, accountId (gh_…), accountAlias, accountDescription, isOriginal, ipRegion, articleType, tags, articleKey (biz_mid_idx), permanentUrl, biz, mid, idx, sn`.

Accepted `urls`: Sogou links (`https://weixin.sogou.com/link?url=…`, the `sogouUrl` of a search row), signed mp links (`https://mp.weixin.qq.com/s?src=11&timestamp=…&signature=…`) and short links (`https://mp.weixin.qq.com/s/<code>`). Long `?__biz=…&sn=…` links are usually answered with WeChat's verification page outside the WeChat app; you get a `BLOCKED` row with the fix (use the short link).

### Keyword digest (research workflow)

```json
{ "operation": "keyword_digest", "keywords": ["新能源汽车"], "maxItemsPerInput": 10, "dateFrom": "7d", "outputMode": "lean" }
```

Searches each keyword, reads the top `maxItemsPerInput` articles in full (date / account / title filters run **before** fetching, so skipped articles cost nothing), then adds one free `insights` row per keyword: `articlesAnalyzed`, `dateRange`, `topTerms` (Chinese 2–4 character n-grams and Latin words, the keyword itself removed), `topAccounts`, `keywordMentions`, `originalShare`, and a lexicon-based `sentiment` labelled heuristic. It is counting, not an AI summary. `matchTerms`, `minWordCount` and `onlyOriginal` filter after the body is fetched (dropped rows are free, but the run is not faster). Tip: Sogou's relevance order often favours older articles (a `大模型` digest in our test spanned 2023–2024), so add `dateFrom` for current coverage. `include: ["insights"]` adds the same row to a plain search (computed from titles and summaries).

### Track changes between runs

```json
{ "keywords": ["光伏"], "maxItemsPerInput": 20, "trackMetrics": true, "deltaKey": "solar" }
```

Unlike plain `deltaKey` (only new rows), `trackMetrics` returns every row with `snapshotAt`, `previousSnapshotAt`, `isNew`, `firstSeenAt`, `previousPosition` and `positionDelta` (positive = moved up in Sogou); full-text rows add `contentHash`, `contentChanged` and `wordCountDelta` (edit tracking). Only compact metrics are stored, 30 days, in your own key-value store. WeChat read/like counts are not public, so there are no view deltas.

### Sogou WeChat links

Sogou result links resolve to **signed, temporary** mp.weixin.qq.com links (`articleUrl`, `articleUrlTemporary: true`). They expire (a 3-month-old one answers "参数错误"), so fetch the full text soon and keep the content. Sogou-sourced pages do not expose the `sn` needed for a permanent link, so `permanentUrl` is null for them; use `id` (stable hash of account + title) or `articleKey` (`biz_mid_idx`) as your key. For short `/s/<code>` inputs `permanentUrl` is that short link.

### Monitor WeChat keywords

```json
{ "keywords": ["跨境电商"], "deltaKey": "ecom-watch", "dateFrom": "2d" }
```

Schedule it hourly or daily: each run looks at the top `maxItemsPerInput` results per keyword and returns (and bills) only those not returned before under `ecom-watch`; a run with nothing new returns just the free summary (with a "no new articles" warning), not an error. Seen ids are kept 30 days in the named key-value store `wechat-article-delta-ecom-watch` in your own Apify account.

### For AI agents

- **One call, arrays in:** `keywords[]`, `urls[]`. Nothing is required; `operation` defaults to `auto`.
- **Control:** `maxItems` (run total, default 50, max 2000), `maxItemsPerInput` (per keyword, default 20, max 100), `maxCostUsd` (hard budget, checked before each row is fetched), `fields[]` (projection over every field), `include[]` (`fullText`, `html`, `images`, `resolveLinks`, `insights`, `trust`, `metrics`), `outputMode` (`compact` · `full` · `lean` · `table`), `sortBy` (`relevance` · `latest`), `dateFrom` / `dateTo` (`2026-10-01`, ISO, unix, `24h`, `7d`), `accounts[]`, `excludeAccounts[]`, `textContains[]`, `deltaKey`, `trackMetrics`, `matchTerms[]`, `minWordCount`, `onlyOriginal`, `dedupe`, `expandQuery`.
- **Trust fields:** compact/full rows carry `isPartial`, `unavailableFields[]` (which returned fields are null and why) and `collectionWarnings[]`; null means unknown, 0/false means measured. The summary has `requested` vs `returned`, `pagesFetched`, `stopReason` per keyword. Reaching your own `maxItems` is not an error: the summary says `stopReason: "maxItems"`, `moreAvailable: true`.
- **Prices in `dryRun` and `capabilities`** are read from the run's own pricing at run time, so the quoted maximum is what you can be charged.
- **Free:** `{"dryRun": true, …}` returns the plan, translated queries and the maximum cost; `{"operation": "capabilities"}` returns operations, fields, prices, limits and examples.
- **English keywords** are translated to Chinese with an offline dictionary (`"AI chips"` → `AI芯片`, `"electric vehicles"` → `电动汽车`); `queryUsed` shows what was searched. Set `expandQuery: false` to search as typed.
- **Lean mode** (`outputMode: "lean"`) drops nulls and envelope keys: a search row is `type, id, title, accountName, publishedAt, summary` (summary cut to 60 characters, median ~140 tokens); a full-text row adds `url`, `wordCount`, `imageCount`, `content` (markdown cut to `maxTextChars`, default 600) and `contentTruncated`. Lean search rows carry no link by default (it is ~110 random tokens and one extra Sogou request per row); add `"include": ["resolveLinks"]` to get the temporary mp.weixin.qq.com link as `url`, or use `search_and_read` for the text.
- **Never silent:** problems come back as free `error` rows with `code`, `message` and `fix` (`MISSING_INPUT`, `INVALID_INPUT`, `INVALID_URL`, `NOT_FOUND`, `NO_RESULTS`, `LOGIN_REQUIRED`, `UNSUPPORTED_OPERATION`, `BUDGET_REACHED`, `BLOCKED`, `UPSTREAM_ERROR`). The last row is always a free `summary` (rows, billed events, cost, stop reason, filtered counts, warnings, next steps). The run status message says rows, errors, cost and the first fix.
- **Legacy names accepted:** `searchKeywords` / `queries` / `searchKeyword` → `keywords`; `articleUrls` → `urls`; `maxResultsPerQuery` / `maxArticlesPerKeyword` / `maxPages` → `maxItemsPerInput`; `includeContent: true` → `include: ["fullText"]`; `onlyNew` + `memoryName` → `deltaKey`; `publishedAfter` → `dateFrom`.

Copy-paste inputs:

| Goal | Input |
|---|---|
| Fast check (~2 s, lean) | `{"keywords":["人工智能"],"maxItemsPerInput":10,"outputMode":"lean"}` |
| Lean rows with links | `{"keywords":["人工智能"],"maxItemsPerInput":10,"outputMode":"lean","include":["resolveLinks"]}` |
| Search, newest first, last 7 days | `{"operation":"search_articles","keywords":["新能源汽车","半导体"],"maxItemsPerInput":30,"dateFrom":"7d","sortBy":"latest"}` |
| Search + full text | `{"operation":"search_and_read","keywords":["大模型"],"maxItemsPerInput":5,"outputMode":"lean"}` |
| Keyword digest (full text + free stats row) | `{"operation":"keyword_digest","keywords":["新能源汽车"],"maxItemsPerInput":10,"dateFrom":"7d","outputMode":"lean"}` |
| Rank / edit tracking (schedule it) | `{"keywords":["光伏"],"trackMetrics":true,"deltaKey":"solar"}` |
| Full text of links | `{"operation":"article_details","urls":["https://mp.weixin.qq.com/s/3CQSkf_kBnXiCDgS4L-Cgg"]}` |
| Topic, only from chosen accounts | `{"keywords":["新能源汽车"],"accounts":["汽车之家","第一财经"],"dateFrom":"30d"}` |
| Only new articles (schedule it) | `{"keywords":["跨境电商"],"deltaKey":"ecom-watch"}` |
| Budget cap | `{"operation":"search_and_read","keywords":["机器人"],"maxItemsPerInput":50,"maxCostUsd":0.1}` |
| Price check, free | `{"keywords":["AI"],"dryRun":true}` |
| Manifest, free | `{"operation":"capabilities"}` |

### Output example (compact search row, real run; long URLs shortened here)

```json
{
  "type": "article",
  "operation": "search_articles",
  "input": "新能源汽车",
  "queryUsed": "新能源汽车",
  "id": "9b07c095dc6f066b",
  "url": "https://mp.weixin.qq.com/s?src=11&timestamp=1791871605&ver=7023&signat…",
  "fetchedAt": "2026-10-13T06:06:47.046Z",
  "position": 13,
  "title": "新能源车出口退税率降了4个点!商用车企咋办?|姚蔚七日谈",
  "summary": "新能源汽车出口量占到汽车总出口量的48.8%,但是商用车出口的103.9万辆中,新能源商用车仅有9.3万辆,只占到了不到9%.中国商...",
  "accountName": "方得网",
  "publishedAt": "2026-10-13T11:45:07+08:00",
  "publishTimestamp": 1791863107,
  "coverUrl": "https://mmbiz.qpic.cn/mmbiz_jpg/BoTO2V8oia0cic2Quc7v0iaqUhe6Ko4LDFcgUC…",
  "articleUrl": "https://mp.weixin.qq.com/s?src=11&timestamp=1791871605&ver=7023&signat…",
  "sogouUrl": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJT…",
  "docId": "ab735a258a90e8e1-6bee54fcbd896b2a-7dfb3eabe35ec2624a89369d0602ae00",
  "matchedKeyword": "新能源汽车"
}
```

### Pricing

| Event | Price | When |
|---|---|---|
| `article` | $0.0025 | one search row (`search_articles`) |
| `article-full` | $0.012 | one full-text article (`search_and_read`, `keyword_digest`, `article_details`); not also charged as `article` |
| `insights` row | free | one per keyword with `keyword_digest` or `include: ["insights"]` |
| `apify-actor-start` | $0.00005 | once per run |
| error / summary / plan / capabilities rows | free | |

Filtered, duplicate and already-seen (`deltaKey`) rows are never billed. `maxCostUsd` and Apify's max cost per run are checked before each row is fetched.

### FAQ

**How much does 1,000 rows cost?** 1,000 search rows = $2.50. 1,000 full-text articles = $12. Example: 5 keywords × 20 results = 100 rows = $0.25 (+ $0.00005 start); the same with full text = $1.20. A `dryRun` shows the maximum before you pay.

**Do I need a WeChat account, cookies or a proxy?** No. The Actor reads public Sogou WeChat search pages and public mp.weixin.qq.com article pages. A proxy is only used automatically as a last resort when Sogou keeps refusing a run.

**Can I get read counts, likes, comments or every article of one account?** No. Those need a logged-in WeChat client; we return an `UNSUPPORTED_OPERATION` error row instead of pretending. Use `keywords` + `accounts` to find an account's recent articles that Sogou indexes.

**Are links permanent?** Search links (`articleUrl`) are signed and expire (hours to days), so store the content. Short `https://mp.weixin.qq.com/s/<code>` links are permanent and fill `permanentUrl`.

**How do I use it from an AI agent?** Call it with `{"keywords":[...],"outputMode":"lean"}`; read the last `summary` row for cost, errors and next steps. `{"operation":"capabilities"}` is a free manifest.

### Limits

- Sogou shows at most 10 pages × 10 results per keyword (100; some pages list 9, the Actor reads one more page to fill the count). Use more or narrower keywords for more.
- Sogou has no working server-side date filter or date sort; `dateFrom`/`dateTo` and `sortBy: "latest"` are applied by the Actor on the pages it reads.
- Sogou rate-limits bursts per IP. The Actor paces requests, starts on Sogou's mobile endpoint, switches to the desktop endpoint with fresh cookies and slows down on a block, and only then tries an Apify datacenter proxy session; if Sogou still refuses you get a `BLOCKED` row and the run keeps everything else.
- Sogou does not index every account or every article, and its result set for a keyword changes over the day.
- Default memory 256 MB (peak ~50 MB). Article pages are read only up to the end of the body (picture posts: up to the end of their metadata), ~0.6 MB of the 2.5–3.5 MB page.

### Changelog

See CHANGELOG.md. v2.0 (2026-10-15): keyword_digest + free insights row, trackMetrics change tracking, trust fields, post-fetch filters; dryRun/capabilities prices fixed to the real prices; reaching maxItems is no longer an error row. v1.1 (2026-10-13): faster (Sogou mobile endpoint first, burst-safe fallback), lean search rows ~140 tokens without the link by default, picture posts read 6× fewer bytes. v1.0 (2026-10-13): first release.

# Changelog

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

# Actor input Schema

## `operation` (type: `string`):

auto (default) = keywords -> search_articles, urls -> article_details, both -> both. search_articles = WeChat article search via Sogou, $0.0025/row. search_and_read = search + full text of every hit, $0.012/row. keyword_digest = search_and_read + a free insights row per keyword. article_details = full text of given links, $0.012/row. capabilities = free manifest. Not available (needs WeChat login): account search/history, read counts, comments.

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

Search terms, one per item, e.g. \["人工智能","新能源汽车"]. Each keyword returns up to maxItemsPerInput articles (Sogou: 10 per page, max 10 pages). Chinese works best; common English terms are translated (expandQuery). URLs put here are moved to urls.

## `urls` (type: `array`):

Articles to read in full: Sogou links (https://weixin.sogou.com/link?url=..., the sogouUrl of a search row), signed mp links (https://mp.weixin.qq.com/s?src=11\&timestamp=...\&signature=..., they expire) or short links https://mp.weixin.qq.com/s/<code>. Long ?\_\_biz=...\&sn= links usually hit WeChat verification -> BLOCKED row.

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

Keep only search rows whose Official Account name contains one of these, e.g. \["人民日报"]. Filters Sogou results for your keywords; it is not account history (that needs a WeChat login). Filtered rows are free.

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

Total billed rows for the whole run, 1-2000 (default 50). Rows beyond it are never fetched or billed; the summary then says stopReason maxItems, moreAvailable true (not an error).

## `maxItemsPerInput` (type: `integer`):

Articles per keyword, 1-100 (default 20). Sogou shows 10 results per page and at most 10 pages, so 100 is the ceiling per keyword; use more or narrower keywords for more.

## `fields` (type: `array`):

Return only these fields (envelope type is always kept), e.g. \["title","accountName","publishedAt","articleUrl"]. Any field of the row kind may be named, incl. contentText, images, biz, sn. Empty = the outputMode default set. Unknown names are reported in the summary.

## `include` (type: `array`):

Extras: "fullText" = add the full article to each search hit (= search_and_read, billed as article-full); "html" = also contentHtml (large); "images" = keep images\[] in lean rows; "resolveLinks" = resolve Sogou links to articleUrl (default on in compact/full, off in lean/table); "insights" = one free stats row per keyword (top terms, accounts, timeline, heuristic sentiment); "trust" / "metrics" = add isPartial + warnings / computed metrics to lean rows.

## `outputMode` (type: `string`):

compact (default) = flat core fields, null when unknown. full = every field incl. contentText, biz/mid/idx/sn, account avatar and bio. lean = fewest tokens for LLMs (~140/search row): title, accountName, publishedAt, summary (60 chars); full-text rows add url + content cut to maxTextChars; no null keys; search-row url only with include resolveLinks. table = lean rows + one TSV table in key-value record LEAN_TABLE (copied into the summary when < 20 KB).

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

relevance (default) = Sogou order. latest = newest first, sorted by us over the pages fetched (Sogou has no server-side date sort), so it reads one extra page per keyword.

## `dateFrom` (type: `string`):

Keep articles published on/after this: 2026-10-01 (China time), ISO date-time, unix seconds, or relative 24h / 7d / 2w / 1m. Applied by us on publish time (Sogou's own time filter does not work); skipped rows are free and more pages are read to fill maxItemsPerInput.

## `dateTo` (type: `string`):

Keep articles published on/before this (inclusive end of day for plain dates). Same formats as dateFrom.

## `textContains` (type: `array`):

Keep only rows whose title or summary contains one of these strings (case-insensitive), e.g. \["融资"]. Applied before links are resolved or bodies fetched; skipped rows are free.

## `excludeAccounts` (type: `array`):

Drop rows whose account name contains one of these strings.

## `maxCostUsd` (type: `number`):

Stop before this run's charges would exceed this amount, e.g. 0.05. Checked before each row is fetched, so you never pay above it. The run ends SUCCEEDED with the rows so far and a BUDGET_REACHED row. Works with Apify's max cost per run.

## `dryRun` (type: `boolean`):

true = fetch nothing and bill nothing; returns one plan row (tasks, translated queries, max rows, max cost) and the summary. Use it to check an input before paying.

## `expandQuery` (type: `boolean`):

true (default) = translate common English terms to Chinese with an offline dictionary before searching (e.g. "AI chips" -> "AI芯片", "electric vehicles" -> "电动汽车"); queryUsed shows the searched text. false = search exactly as given.

## `deltaKey` (type: `string`):

Monitoring: any name, e.g. "ev-watch". Of the top maxItemsPerInput results per keyword, returns (and bills) only articles not returned before under the same key; seen ids are kept 30 days in named key-value store wechat-article-delta-<key> in your account. Schedule the same input hourly/daily for only-new results.

## `matchTerms` (type: `array`):

Full-text rows only (search_and_read, keyword_digest, article_details): keep articles whose title or body contains one of these, case-insensitive. Checked after the body is fetched: dropped rows are free but the run is not faster. Use textContains (title/summary, checked before fetching) to save time.

## `minWordCount` (type: `integer`):

Full-text rows only: drop articles with fewer words, e.g. 300 to skip short notices. Checked after fetching; dropped rows are free.

## `onlyOriginal` (type: `boolean`):

Full-text rows only: true = keep only articles marked 原创 (original). Checked after fetching; dropped rows are free.

## `trackMetrics` (type: `boolean`):

true = return every row (not only new ones) with isNew, firstSeenAt, previousPosition, positionDelta vs the previous run under the same deltaKey (default "snapshot"); full-text rows also contentChanged and wordCountDelta, and deleted articles come back as NOT_FOUND with wasSeenBefore. Read/like counts are not public, so no view deltas.

## `dedupe` (type: `boolean`):

true (default) = an article found by several keywords is returned (and billed) once. id = stable hash of account name + title.

## `maxTextChars` (type: `integer`):

lean/table only: cut full-text content to this many characters (default 600 ≈ 700 tokens of Chinese, 0 = no cut); contentTruncated=true marks cut rows. compact/full always return the whole text.

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

Not needed normally (direct requests work). If Sogou rate-limits a run, the Actor slows down, switches between Sogou's mobile and desktop endpoints with fresh cookies, and only then tries an Apify datacenter proxy session. Set {"useApifyProxy":true} to use the proxy from the start.

## Actor input object example

```json
{
  "operation": "auto",
  "keywords": [
    "人工智能"
  ],
  "maxItems": 50,
  "maxItemsPerInput": 10,
  "outputMode": "compact",
  "sortBy": "relevance",
  "dryRun": false,
  "expandQuery": true,
  "dedupe": true,
  "maxTextChars": 600
}
```

# Actor output Schema

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

No description

## `fullText` (type: `string`):

No description

## `all` (type: `string`):

No description

## `leanTable` (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": 50,
    "maxItemsPerInput": 10
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deadc0dex/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/bcuCgslV6XgTCPjLC/builds/05m9JCK5VoGVF72MQ/openapi.json
