Serverless Function to Count How Many People are Subscribed to You in Your Favorite Services
Table of contents
Why I did this?
I initially wanted to combine the subscriber numbers of Feedly and Inoreader — two of the most popular RSS providers, to calculate how many people are subscribed to my blog's RSS. Then it occured to me: I could actually make this into a "Hub", where you can provide a service name, a query key, and out comes the total subscribers of all your services...Hence, I proudly introduce: Substats!
PROs
🧊 Serverless deployment, minimum overhead (powered by Cloudflare)🚀 Ultra-fast reachablility for all services (even in mainland China!)🎈 Simple integration, easy-to-use API with nice badges provided by Shields.io
Further reading
- 少数派详解:《å?šä¸€ä¸ªå¥½çœ‹çš„æ•°æ?®å±•示「å°?æ ‡ç¾ã€?ï¼Œåœ¨ä¸ªäººç½‘ç«™å®žæ—¶å±•ç¤ºä½ çš„ç²‰ä¸?数》
- å?šå®¢ç®€ä»‹ï¼šã€ŠSubstats — å¿«é€Ÿç»Ÿè®¡ä½ åœ¨å?„个平å?°çš„关注者ï¼?》
Examples
📖 For a detailed documentation on the query format, please see: Docs | Substats Query format.
API endpoint
🚦 Only 'GET' requests are handled in order to integrate with badges.
https://api.spencerwoo.com/substats/
Single query
You can make a single query to request your RSS subscribers on Feedly.
GET /?source=feedly&queryKey=https://blog.spencerwoo.com/posts/index.xmlWhich returns:
{ "status": 200, "data": { "totalSubs": 13, "subsInEachSource": { "feedly": 13 }, "failedSources": {} } }You can then use the numbers in data.totalSubs in a dynamic badge:
Multiple sources with a single query string
GET /?source=feedly|inoreader|newsblur&queryKey=https://blog.spencerwoo.com/posts/index.xmlWhich returns:
{
"status": 200,
"data": {
"totalSubs": 49,
"subsInEachSource": {
"feedly": 17,
"inoreader": 29,
"newsblur": 3
},
"failedSources": {}
}
}Enter the badge! (NewsBlur is too slow to load, below is a static badge for demo purposes.)
Multiple queries
GET /?source=telegram&queryKey=realSpencerWoo&source=sspai&queryKey=spencerwoo&source=twitter&queryKey=realSpencerWooWhich returns:
{
"status": 200,
"data": {
"totalSubs": 1552,
"subsInEachSource": {
"telegram": 786,
"sspai": 638,
"twitter": 128
},
"failedSources": {}
}
}And of course, our badges!
Supported services
📖 For a detailed documentation on the API request rules of each service, please see: Docs | Substats API Details.
Contributing
Development
This is a serverless function deployed on Cloudflare Workers. Please check: Docs | How to contribute if you want to contribute.
Contributors
This project exists thanks to all the people who contribute.
Sponsoring
Thank you for considering donations and sponoring our project. We currently support sponsoring via Open Collective.
| Backers | Sponsors |
|---|---|
| Support this project by becoming a backer. Thank you to all our backers! |
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. |
对于国内用户,我们支�直接通过微信和支付�进行��赞助�
| 微信支付 | 支付�支付 |
|---|---|
![]() |
![]() |
您也�以利用「爱�电��对我进行支��
Disclaimer
All APIs used in this project are by no means in any relationship with the original content provider. APIs are subject to change. Your mileage may vary, so use this at your own risk.
Authored and maintained by Spencer Woo.
@Portfolio · @Blog · @GitHub





















