WeChat Official Account Article Scraper 公众号 | Body & Comment ID avatar

WeChat Official Account Article Scraper 公众号 | Body & Comment ID

Pricing

$0.06 / actor start

Go to Apify Store
WeChat Official Account Article Scraper 公众号 | Body & Comment ID

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

wang wei

Maintained by Community

Actor 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 — contentText arrives HTML-stripped and ready for NLP, with contentTextLength reporting the original body length so you can see whether anything was clipped.
  • Keeping tokens small when you only need the lead — maxContentChars truncates the body, and contentTextTruncated tells you it happened, which is cheaper than storing full chapters per URL.
  • Harvesting the identifiers every other Actor needs — the row carries commentId for the comments Actor, ghUsername for the profile and listing Actors, and the article URL itself for the metrics Actor.
  • Identifying the publisher — nickName, alias, author byline, headImage / headImageHd, cover image and album come 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 __biz link 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 for type: "notice" rows so they don't get read as articles.
  • You use engine=h5 for speed and expect the full field set — the fast path always returns null for alias and both head images. Keep engine=default whenever 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: default returns alias + head image fields (recommended). h5 is faster but alias and head image are always null. If the default endpoint fails on a transient upstream error, the Actor automatically retries once on h5 — in that case alias and the head images come back null while the body is still returned, and the run's SUMMARY record flags engineFellBackToH5.

maxContentChars — Content truncation cap

  • Required: no (default 0 = no truncation)
  • Type: integer 0 - 200000
  • Description: Truncate contentText to this many characters. Set to e.g. 3000 if you only need the lead. contentTextLength always 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 provider data object is attached as rawData on 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)

FieldTypeDescription
urlstringThe article URL (input echo)
bizUinintAccount's internal numeric ID
itemIdxintPosition in the article batch (single-image articles = 1)
msgIdstring | numberInternal message ID (string when Data provider returns a 64-bit value)
sourceEndpointstringfetch_article_detail or fetch_article_detail_h5
titlestringArticle title
nickNamestringAccount display name
ghUsernamestringAccount gh_… ID (feed to WeChat Account Profile Scraper)
aliasstring | nullAccount micro-signal ID; null when using engine=h5
authorstringArticle author byline
summarystringArticle summary / lede
publishTimeTextstringHuman-readable publish time (e.g. 2025-03-05 12:22)
publishTimeint | nullEpoch seconds (UTC+8)
coverUrlstringCover image URL
commentIdstring64-bit comment thread ID — feed to the Comments Scraper
headImagestring | nullAccount round head image; null when using engine=h5
headImageHdstring | nullAccount HD head image; null when using engine=h5
albumobject | null{ id, title, prevLink, nextLink } for collection-bound articles
contentTextLengthintFull original body length (always reported)
contentTextstring | nullPlain-text body (HTML stripped)
contentTextTruncatedbooleantrue when maxContentChars clipped the body
rawDataobject | undefinedFull Data provider payload (only when raw=true)
collectedAtstringISO 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

ProblemHow This Actor Solves It
You have a WeChat article URL but only need the clean textReturns HTML-stripped contentText ready for downstream NLP / summarization / RAG
Comments, head image, and account identity are scattered across multiple callsOne 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 NumberAll IDs are string-typed (JSON-safe)
Dead links pollute your datasetDeleted 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 WeChatSingle endpoint, no login required

Use it together with the other WeChat Actors

Where in the pipelineActorUse it to
step ① — beforeWeChat Universal Search Scraperfind article URLs by keyword across WeChat search verticals
step ③ — afterWeChat Article Comments Scraperfeed commentId to harvest the full comment thread
step ③ — afterWeChat Article Metrics Scraperfeed url to harvest reads / likes / 在看 / shares
step ④ — afterWeChat Account Profile Scraperfeed ghUsername for account IP region / verification / linked Channels account
step ④ — afterWeChat Account Articles Scraperfeed 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.