WeChat Official Account Article Scraper 公众号 | Body & Comment ID
Pricing
$0.06 / actor start
WeChat Official Account Article Scraper 公众号 | Body & Comment ID
Extract the full text of any WeChat Official Account article in ~30 seconds: clean plain-text body, title, author, account identity, publish time, cover, and comment ID in one JSON row. No WeChat login, no cookies.
Pricing
$0.06 / actor start
Rating
0.0
(0)
Developer
wang wei
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
WeChat Official Account Article Scraper 公众号 — Article Body & Comment ID
✨ What you get
Get the full text of any WeChat Official Account article in ~30 seconds — one URL in, one clean JSON row out: plain-text body, title, author, account identity, publish time, cover image, and the 64-bit comment ID. No WeChat login, no cookies, no anti-bot setup. Free tier: 5 runs/day.
Best for: turning a 公众号 article URL into structured, export-ready data for NLP, monitoring pipelines, or LLM/RAG ingestion.
💼 Use cases
- Turning an article link into clean text —
contentTextarrives HTML-stripped and ready for NLP, withcontentTextLengthreporting the original body length so you can see whether anything was clipped. - Keeping tokens small when you only need the lead —
maxContentCharstruncates the body, andcontentTextTruncatedtells you it happened, which is cheaper than storing full chapters per URL. - Harvesting the identifiers every other Actor needs — the row carries
commentIdfor the comments Actor,ghUsernamefor the profile and listing Actors, and the article URL itself for the metrics Actor. - Identifying the publisher —
nickName,alias,authorbyline,headImage/headImageHd, cover image andalbumcome back together, so an article is attributable without a second lookup.
✅ Who this is for
- AI and RAG teams — ingesting Chinese long-form articles into a corpus where HTML noise and 64-bit ID precision both break naive pipelines.
- Content archivists and analysts — who need the body text and publish time in one row, for full-text search or quote extraction.
- Brand and competitor monitoring — programmes that diff titles, digests and bodies over time to catch positioning shifts.
- Anyone holding a bare share link — a short
/s/<id>link, a?chksm=variant or a long__bizlink all resolve, with no WeChat login, cookies or proxy setup.
❌ Who this is NOT for
- You want many articles in one run — exactly one URL per run by design, for cost control. Collect URLs first with a search Actor, then run this once per link.
- You need dead links to abort a chained batch — a deleted or invalid article does not fail the run. It returns a single
type: "notice"row (see Output) saying the article could not be found, and the run finishes successfully. Check fortype: "notice"rows so they don't get read as articles. - You use
engine=h5for speed and expect the full field set — the fast path always returnsnullforaliasand both head images. Keepengine=defaultwhenever identity or branding matters. (The same trade-off applies to the automatic h5 fallback, which only triggers when the default endpoint is blocked upstream.) - You need the layout, images or embeds — the output is plain text with HTML stripped and a hard ceiling of 200,000 characters, so inline images, video players and card layouts are not in the row.
- You want reads, likes or comments in the same row — this is the body extractor. Interaction counts come from the metrics Actor and comment text from the comments Actor.
🚀 Quick start
1. Run with Example Input
{"url": "https://mp.weixin.qq.com/s/TSNQKkRpN1qbKsT7BvzqIw"}
Click Start. Free users get 5 runs/day; paid users are billed per run (see Pricing & Limits).
2. Export Your Results
Open the Dataset tab → CSV / JSON / Excel export.
📥 Input parameters
Top-Level Structure
{"url": "https://mp.weixin.qq.com/s/TSNQKkRpN1qbKsT7BvzqIw","engine": "default","maxContentChars": 0,"raw": "false"}
url — Article URL
- Required: yes
- Type: string
- Description: WeChat Official Account article link. Short links (
mp.weixin.qq.com/s/<id>) and long links (mp.weixin.qq.com/s?__biz=...&mid=...— the format WeChat share dialogs emit) both work. Exactly 1 per run (cost control: one Data provider request per run).
engine — Endpoint variant
- Required: no (default
default) - Type: enum
default/h5 - Description:
defaultreturns alias + head image fields (recommended).h5is faster but alias and head image are alwaysnull. If the default endpoint fails on a transient upstream error, the Actor automatically retries once on h5 — in that casealiasand the head images come backnullwhile the body is still returned, and the run'sSUMMARYrecord flagsengineFellBackToH5.
maxContentChars — Content truncation cap
- Required: no (default
0= no truncation) - Type: integer
0-200000 - Description: Truncate
contentTextto this many characters. Set to e.g.3000if you only need the lead.contentTextLengthalways reports the original full length.
raw — Include raw Data provider payload
- Required: no (default
false) - Type: enum
false/true - Description: When
true, the unprocessed Data providerdataobject is attached asrawDataon the pushed item. Useful for debugging or downstream pipelines that need the raw response. Default keeps datasets small.
📤 Output
One JSON row per article URL (truncated here; contentText ships in full up to 200,000 chars):
{"url": "https://mp.weixin.qq.com/s/TSNQKkRpN1qbKsT7BvzqIw","bizUin": 3236757533,"itemIdx": 1,"msgId": "2247780992","sourceEndpoint": "fetch_article_detail","title": "“老黄骗人”!5070首批评测:说好1/3价格赛4090,实际不如4070Ti","nickName": "量子位","ghUsername": "gh_114e76fd6e5d","alias": "QbitAI","author": "关注前沿科技","summary": "博主:史上最差70系列","publishTimeText": "2025-03-05 12:22","publishTime": 1741148529,"coverUrl": "https://mmbiz.qpic.cn/...","commentId": "3884868893382230017","headImage": "https://wx.qlogo.cn/...","headImageHd": "https://wx.qlogo.cn/...","album": null,"contentTextLength": 2998,"contentText": "博主:史上最差70系列 …(full plain-text body, HTML stripped)…","contentTextTruncated": false,"collectedAt": "2026-10-02T09:37:00.000Z"}
Article record (one per pushed item)
| Field | Type | Description |
|---|---|---|
url | string | The article URL (input echo) |
bizUin | int | Account's internal numeric ID |
itemIdx | int | Position in the article batch (single-image articles = 1) |
msgId | string | number | Internal message ID (string when Data provider returns a 64-bit value) |
sourceEndpoint | string | fetch_article_detail or fetch_article_detail_h5 |
title | string | Article title |
nickName | string | Account display name |
ghUsername | string | Account gh_… ID (feed to WeChat Account Profile Scraper) |
alias | string | null | Account micro-signal ID; null when using engine=h5 |
author | string | Article author byline |
summary | string | Article summary / lede |
publishTimeText | string | Human-readable publish time (e.g. 2025-03-05 12:22) |
publishTime | int | null | Epoch seconds (UTC+8) |
coverUrl | string | Cover image URL |
commentId | string | 64-bit comment thread ID — feed to the Comments Scraper |
headImage | string | null | Account round head image; null when using engine=h5 |
headImageHd | string | null | Account HD head image; null when using engine=h5 |
album | object | null | { id, title, prevLink, nextLink } for collection-bound articles |
contentTextLength | int | Full original body length (always reported) |
contentText | string | null | Plain-text body (HTML stripped) |
contentTextTruncated | boolean | true when maxContentChars clipped the body |
rawData | object | undefined | Full Data provider payload (only when raw=true) |
collectedAt | string | ISO 8601 timestamp of when the item was normalized |
Plus a run summary (SUMMARY KV store record) with title, account, publish time, tier, and the free-tier counter.
Notice row (when there is no article)
If the requested URL has no article behind it, the run still succeeds and pushes one row of a different shape instead of an article:
{"type": "notice","message": "No article found at the requested URL. The article may be deleted, not public, or the link may be mistyped.","url": "https://mp.weixin.qq.com/s/XXXXXXXXXXXXXXXXXXXXXX","reason": "Upstream reported the article as unavailable: 请求参数可能有误(如无效的文章 URL …)请检查参数后重试。","upstreamMessage": "请求参数可能有误(如无效的文章 URL / finder username / 视频 object_id),请检查参数后重试。注意:使用无效参数的请求被微信处理后仍会计费。","sourceEndpoint": "fetch_article_detail","engine": "default","engineFellBackToH5": false,"tier": "free","freeTierRunsToday": 1,"collectedAt": "2026-10-21T11:54:10.000Z"}
Consumers should skip rows whose type is notice — they carry no article fields. The SUMMARY record of such a run has ok: false and noArticle: true.
💰 Billing
- Free tier: 5 runs/day — no credit card needed
- Paid tier: pay-per-result, charged on the article rows returned
- Hard caps: 1 URL per run
- Latency: the data provider can take up to ~30 s per article; this Actor uses a 60 s client timeout so a silent timeout is never billed
❓ FAQ
Does it work with deleted or invalid articles?
It does — it reports them. The data provider answers a deleted, non-public or mistyped article with "invalid article URL", and the Actor turns that into one type: "notice" row explaining it, then finishes successfully. The run is not failed, because nothing broke: the request was answered. Before v0.11 this failed the run instead, which made ordinary dead links look like a broken Actor. If you read the dataset, skip rows whose type is notice — they are not articles.
Short links or long links?
Both. mp.weixin.qq.com/s/<id>, the same link with a ?chksm=… suffix, and long links mp.weixin.qq.com/s?__biz=…&mid=…&idx=…&sn=… (what WeChat share dialogs emit) are accepted.
Can I scrape multiple articles in one run? No — exactly 1 URL per run by design. To scan many articles, first collect URLs with the WeChat Universal Search Scraper (below), then run this Actor per URL.
Do I need a WeChat account or cookies? No. The Actor requires no WeChat login, no cookies, and no proxy setup.
What's the difference between engine=default and h5?
default (recommended) returns the account alias, round head image, and HD head image. h5 responds faster but always returns null for those fields. If the default endpoint hits a transient upstream error, the Actor retries on h5 by itself — you still get the article, just without alias and the two head images. Check SUMMARY.engineFellBackToH5 on that run to see whether it happened.
Why did an earlier run fail on "HTTP 400 / Request failed, Please retry"? That is the upstream rejecting the request during a short risk-control window, not a bad URL and not a deleted article. It is retried automatically. If a run still fails that way, the same URL usually succeeds minutes later — that is the upstream, not your input.
📚 Resources
Hit an issue? Open the run in Apify Console, copy the run URL, and raise it via the Issues tab on this Actor's Store page — failed runs carry the data provider error message needed to debug.
📜 Notes & caveats
Why Use This Actor
| Problem | How This Actor Solves It |
|---|---|
| You have a WeChat article URL but only need the clean text | Returns HTML-stripped contentText ready for downstream NLP / summarization / RAG |
| Comments, head image, and account identity are scattered across multiple calls | One Actor call returns title, author, publish time, account nickName + ghUsername + alias, head image (round + HD), cover, album info, and comment_id |
| WeChat's 64-bit comment_id loses precision in JavaScript Number | All IDs are string-typed (JSON-safe) |
| Dead links pollute your dataset | Deleted or invalid article URLs fail the run with a clear error — no empty rows, no silent garbage |
| You want to scan many articles without logging into WeChat | Single endpoint, no login required |
Use it together with the other WeChat Actors
| Where in the pipeline | Actor | Use it to |
|---|---|---|
| step ① — before | WeChat Universal Search Scraper | find article URLs by keyword across WeChat search verticals |
| step ③ — after | WeChat Article Comments Scraper | feed commentId to harvest the full comment thread |
| step ③ — after | WeChat Article Metrics Scraper | feed url to harvest reads / likes / 在看 / shares |
| step ④ — after | WeChat Account Profile Scraper | feed ghUsername for account IP region / verification / linked Channels account |
| step ④ — after | WeChat Account Articles Scraper | feed ghUsername to list an account's published articles |
This Actor is step ② — run it on a single article URL you already have to extract the body, author, account identity, and comment_id.