# Google News Scraper & New Article Monitor (`vdb997/google-news-keyword-watch`) Actor

Monitor Google News searches by keyword, country and language. Export headlines, publishers, dates and clickable Google News links. Persistent deduplication and new-only mode for n8n, Make and AI pipelines. Flat pricing per successful query check.

- **URL**: https://apify.com/vdb997/google-news-keyword-watch.md
- **Developed by:** [Victor Diaz](https://apify.com/vdb997) (community)
- **Categories:** News, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 88.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $25.00 / 1,000 news query checks

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google News Scraper & New Article Monitor

Turn Google News search feeds into a scheduled stream of new headlines. Query brands, competitors, industries or specific websites; receive the title, publisher, publication date, feed snippet and clickable Google News link for each article.

Persistent deduplication remembers article IDs for 30 days, so your n8n, Make or AI workflow can process newly observed articles instead of replaying the same feed each day. Pricing is flat per query check, including up to 100 articles returned by the feed.

### Who this is for

**Google News keyword alerts for n8n and Make.** Use this Google News scraper to collect brand mentions, industry headlines or competitor news without replaying the same articles. Export an initial feed, then reuse a Watch ID with changes mode for newly observed articles. It returns feed metadata and Google News links; it does not scrape the full publisher article.

### Quick start

Run once for an export:

```json
{
  "queries": ["artificial intelligence", "robotics"],
  "language": "en",
  "country": "US",
  "timeRange": "7d",
  "outputMode": "all"
}
```

Monitor new articles in Spanish:

```json
{
  "queries": ["inteligencia artificial", "site:techcrunch.com robotics"],
  "language": "es",
  "country": "ES",
  "timeRange": "7d",
  "watchId": "daily-industry-news",
  "outputMode": "changes"
}
```

In **Changes only** mode the first run establishes a baseline and emits check summaries. Subsequent runs with the same Watch ID and search settings emit newly observed article IDs. Use **All current records** to receive articles immediately. Country/language pairs depend on the editions supported by Google News.

### What you receive

`recordType=article` rows include `articleId`, `query`, `title`, `publisher`, `publisherHomeUrl`, `googleNewsUrl`, `publishedAt`, `feedSnippet`, `language`, `country`, `changeType` and `observedAt`.

**Article links are Google News links.** The Actor does not decode them into publisher article URLs, download full article bodies or bypass paywalls. `publisherHomeUrl` is the publisher's home page from the feed. `feedSnippet` is feed-supplied text, which may only repeat the headline.

Each query also returns a `check_summary`, even if no new articles appear. It reports the feed count, baseline/new/unchanged counts, retained IDs and whether the output cap was reached. `source_error` rows report failures. The key-value store's `SUMMARY` record contains the overall run report and spending-limit status.

An article matching several queries can appear once for each query. Deduplication is per search, not across unrelated searches. `changeType=new` means newly observed by this watch; it does not prove the article was just published.

### Pricing

**$0.025 per successfully checked search query**, plus **$0.00005 per run start** at the fixed 512 MB memory setting. Platform usage is included. Up to 100 feed articles and the query summary are included, without additional per-article fees.

Empty and unchanged feeds still count as successful checks. Failed requests do not trigger a query-check charge. Set **Maximum cost per run** to cap spending; the Actor stops before another query when the remaining budget cannot cover its event.

Examples: 4 queries once cost $0.10005. Checking those four queries daily for 30 days costs $3.0015. These are buyer costs, not developer earnings.

### Input and tracking rules

- `queries`: 1–20 keywords or Google News operators, up to 300 characters each. Duplicate queries are removed.
- `language` and `country`: language code and two-letter country edition, default `en` and `US`.
- `timeRange`: `1h`, `1d`, `7d` or `30d`; appended as Google's `when:` search operator. Do not put a conflicting `when:` in your query.
- `maxArticlesPerQuery`: 1–100, default 100. The entire returned feed is remembered even when output is capped; raising the cap does not replay articles already observed.
- `watchId`: enables history in a named key-value store in the caller's account. Use a new ID to reset. Changing search, country, language or time range establishes a new baseline for that search.
- `outputMode`: `all` or `changes`; changes requires a Watch ID. Use non-overlapping schedules for the same ID.

Google News typically returns at most about 100 items per feed. This Actor is a rolling monitor, not a historical archive or an exhaustive news search. It does not split dates to overcome that limit. The source chooses ranking, inclusion and timestamps. IDs are retained for 30 days, with a 10,000-ID cap per search; an article returning after expiry may be emitted again. Failures preserve previous history.

This is an independent, unofficial tool using publicly accessible Google News RSS search feeds. No Google account, API key, browser or proxy is required. Availability depends on the source.

Also available: [Shopify Price & Restock Watch](https://apify.com/vdb997/shopify-price-restock-watch) and [ATS Job Watch](https://apify.com/vdb997/ats-job-watch).

### Try one source before scheduling

1. Open the Input tab and use one supported source with `outputMode: "all"` for an immediate export.
2. Check the returned records and the check summary. Confirm the source, coverage and price suit your workflow.
3. To monitor, set a stable Watch ID and `outputMode: "changes"`. The first successful run establishes a silent baseline.
4. Reuse that Watch ID on later runs. A summary without change records means the check completed without matching changes.
5. Add an Apify schedule after the manual checks work. Avoid overlapping runs with the same Watch ID. Use Maximum cost per run to cap event charges.

Public-data monitors by the same developer: [browse the catalog](https://apify.com/vdb997).

# Actor input Schema

## `queries` (type: `array`):

1–20 keywords or Google News query expressions, such as an exact brand name or site:example.com.

## `language` (type: `string`):

Google News language code, for example en, es, fr or pt.

## `country` (type: `string`):

Two-letter country edition, for example US, ES, GB or MX.

## `timeRange` (type: `string`):

Uses the Google News when: operator. Results and timestamps depend on the source; this is not a complete archive.

## `maxArticlesPerQuery` (type: `integer`):

Output cap. The full returned feed is remembered, so raising this cap does not replay older articles. Queries still have the same flat check fee.

## `watchId` (type: `string`):

Reuse an ID to keep snapshots in your account. Leave blank for a one-off extraction. Use a new ID to reset; do not run the same watch concurrently.

## `outputMode` (type: `string`):

Changes mode establishes a silent baseline on the first run. Check summaries and source errors are always included.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "language": "en",
  "country": "US",
  "timeRange": "7d",
  "maxArticlesPerQuery": 100,
  "outputMode": "all"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "artificial intelligence"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vdb997/google-news-keyword-watch").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": ["artificial intelligence"] }

# Run the Actor and wait for it to finish
run = client.actor("vdb997/google-news-keyword-watch").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "artificial intelligence"
  ]
}' |
apify call vdb997/google-news-keyword-watch --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vdb997/google-news-keyword-watch"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/BHe3eceNYMOT6eLy5/builds/4PJUXCAbzyRqOgoX7/openapi.json
