# How do I subscribe to a WeChat Official Account via RSS?

> WeChat has no RSS. Generate a real RSS feed for any WeChat Official Account from its article list, host it anywhere, read it in any reader. Cost and code.

Canonical page: https://okdata.online/answers/wechat-official-account-rss-feed/

**Short answer: **WeChat doesn't offer RSS, so you build the feed: call Official Account article history for the account ($0.04 per call, 10 newest articles) and write the items into an RSS file your reader polls. One account refreshed twice a day costs $2.40 a month; twenty accounts cost $48.00.

You read everything else in Reeder, Inoreader or Folo, and the Official Accounts you care about are the one thing stuck inside the WeChat app. WeChat has never offered RSS, so the feed has to be generated. The part that needs data is small: [Official Account article history](/apis/wechat_mp/accounts/articles/list/) returns an account's 10 newest articles with title, link, summary and publish time, which maps one to one onto RSS items. A script writes that into `feed.xml`, and your reader polls the file like any other feed.

## Steps

1. Find the account's original ID (gh_…) once with [Official Account search](/apis/wechat_mp/accounts/search/), $0.058 per account returned.
2. Run the script below on a schedule (cron, a GitHub Action, a small server).
3. Put `feed.xml` somewhere your reader can reach: a static host, an object storage bucket, or a local folder if your reader runs on the same machine.

```python
import os, requests
from email.utils import format_datetime
from datetime import datetime
from xml.sax.saxutils import escape

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
GH = "gh_363b924965e9"

body = requests.get(API + "/v1/wechat_mp/accounts/articles/list", headers=H,
                    params={"id": GH}, timeout=60).json()
if body["code"] != "ok":
    raise SystemExit(f"{body['code']}: {body['message']}")

items, name = [], GH
for a in body["data"]["items"]:
    name = a["author"]["name"] or name
    date = format_datetime(datetime.fromisoformat(a["published_at"].replace("Z", "+00:00")))
    items.append(f"<item><title>{escape(a['title'] or '')}</title><link>{escape(a['url'])}</link>"
                 f"<guid>{escape(a['url'])}</guid><pubDate>{date}</pubDate>"
                 f"<description>{escape(a['text'])}</description></item>")

rss = (f'<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel>'
       f"<title>{escape(name)}</title><link>https://mp.weixin.qq.com/</link>"
       f"<description>{escape(name)} via okdata</description>{''.join(items)}</channel></rss>")
open("feed.xml", "w", encoding="utf-8").write(rss)
```

## How often to refresh, and what it costs

Each refresh is one call per account, whether or not anything new was published.

| Feeds | Refreshes a day | Calls a month | Cost a month |
|---|---|---|---|
| 1 | 2 | 60 | $2.40 |
| 20 | 2 | 1,200 | $48.00 |
| 20 | 6 | 3,600 | $144.00 |

Search with `view=full` tells you `ext.articles_per_week` for each account. An account that posts twice a week doesn't need six refreshes a day; once is plenty.

## Limits

- The item description is the article's summary, not the full text. For full text in the feed, add one [article detail](/apis/wechat_mp/articles/get/) call per new article at $0.02, and cache it so you never fetch the same article twice.
- Only published, public articles appear. A deleted article disappears from the next refresh, but readers keep what they already fetched.
- Errors are not charged. If a refresh fails, keep the old `feed.xml` instead of overwriting it with an empty one.

## Free alternatives

Self-hosted projects such as wewe-rss and we-mp-rss produce WeChat RSS feeds at no cost; they rely on a WeChat Reading account or an Official Account backend login that you keep signed in. RSSHub has had WeChat-related routes too; check which still work for your accounts. They are a good fit for a few personal feeds. The API route suits feeds that other people or other systems depend on. Prices for every endpoint are on the [pricing page](/pricing/).

## Endpoints used

- [Official Account article history](https://okdata.online/apis/wechat_mp/accounts/articles/list/) `wechat_mp.accounts.articles.list`: $0.04 per call · about 10 articles per page
- [Official Account search](https://okdata.online/apis/wechat_mp/accounts/search/) `wechat_mp.accounts.search`: $0.058 per account · at most $0.58 per call

Updated 2026-11-12
