WeChat Universal Search Scraper avatar

WeChat Universal Search Scraper

Pricing

$0.10 / actor start

Go to Apify Store
WeChat Universal Search Scraper

WeChat Universal Search Scraper

EN — Search WeChat ecosystem (公众号 / 视频号 / 文章 / 账号) by keyword. 18 business_type filters, cursor auto-pagination, normalized output with large IDs preserved as strings.

Pricing

$0.10 / actor start

Rating

0.0

(0)

Developer

wang wei

wang wei

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

4

Monthly active users

6 days ago

Last modified

Categories

Share

✨ What you get

EN — Find WeChat content across 公众号 / 视频号 / 文章 / 账号 in 30 seconds. Drop one keyword, get up to 50 ranked results (5 pages × ~10) with engagement metrics (likes, comments, duration), publisher profile, shareable URLs, and cover images. No login, no captcha, no headless browser.

ZH — 微信「搜一搜」综合搜索 — 公众号·视频号·文章·账号 一键抓取。 一个关键词,最多 50 条结果(5 页 × ~10),含点赞数/评论/时长、发布者资料、可分享链接、封面图。无登录、无验证码、无 headless 浏览器。

Built for cross-border e-commerce sourcing, influencer discovery, trend monitoring, and KOL prospecting on WeChat — China's #1 super-app with 1.3 billion monthly users. Output exports as JSON / CSV / Excel — pipe directly into your CRM, BI tool, or another Apify Actor.

5 free runs / day — no API key required. Open on Apify Console, drop a keyword, get results in 30 seconds.

💼 Use cases

  • Finding WeChat KOLs for a category you are launching into — run businessType=account with a vertical keyword like 跨境电商 and the rows come back with publisher name, verified flag, icon and account intro, which is enough to build a target-publisher list before you reach out.
  • Surfacing emerging 视频号 creators before they saturate — businessType=video plus publishTime=week and sort=hot narrows a vertical to the last seven days, so a creator who just started posting shows up next to established accounts instead of being buried under them.
  • Diffing two daily runs to catch new entrants in a conversation — run the same keyword every day and diff the docId sets between runs; whatever id appears today and was absent yesterday is new content on that topic, and you can rank it with the page / rank fields.
  • Getting a link you can actually open later — article rows carry docUrl (公众号原文链接) and video rows carry exportId, and each row also stores collectedAt, so the dataset works as an evidence log of what a keyword returned on a given day.

✅ Who this is for

  • Cross-border e-commerce sourcing teams — who need supplier, product and category content out of WeChat rather than out of English-language sources.
  • KOL and 视频号 managers — building a shortlist of Channels creators and 公众号 accounts inside one vertical before committing budget.
  • Brand monitoring and PR teams — who need to know which accounts are publishing about their product category this week.
  • China market researchers — who read Chinese natively and need the publisher behind each hit, not just the headline.

❌ Who this is NOT for

  • Anyone planning on the 13 verticals that come back empty — only all, account, article, video and sticker return real results; underline, encyclopedia, live_stream, comment, listen, news, photos, book, moments, image, mini_game, weixin_index and ai_search are gated server-side by geography and account, so 朋友圈 content, live-stream results, comment threads and the WeChat search-volume index are simply not in this output.
  • Corpus-scale collection — maxPages is capped at 1-5 and each page is about 10 items, so one run tops out around 50 rows. Deeper coverage means resuming from SUMMARY.nextCursor across several runs, not a bigger single run.
  • Anyone treating likeNum as a number — it comes back as a string with Chinese units baked in (10万+), which is a rounded display bucket, not an exact count. Do arithmetic on it only after parsing, and do not present it as a precise like total in a report.
  • Slow or heavy verticals where a partial answer looks like a real one — each upstream request is bounded by a hard 30-second timeout with three retries (500 ms / 1 s / 2 s). When a vertical is slow the request aborts rather than returning a thin page, so a small result set can mean timeout rather than genuine scarcity.
  • Anyone needing engagement beyond search-result metadata — a row gives you likes, duration, cover image and publisher, not plays, shares, follower counts or growth over time. Those dimensions are not part of a search result, so this Actor sizes a topic, it does not measure the account.

🚀 Quick start

