Curated RSS feed definitions for news aggregation
π Feed Structure β’ β Adding Feeds β’ π Feed Format β’ π€ Contributing
Open Feeds is a community-maintained repository of curated RSS feed definitions. These feeds are designed to be used by news aggregation tools, scrapers, and Python packages like open-news-api.
This repository maintains:
- β 50+ country-specific feeds
- β Category-based news feeds (business, politics, geopolitics, general news)
- β Version controlled for full transparency
- β Easy community contributions
- β Regularly maintained and validated feeds
feeds/
βββ news.json # General news feeds
βββ business.json # Business & finance news
βββ politics.json # Political news
βββ geopolitics.json # Geopolitical analysis
βββ country/
βββ usa.json # United States
βββ india.json # India
βββ uk.json # United Kingdom
βββ pakistan.json # Pakistan
βββ ... # Other countries
templates/template.json # Template for new feed files
The root index.json serves as a registry that lists all available feed files, their type (category or country), and their path.
Each JSON file follows this versioned schema:
{
"schema_version": 2,
"category": null, // or "news", "business", "politics", "geopolitics"
"country": null, // or "usa", "india", "uk", etc.
"last_updated": "2026-06-28T00:00:00Z",
"max_articles_per_feed": 8, // maximum articles to fetch from each feed
"feeds": [
{
"id": "bbc-news", // unique identifier for the feed
"name": "BBC News", // display name
"url": "[https://feeds.bbci.co.uk/news/rss.xml](https://feeds.bbci.co.uk/news/rss.xml)",
"type": "rss", // "rss" or "google_news_rss" (or others)
"lang": "en", // language code
"country": "uk", // primary country (may be null for global feeds)
"tags": ["general"], // array of tags (e.g., "general", "state-media", "aggregator")
"active": true // whether the feed is currently live
}
]
}
| Field | Type | Required | Description |
|---|---|---|---|
schema_version |
integer | β Yes | Version of the schema (currently 2) |
category |
string or null | β No | If the file is a category file (e.g., "news", "business") |
country |
string or null | β No | If the file is a country file (e.g., "usa", "india") |
last_updated |
string (ISO 8601) | β Yes | Date when the file was last modified |
max_articles_per_feed |
integer | β Yes | Number of latest articles to fetch per feed (default usually 8) |
feeds |
array | β Yes | List of feed objects |
feeds[].id |
string | β Yes | Unique identifier for this feed (within the repository) |
feeds[].name |
string | β Yes | Humanβreadable name of the source |
feeds[].url |
string | β Yes | RSS/Atom feed URL (must be valid and accessible) |
feeds[].type |
string | β Yes | Feed format (currently "rss" or "google_news_rss") |
feeds[].lang |
string | β Yes | Language code (e.g., "en", "fr") |
feeds[].country |
string or null | β No | Primary country of the feed (if applicable) |
feeds[].tags |
array of strings | β Yes | Descriptive tags (e.g., ["general"], ["state-media"]) |
feeds[].active |
boolean | β Yes | true if the feed is active and should be used |
git clone [https://github.com/alphap365/open-feeds.git](https://github.com/alphap365/open-feeds.git)
cd open-feeds
- Country feeds β edit
feeds/country/<country>.json - Category feeds β edit
feeds/<category>.json(e.g.,news.json) - New country β copy
templates/template.jsontofeeds/country/<country>.jsonand fill in the details.
Inside the feeds array, add a new object with all required fields. For example, to add a new Indian news source:
{
"id": "the-hindu",
"name": "The Hindu",
"url": "[https://www.thehindu.com/news/feeder/default.rss](https://www.thehindu.com/news/feeder/default.rss)",
"type": "rss",
"lang": "en",
"country": "india",
"tags": ["general"],
"active": true
}
Make sure the file is valid JSON:
python3 -m json.tool feeds/country/india.json
Verify the feed URL works:
curl -s "[https://www.thehindu.com/news/feeder/default.rss](https://www.thehindu.com/news/feeder/default.rss)" | head -20
If you create a new country or category file, add an entry in index.json under the registry array.
For a new country file:
{
"key": "mynewcountry",
"kind": "country",
"path": "feeds/country/mynewcountry.json"
}
For a new category file:
{
"key": "technology",
"kind": "category",
"path": "feeds/technology.json"
}
git add feeds/country/india.json
git add index.json # if changed
git commit -m "Add The Hindu news feed to India feeds"
git push origin add-feeds/india-news
Submit your PR with:
- A clear title:
Add [Feed Name] to [Category/Country] - Description of the added feeds
- Rationale for inclusion
- Verification that feeds are working
- Regularly updated (daily or more)
- Complete article titles and links
- Publication dates included
- Stable feed URL for 6+ months
- Accessible without authentication
- Valid RSS/Atom format
- Paywalled or limitedβaccess feeds
- Truncated content or summaries only
- Dead or inactive feeds (no updates in 3+ months)
- Feeds requiring API keys or authentication
- Feeds with excessive redirects or errors
- Test before submitting β always verify the URL works.
- No duplicates β search existing files to avoid adding the same source twice.
- Use official names β e.g., "BBC News" instead of "BBC".
- Choose correct tags β use
["general"],["state-media"],["aggregator"], or custom tags as needed. - Set active status β set
"active": trueonly if the feed is currently live; set tofalseif itβs temporarily broken.
| File | Type | Description |
|---|---|---|
news.json |
Category | General / breaking news |
business.json |
Category | Business, finance, economics |
politics.json |
Category | Politics & government |
geopolitics.json |
Category | International relations, geopolitical analysis |
country/*.json |
Country | Feeds specific to a country (e.g., india.json) |
- Report broken feeds via GitHub Issues.
- Remove feeds that havenβt been updated in 3+ months.
- Update feed URLs if sources change their feed endpoints.
- Set
"active": falsefor temporarily unavailable feeds.
We welcome contributions! Please follow the steps above and check the PR checklist:
- JSON is valid (
python3 -m json.toolpasses) - Feed URLs are tested and accessible
- No duplicate feeds in the repository
- Feed placed in appropriate category/country file
-
index.jsonupdated if a new file is added - Descriptive commit message and PR description
- Feed follows the format specification
GitHub β’ Issues β’ Discussions
Made with β€οΈ by the community