WeChat Article Comments Scraper — 公众号文章评论 + 回复抓取 avatar

WeChat Article Comments Scraper — 公众号文章评论 + 回复抓取

Pricing

$0.08 / actor start

Go to Apify Store
WeChat Article Comments Scraper — 公众号文章评论 + 回复抓取

WeChat Article Comments Scraper — 公众号文章评论 + 回复抓取

EN — Pull public comments and reply threads from a WeChat Official Account article. mode=comments for top-level comments only;

Pricing

$0.08 / actor start

Rating

0.0

(0)

Developer

wang wei

wang wei

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

WeChat Article Comments Scraper

✨ What you get

EN — Pull public comments and reply threads from any WeChat Official Account article. mode=comments returns top-level comments only (cheapest); mode=with-replies adds per-comment reply chains (one extra Data provider call per comment that has replies).

ZH — 抓取任意公众号文章的公开评论和回复链。mode=comments 只返回一级评论(最便宜);mode=with-replies 在每条有回复的评论下追加二级回复链(每条需要时多 1 次上游调用)。


💼 Use cases

  • Reading what readers actually wrote under an article — the cheapest pass is mode=comments, which returns the top-level thread with content, likeNum, createTime and ipRegion per row.
  • Following a conversation two levels deep — mode=with-replies adds the reply chain under every comment that has one, which is where the objections and the second opinions live.
  • Bounding cost on a viral post — maxComments (1 to 500) and maxReplies (1 to 200) cap the drain; start at the default and raise only if hasMore tells you there is more.
  • Skipping a slow page fetch — pass a commentId you already have from the detail Actor and the comment thread is fetched without re-pulling the article HTML first.

✅ Who this is for

  • Content and brand teams — checking the reaction to a specific post, where the raw sentences matter more than an aggregate score.
  • Community and social managers — who moderate or reply under WeChat articles and need the elected comments flagged.
  • Voice-of-customer researchers — mining article threads for the objections and language customers actually use before they buy.
  • Market researchers — comparing how two accounts' audiences argue about the same topic, with ipRegion giving a rough geographic read on each commenter.

❌ Who this is NOT for

  • You think the row count is the comment count — totalCount and electedTotal are the platform's own totals, while fetchedCount is what landed in this run under maxComments. If hasMore is true, you are looking at a capped slice.
  • You need reply threads without asking twice — with the default mode=comments, replies is an empty array even when replyTotal is above zero. Set mode=with-replies or the second level simply is not in the dataset.
  • You are scraping a deep thread on a budget — each comment that has replies costs an extra upstream call, so a thread with fifty reply-bearing comments is not a cheap run. Raise maxComments gradually and check the totals.
  • You want profiles for the commenters — you get nickName, an opaque identityName hash and ipRegion. Follower counts, signatures and account history need a separate profile call on the username.
  • You are after video comments — this Actor reads WeChat Official Account articles only. Comments under a 视频号 video are a different endpoint and a different Actor.

🚀 Quick start

  1. Console: paste any article URL (or use the default) and click Start.
  2. API:
    curl -X POST "https://api.apify.com/v2/acts/ier1jWLNCkvLh8vpS/runs?waitForFinish=60" \
    -H "Authorization: Bearer <APIFY_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{"url":"https://mp.weixin.qq.com/s/...", "mode":"with-replies"}'
  3. CLI:
    apify call wechat-article-comments-scraper \
    -i '{"url":"https://mp.weixin.qq.com/s/...", "mode":"with-replies", "maxComments":200}'

Free users: 5 runs/day. Paid users: 1 PPE event per page (article-comments-result).


📥 Input parameters

FieldTypeDefaultNotes
urlstringhttps://mp.weixin.qq.com/s/TSNQKkRpN1qbKsT7BvzqIwArticle URL. Short (/s/<sn>) and long (/s?__biz=...&mid=...) forms accepted.
modestring"comments"comments = top-level only. with-replies = comments + reply chains (1 extra Data provider call per comment that has replies).
commentIdstring""Pre-known comment_id from /fetch_article_detail response's commentId. Speeds up Data provider by skipping HTML pre-fetch. Leave empty to let Data provider fetch the article HTML.
maxCommentsint100Hard cap on total comments pulled across paginated requests. 1-500.
maxRepliesint50Hard cap on replies per comment (mode=with-replies). 1-200.
rawstring"false"false = omit raw Data provider payload; true = attach rawData for debugging.

Where to get a URL


📤 Output

{
"url": "https://mp.weixin.qq.com/s/TSNQKkRpN1qbKsT7BvzqIw",
"mode": "with-replies",
"commentId": "3884868893382230017",
"appmsgId": "2247780992",
"totalCount": 28,
"electedTotal": 22,
"fetchedCount": 10,
"hasMore": false,
"continueFlag": 0,
"commentsPages": 1,
"comments": [
{
"contentId": "921450079049482451",
"nickName": "IFGSLL",
"content": "懂了,这就下单 4070TI",
"likeNum": 20,
"createTime": 1741148721,
"ipRegion": { "country": "中国", "province": "江苏", "city": "" },
"ipIds": { "country": "156", "province": "", "city": "" },
"isElected": 1,
"isTop": 0,
"identityName": "oHQDtwGndOC9slgFqApFtbjJEdxk",
"replyTotal": 1,
"replies": [
{
"replyId": "2",
"nickName": "🦄Savior",
"content": "还没降价,再等等",
"createTime": 1741149962,
"ipRegion": { "country": "中国", "province": "河南", "city": "" },
"ipIds": { "country": "156", "province": "", "city": "" },
"identityName": "oHQDtwJjKLALca6GJyICQCRhAvKg",
"fromAi": 0,
"replyIsElected": null
}
]
}
],
"collectedAt": "2026-09-16T12:00:00.000Z"
}

Field notes

  • totalCount / electedTotal come from the data provider's first response (total in the system). fetchedCount is how many made it into this run (≤ maxComments).
  • contentId / replyId / commentId / appmsgId are always strings (big-integer safe per JSON serialization rules).
  • ipRegion is the human-readable form (country_name / province_name / city_name); ipIds carries the parallel numeric codes (country_id / province_id / city_id).
  • replies is [] when mode=comments even if replyTotal > 0. Use mode=with-replies to fetch them.
  • hasMore=true means Data provider still has more comments / replies beyond maxComments / maxReplies. Re-run with higher caps to drain.

💰 Billing

PPE: 1 event per page fetched. article-comments-result event is charged with count = (comments pages) + (reply batches). Mode comments typically produces 1-3 PPE per run; mode with-replies produces (comments pages) + (number of comments with replies) PPE per run.


📚 Resources

$npm test

Runs unit assertions (input validation, body shape, normalize across comments / with-replies / raw=true / raw=false, §98 string coercion, ip_wording flattening, null handling) plus 9 integration scenarios (mock fetch drives the full run() flow including default/with-replies modes, commentId forwarding, maxComments cap, 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 pipelineActorConsole
step ① listingAccount Articles Scraper…/vxAjW6anQJQWk7xTF
step ② detailArticle Detail Scraper…/5vrr8dBcnclIva0Lx
step ③ metricsArticle Metrics Scraper…/y3ZqhBdIY2LzGtkVK
step ④ comments (you are here)Article Comments Scraper…/ier1jWLNCkvLh8vpS
step ① profile (alt)Account Profile Scraper…/3JV499ECEjb5un854

You are here: Article Comments Scraper (step ④) — pair it with an Article Detail / Metrics output for the URL, or pass any URL you already have.