# Google News Scraper & Alerts - Brand Monitoring API (`groupoject/google-news-scraper`) Actor

Scrape and monitor Google News by keyword for brand alerts, competitor tracking, PR monitoring, market research, headlines, publisher domains, dates, snippets, and article links. No API key required.

- **URL**: https://apify.com/groupoject/google-news-scraper.md
- **Developed by:** [Group Oject](https://apify.com/groupoject) (community)
- **Categories:** News, Automation, AI
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google News Scraper & AI Agent Alerts API

**Scrape and monitor Google News by keyword, date, and publisher. Build brand alerts, competitor feeds, PR monitors, market research datasets, and AI/MCP agent news pipelines. No API key.**

Drop in your search terms and get matching Google News articles with title, publisher, publisher domain, publish date, snippet, and link. Add rolling or explicit date windows, exact phrases, excluded terms, publisher allowlists/blocklists, monitoring state, and lightweight analysis when you need them.

> ⚡ **Works out of the box** — reads Google News' public RSS feeds. No API key, no signup, no proxy needed for normal volumes.

***

### What it does

For each search query, the Actor reads the official Google News search RSS feed and extracts structured article data — articles matching any query you provide (e.g. `openai`, `interest rates`, a brand name, a ticker).

Output is **one row per article**, deduplicated across all queries and sorted newest-first. In monitoring mode, later runs emit only articles that have not been seen for the same monitor key and query configuration.

***

### Who it's for

- **PR & comms teams** — monitor brand, executives, and competitor coverage.
- **Market researchers & analysts** — track an industry, ticker, or theme over time.
- **Journalists** — sweep a beat across many sources at once.
- **Content & SEO teams** — find trending angles and source material.
- **AI builders & automation teams** — pipe a structured news feed into MCP agents, dashboards, alerts, RAG jobs, or LLM workflows.

***

### Popular monitoring use cases

- **Brand monitoring** - track mentions of your company, products, founders, and executives.
- **Competitor news tracking** - monitor launches, funding, hiring, lawsuits, partnerships, and pricing changes.
- **Industry trend monitoring** - follow themes like AI regulation, climate tech, fintech, or healthcare policy.
- **Stock and market news feeds** - collect recent Google News results for tickers, companies, and sectors.
- **PR and crisis alerts** - schedule searches around sensitive topics and export fresh coverage.
- **MCP and AI agent news feeds** - give agents fresh headlines, snippets, sources, dates, and publisher domains without building a scraper.
- **RAG and research datasets** - collect clean, deduplicated news rows for summarization, market maps, and analyst workflows.

### Works well with MCP and AI agents

Apify Actors are discoverable from the Apify MCP server, so this Actor is useful as a lightweight news tool inside Claude, ChatGPT, Cursor, internal agents, and scheduled automations. It returns compact JSON rows that are easy for agents to summarize, route, dedupe, or send into Slack, Notion, Airtable, CRMs, data warehouses, and dashboards.

Good agent workflows:

- **Daily executive brief** - collect top news for a market, summarize sources, and highlight changes.
- **Competitive intelligence agent** - monitor product launches, funding, partnerships, pricing changes, outages, and lawsuits.
- **PR response agent** - watch high-risk terms and trigger alerts only when new articles appear.
- **RAG freshness feed** - schedule news collection and add new rows to a vector database or knowledge base.

***

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `queries` | string\[] | — | Search terms |
| `queriesText` | string | — | Queries as text (one per line / comma-separated) |
| `exactPhrase` | string | `""` | Require an exact phrase |
| `excludeKeywords` | string\[] | `[]` | Exclude words or phrases |
| `includeDomains` | string\[] | `[]` | Only keep these publisher domains |
| `excludeDomains` | string\[] | `[]` | Remove these publisher domains |
| `postedWithinDays` | integer | — | Rolling 1–365 day window |
| `dateFrom` / `dateTo` | string | — | Inclusive `YYYY-MM-DD` date range |
| `geo` | string | `"US"` | Country code (`gl`) |
| `language` | string | `"en"` | Language code (`hl`) |
| `maxItemsPerQuery` | integer | `50` | Cap per query/topic (max 100) |
| `maxQueries` | integer | `100` | Max search queries |
| `dedupe` | boolean | `true` | Remove duplicate articles across queries |
| `enableAnalysis` | boolean | `false` | Add lightweight sentiment, score, and headline entities |
| `monitoringMode` | boolean | `false` | Persist state and emit only unseen articles |
| `monitorKey` | string | `"default"` | Identifier for an independent monitor |
| `monitoringInitialRun` | string | `"emit"` | `emit` current stories or create a silent `baseline` |
| `requestDelayMs` | integer | `500` | Delay between feed requests |
| `maxConcurrency` | integer | `3` | Parallel feed requests |
| `proxyConfiguration` | object | — | Optional, for high volume |

At least one of `queries` / `queriesText` is required.

#### Example input

```json
{
  "queries": ["openai", "climate tech", "interest rates"],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50
}
```

More in [`examples/`](examples/).

#### Advanced filtering

The Actor applies supported Google News query operators and then validates publisher, keyword, and date filters against the parsed rows. Use `postedWithinDays` for rolling alerts or `dateFrom` / `dateTo` for a fixed range, not both.

```json
{
  "queries": ["artificial intelligence"],
  "exactPhrase": "product launch",
  "excludeKeywords": ["rumor", "opinion"],
  "includeDomains": ["reuters.com", "techcrunch.com", "theverge.com"],
  "postedWithinDays": 14,
  "enableAnalysis": true,
  "geo": "US",
  "language": "en"
}
```

#### Only-new monitoring

Enable `monitoringMode` on a saved task and schedule it. The first run can output the current snapshot (`emit`) or silently establish a baseline (`baseline`). Later runs with the same monitor key and query configuration output only unseen articles.

```json
{
  "queries": ["OpenAI", "Anthropic", "Google Gemini"],
  "postedWithinDays": 7,
  "monitoringMode": true,
  "monitorKey": "ai-competitor-alerts",
  "monitoringInitialRun": "baseline",
  "dedupe": true
}
```

***

### Ready-to-run task ideas

These are also useful as public Apify task pages because each page targets a specific buyer/search intent.

#### Brand News Monitoring

```json
{
  "queriesText": "your brand name\nyour ceo name\nyour main competitor\nyour product line",
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 100,
  "dedupe": true,
  "maxConcurrency": 2
}
```

#### Competitor Launch Tracker

```json
{
  "queries": [
    "competitor funding",
    "competitor product launch",
    "competitor partnership",
    "competitor acquisition"
  ],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### AI Industry News Feed

```json
{
  "queries": [
    "artificial intelligence regulation",
    "generative AI startups",
    "AI search engines",
    "large language models"
  ],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 75,
  "dedupe": true
}
```

#### MCP Agent Market Brief

```json
{
  "queries": [
    "AI agents funding",
    "model context protocol",
    "enterprise AI adoption",
    "AI workflow automation"
  ],
  "postedWithinDays": 7,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true,
  "enableAnalysis": true
}
```

#### RAG Freshness News Feed

```json
{
  "queriesText": "AI regulation\ncybersecurity breach\ncloud outage\nstartup funding round",
  "postedWithinDays": 14,
  "monitoringMode": true,
  "monitorKey": "rag-freshness-news-feed",
  "monitoringInitialRun": "emit",
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 25,
  "dedupe": true
}
```

#### Stock Market News Monitor

```json
{
  "queries": [
    "Nvidia stock news",
    "Tesla stock news",
    "Microsoft earnings",
    "Federal Reserve interest rates"
  ],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### Crisis & PR Alert Feed

```json
{
  "queries": [
    "\"your brand\" lawsuit",
    "\"your brand\" outage",
    "\"your brand\" data breach",
    "\"your brand\" controversy"
  ],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 100,
  "dedupe": true,
  "maxConcurrency": 2
}
```

#### Startup Funding News

```json
{
  "queries": [
    "startup funding news",
    "venture capital news",
    "series A startup news",
    "startup acquisition news"
  ],
  "postedWithinDays": 30,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true,
  "requestDelayMs": 1200,
  "maxConcurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

#### Layoffs Monitor

```json
{
  "queries": [
    "tech layoffs",
    "startup layoffs",
    "hiring freeze",
    "workforce reduction"
  ],
  "postedWithinDays": 14,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### Lawsuit and Legal Monitor

```json
{
  "queries": [
    "company lawsuit",
    "class action lawsuit",
    "regulatory investigation",
    "legal settlement"
  ],
  "postedWithinDays": 30,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### FDA and Pharma Monitor

```json
{
  "queries": [
    "FDA approval",
    "clinical trial results",
    "pharma acquisition",
    "drug pricing news"
  ],
  "postedWithinDays": 30,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### Government Contract Tracker

```json
{
  "queries": [
    "government contract award",
    "defense contract award",
    "federal procurement",
    "government grant funding"
  ],
  "postedWithinDays": 30,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### Supply Chain Monitor

```json
{
  "queries": [
    "supply chain disruption",
    "shipping delays",
    "tariff news",
    "manufacturing shortage"
  ],
  "postedWithinDays": 14,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### AI Search Monitor

```json
{
  "queries": [
    "Google AI Overviews",
    "ChatGPT search",
    "Perplexity AI search",
    "AI SEO visibility"
  ],
  "postedWithinDays": 30,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true,
  "enableAnalysis": true
}
```

#### Product Recall Alerts

```json
{
  "queries": [
    "product recall",
    "FDA recall",
    "consumer safety warning",
    "vehicle recall"
  ],
  "postedWithinDays": 30,
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### Cybersecurity Breach Monitor

```json
{
  "queries": [
    "data breach",
    "ransomware attack",
    "cybersecurity incident",
    "security vulnerability"
  ],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 75,
  "dedupe": true
}
```

#### Healthcare Policy News

```json
{
  "queries": [
    "healthcare policy",
    "Medicare news",
    "FDA approval",
    "health insurance regulation"
  ],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### Crypto Market News

```json
{
  "queries": [
    "Bitcoin ETF news",
    "Ethereum regulation",
    "crypto market news",
    "stablecoin legislation"
  ],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

#### Real Estate Market Monitor

```json
{
  "queries": [
    "mortgage rates",
    "housing market news",
    "commercial real estate",
    "home prices"
  ],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "dedupe": true
}
```

***

### Output

One dataset row per article:

```json
{
  "query": "openai",
  "queryType": "search",
  "title": "OpenAI ships new model & tools",
  "googleNewsUrl": "https://news.google.com/rss/articles/ABC123?oc=5",
  "source": "The Verge",
  "sourceUrl": "https://www.theverge.com/",
  "sourceDomain": "theverge.com",
  "publishedAt": "2026-06-09T14:30:00.000Z",
  "snippet": "OpenAI ships new model The Verge",
  "guid": "ABC123",
  "position": 1,
  "geo": "US",
  "language": "en",
  "fetchedAt": "2026-06-24T12:00:00.000Z",
  "appliedQuery": "openai when:7d",
  "sentiment": "positive",
  "sentimentScore": 0.67,
  "entities": ["OpenAI"],
  "isNew": true
}
```

#### Key-value store outputs

- `HEADLINES_BY_SOURCE` — article titles grouped by publisher
- `SUMMARY` — fetched, filtered, unique, output, and newly detected totals plus top sources and queries
- `ERRORS` — any failed feeds

***

### Notes & limitations

- `googleNewsUrl` is the **Google News redirect link** (not the publisher's direct URL). Decoding to the final URL is intentionally not attempted — it's fragile and changes often. The `source` field tells you the publisher.
- `sourceUrl` is the publisher homepage supplied by the RSS feed, not the final article URL.
- Sentiment is a fast, deterministic headline/snippet signal, not a substitute for a language model or human review.
- Monitoring state is isolated by monitor key plus query/filter configuration. Changing those values intentionally starts a new baseline.
- Google News RSS returns up to ~100 items per feed and favors recent coverage — it's not a full historical archive.
- Results are localized by `geo` + `language`.
- For very high volume or repeated scheduled runs, enable **Apify Proxy** to avoid rate limits.
- Public RSS data only — no login, no paywalled content.

***

### Related tools

Part of a Google data-tools suite:

- [Google Autocomplete Keyword Scraper](https://apify.com/groupoject/google-autocomplete-scraper)
- [Google Trends Keyword Monitor](https://apify.com/groupoject/trendpulse-keyword-monitor)
- [Google Trends Content Calendar Generator](https://apify.com/groupoject/trendpulse-content-calendar)
- [Keyword Difficulty Checker](https://apify.com/groupoject/keyword-difficulty-checker)

***

### Changelog

See [CHANGELOG.md](CHANGELOG.md).

# Actor input Schema

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

Search terms to pull Google News articles for. You can also paste them as text below, and/or pick topics.

## `queriesText` (type: `string`):

Paste one query per line or comma-separated.

## `exactPhrase` (type: `string`):

Optional phrase that must appear in Google News results, e.g. product launch. Quotation marks are added automatically.

## `excludeKeywords` (type: `array`):

Remove stories containing these words or phrases and add negative terms to the Google News query.

## `includeDomains` (type: `array`):

Optional publisher allowlist, e.g. reuters.com or techcrunch.com.

## `excludeDomains` (type: `array`):

Publisher domains to remove from results.

## `postedWithinDays` (type: `integer`):

Optional rolling time window from 1 to 365 days. Do not combine with explicit dates.

## `dateFrom` (type: `string`):

Optional inclusive start date in YYYY-MM-DD format.

## `dateTo` (type: `string`):

Optional inclusive end date in YYYY-MM-DD format.

## `geo` (type: `string`):

Google News country code, e.g. US, GB, CA, FR, DE.

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

Language code, e.g. en, fr, es, de.

## `maxItemsPerQuery` (type: `integer`):

Cap on articles kept per query/topic (Google News RSS returns up to ~100).

## `maxQueries` (type: `integer`):

Maximum number of search queries to process.

## `dedupe` (type: `boolean`):

Remove duplicate articles (same link) across all queries.

## `enableAnalysis` (type: `boolean`):

Add lightweight deterministic sentiment, score, and entities extracted from each headline. No external AI API is used.

## `monitoringMode` (type: `boolean`):

Persist seen article IDs and output only unseen stories on later runs with the same monitor key and query configuration.

## `monitorKey` (type: `string`):

Stable identifier for this alert, e.g. openai-brand-alerts. Use a different key for each independent monitor.

## `monitoringInitialRun` (type: `string`):

Emit the current articles immediately, or store them as a silent baseline for future alerts.

## `requestDelayMs` (type: `integer`):

Delay between feed requests.

## `maxConcurrency` (type: `integer`):

Parallel feed requests. Keep modest; add a proxy for high volume.

## `proxyConfiguration` (type: `object`):

Optional. Use Apify Proxy for large/repeated runs to avoid rate limits.

## `debugMode` (type: `boolean`):

Verbose logging.

## Actor input object example

```json
{
  "queries": [
    "openai",
    "climate tech",
    "interest rates"
  ],
  "exactPhrase": "",
  "excludeKeywords": [],
  "includeDomains": [],
  "excludeDomains": [],
  "geo": "US",
  "language": "en",
  "maxItemsPerQuery": 50,
  "maxQueries": 100,
  "dedupe": true,
  "enableAnalysis": false,
  "monitoringMode": false,
  "monitorKey": "default",
  "monitoringInitialRun": "emit",
  "requestDelayMs": 500,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debugMode": false
}
```

# Actor output Schema

## `articles` (type: `string`):

One row per article with publisher metadata, filters, optional analysis, and monitoring status.

## `headlinesBySource` (type: `string`):

Article titles grouped by publisher.

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

Fetched, filtered, unique, output, and new-article totals plus top sources and queries.

## `errors` (type: `string`):

Feeds that failed to fetch.

# 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": [
        "openai",
        "climate tech",
        "interest rates"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("groupoject/google-news-scraper").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": [
        "openai",
        "climate tech",
        "interest rates",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("groupoject/google-news-scraper").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": [
    "openai",
    "climate tech",
    "interest rates"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call groupoject/google-news-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/rnmRHj9TGlD8apCD6/builds/RK6AhpIWziodpMpHx/openapi.json
