Building a Real-Time Press Release Monitor with Python and RSS Aggregation
Staying on top of company announcements is hard. Press releases are scattered across PRWeb, Business Wire, GlobeNewswire, and dozens of smaller wires. Each has its own RSS feed, and none of them offer keyword filtering out of the box.
I built a Press Release Monitor that aggregates all major PR wires into a single, searchable stream with keyword filtering and full-text extraction.
The Problem
PR professionals, journalists, and analysts need to track company announcements as they happen. But the current workflow is manual: visit each PR wire site, search for your keywords, copy results. Slow and error-prone.
The Solution: Multi-Source RSS Aggregation
The monitor pulls from multiple PR distribution feeds simultaneously:
- PRWeb — broad press release distribution
- Google News PR Search — catches releases picked up by news aggregators
- Dow Jones MarketWatch — financial market announcements
PR_FEEDS = {
"prweb_all": "https://www.prweb.com/rss2/daily.xml",
"google_news_pr": "https://news.google.com/rss/search?q=press+release+announces",
"dowjones_markets": "https://feeds.content.dowjones.io/public/rss/RSSMarketsMain",
}
Keyword Filtering
Once all releases are aggregated, the monitor applies keyword filters:
if keywords:
text = f"{release['title']} {release['summary']}".lower()
matching = [r for r in releases if any(kw.lower() in text for kw in keywords)]
This lets you track specific companies, products, or topics across all wires at once.
Full-Text Extraction
For deeper analysis, the monitor optionally visits each release page and extracts the full text using BeautifulSoup:
soup = BeautifulSoup(resp.text, "html.parser")
for tag in soup(["script", "style", "nav", "footer"]):
tag.decompose()
full_text = soup.get_text(" ")[:5000]
Auto-Detected Company Names
A smart parser extracts the issuing company from each title using common PR naming conventions:
def extract_company(title):
parts = title.split(":")
if len(parts) >= 2:
return parts[0].strip() # "Company Name: Announces..."
if " announces " in title.lower():
return title[:title.lower().index(" announces ")].strip()
Try It
You can use the Press Release Monitor right now:
Apify Store: Press Release Monitor
GitHub: multi-tool-content-api
The Apify actor uses pay-per-event pricing at $0.01 per press release extracted.
Use Cases
- Media Monitoring: Track mentions of your company across all PR wires
- Competitive Intelligence: Monitor competitor announcements in real-time
- Investment Research: Watch for market-moving press releases
- Lead Generation: Find companies announcing funding, product launches, or expansion
Conclusion
By aggregating multiple RSS feeds with keyword filtering and full-text extraction, we turned scattered press releases into a single, searchable stream. The future of media monitoring is automated, real-time, and keyword-aware.
Built with Python, feedparser, BeautifulSoup4, httpx, and the Apify platform.
More from me
- Romania's company registry, now callable from Claude and Cursor (MCP + REST)
- Romania's company registry has no free API — so I built one (4.2M firms, MCP + REST)
- Building a Romanian Business Registry API: 4.2M Companies as Queryable JSON
- Building a SEC EDGAR Filings Scraper: 10-K Risk Factors and 13F Holdings as Clean JSON
- Building a Price & Competitor Monitor That Diffs Shopify and AliExpress Prices
- Building a Vertical Corpus Builder: Clean JSONL Datasets for LLM Fine-Tuning
- Building a Change & Alert Engine That Webhooks Any Diff on Any URL
- Building a Romania Mall Store Directory: Every Store in 29 Malls, One Schema
- Scraping Romanian Public Contracts: A Native-Language Tender & Awarded Deals Scraper
- Building a 12-City US Building Permits Scraper With Python
- Building an EU Safety Gate (RAPEX) Product Recall Scraper With Python
- How I Built a Water Utility Risk Intelligence Tool With Python and MCP
- Building an Aviation Hub API: Airports, Airlines, Live Flights & Weather From Six Keyless Sources
- I Stopped Scraping Business Directories and Built an MCP Server on Official Registry Data
- I Built a Canada Product Recalls & Safety Alerts Scraper That Reads Open Government Data
- I Built a Telegram Members Scraper That Reads Public Chat Stats Without Login
- Building a WHOIS & DNS Lookup Tool: Domain Intelligence in One...
- Building an AI Web Crawler That Outputs LLM-Ready Content Chunks
- Building a Universal Property Listing Scraper with Python and ...
- Tracking Tech Sentiment in Real-Time with VADER and Python
- How I Built a Product Hunt Scraper That Tracks Launches in Rea...
- 5 APIs Every Developer Needs for Content Processing (RSS, Extraction, Sitemaps, AI)
- How to Extract Clean Content From Any Website Sitemap (For SEO...
- Scraping 187,000 Romanian Businesses: Building a B2B Lead Gene...
- Make Any Website AI-Readable: Generating llms.txt Files with
- I Built an RSS Aggregator That Extracts Full Article Content (...
Top comments (0)