# Apify News Monitoring

> Monitor news coverage of a brand, competitor, or topic with the Apify Google News API Actor (johnvc/GoogleNewsAPI). Poll a watchlist of queries on a schedule and get fresh articles with title, link, source, snippet, and relative date, ready to dedupe by link and turn into alerts, digests, or a mentions feed. Use when the user wants news monitoring or media monitoring, brand mentions from news, competitor news tracking, google news tracking or google news monitoring, crisis or reputation watch, or a recurring news digest for a market, industry, or portfolio. Pay-per-page billing, MCP-ready for Claude and other AI agents.

- Skill: `johnisanerd/apify-news-monitoring` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add johnisanerd/apify-news-monitoring`
- Raw SKILL.md: https://api.skillmd.com/api/skills/johnisanerd/apify-news-monitoring/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: johnisanerd (https://skillmd.com/u/johnisanerd)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/johnisanerd/apify-news-monitoring

---


# News Monitoring: Brand and Topic Watch From Google News

Turn Google News into a monitoring feed. Poll one query per watchlist term on a schedule, dedupe what you have already seen, and deliver only the new articles as alerts, a digest, or rows in a database.

## When to use this skill

- The user wants news monitoring or media monitoring for a brand, product, executive, or competitor.
- They want brand mentions from news sources as a feed, digest, or alert.
- They want to track a market, industry, regulation, or crisis as it develops.
- They ask for "google news tracking", "google news monitoring", or "news alerts by API".

Not for: one-off bulk exports of a single search (use the google-news-api skill), full article text (the feed carries title, snippet, link, source, and date), or social media mentions (news outlets only).

## What each poll returns (one dataset item per page)

- `news_results`: articles with `position`, `title`, `link`, `source`, `snippet`, `date` (relative, such as "2 hours ago")
- `search_metadata`: `total_results`, `news_count`, `pages_processed`, `pagination_limit_reached`
- `search_information`: `query_displayed`, `news_results_state`
- `search_parameters`, `search_timestamp`, `page_number`

`link` is the dedupe key; `date` plus `search_timestamp` is the freshness signal.

## Prerequisites

- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).
- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).

## The Actor

- Store page: https://apify.com/johnvc/GoogleNewsAPI?fpr=9n7kx3&fp_sid=skillrepo
- Actor ID: `johnvc/GoogleNewsAPI`
- Pricing: pay per page of results processed, plus a small per-run setup fee (see `references/gotchas.md`).

## Run it with the Apify CLI

One watchlist poll, bounded to one page with duplicate coverage collapsed:

```bash
apify actors call "johnvc/GoogleNewsAPI" -i '{"q":"Acme Robotics","filter":"1","max_pages":1}' \
  --json \
  --user-agent apify-awesome-skills/apify-news-monitoring \
  2>/dev/null
```

Read a run's items later, for example from a scheduled run:

```bash
apify datasets get-items <DATASET_ID> --format json --user-agent apify-awesome-skills/apify-news-monitoring 2>/dev/null
```

Every call carries the three flags this repo expects: `--json` (or `--format json`), `--user-agent apify-awesome-skills/apify-news-monitoring`, and `2>/dev/null`.

## Run it from Claude or another AI agent (MCP)

The Actor is MCP-ready. Add the hosted server URL:

`https://mcp.apify.com/?tools=actors,docs,johnvc/GoogleNewsAPI`

Then ask, for example: "Check Google News for new coverage of our company since yesterday and summarize anything negative." MCP setup docs: https://docs.apify.com/platform/integrations/mcp

## Workflow

1. Define the watchlist. One query per term: brand names, product names, executives, competitors, or topics. Quote exact phrases inside `q` for precise brand matching. Each term is its own Actor run.
2. Bound each poll. Keep `max_pages` at 1 or 2 per term; new coverage almost always surfaces on page one. Set `filter: "1"` so one story does not arrive once per outlet.
3. Localize per market. Use `gl`, `hl` (base codes), and `google_domain` for non-US watch terms; add `location` for regional brands.
4. Estimate cost per poll and per month, then confirm with the user. See `references/gotchas.md`.
5. Poll, then post-process: flatten `news_results`, dedupe against your seen-links store on `link`, and convert relative `date` strings ("2 hours ago") to timestamps using `search_timestamp` as the reference.
6. Deliver only what is new: an alert per article, a daily digest grouped by term, or rows appended to a database. For recurring polls, wrap the same input in an Apify Schedule or a cron job.

## Inputs

- `q` (string, required): one watchlist term per run
- `filter` (enum string `"0"` or `"1"`): collapse duplicate coverage, recommended `"1"` for monitoring
- `gl`, `hl`, `google_domain`, `location`: per-market localization
- `safe` (enum: `active` or `off`), `nfpr` (enum string): content and autocorrect controls
- `max_pages` (integer, default 1): the per-poll cost bound

## Cost

Each poll costs a per-run setup fee plus a per-page fee: a one-page poll is about three cents. A daily one-page poll on one term is roughly a dollar a month; a five-term watchlist polled daily is roughly four to five dollars a month. Estimate with the live prices in `references/gotchas.md` before scheduling.

## Honest limits

- This is a polled feed, not a push API: freshness is your poll interval.
- `date` is a relative string; the workflow converts it client-side. There is no server-side date-range filter, so dedupe by `link` does the real work.
- No article body or author; fetch full text downstream from `link` when an alert needs context.
- One query per run: a watchlist of N terms is N runs per poll, each with its own setup fee.
- Some polls legitimately return nothing new; quiet brands have quiet news cycles.

## Troubleshooting

- Same story arrives repeatedly: dedupe on `link` across polls; within a poll, set `filter: "1"`.
- Too much noise for a generic brand name: quote the exact phrase in `q` and add a qualifier, such as "Acme Robotics" funding.
- Nothing new for days: normal for narrow terms; widen the term or slow the poll instead of raising `max_pages`.
- Missed a story you saw on Google News: inventory and ranking vary by `gl` and `google_domain`; align them with the market where the story ran.

See `references/gotchas.md` for cost guardrails and error recovery, and `references/actor-index.md` for the Actor routing table.

## Related monitoring Actors

- Google Forums Search API, community chatter about the same brand: https://apify.com/johnvc/google-forums-search-api?fpr=9n7kx3&fp_sid=skillrepo
- Google AI Overview API, how AI answers describe the brand: https://apify.com/johnvc/Google-AI-Overview-API?fpr=9n7kx3&fp_sid=skillrepo
- Google Finance API, market data for public companies on the watchlist: https://apify.com/johnvc/google-finance-api?fpr=9n7kx3&fp_sid=skillrepo

