# Google News Scraper: Keywords, Topics, RSS (`deriverge/google-news-scraper`) Actor

\[$2.50 / 1K] Google News by keyword, topic or publisher in any language edition, plus any RSS or Atom feed. Decodes the Google redirect to the publisher URL. A date range is split into day-sized windows to beat the 100-item ceiling: one keyword over a week returned 632 articles.

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

## Pricing

from $2.50 / 1,000 article returneds

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?

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

### What does Google News Scraper do?

**Google News Scraper** turns Google News into a clean, deduplicated table of articles. Search by keyword, follow a topic section, watch a publisher, or read the front page of any of Google's language and country editions, and add your own RSS or Atom feeds on top. Every row has the title, the publisher's real article URL, the source, the published date and the summary.

No browser and no proxies. Google News publishes its results as feeds, and this actor reads them the way a feed reader does, which keeps runs fast and cheap.

### The real URL, not the redirect

Google News links point to news.google.com and bounce to the article through a redirect that some tools return as the "URL". This actor decodes the link or follows the redirect and gives you the publisher's own address, with tracking parameters removed, so the same article found through two queries is one row, not two. The Google link is kept in `googleUrl` for reference.

### Past the 100-item ceiling

Google News returns at most 100 items for any single query, whether you ask for one day or one year. That is the ceiling every other scraper in this category hits, and it is what buyers complain about in their reviews: they see hundreds of results on the Google News site and get a hundred rows back.

Give this actor a `dateFrom` and a `dateTo` and it splits each query into day-sized windows, runs them all and merges the results, deduplicated by the article URL. Measured on 3 September 2026 for the keyword "artificial intelligence" over one week:

| Query | Articles returned |
|---|---|
| One query for the whole week | 100 |
| The same week split into days | 632 |

### New articles only

Turn on `newOnly`, give the run a watch name or save it as a task, and schedule it hourly or daily. Every run compares its results with the previous snapshot and returns only the articles that appeared since. You pay for those and nothing else. Brand monitoring, competitor news, a topic feed for a newsletter: one scheduled task each.

### Input

```json
{
  "queries": ["Apify", "\"web scraping\" when:7d", "site:reuters.com AI"],
  "topics": ["TECHNOLOGY"],
  "topStories": false,
  "feeds": ["https://news.ycombinator.com/rss"],
  "language": "en",
  "country": "US",
  "dateFrom": "2026-08-25",
  "dateTo": "2026-08-31",
  "maxItemsPerSource": 100,
  "resolveLinks": true,
  "newOnly": true,
  "watchKey": "brand"
}
```

Google's search operators work inside queries: quotes for exact phrases, `site:` for a publisher, `-word` to exclude, `when:7d` for a time window. Language and country pick the Google News edition (en/US, en/GB, de/DE, cs/CZ, pt/BR, ja/JP and every other one Google publishes).

### Output

```json
{
  "key": "https://www.reuters.com/technology/example-article-2026-09-02/",
  "title": "Example headline",
  "url": "https://www.reuters.com/technology/example-article-2026-09-02/",
  "googleUrl": "https://news.google.com/rss/articles/CBMi...",
  "sourceName": "Reuters",
  "sourceUrl": "https://www.reuters.com",
  "publishedAt": "2026-09-02T08:15:00.000Z",
  "summary": "Example headline - Reuters",
  "source": { "type": "query", "value": "site:reuters.com AI" },
  "language": "en",
  "country": "US"
}
```

### Pricing

| Event | Price |
|---|---|
| Article returned | $0.001 ($1 per 1,000 articles) |
| Duplicates, articles already seen in new-only mode, articles outside the time window | **free** |

No start fee. A run that returns nothing costs nothing.

### Frequently asked questions

**How many articles does a query return?** Google News caps a single query at 100 items. Set `dateFrom` and `dateTo` and the actor splits the range into day-sized windows, which returned 632 articles for one keyword over a week instead of 100.

