Answers
How do I monitor competitors' WeChat Official Accounts for new articles?
Short answer
Check each competitor's Official Account once a day with Official Account article history ($0.04 per call, 10 newest articles with reads and likes where available), and fetch full text only for the headline article ($0.02). Eight competitors cost $14.40 a month for both.
A skincare brand watches eight competitors on WeChat. Every morning the team wants one message: who published yesterday, what went in the headline slot, which pieces were original, and how many reads each had so far. That digest takes one call per competitor to Official Account article history, plus one article detail call for each headline you want to read in full.
What each article comes with
- Title, link, summary and publish time.
- Reads and likes at the moment you fetch, where available.
- With
view=full:ext.position(1 is the headline slot, 2 and up are the secondary pieces in the same push) andext.original(whether it was marked original).
The headline slot tells you what the competitor bets on that day. Original versus reposted tells you whether they are building their own content or curating.
Cost
| Setup | Calls a month | Cost a month |
|---|---|---|
| 8 competitors, list once a day | 240 | $9.60 |
| Plus full text of each day's headline | +240 | {{cost:wechat_mp.accounts.articles.list240+wechat_mp.articles.get240}} |
| 25 competitors, list only | 750 | $30.00 |
You need each competitor's original ID (gh_…) once; Official Account search finds it by name for $0.058 per account returned.
The morning digest
import os, datetime, requests
API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
RIVALS = {"Brand A": "gh_aaaaaaaaaaaa", "Brand B": "gh_bbbbbbbbbbbb"}
since = (datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=1)).isoformat()
lines = []
for name, gh in RIVALS.items():
body = requests.get(API + "/v1/wechat_mp/accounts/articles/list", headers=H, timeout=60,
params={"id": gh, "view": "full"}).json()
if body["code"] != "ok":
lines.append(f"{name}: could not check ({body['code']})")
continue
for a in body["data"]["items"]:
if a["published_at"] < since:
continue
slot = "HEADLINE" if a.get("ext", {}).get("position") == 1 else "secondary"
reads = a["metrics"]["views"]
lines.append(f"{name} [{slot}] {a['title']} — reads {reads if reads is not None else 'n/a'}\n{a['url']}")
print("\n".join(lines) or "No new articles yesterday.")
Reading the numbers fairly
- Reads keep climbing for days. A piece fetched six hours after publishing will look weaker than last week's piece fetched after seven days. For comparisons, re-fetch the list a week later and compare like with like.
- When reads or likes can't be fetched they come back null and
meta.unavailablenames them. Treat that as unknown, not zero. - Shares, comments and "Wow" counts are not available.
- The accounts are public, but the articles belong to their authors: summarise and link rather than republish.
Other ways to do it
Following the accounts in WeChat yourself is free and works for three or four competitors if someone reads them daily. WeChat ranking platforms such as 新榜 are better when you want industry leaderboards and long historical read curves rather than your own list. If you also want a competitor's Douyin, Xiaohongshu or Weibo activity in the same digest, the competitor monitoring guide shows the other platforms.
Updated