openbb-news
RSS news feeds for the OpenBB Platform — one Workspace Newsfeed widget backed by a registry of 500+ vetted feeds (Benzinga, GlobeNewswire by full ICB industry breakdown + subject/event-type breakdown — earnings, M&A, dividends, IPOs, etc., PR Newswire regional + category, Axios, Yahoo Finance, Fortune, BBC, Fox News, Drudge Report, Drugs.com, Google News regional + topic, plus the full set of publishers aggregated by brutalist.report grouped under its eight topics — Tech, News, Business, Science, Gaming, Culture, Politics, Sports). The widget defaults to Benzinga → Markets so it loads finance-relevant articles immediately on first open.
Install
uv pip install -e .
Endpoints
| GET path | Returns |
|---|---|
/api/v1/news/rss?outlet=<id>&source=<key>&limit=<n>&fetch_body=<bool> |
OBBject[list[NewsItemData]] — {title, date, author, url, excerpt, body} per article. Empty when source is unset and no default can be resolved. |
/api/v1/news/rss_providers |
list[{label, value}] — drives the widget's Provider dropdown. |
/api/v1/news/rss_feeds?outlet=<id> |
list[{label, value}] — drives the widget's Feed dropdown, filtered by the selected provider. |
fetch_body=true extracts the full article body from each entry's URL via
JSON-LD articleBody first, then the largest <article> element after
stripping site chrome (nav/header/footer/aside/script/style/form/
iframe/button/svg). Requires at least two real <p> paragraphs and
rejects pages whose body contains unrendered template markers ([[, {{);
falls back to the RSS summary on any miss. Bounded lru_cache(maxsize=256)
keeps repeat fetches in-process; no disk persistence.
Pluggable feeds — openbb.toml
Three levers in ~/.openbb_platform/openbb.toml, all under [news]:
1. Add or replace feeds — [news.rss_feeds]
Simple form — key = "url-string". The feed appears under a single
"Custom" provider; the label is a humanized form of the key.
[news.rss_feeds]
my_internal = "https://internal.example.com/news.rss"
acme_blog = "https://acme.example.com/feed"
Rich form — key = { url, provider, label } (or the equivalent table
syntax). Lets you bucket feeds into your own provider and give them a
display label, so the widget's Provider → Feed cascade groups them.
[news.rss_feeds.alpha_research]
url = "https://alpha.example.com/rss"
provider = "acme_research"
label = "Alpha Research"
[news.rss_feeds.beta_research]
url = "https://acme.example.com/beta/rss"
provider = "acme_research"
label = "Beta Research"
2. Pretty provider names — [news.rss_providers]
By default a provider id is humanized (acme_research → "Acme Research"). To
control the display label exactly, map provider id → label:
[news.rss_providers]
acme_research = "Acme Research"
internal = "Internal Sources"
3. Keep the bundled defaults — [news] merge_defaults
Without this flag, the presence of any [news.rss_feeds] entries replaces
the 562 bundled feeds entirely. Set merge_defaults = true to keep
everything and add your feeds on top. User keys that collide with bundled
keys override the bundled URL.
[news]
merge_defaults = true
[news.rss_feeds]
my_internal = "https://internal.example.com/news.rss"
Full example
[news]
merge_defaults = true
[news.rss_providers]
acme_research = "Acme Research"
[news.rss_feeds.alpha]
url = "https://alpha.example.com/rss"
provider = "acme_research"
label = "Alpha Research"
[news.rss_feeds.beta]
url = "https://beta.example.com/rss"
provider = "acme_research"
label = "Beta Research"
The Workspace Newsfeed widget rebuilds its Provider + Feed dropdowns from this config on each request — restart the server only if the file was empty at boot.
Tests
pytest tests --cov=openbb_news --cov-fail-under=100
pytest integration -m integration # hits the live feeds
Metadata
Release files for openbb-news 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| openbb_news-2.0.0.tar.gz | 20.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| openbb_news-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.0 kB
Release files / openbb_news-2.0.0.tar.gz
| Download URL | openbb_news-2.0.0.tar.gz |
|---|---|
| Size | 20.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0319fe381f5a5da32760d07123e1a5e95a1a5d1bbe64944ff1c8b6b0189c6ab3
|
|
BLAKE2b-256 checksum How to use checksums |
f3cd1d3b7100e27dab6a75c94dca44a5e7f070a2a433390583bd4f5c5b992362
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.
Transparency logRelease files / openbb_news-2.0.0-py3-none-any.whl
| Download URL | openbb_news-2.0.0-py3-none-any.whl |
|---|---|
| Size | 21.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fe6edbb11a532943627090b59bfdf66642a2486e15bfb28e130a44057972dd5d
|
|
BLAKE2b-256 checksum How to use checksums |
e4d7df605a5d0775952ea55ce576a6a750b29dd400719b1ecf1b6f9a9804f700
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.
Transparency log