PR & Media Monitoring with News Search API
Public relations is, at its core, about managing how information about your organization appears in the media. Every press release, media pitch, product launch, and crisis response eventually shows up (or fails to show up) in news coverage. Knowing when, where, and how your brand is mentioned in the media is not a luxury. It is a fundamental operating requirement for any PR team.
2026 update: To monitor brand mentions inside AI assistants, see our brand SERP monitoring guide.
Yet most PR professionals still rely on a patchwork of manual Google searches, email alerts, and expensive media monitoring subscriptions to track coverage. Enterprise tools like Meltwater and Cision cost $5,000 to $50,000 per year. Google Alerts is free but notoriously unreliable. There is a better middle ground: building custom monitoring workflows using a news search API.
Why Media Monitoring Matters
For In-House PR Teams
In-house communications teams need media monitoring to accomplish several things. They need to report on campaign outcomes to leadership, quantifying how many articles were generated by a press release or media event. They need to catch negative coverage early, before it spreads or escalates. They need to track competitors' media presence to understand the broader competitive narrative. And they need to identify journalists who are actively covering their industry, as those journalists are the most likely to be receptive to pitches.
For PR Agencies
Agencies have an additional layer of requirements. They need to generate coverage reports for clients, demonstrate ROI to justify retainer fees, and monitor multiple brands simultaneously across different industries. The cost of enterprise monitoring tools multiplied across a dozen client accounts makes an API-based approach significantly more attractive.
Key Metrics PR Teams Track
| Metric | What It Measures | Why It Matters |
|---|---|---|
| Volume of mentions | Total articles per period | Baseline activity and campaign impact |
| Share of voice | Your mentions vs. competitors | Relative media presence |
| Source authority | Tier 1/2/3 publication breakdown | Quality of coverage |
| Geographic spread | Where coverage appears | Regional campaign effectiveness |
| Topic association | Themes linked to your brand | Narrative control and positioning |
| Sentiment indicators | Positive/negative/neutral tone | Brand perception health |
Limitations of Traditional Tools
Enterprise Platforms (Meltwater, Cision)
Enterprise media monitoring platforms are comprehensive, but they come with significant drawbacks. Annual contracts of $10,000 or more lock you in. The interfaces are complex and require training. Custom reporting often requires support tickets. And their data, while broad, is not always more timely than what appears in Google News, which many still use as a primary check anyway.
Google Alerts
Google Alerts is the tool most PR professionals start with, and it has well-known problems. Alert delivery is inconsistent: some queries generate daily emails while others go silent for weeks despite new matching content. There is no API, so you cannot integrate alerts into your own systems. There is no metadata (publication date, source authority, snippet text) in a structured format. And there is no way to aggregate or analyze results across multiple queries.
Manual Searching
Some PR teams assign a junior staff member to search Google News manually every morning. This is time-consuming, error-prone (people miss things), and produces data that lives in a spreadsheet rather than a system. It also does not scale: monitoring five brands with 10 queries each across three search engines means 150 manual searches per day.
The API-First Approach
A news search API solves these problems by giving you programmatic, structured access to news results. With Serpent API, you can query the Google News and DuckDuckGo News endpoints, receive structured JSON responses with article titles, sources, publication dates, and snippets, and feed this data into any system you build.
Available News Endpoints
| Endpoint | Source | Results | Cost (Scale/1K) |
|---|---|---|---|
/api/news?engine=google | Google News | 100+ articles | $0.01 |
/api/news?engine=ddg | DuckDuckGo News | Up to 30 articles | $0.01 |
/api/news?engine=yahoo | Yahoo News | Up to 20 articles | $0.01 |
News is billed flat across engines — $0.20 per 1,000 on the default tier, $0.02 on Growth and $0.01 on Scale — so the engine you pick changes coverage, not cost. At the $0.01 Scale rate, monitoring 50 brand-related queries four times daily (about 6,000 calls a month) costs roughly $0.06 per month. That is not a typo. The economics of API-based monitoring are radically different from enterprise tool pricing.
Building a Brand Mention Tracker
A practical brand mention tracker queries news APIs on a schedule, deduplicates results, and stores them for analysis. Here is a Python implementation:
import requests
import json
from datetime import datetime
from hashlib import md5
SERPENT_API_KEY = "YOUR_API_KEY"
def fetch_news(query, engine="google", num=50):
"""Fetch news results from Serpent API."""
response = requests.get(
"https://apiserpent.com/api/news",
params={
"q": query,
"engine": engine,
"num": num,
"apiKey": SERPENT_API_KEY
},
timeout=15
)
response.raise_for_status()
return response.json()
def track_brand_mentions(brand_queries, seen_hashes=set()):
"""
Track brand mentions across multiple queries.
Returns only new (unseen) articles.
"""
new_articles = []
for query in brand_queries:
data = fetch_news(query)
articles = data.get("results", {}).get("news", [])
for article in articles:
# Deduplicate by title hash
article_hash = md5(article["title"].encode()).hexdigest()
if article_hash in seen_hashes:
continue
seen_hashes.add(article_hash)
new_articles.append({
"title": article["title"],
"source": article.get("source", "Unknown"),
"url": article.get("url", ""),
"snippet": article.get("snippet", ""),
"published": article.get("date", ""),
"query": query,
"found_at": datetime.now().isoformat()
})
return new_articles, seen_hashes
# Example usage
queries = [
'"Acme Corp"', # Exact brand name
'"Acme Corp" CEO', # Executive mentions
'"Acme Corp" product', # Product mentions
'"Acme Corp" funding', # Business news
]
new_mentions, seen = track_brand_mentions(queries)
print(f"Found {len(new_mentions)} new mentions")
Source Classification
Not all media mentions are equal. A mention in The New York Times carries more weight than a mention in a local blog. Classify sources into tiers to weight your analysis:
TIER_1_SOURCES = {
"nytimes.com", "wsj.com", "reuters.com", "bbc.com",
"bloomberg.com", "forbes.com", "techcrunch.com",
"theverge.com", "wired.com", "cnbc.com"
}
TIER_2_SOURCES = {
"businessinsider.com", "mashable.com", "zdnet.com",
"venturebeat.com", "theregister.com", "arstechnica.com"
}
def classify_source(url):
"""Classify a news source by authority tier."""
from urllib.parse import urlparse
domain = urlparse(url).hostname.replace("www.", "")
if domain in TIER_1_SOURCES:
return "tier_1"
elif domain in TIER_2_SOURCES:
return "tier_2"
else:
return "tier_3"
Measuring PR Campaign Impact
After a press release or media event, the critical question is: how much coverage did it generate? An API-based approach lets you measure this precisely.
Before and After Analysis
Run the same set of brand queries before your campaign launches to establish a baseline. Then run them again at intervals (1 day, 3 days, 7 days) after launch. The difference in volume, source quality, and topic association tells you the campaign's media impact.
def measure_campaign_impact(brand_queries, baseline_count, days_after=7):
"""
Compare current mention volume to pre-campaign baseline.
Returns lift metrics.
"""
current_mentions = []
for query in brand_queries:
data = fetch_news(query)
articles = data.get("results", {}).get("news", [])
current_mentions.extend(articles)
# Deduplicate
unique_titles = set(a["title"] for a in current_mentions)
current_count = len(unique_titles)
# Classify by source tier
tier_counts = {"tier_1": 0, "tier_2": 0, "tier_3": 0}
for article in current_mentions:
tier = classify_source(article.get("url", ""))
tier_counts[tier] += 1
lift = ((current_count - baseline_count) / baseline_count * 100
if baseline_count > 0 else 0)
return {
"baseline_mentions": baseline_count,
"current_mentions": current_count,
"lift_percentage": round(lift, 1),
"tier_breakdown": tier_counts,
"measurement_period_days": days_after
}
Share of Voice Tracking
Share of voice measures how much of the overall media conversation in your industry features your brand versus competitors. This is one of the most valuable metrics for competitive PR.
def calculate_share_of_voice(brands):
"""
Calculate share of voice across brands.
brands: dict of brand_name -> list of search queries
"""
mention_counts = {}
total = 0
for brand, queries in brands.items():
count = 0
for query in queries:
data = fetch_news(query)
articles = data.get("results", {}).get("news", [])
count += len(articles)
mention_counts[brand] = count
total += count
sov = {}
for brand, count in mention_counts.items():
sov[brand] = {
"mentions": count,
"share": round(count / total * 100, 1) if total > 0 else 0
}
return sov
Crisis Communication Monitoring
During a crisis, media monitoring shifts from a routine reporting function to a real-time operational necessity. You need to know what is being published, by whom, and how fast it is spreading.
Rapid Polling
In a crisis, increase your polling frequency from daily to every 30 to 60 minutes. Set up alerts that trigger when mention volume exceeds a threshold (e.g., more than 10 new articles in an hour, compared to a normal rate of 2 to 3 per day).
Narrative Tracking
During a crisis, the specific language used in coverage matters enormously. Track which keywords appear alongside your brand name in article snippets to understand how the narrative is being framed:
def extract_narrative_keywords(articles, brand_name):
"""
Extract frequently co-occurring keywords from article snippets.
Helps track how the media narrative is framing the brand.
"""
from collections import Counter
import re
stop_words = {"the", "a", "an", "is", "are", "was", "were", "in",
"on", "at", "to", "for", "of", "and", "or", "but",
"with", "has", "have", "had", "that", "this"}
word_counts = Counter()
brand_lower = brand_name.lower()
for article in articles:
snippet = article.get("snippet", "").lower()
words = re.findall(r'\b[a-z]{3,}\b', snippet)
meaningful = [w for w in words
if w not in stop_words and w != brand_lower]
word_counts.update(meaningful)
return word_counts.most_common(20)
If your brand name starts appearing alongside words like "lawsuit," "scandal," or "recall," that signals an escalation that requires an immediate response. Conversely, seeing words like "response," "apology," or "resolved" indicates your crisis communications are gaining traction.
Building Media Intelligence Dashboards
The value of media monitoring increases dramatically when data is visualized and accessible to your entire team. A media intelligence dashboard should show:
- Mention timeline — A line chart showing daily mention volume over the past 30/60/90 days
- Source breakdown — Pie chart of Tier 1/2/3 source distribution
- Share of voice — Stacked bar chart comparing your brand to competitors over time
- Topic cloud — Word cloud of frequently co-occurring keywords
- Recent mentions table — Sortable list of the latest articles with source, title, date, and tier
- Alert feed — Real-time stream of high-priority mentions (Tier 1 sources, negative sentiment indicators)
Cost for a Full Media Monitoring Setup
| Use Case | Queries | Frequency | Monthly Cost (Scale) |
|---|---|---|---|
| Single brand monitoring | 10 | 4x daily | $0.01 |
| Brand + 3 competitors | 40 | 4x daily | $0.05 |
| PR agency (10 clients) | 200 | 4x daily | $0.24 |
| Enterprise (global, multi-region) | 500 | Hourly | $3.60 |
Even the most aggressive enterprise monitoring setup costs under $4 per month in API calls. Compare that with Meltwater's starting price of $4,000 per year, and the economics of building your own solution become very clear.
FAQ
How does a news search API differ from Google Alerts?
Google Alerts pushes email when something matches your query. That is the whole product. It quietly misses articles, it has no API, it gives you no metadata beyond a title and a link, and you cannot control how often it runs or what shape the output takes. A news search API inverts all of that: you decide the query, the country, the time window and the schedule, you get structured JSON with the source, the headline, the snippet and the publication time, and you can pipe it straight into a database, a dashboard or a Slack channel. Alerts is a notification. An API is a data feed you can build on.
Can I track media coverage across multiple countries?
Yes. The country parameter accepts 112 country codes, so you can run the same brand query as country=gb, country=de and country=jp and compare what each market is actually being shown. This matters more than it sounds: coverage of the same announcement often breaks in one region days before another, and the outlets that carry it differ completely. Store the country code on every record you save — without it you cannot tell a genuine spike from a regional one, and the geographic breakdown is one of the more useful charts you will build.
How often should I check for new media mentions?
Match the interval to the stakes. During an active crisis or a launch week, hourly to every two hours is justified. For routine brand monitoring, two to four checks a day catches everything that matters without generating noise. For slower industry-trend tracking, once a day is plenty. Two practical notes: news indexes update in bursts rather than continuously, so polling every five minutes mostly returns the same articles you already have, and every schedule needs deduplication on the article URL or you will alert your team about the same story repeatedly.
What metrics should I track for PR measurement?
Six of them cover most reporting needs. Volume of mentions per period gives you the baseline. Share of voice — your mentions against named competitors on the same query set — turns that baseline into something comparative. Source authority, bucketed into tiers you define once, stops a trade blog counting the same as a national paper. Sentiment indicators drawn from keywords in the headline and snippet give a rough directional read. Geographic spread shows which markets picked the story up. Topic association shows what themes your brand is being attached to, which is often the earliest sign a narrative is shifting. Track the trend on each rather than the absolute number; the direction is the story.
Can I build a media monitoring tool for clients using this API?
Yes, and it is a common build. Agencies and SaaS teams routinely put their own dashboards, scheduled reports and alerting on top of a news search endpoint. The economics work because a per-client monitoring load is small: a dozen queries checked a few times a day is a few thousand calls a month per client, so you can carry dozens of clients on a bill that stays trivial next to enterprise monitoring licences. What you are selling is not the raw articles — it is the deduplication, the history, the scoring and the reporting you wrap around them. See the pricing page for current per-1,000 rates before you model your margins.
Start Monitoring Your Media Coverage
Get started with Serpent API's news search endpoints. 10 free web searches included, no credit card required.
Get Your Free API KeyExplore: News API · SERP API · Pricing · Try in Playground



