WeChat Article Metrics Scraper — 公众号文章阅读/点赞/分享/收藏数
Pricing
from $0.10 / actor start
WeChat Article Metrics Scraper — 公众号文章阅读/点赞/分享/收藏数
📊 WeChat Article Metrics | The read and share counts behind an article Fetch public interaction metrics for any WeChat Official Account article: read count, like count, share count, collect count, comment count and star count. Two engines — a full-metrics default and a lighter h5 mode.
Pricing
from $0.10 / actor start
Rating
0.0
(0)
Developer
wang wei
Maintained by CommunityActor stats
0
Bookmarked
136
Total users
40
Monthly active users
4 days ago
Last modified
Categories
Features
Share
WeChat Article Metrics Scraper
✨ What you get
EN — Fetch public interaction metrics for any WeChat Official Account article. Returns read count, like count, share count, collect count, comment count, and star count. Two engines: default returns full metrics; h5 is a fast path that returns only comment_count and elected_comment_count, with an optional pre-known comment_id to skip the HTML pre-fetch.
ZH — 抓取任意公众号文章的公开互动数据:阅读数、点赞数、分享数、收藏数、评论数、星标数。两种引擎:default 返回全量指标;h5 是快速路径,只返回评论数 + 精选评论数,可通过预知 comment_id 跳过 HTML 预抓(节省约一半延迟)。
💼 Use cases
- Reading the full interaction set for one article —
engine=defaultreturnsreadNum,likeCount,shareCount,collectCount,starNumandcommentCounton one row. - Getting comment numbers fast when you already have the thread ID —
engine=h5with a knowncommentIdskips the HTML pre-fetch and returnscommentCountandelectedCommentCountat roughly half the latency. - Telling the two like counters apart —
oldLikeCountis the legacy likes figure tracked separately from the modern in-articlelikeCount, so you can compare an old and a new measure of the same article. - Benchmarking a post against the publisher's other posts — pair the row with the article listing Actor and you have reach, likes, shares and collects for every URL an account has published.
✅ Who this is for
- Content analysts — who need per-article reach rather than follower counts, and who work from a list of URLs instead of a keyword.
- Agencies and consultancies — building a performance view of a client's or a competitor's best-performing posts.
- Editors — deciding which article to reuse or amplify, using shares and collects as the signal rather than reads alone.
- Anyone optimising for speed on comment-heavy posts — the fast path with a known
commentIdis the cheapest way to check comment volume before pulling the thread.
❌ Who this is NOT for
- You are reading
engine=h5output as zeros — the fields the fast path does not expose come back asnull, not0, andunavailablenames them explicitly. Null means not retrieved, not no engagement. - You want a trend line — a run returns the current counters for one URL and nothing else. There is no history here; build a series by scheduling the Actor and storing each run's values yourself.
- You plan to add up
likeCountandoldLikeCount— they are two different counters on the same article, not two halves of one total. Summing them double-counts and misleads. - You read
starNumas article bookmarks — star is the user favouriting the official account from that article, whereascollectCountis the article's own collect count. They measure different behaviours. - You want video metrics — this Actor covers WeChat Official Account articles. Interaction data for a 视频号 video sits on the Channels Actors, and each article is a separate one-URL run.
- You need a dead link 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 no metrics could be found, and the run finishes successfully. Check fortype: "notice"rows so they don't get read as metrics.
🚀 Quick start
- Console: paste any article URL (or use the default) and click Start.
- API:
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/runs?waitForFinish=60" \-H "Authorization: Bearer <APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"url":"https://mp.weixin.qq.com/s/...", "engine":"default"}'
- CLI:
apify call wechat-article-metrics-scraper \-i '{"url":"https://mp.weixin.qq.com/s/...", "engine":"h5", "commentId":"12345"}'
Pricing: one article-metrics-result pay-per-event charge per run, on top of the platform's per-start charge. There is no separate daily free-run cap — a free-plan caller spends their monthly Apify credit at the published rate and stops when it runs out, which the platform enforces on every run.
📥 Input parameters
| Field | Type | Default | Notes |
|---|---|---|---|
url | string | https://mp.weixin.qq.com/s/TSNQKkRpN1qbKsT7BvzqIw | Article URL. Both short (/s/<sn>) and long (/s?__biz=...&mid=...) forms accepted. |
engine | string | "default" | default = full metrics via /fetch_article_stats. h5 = /fetch_article_stats_h5 fast path; returns only comment_count + elected_comment_count. |
commentId | string | "" | Pre-known comment_id from /fetch_article_detail response's commentId field. Only used when engine=h5; speeds up the data provider call by skipping the HTML pre-fetch. Leave empty to let Data provider fetch the article HTML itself. |
raw | string | "false" | false = omit raw Data provider payload; true = attach rawData for debugging. |
Where to get a URL
- From a friend's share: copy the URL directly.
- From the Article Detail Scraper: pass any URL you have, get back
commentId+ body. - From the Account Articles Scraper: each row's
urlfield is an article URL.
📤 Output
engine=default
{"url": "https://mp.weixin.qq.com/s/TSNQKkRpN1qbKsT7BvzqIw","engine": "default","readNum": 19839,"likeCount": 74,"oldLikeCount": 123,"shareCount": 693,"collectCount": 108,"starNum": 46,"commentCount": 3,"electedCommentCount": null,"unavailable": [],"collectedAt": "2026-09-16T12:00:00.000Z"}
engine=h5
{"url": "https://mp.weixin.qq.com/s/...","engine": "h5","readNum": null,"likeCount": null,"oldLikeCount": null,"shareCount": null,"collectCount": null,"starNum": null,"commentCount": 4,"electedCommentCount": 2,"unavailable": ["read_num", "like_count", "old_like_count", "share_count", "collect_count", "star_num"],"collectedAt": "2026-09-16T12:00:00.000Z"}
Field notes
- For
engine=h5, fields the H5 page doesn't expose come back asnull(not zero). Theunavailablearray lists the names the data provider explicitly marked unavailable. oldLikeCountis the legacy "likes" count tracked separately from the modern in-article likes.starNumis "star" (星标) — users who favorited the official account from this article.electedCommentCountis the count of comments hand-picked by the publisher (精选评论).
Notice row (when there are no metrics)
If the requested URL has no article behind it, the run still succeeds and pushes one row of a different shape instead of a metrics record:
{"type": "notice","message": "No metrics 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),请检查参数后重试。注意:使用无效参数的请求被微信处理后仍会计费。","engine": "default","engineFellBackToH5": false,"tier": "free","collectedAt": "2026-10-21T11:54:10.000Z"}
Consumers should skip rows whose type is notice — they carry no metric fields. The SUMMARY record of such a run has ok: false and noMetrics: true.
A rejected input (a link that is not a WeChat article, or one without the /s path) produces the same kind of row, but it never reaches WeChat: the notice carries reason (what was wrong with the input) and url, no upstreamMessage, and the SUMMARY record has ok: false and invalidInput: true.
💰 Billing
1 PPE event per Actor run (article-metrics-result). Engine choice doesn't affect pricing — both call the data provider once.
📚 Resources
$npm test
Runs unit assertions (input validation, body shape, normalize across default / h5 / raw=true / raw=false, null handling) plus 9 integration scenarios (mock fetch drives the full run() flow including default/h5 engines, commentId forwarding, free-tier gating, Data provider errors).
✅ unit.js: all assertions passed.integration.js: 9 scenarios passed.
📜 Notes & caveats
Use it together with the other WeChat Actors
| Where in the pipeline | Actor | Console |
|---|---|---|
| step ① listing | Account Articles Scraper | …/vxAjW6anQJQWk7xTF |
| step ② detail | Article Detail Scraper | …/5vrr8dBcnclIva0Lx |
| step ③ metrics (you are here) | Article Metrics Scraper | …/actor |
| step ④ comments | Article Comments Scraper | …/comments |
| step ① profile (alt) | Account Profile Scraper | …/3JV499ECEjb5un854 |
You are here: Article Metrics Scraper (step ③) — pair it with a Detail Scraper output to get the body's commentId and pass it here as commentId for fast-path engine=h5.