# Google News Scraper & API: Articles and News Alerts (`vncntlabs/google-news-scraper`) Actor

Google News scraper and API for any keyword in 70+ countries and any language: title, publisher, direct article URL, snippet, publish time, thumbnail and Top stories. Past hour to custom dates, newest first, publisher filters and an only-new mode for scheduled news alerts. Pay per article.

- **URL**: https://apify.com/vncntlabs/google-news-scraper.md
- **Developed by:** [vncntlabs Labs](https://apify.com/vncntlabs) (community)
- **Categories:** News, SEO tools, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 articles

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 & API: articles, publishers and news alerts

**Google News scraper and API.** Get Google News results for any keyword, company, person, ticker or topic in 70+ countries and any language. Each article comes with its title, publisher, direct article URL (no Google redirect), snippet, publish time and thumbnail, and whether it was in Top stories. Filter by time range and publisher, sort newest first, or schedule only-new mode to get news alerts for brand monitoring, PR and trading.

Built for:

- **PR, comms and brand teams**: media monitoring and coverage reports for your company, executives and competitors.
- **Traders, analysts and investors**: fresh headlines per ticker or theme for dashboards and sentiment models.
- **AI and data teams, newsletters and apps**: clean, structured news feeds and datasets on any topic.

You pay **per article delivered**. Searches with no articles, failed requests, filtered-out articles, duplicates and (in only-new mode) articles you already received are free.

### What you get

| Row (`type`) | What's in it | Charged |
|---|---|---|
| `article` | `title`, `publisher`, `domain`, `url`, `snippet`, `publishedAt` (UTC), `timeAgo`, `thumbnailUrl`, `section` (`news` or `top_stories`, with `topStoriesTitle`), `position`, `googleRank`, `keyword`, `matchedKeywords`, `country`, `language` | `article` |
| `keyword` | one per keyword: status, articles delivered, Google's result count, newest and oldest publish time, top publishers, Google News link, how many were filtered or already seen | free |

### Input examples

Latest news on two topics (100 articles each by default):

```json
{ "keywords": ["artificial intelligence", "\"OpenAI\""] }
```

Brand alert, scheduled hourly, only new articles from the past 24 hours:

```json
{ "keywords": ["\"Acme Corp\"", "\"Jane Doe\" Acme"], "timeRange": "past_24_hours", "sortBy": "date",
  "onlyNewArticles": true, "monitorId": "acme-alerts" }
```

Coverage report for September from selected publishers, UK edition:

```json
{ "keywords": ["electric vehicles"], "country": "United Kingdom", "dateFrom": "2026-09-01", "dateTo": "2026-09-30",
  "includeDomains": ["bbc.co.uk", "theguardian.com", "ft.com", "reuters.com"] }
```

**Tips**

- Put a brand or name in quotes (`"OpenAI"`) for exact matches. `OR` and `-word` work like on Google.
- Operators such as `site:` or `intitle:` aren't supported; use **Only these publishers** / **Exclude publishers** instead.
- **Only new articles**: the Actor keeps a list of delivered article links in your Apify account (key-value store `google-news-monitor`), one list per search, or per **Monitor name** if you set one. Schedule the task and each run returns only what's new. With **Newest first**, a run whose monitor already has history checks the latest 10 articles first and looks deeper only when all 10 are new, so frequent checks stay fast.
- **Only these publishers**: the Actor reads the first 100 results and goes deeper only when enough of them come from your publishers. Narrow publisher lists on broad keywords can return fewer articles than your maximum.
- Times like "2 hours ago" are converted to `publishedAt` timestamps, so they're accurate to Google's rounding (minutes for recent news, days for older articles).

### Output example (one article)

```json
{
  "type": "article", "keyword": "artificial intelligence", "matchedKeywords": ["artificial intelligence"], "position": 3,
  "title": "North Korea says it tested new torpedo system with AI capabilities",
  "publisher": "The Washington Post", "domain": "washingtonpost.com",
  "url": "https://www.washingtonpost.com/world/2026/10/16/north-korea-torpedo-kim-jong-un-ai/ff453ef0-c9dd-11f1-aefb-abe4112d087e_story.html",
  "snippet": null, "publishedAt": "2026-10-17T04:55:33Z", "timeAgo": "26 minutes ago",
  "thumbnailUrl": "https://api.dataforseo.com/cdn/i/...", "section": "top_stories",
  "topStoriesTitle": "News about North Korea • torpedo • AI", "googleRank": 3,
  "country": "United States", "language": "en", "chargedEvents": ["article"], "scrapedAt": "2026-10-17T05:21:44Z"
}
```

Regular results also carry a `snippet`; Top stories cards don't have one. The dataset has three views: **Overview**, **Articles (all fields)** and **Keywords summary**. Export to CSV, Excel, JSON or RSS-style feeds through the API.

### Pricing (pay per event)

| Event | When it is charged |
|---|---|
| Actor start | once per run |
| `article` | one unique article delivered |

You are not charged for:

- keywords with no articles, and failed requests;
- articles removed by your publisher filters or outside a custom date range;
- the same article found again by another keyword (merged, with both keywords listed);
- in only-new mode, articles already delivered by earlier runs;
- keyword summary rows and skipped inputs;
- anything beyond your run's maximum charge. The run stops cleanly and lists what it didn't process.

**Apify free plan:** 2 keywords and 50 articles per keyword per run. Any paid Apify plan unlocks up to 100 keywords and 500 articles per keyword.

### Use from AI agents (MCP)

AI assistants such as Claude, ChatGPT and Cursor can run this Actor through [Apify's MCP server](https://docs.apify.com/platform/integrations/mcp) (`https://mcp.apify.com`). The agent can look up the Actor, read its input schema, run it and read the results. Runs use your own Apify account and are charged at the prices on this page.

- **Actor name:** `vncntlabs/google-news-scraper`
- **Server URL with only this tool:** `https://mcp.apify.com?tools=vncntlabs/google-news-scraper`. The default `https://mcp.apify.com` also works; the agent can then search Apify Store and call the Actor by name.
- **Claude** (desktop app or claude.ai): Settings > Connectors > Add custom connector, paste the server URL, then sign in to Apify.
- **ChatGPT:** turn on Developer mode, then Settings > Apps & Connectors > Create, paste the server URL and choose OAuth.
- **Cursor:** run `/add-plugin apify` in Cursor chat and connect the Apify MCP server under Cursor Settings > Tools & MCPs, or add the server to `mcp.json`:

```json
{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=vncntlabs/google-news-scraper" } } }
```

Example prompt: *"Use the Apify Actor vncntlabs/google-news-scraper to find news articles about "electric vehicles" from the past 24 hours and summarise the top stories."*

To cap the cost of an agent's run, it can pass `maxTotalChargeUsd` in the run options.

### FAQ

**How fresh is it?** Every run asks Google News live. With "Past hour" and "Newest first" you get articles published minutes ago.

**How many articles can I get?** Up to 500 per keyword. Google usually has a few hundred for a topic; narrow searches and short time ranges return fewer, and you only pay for what's delivered.

**Do I get the full article text?** No: title, snippet, publisher, link, time and thumbnail, as Google News shows them. The text belongs to the publisher; follow `url` to read it.

**Which countries and languages?** 70+ Google News editions, including the US, UK, Canada, Australia, India, Germany, France, Spain, Italy, Brazil, Mexico and Japan, in the country's language by default or any language you set.

**Is this the official Google News API?** No. Google has no public News search API. This Actor uses DataForSEO's licensed API and is not affiliated with or endorsed by Google.

# Actor input Schema

## `keywords` (type: `array`):

One search per line (up to 100): a topic (<code>electric vehicles</code>), a company or brand (<code>"OpenAI"</code> in quotes for the exact name), a person or a ticker. Quotes, OR and minus work like on Google; operators such as <code>site:</code> are not supported (use the domain filters).

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

Google News edition (which publishers and stories Google shows).

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

Optional language code (en, de, fr, es, pt-BR...). Defaults to the country's main language.

## `maxArticlesPerKeyword` (type: `integer`):

Up to 500. Google usually has a few hundred articles per topic; fewer for narrow searches or short time ranges.

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

Only articles published in this period.

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

YYYY-MM-DD. Setting a date switches the time range to custom.

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

YYYY-MM-DD, inclusive.

## `sortBy` (type: `string`):

Google News order.

## `includeTopStories` (type: `boolean`):

Also return the articles in Google's 'Top stories' carousel (marked section: top_stories).

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

Optional, e.g. <code>reuters.com</code>, <code>bloomberg.com</code>. Keeps only articles from these sites (subdomains included). Other articles are not charged.

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

Optional. Drops articles from these sites (not charged).

## `dedupeAcrossKeywords` (type: `boolean`):

An article found by several keywords is delivered and charged once, with every keyword in matchedKeywords.

## `onlyNewArticles` (type: `boolean`):

For scheduled runs: remembers the articles delivered by previous runs of the same search and returns only new ones. You pay only for new articles. History is kept in your Apify account (key-value store 'google-news-monitor').

## `monitorId` (type: `string`):

Optional. Name the monitor to keep its history separate or stable when you edit keywords, e.g. <code>acme-brand-alerts</code>.

## Actor input object example

```json
{
  "keywords": [
    "artificial intelligence"
  ],
  "country": "United States",
  "maxArticlesPerKeyword": 100,
  "timeRange": "any",
  "sortBy": "relevance",
  "includeTopStories": true,
  "dedupeAcrossKeywords": true,
  "onlyNewArticles": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `keywords` (type: `string`):

No description

## `all` (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 = {
    "keywords": [
        "artificial intelligence"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vncntlabs/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 = { "keywords": ["artificial intelligence"] }

# Run the Actor and wait for it to finish
run = client.actor("vncntlabs/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 '{
  "keywords": [
    "artificial intelligence"
  ]
}' |
apify call vncntlabs/google-news-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vncntlabs/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/eKTYbDarhYYhHpgNL/builds/HDouYmVHkBc5LFAAd/openapi.json
