Skip to content

RSS / Atom Feeds

Feature flag required

finance-query = { version = "...", features = ["rss"] }

The feeds module aggregates RSS and Atom news from over 30 named financial sources, or any custom URL. Multiple feeds can be fetched concurrently in a single call with automatic deduplication and chronological sorting.

use finance_query::feeds::{self, FeedSource};

Fetching a Single Feed

use finance_query::feeds::{self, FeedSource};

// Federal Reserve press releases and speeches
let fed_news = feeds::fetch(FeedSource::FederalReserve).await?;

for entry in fed_news.iter().take(5) {
    println!("{}: {}", entry.published.as_deref().unwrap_or("?"), entry.title);
    if let Some(url) = entry.url.as_str().chars().next() {
        println!("  {}", entry.url);
    }
}

Fetching Multiple Feeds

use finance_query::feeds::{self, FeedSource};

// Aggregate multiple sources concurrently
let news = feeds::fetch_all(&[
    FeedSource::FederalReserve,
    FeedSource::SecPressReleases,
    FeedSource::MarketWatch,
    FeedSource::Bloomberg,
    FeedSource::WsjMarkets,
]).await?;

println!("Total entries (deduplicated): {}", news.len());
for entry in news.iter().take(10) {
    println!("[{}] {}: {}", entry.source, entry.published.as_deref().unwrap_or("?"), entry.title);
}

fetch_all fetches all sources concurrently, deduplicates by URL, and sorts newest-first where dates are available. Individual feed failures are silently skipped.

Custom Feed URLs

let custom = feeds::fetch(FeedSource::Custom(
    "https://example.com/feed.xml".to_string()
)).await?;

FeedEntry Fields

Field Type Description
title String Article or item title
url String Canonical link to the article
published Option<String> Publication date/time as RFC 3339 string
summary Option<String> Short summary or description
source String Human-readable source name (e.g., "Federal Reserve")

Available FeedSource Variants

Regulatory & Government

Variant Source
FederalReserve Federal Reserve press releases and speeches
SecPressReleases SEC enforcement actions and rule changes
SecFilings(form_type) SEC EDGAR filings by form type (e.g., "10-K", "8-K")
Bea US Bureau of Economic Analysis data releases
Ecb European Central Bank press releases and speeches
Cfpb Consumer Financial Protection Bureau newsroom
BankOfEngland Bank of England monetary policy notices

Financial News

Variant Source
MarketWatch MarketWatch top stories
WsjMarkets Wall Street Journal Markets
Bloomberg Bloomberg Markets news
FinancialTimes Financial Times Markets section
FtLex FT Lex — daily market commentary column
Cnbc CNBC Markets
NytBusiness New York Times Business section
GuardianBusiness The Guardian Business section
Investing Investing.com all news
Fortune Fortune — business and finance news
BusinessWire Business Wire — corporate press releases (earnings, dividends, M&A)
TheEconomist The Economist — global economics
FinancialPost Financial Post — Canadian markets
RitholtzBigPicture The Big Picture (Ritholtz) — macro commentary
CalculatedRisk Calculated Risk — housing, mortgage, macro data

Crypto & Tech

Variant Source
CoinDesk CoinDesk — cryptocurrency and blockchain news
CoinTelegraph CoinTelegraph — crypto news and analysis
TechCrunch TechCrunch — startup, VC, and tech news
HackerNews Hacker News — curated tech posts (100+ points)
VentureBeat VentureBeat — AI and enterprise technology
YCombinator Y Combinator blog — startup ecosystem

International

Variant Source
Scmp South China Morning Post — China business and trade
NikkeiAsia Nikkei Asia — Japanese and Asian business news
OilPrice OilPrice.com — energy geopolitics

Custom

Variant Description
Custom(String) Any RSS/Atom feed URL

Example: SEC EDGAR Filing Feed

use finance_query::feeds::{self, FeedSource};

// Stream the latest 10-K filings
let filings = feeds::fetch(FeedSource::SecFilings("10-K".to_string())).await?;

for f in &filings {
    println!("{}: {}", f.published.as_deref().unwrap_or("?"), f.title);
    println!("  {}", f.url);
}

Next Steps