DEV Community

Oaida Adrian
Oaida Adrian

Posted on • Originally published at apify.com

Building a Real-Time Press Release Monitor with Python and RSS Aggregation

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",
}
Enter fullscreen mode Exit fullscreen mode

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)]
Enter fullscreen mode Exit fullscreen mode

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]
Enter fullscreen mode Exit fullscreen mode

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()
Enter fullscreen mode Exit fullscreen mode

Try It

You can use the Press Release Monitor right now:

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)