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
- RapidAPI: Multi-Tool Content API
- 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.
Top comments (0)