# Google News Scraper — past the 100 limit, real links (`pampadata/google-news-scraper`) Actor

Every article Google News lists for your searches, past its ~100-per-search stop (split by day and source), each once, with the publisher's real link, strictly inside your dates.

- **URL**: https://apify.com/pampadata/google-news-scraper.md
- **Developed by:** [Cowboi Bebot](https://apify.com/pampadata) (community)
- **Categories:** News
- **Stats:** 2 total users, 1 monthly users, 100.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

Every article **Google News** lists for your searches, **past its ~100-per-search stop**, each article **once**, with the **publisher's real link** (not the news.google.com redirect), **strictly inside the dates you ask for**, and a plain per-search check of which parts Google cut.

*Versión en español más abajo.*

### Why this one

- **Past the ~100 stop.** Google News never lists more than about 100 articles for one search. This Actor reads your date range **day by day**, and a day that also reaches 100 is read again **per news source** (the day's biggest sources one by one, then everything else). Test on 2026-10-09:

| Search "nvidia", one day (2026-10-07), US edition | Feeds read | Distinct articles |
|---|---|---|
| One Google News search for that day | 1 | 100 |
| This Actor (the day + 8 sources + the rest + 8 more sources) | 18 | **1,153** |

- **Any dates you want.** `dateFrom` / `dateTo` (e.g. all of March 2025), or the last hour, 24 hours, 7 days, 30 days or 12 months.
- **Strictly inside your dates.** Google's own date filter leaks: asked for articles before 2026-01-01, it returned 4 later ones out of 100. Articles outside your window are dropped and **not charged** (counted as `outsideDates`).
- **Real publisher links, on by default,** and you pay only for rows that have one: an article whose link cannot be turned into the publisher's is still delivered (with `url` empty and `urlResolved: false`) and **not charged**.
- **Each article once, and you pay once,** across days, sources, searches and editions of a run. Several searches and several editions (US:en, GB:en, AR:es-419…) in one run.
- **Only new articles, for monitoring.** Turn on `onlyNew` and the Actor remembers what it delivered (per search and edition, in a key-value store of your own account): each scheduled run delivers and charges only what is new.
- **The check per search** (SUMMARY record): feeds read, days Google cut at 100, splits by source, repeats skipped, articles outside your dates, articles seen in earlier runs, links not resolved, and `listComplete: true` only when no part was cut. Parts that could not be split further are named (e.g. "2026-10-07 site:finance.yahoo.com: this source alone has 100+ articles that day").

### Input

| Field | What it does |
|---|---|
| `queries` | Words as you would type them on Google News (`nvidia`, `"interest rates" fed`). Google News operators work (`site:`, `intitle:`, `OR`, `-word`). A news.google.com search or topic link also works. |
| `topics` | Google News sections: `top stories`, `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH` (what Google shows on that page, not split). |
| `editions` | country:language, e.g. `US:en`, `GB:en`, `IN:en`, `FR:fr`, `DE:de`, `AR:es-419`, `MX:es-419`, `BR:pt-419`, `JP:ja`. |
| `timeRange` | `1h`, `1d`, `7d` (default), `30d`, `1y`, or `any` (one search, Google stops at ~100). |
| `dateFrom`, `dateTo` | Any day range (YYYY-MM-DD). Google News days are US Pacific days in every edition. Dates win over `timeRange`. |
| `maxArticlesPerQuery` | 0 = everything Google News lists. Newest first. |
| `goPastLimit` | On by default. Off = read each day once. |
| `resolveUrls` | On by default (the publisher's own link). Off = faster, Google's link only. |
| `onlyNew`, `stateName` | Monitoring: deliver only articles not delivered by earlier runs with the same state name. |

If your search has its own `after:` / `before:` / `when:` words, it is run once as written (and still checked locally against those dates).

### What you get for each article

`title` (Google's " - Source" suffix removed), `source`, `sourceDomain`, `url` (publisher link), `publishedAt` (UTC), `publishedTimeKnown` (false when Google gives only the date, as it does for most articles older than a few days), `googleNewsUrl`, `articleId`, `sourceUrl`, `urlResolved`, `query` / `topic`, `input`, `edition`, `foundIn` (the day and source piece it came from).

#### Example

```json
{
  "title": "Nvidia, Oracle, CoreWeave and other AI stocks sink on OpenAI revenue report",
  "source": "CNBC",
  "sourceDomain": "cnbc.com",
  "url": "https://www.cnbc.com/2026/10/08/open-ai-revenue-nvidia-oracle-coreweave.html",
  "publishedAt": "2026-10-08T18:14:54Z",
  "publishedTimeKnown": true,
  "urlResolved": true,
  "query": "nvidia",
  "edition": "US:en",
  "foundIn": "2026-10-08"
}
```

### Price

You pay only for articles delivered with the publisher's real link: **USD 1.50 per 1,000 articles** (USD 0.0015 each). No charge per run beyond Apify's standard start event, and nothing for repeats, articles outside your dates, articles already delivered in an earlier monitoring run, rows whose link could not be resolved, or searches that fail. Set a maximum charge per run in Apify and the Actor stops there.

### How long it takes

100 articles with real links in about 8 seconds; one very busy day ("nvidia", 1,153 articles) in about 3 minutes.

### Good to know

- Titles, sources, dates and links only: the article text is on the publisher's site and is not copied.
- `publishedAt` is Google News's date. Older articles often carry the day only (`publishedTimeKnown: false`).
- A single source that publishes 100+ matching articles in one day cannot be split further (Google does not go below a day): the SUMMARY names those parts.
- Monitoring: one `stateName` per monitor, and don't run two runs with the same `stateName` at the same time (they would both deliver the same new articles).
- No proxy is needed (Google News answers Apify's own IPs); if Google refuses for a moment, the run uses Apify's proxy by itself.
- Not affiliated with Google. It reads the public Google News RSS feeds, without logging in.

***

## Versión en español

Todas las notas que **Google News** lista para tus búsquedas, **más allá de su tope de ~100 por búsqueda**, cada nota **una sola vez**, con el **link real del medio** (no la redirección de news.google.com), **estrictamente dentro de las fechas que pedís**, y un control por búsqueda de qué partes cortó Google.

### Por qué este

- **Pasa el tope de ~100.** Google News nunca lista más de unas 100 notas por búsqueda. Este Actor lee tu rango **día por día**, y un día que también llega a 100 lo lee otra vez **por medio**. Prueba del 2026-10-09, "nvidia", un día, edición EE. UU.: una búsqueda de Google da 100; este Actor, **1.153** notas distintas.
- **Las fechas que quieras:** `dateFrom` / `dateTo`, o la última hora, 24 horas, 7 días, 30 días o 12 meses.
- **Estrictamente dentro de tus fechas.** El filtro de fechas de Google se filtra: pedidas notas anteriores al 2026-01-01, devolvió 4 posteriores de 100. Las que caen fuera no se entregan ni se cobran.
- **Links reales del medio, activados por defecto,** y pagás solo las filas que lo tienen: una nota cuyo link no se pudo convertir se entrega igual, con `url` vacío, y **no se cobra**.
- **Cada nota una vez, y se cobra una vez,** entre días, medios, búsquedas y ediciones de la corrida.
- **Solo notas nuevas, para monitoreo:** con `onlyNew`, el Actor recuerda lo que entregó (en un almacén de tu propia cuenta) y cada corrida programada entrega y cobra solo lo nuevo.
- **Control por búsqueda** (registro SUMMARY): feeds leídos, días que Google cortó en 100, partes no completas con su motivo, repetidas, fuera de fecha, vistas en corridas anteriores, links no convertidos, y `listComplete: true` solo cuando no se cortó nada.

### Precio

Pagás solo las notas entregadas con el link real del medio: **USD 1,50 cada 1.000 notas** (USD 0,0015 cada una). No hay cargo por corrida aparte del evento de inicio estándar de Apify, y no se cobran las repetidas, las que caen fuera de tus fechas, las ya entregadas en una corrida anterior de monitoreo, las filas cuyo link no se pudo convertir ni las búsquedas que fallan. Poné un cargo máximo por corrida en Apify y el Actor se detiene ahí.

### Para saber

- Solo título, medio, fecha y link: el texto de la nota está en el sitio del medio y no se copia.
- `publishedAt` es la fecha de Google News; las notas de hace más de unos días suelen traer solo el día (`publishedTimeKnown: false`).
- Un medio que publica solo 100+ notas de tu búsqueda en un día no se puede partir más (Google no parte por debajo del día): el SUMMARY nombra esas partes.
- Monitoreo: un `stateName` por monitor, y no corras dos corridas con el mismo `stateName` a la vez (las dos entregarían las mismas notas nuevas).
- No está afiliado a Google. Lee los feeds RSS públicos de Google News, sin iniciar sesión.

# Actor input Schema

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

One per line: words as you would type them on Google News ("nvidia", ""interest rates" fed"), Google News operators allowed (site:, intitle:, OR, -word), or a news.google.com search or topic link.

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

Google News sections: top stories, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH. A topic feed is what Google shows on that page (usually 30-80 articles); it is not split.

## `editions` (type: `array`):

Which Google News edition to search, as country:language: US:en, GB:en, IN:en, AU:en, CA:fr, FR:fr, DE:de, ES:es, AR:es-419, MX:es-419, BR:pt-419, JP:ja… Several editions are searched one after the other and an article found in two is delivered once.

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

From 24 hours up, the search is read day by day, so you get past Google's ~100-per-search stop. Ignored when you set dates below.

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

First day to include (YYYY-MM-DD). Google News days run on US Pacific time, in every edition.

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

Last day to include (YYYY-MM-DD). Empty = today.

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

0 = every article Google News lists. You pay per article, so set a limit for quick tests. Newest articles come first.

## `goPastLimit` (type: `boolean`):

Google News never lists more than about 100 articles for one search. With a time range or dates, every day is read on its own; a day that also reaches 100 is read again per news source. Turn off to read each day once.

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

Turns Google's news.google.com/rss/articles/... link into the publisher's own link (2 extra requests per article). An article whose link cannot be turned is still delivered, with url empty, and is not charged.

## `onlyNew` (type: `boolean`):

For monitoring: the run remembers what it delivered (per search and edition, in a key-value store of your account) and only delivers articles it has not delivered before. Use the same 'State name' each time; the first run delivers everything.

## `stateName` (type: `string`):

Separate memories for separate monitors: runs with the same name share what was already delivered.

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

Leave off: Google News answers Apify's own IPs (measured: 560 searches in 2 minutes, none refused). If Google ever refuses, the run moves to Apify's datacenter proxy by itself.

## Actor input object example

```json
{
  "queries": [
    "nvidia"
  ],
  "editions": [
    "US:en"
  ],
  "timeRange": "7d",
  "maxArticlesPerQuery": 100,
  "goPastLimit": true,
  "resolveUrls": true,
  "onlyNew": false,
  "stateName": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "nvidia"
    ],
    "editions": [
        "US:en"
    ],
    "timeRange": "7d",
    "maxArticlesPerQuery": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("pampadata/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": ["nvidia"],
    "editions": ["US:en"],
    "timeRange": "7d",
    "maxArticlesPerQuery": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("pampadata/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": [
    "nvidia"
  ],
  "editions": [
    "US:en"
  ],
  "timeRange": "7d",
  "maxArticlesPerQuery": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call pampadata/google-news-scraper --silent --output-dataset

```

## MCP server setup

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