**Some URLs still point to news.google.com. Why?** For a small share of links Google's redirect needs a browser to resolve. Those rows keep the Google link and are counted in the summary as unresolved, so you know exactly how many there were.

**Can I read feeds that are not Google News?** Yes. Put any RSS or Atom URL into `feeds`; they get the same output format and the same deduplication and new-only handling.

**Which languages are supported?** Every Google News edition. Pass the language and country codes of the edition you want.

### How to use Google News Scraper

1. Open the actor and fill in `queries` in the input form, or paste the JSON input from the example above.
2. Click **Start**. The first rows appear in the **Output** tab within seconds; the run summary is in the **Storage** tab under the key `SUMMARY`.
3. Download the results as JSON, CSV or Excel from the Output tab, or read them through the API link shown there.
4. To run it on a schedule, click **Save as a task**, set the input once and add a schedule. Scheduled tasks keep their own change snapshot, so the new-only mode works without any extra setup.

### Integrations

The actor is available in the Apify apps for **Make**, **Zapier**, **n8n** and **Keboola**, where you pick it by name and map the input fields. It is also exposed to AI agents through the Apify MCP server, and callable from any language through the Apify API; the API tab on this page has ready-made snippets for Node.js, Python and curl. Every run can post its results to a webhook when it finishes.

### Support

Questions and problems go into the **Issues** tab of this actor. Each issue is answered by the maintainer, and fixes ship as new builds without any change on your side.

Built and operated by deriverge s.r.o. Same rules as our other actors: unified schema, honest billing, no charge for what you did not get.

# Actor input Schema

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

Keywords to search in Google News. Google's operators work: "exact phrase", site:reuters.com to limit to a publisher, -word to exclude, when:7d for the last week.

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

Google News topic sections for the chosen language and country.

## `topStories` (type: `boolean`):

Include the front page of the chosen edition.

## `feeds` (type: `array`):

Any feed URLs to read alongside Google News, for example a publisher's own RSS. Same output format, same deduplication.

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

Two-letter language code of the Google News edition (en, de, fr, cs, es, pt, ja...).

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

Two-letter country code of the Google News edition (US, GB, DE, CZ, BR, IN...).

## `maxItemsPerSource` (type: `integer`):

Google News returns up to 100 items per query.

## `resolveLinks` (type: `boolean`):

Google News links point to news.google.com. When on, the actor decodes or follows each link to the publisher's own URL. Turn off for faster runs if you only need titles and sources.

## `publishedWithinHours` (type: `integer`):

Drop articles older than this. Leave empty for no limit.

## `newOnly` (type: `boolean`):

Keeps a snapshot per watch name (or per saved task) and returns only articles not seen in the previous run. Schedule it hourly or daily and you get a clean news feed for a brand, a competitor or a topic.

## `watchKey` (type: `string`):

Name of the snapshot used by new-only mode, for example "brand-mentions". Runs from a saved task get a snapshot automatically.

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

Start of the period to cover. Google News returns at most 100 items per query, so when a date range is set every query is split into day-sized windows and the results are merged and deduplicated. A week of one busy keyword returns about 640 articles instead of 100.

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

End of the period, inclusive. Ranges longer than 92 days are cut to 92 days.

## Actor input object example

```json
{
  "queries": [
    "Apify",
    "\"web scraping\" when:7d"
  ],
  "topStories": false,
  "language": "en",
  "country": "US",
  "maxItemsPerSource": 100,
  "resolveLinks": true,
  "newOnly": false
}
```

# Actor output Schema

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

One row per article: title, real URL, source, published date, summary and which query, topic or feed found it.

## `changes` (type: `string`):

New articles compared with the previous snapshot of the same watch name or task.

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

Per-source counts, unresolved links and totals.

# 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": [
        "Apify",
        "\"web scraping\" when:7d"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("deriverge/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": [
        "Apify",
        "\"web scraping\" when:7d",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("deriverge/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": [
    "Apify",
    "\\"web scraping\\" when:7d"
  ]
}' |
apify call deriverge/google-news-scraper --silent --output-dataset

```

## MCP server setup

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