Open the Actor on Apify Console, fill in keyword (e.g. 美食), click Start. Results land in the Dataset tab in ~30 seconds.

Want to run from the CLI?

$apify call wechat-universal-search-scraper -i '{"keyword": "美食", "businessType": "video"}'

the data provider API key is wired into the Actor — no Secrets tab setup, no env vars to set. Apify free users get 5 runs / day.

📥 Input parameters

{
"keyword": "美食",
"businessType": "video",
"sort": "default",
"publishTime": "all",
"maxPages": 3,
"cursor": "",
"raw": "false"
}

📤 Output

Each pushed item is a normalized row keyed by businessType + docId (string — base64 may exceed JS Number safe range):

{
"keyword": "美食",
"page": 1,
"rank": 1,
"businessType": "video",
"businessTypeRaw": 7,
"docId": "finderobjv0iGrW2Ju7cmIl5Q2m0E",
"exportId": "export/UzFfAEDovIKb9q9zJ4...",
"hashDocId": "17711004180000001",
"feedNonceId": "1717...",
"title": "家常菜快手菜...",
"titleRaw": "...<em class=\"highlight\">美食</em>...",
"coverUrl": "https://wx.qlogo.cn/...",
"duration": "03:42",
"pubTime": 1757365200,
"dateLabel": "2小时前",
"likeNum": "10万+",
"source": {
"name": "刘小妹正餐",
"iconUrl": "https://wx.qlogo.cn/...",
"verified": true
},
"collectedAt": "2026-09-09T00:00:00Z"
}

Article-shaped items add docUrl (公众号原文链接) and description; account-shaped items add description (account intro) and use coverUrl = iconUrl. The businessTypeRaw integer field echoes the data provider business_type code so you can route / segment downstream (7 = video, 2 = article, 33554499 = account — the actual Data provider magic number, not 14).

The run also writes a SUMMARY to the Key-Value Store with pushed / pagesFetched / nextCursor / businessTypeRaw / hasMoreInSource / tier / runsToday / dailyLimit / startedAt / finishedAt — use nextCursor on the next run for resumable pagination.

⚙️ How it works

The Actor auto-paginates via the data provider cursor + continue_flag envelope. Set maxPages (1-5) to cap requests per run (5 pages ≈ 50 items). To resume a previous run, copy SUMMARY.nextCursor from the previous run into cursor on the next run.

maxPagesItems per run (avg)Cost control / 成本控制
1~10smoke test / 冒烟测试
3 (default)~30sweet spot / 推荐值
5~50hard cap (cost & quota safety)

❓ FAQ

  • business_type is an integer code per Data provider / business_type 是上游整数代码: 7 = video (视频号), 2 = article (公众号文章), 33554499 = account (the actual Data provider magic number — Data provider docs mention 14 for account but the live API returns 33554499). The Actor accepts the data provider's code verbatim and exposes it as businessTypeRaw; the matched businessType string comes from your input.
  • 13 verticals return empty pages / 13 个分类返空: Data provider documents 18 business_type values but only 5 (all / account / article / video / sticker) currently return real results; the other 13 are server-side gated by geography / account. The Actor exposes all 18 per AGENTS-apify-archive.md §40 (open enum = no surprises).
  • 30-second hard timeout / 30 秒硬超时: Data provider documents that the data provider takes up to 30 s. The Actor enforces this with AbortController + exponential backoff (3 retries: 500 ms / 1 s / 2 s).
  • Large integer IDs preserved as string / 大整数 ID 保 string: docID is base64, hashDocID is a 19-digit number, likeNum includes Chinese units like 10万+. All kept as strings to avoid JS Number precision loss.

📚 Resources

For 视频号 Channels-only video search with duration filter (short / medium / long) and sort (latest / hottest), see the sister Actor:

→ WeChat Channels Video Search Scraper — same keyword, dedicated video endpoint with time / length filters.

$npm test

Runs 23 unit assertions (input validation, request body shape, normalization across video / article / account shapes) plus 7 integration scenarios (mock fetch drives the full run() flow against captured Data provider fixtures).

✅ unit.js: 23 assertions passed.
✅ integration.js: 7 scenarios passed.

See ./CHANGELOG.md.

Apache-2.0