# Google News Scraper: Search, Topics & Article URLs (`veenkes/veenkes-google-news`) Actor

Scrape Google News search results, topic headlines and top stories in 47 country and language editions. Titles, publishers, dates, related coverage and resolved publisher URLs (not Google redirects). Fast, no login, no proxy.

- **URL**: https://apify.com/veenkes/veenkes-google-news.md
- **Developed by:** [veenkes](https://apify.com/veenkes) (community)
- **Categories:** News, AI, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 article scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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: Search, Topics & Article URLs

A **Google News scraper** (usable as a simple news API) for keyword search, topic headlines and top stories in **47 country and language editions**. Each article includes the title, publisher, date, related coverage and the **real publisher URL** — not a Google redirect.

Fast, no login and no proxy. Built for media monitoring, research and AI news briefings.

### Why use this Google News scraper?

- 🔗 **Real article URLs included.** `news.google.com/rss/articles/CBMi…` links are resolved to `reuters.com/…`, `cnbc.com/…` and so on. Other scrapers charge extra for this.
- 🔎 **Full Google News search syntax:** `"exact phrase"`, `OR`, `-exclude`, `site:reuters.com`, `intitle:`.
- 🗓️ **Time filters:** past hour, 24 hours, 7 days, 30 days, or an exact **date range** (published after / before) for historical monitoring.
- 🗞️ **Topics and Top stories** with **related coverage** (other outlets covering the same story).
- 🌍 **47 editions:** US, UK, India, Germany, France, Spain, Brazil, Japan, Russia, UAE and more.
- 🧹 **De-duplication** across queries and topics.
- 💸 **Cheap:** $1.50 per 1,000 articles on BRONZE, URL resolution included.
- 🤖 **AI-agent ready:** clean JSON for the Apify MCP server, LangChain, n8n, Make, Zapier and Google Sheets.

### Who is it for?

- **PR and comms teams** monitoring brand, competitor and executive mentions.
- **Investors and analysts** tracking news for tickers, sectors and deals.
- **Media monitoring, newsletters and AI apps** that need a fresh news feed (RAG, summaries, sentiment).
- **SEO and content teams** watching topics and who ranks in Google News.
- **Researchers** building news datasets by date range.

### What data does it extract?

| Field | Example |
|---|---|
| `title` | `OpenAI, Google, Anthropic hit with lawsuit…` |
| `publisher`, `publisherUrl` | `Reuters`, `https://www.reuters.com` |
| `url` | resolved publisher article URL |
| `urlResolved` | `true` (false = Google link kept as fallback) |
| `googleNewsUrl`, `articleId` | original Google News link and ID |
| `publishedAt` | `2026-11-12T18:26:38.000Z` |
| `position` | rank in the feed (1 = top) |
| `sourceType`, `query`, `topic` | `query`, `openai`, `null` |
| `language`, `country` | `en`, `US` |
| `relatedArticles` | other outlets' coverage (topics / top stories) |

### How to use it

1. Click **Try for free**.
2. Add **search queries** (e.g. `tesla`, `"interest rates" site:reuters.com`) and/or pick **topics**.
3. Choose the **country / language edition** and a **time range** or date range.
4. Click **Start** and export to JSON, CSV, Excel or Google Sheets, or schedule it and get new articles every hour.

### Run it from the API

You can start this Actor from any language with the official [Apify API client](https://docs.apify.com/api/client/python). Replace `YOUR_APIFY_TOKEN` with a token from [Apify Console > Integrations](https://console.apify.com/account/integrations). Never put the token in a public repo.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("veenkes/veenkes-google-news").call(run_input={
    "queries": [
        "artificial intelligence"
    ],
    "region": "US:en",
    "timeRange": "7d",
    "maxItemsPerQuery": 50,
    "resolveUrls": True
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('veenkes/veenkes-google-news').call({
    "queries": [
        "artificial intelligence"
    ],
    "region": "US:en",
    "timeRange": "7d",
    "maxItemsPerQuery": 50,
    "resolveUrls": true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Schedule the Actor, send results to a webhook, or connect it in Zapier, Make or n8n. Store page: <https://apify.com/veenkes/veenkes-google-news>.

### Use from AI agents (Apify MCP)

AI agents can run this Actor through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). Connect Claude, Cursor or any MCP-compatible client to Apify, then ask the agent to call `veenkes/veenkes-google-news` with an input like the example above. The agent discovers the tool from the Actor title and description.

### How much does it cost?

Pay per result. You pay only for articles saved to the dataset, and URL resolution is included.

| Apify plan tier | Price per 1,000 articles |
|---|---|
| FREE | $2.00 |
| BRONZE | $1.50 |
| SILVER | $1.30 |
| GOLD and above | $1.00 |

There is also a $0.00005 start fee per run. Monitoring 10 keywords every hour (about 50 new articles per hour) costs about **$1.80 per month** at the BRONZE tier.

### Input example

```json
{
    "queries": ["openai", "\"interest rates\" site:reuters.com"],
    "topics": ["TECHNOLOGY"],
    "region": "US:en",
    "timeRange": "1d",
    "maxItemsPerQuery": 100,
    "resolveUrls": true,
    "dedupe": true
}
```

### Output example

```json
{
    "title": "1 killed, 4 injured in shooting in Washington, D.C.'s Logan Circle neighborhood; suspect is dead",
    "publisher": "CBS News",
    "publisherUrl": "https://www.cbsnews.com",
    "url": "https://www.cbsnews.com/news/washington-dc-shooting-gym-vida/",
    "urlResolved": true,
    "googleNewsUrl": "https://news.google.com/rss/articles/CBMibkFVX3lx…?oc=5",
    "publishedAt": "2026-11-12T19:28:18.000Z",
    "position": 1,
    "sourceType": "topic",
    "query": null,
    "topic": "TOP_STORIES",
    "language": "en",
    "country": "US",
    "relatedArticles": [
        { "title": "Live updates: 55-year-old alleged gunman identified…", "publisher": "CNN", "googleNewsUrl": "https://news.google.com/rss/articles/…" }
    ],
    "scrapedAt": "2026-11-12T21:32:20.471Z"
}
```

The key-value store record `SUMMARY` lists every query/topic with articles found and saved.

### Tips

- **More than 100 articles?** Google News returns at most 100 per feed. Split the period with *Published after / before* (for example, one run or one query per day).
- **Brand monitoring:** schedule hourly with *Time range = Past hour* and send new rows to Slack or email.
- **Precise searches:** use `intitle:brand` to keep only headlines that mention the brand.
- If Google temporarily refuses URL resolution, articles are still saved with the Google News link (`urlResolved: false`).

### Why this one?

Headline scrapes often leave you with Google redirect links. This Actor can resolve them to the publisher's own URL, and it covers search, topics and top stories across 47 editions in one schema, without a browser or proxy.

### FAQ

**Is this legal?**
The Actor reads Google News' public RSS feeds and saves headlines, publisher names, dates and links, not full article text. It collects no personal data. Follow the laws and terms that apply to your use and respect publishers' copyright.

**Does it scrape the full article text?**
No. It returns the headline and the real article URL. Pipe the URLs into a content extractor (for example Apify's Website Content Crawler) if you need full text.

**Why are dates a little different from Google News on the web?**
Feeds use the publisher's original timestamp in UTC.

***

### Integrations

- **Apify API** — Python and JavaScript clients (examples above), plus a REST API.
- **AI agents** — run it via the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).
- **Automation tools** — Zapier, Make, n8n, or an Apify webhook when a run finishes.
- **Export** — download the dataset as JSON, CSV, Excel or XML, or load it from a scheduled run.

[Open the Actor in Apify Store](https://apify.com/veenkes/veenkes-google-news).

*Not affiliated with or endorsed by Google. Google News is a trademark of Google LLC.*

# Actor input Schema

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

Google News searches. Google operators work: "exact phrase", OR, -exclude, site:reuters.com, intitle:. Each query returns up to 100 newest/most relevant articles.

## `topics` (type: `array`):

Google News topic sections (headlines). Leave empty if you only want search results. If both lists are empty, Top stories are scraped.

## `region` (type: `string`):

Which Google News country/language edition to use, for example US:en, GB:en, DE:de or JP:ja (47 editions available).

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

Only articles from this recent window (hour, day, week, and so on). Applies to search queries, not topic pages.

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

Search queries only: articles published after this date (YYYY-MM-DD). Combine with 'Published before' to scrape history day by day.

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

Search queries only: articles published before this date (YYYY-MM-DD).

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

Google News returns up to 100 articles per feed. Split long periods into several date ranges to get more.

## `resolveUrls` (type: `boolean`):

Turn Google News redirect links into the real article URL (e.g. reuters.com/...). Included in the price.

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

Save each article once even if several queries/topics return it.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "region": "US:en",
  "timeRange": "7d",
  "maxItemsPerQuery": 20,
  "resolveUrls": true,
  "dedupe": true
}
```

# Actor output Schema

## `articles` (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"
    ],
    "region": "US:en",
    "timeRange": "7d",
    "maxItemsPerQuery": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("veenkes/veenkes-google-news").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"],
    "region": "US:en",
    "timeRange": "7d",
    "maxItemsPerQuery": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("veenkes/veenkes-google-news").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"
  ],
  "region": "US:en",
  "timeRange": "7d",
  "maxItemsPerQuery": 20
}' |
apify call veenkes/veenkes-google-news --silent --output-dataset

```

## MCP server setup

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

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/77TuamBLjMVcyz6cc/builds/MBHn1iIcaPIi0nyGQ/openapi.json
