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
While you're here, these might be worth a read:
- I Built an RSS Aggregator That Extracts Full Article Content (...
- Make Any Website AI-Readable: Generating llms.txt Files with
- Scraping 187,000 Romanian Businesses: Building a B2B Lead Gene...
- How to Extract Clean Content From Any Website Sitemap (For SEO...
- 5 APIs Every Developer Needs for Content Processing (RSS, Extraction, Sitemaps, AI)
- How I Built a Product Hunt Scraper That Tracks Launches in Rea...
- Tracking Tech Sentiment in Real-Time with VADER and Python
- Building a Universal Property Listing Scraper with Python and ...
- Building an AI Web Crawler That Outputs LLM-Ready Content Chunks
- Building a WHOIS & DNS Lookup Tool: Domain Intelligence in One...
Top comments (0)