# Google News Scraper — Articles, Sources & Real Links (`highbrow_fame/google-news-articles`) Actor

Google News articles for any search, topic, country and date range: title, source, publish time and the real publisher link, not the Google redirect. Many queries per run.

- **URL**: https://apify.com/highbrow_fame/google-news-articles.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** News, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 article delivereds

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 — Articles, Sources & Real Links

Get Google News articles for any search, topic, country and date range: headline, source, publish time and the **real publisher link** — not the news.google.com redirect. Put in as many searches and topics as you like; one run does them all.

**Why this one**

- 🔗 **Real article links.** Google News feeds only give `news.google.com/rss/articles/…` redirect links. This Actor turns every one of them into the publisher's own URL — in a live test run, 1,006 of 1,006.
- 📅 **More than 100 articles per search.** Google News stops at 100 articles per list. Set a date range (or ask for more than 100) and the Actor reads one day at a time: a live run of `Tesla` returned 300 articles over four days.
- ⚡ **Fast and light.** No browser. The live test run above — 4 searches and 2 topics, 1,006 articles — took 96 seconds.
- 📰 **Top stories with the whole story.** For top stories, every article also lists the other outlets covering the same story.
- 💸 **You pay only for articles delivered.** A search with no articles comes back as a free record with the reason.

### What you get

For every article:

| Field | What it is |
|---|---|
| `title` | the headline (without the " - Source" Google adds) |
| `source`, `sourceUrl` | the publisher and its website |
| `publishedAt` | publish time, ISO 8601 (UTC) |
| `url` | the publisher's own link to the article |
| `googleNewsUrl`, `articleId` | the Google News link and its id |
| `relatedCoverage` | for top stories: the same story from other outlets (`title`, `source`) |
| `input`, `inputType`, `position` | which search or topic it came from, and its place in that list |
| `edition` | the Google News edition, e.g. `US:en` |
| `scrapedAt` | when the row was read |
| `status`, `error` | `OK`, or why a search gave nothing |

If a link cannot be decoded, `url` is empty and `urlError` says why; the article is still delivered with its `googleNewsUrl`.

#### Example

A real record from a live run — top stories, United States edition, 24 September 2026:

```json
{
  "input": "topic:TOP_STORIES",
  "inputType": "topic",
  "position": 1,
  "title": "Judge temporarily overturns Trump's White House media ban",
  "source": "BBC",
  "sourceUrl": "https://www.bbc.com",
  "publishedAt": "2026-09-24T10:29:35.000Z",
  "url": "https://www.bbc.com/news/articles/cqm2mg34x2v7o",
  "relatedCoverage": [
    { "title": "Judge orders Trump administration to immediately reinstate White House access to CNN, MS NOW and Politico", "source": "CNN" },
    { "title": "Politico denied access to White House after judge's order, news outlet says", "source": "Reuters" }
  ],
  "edition": "US:en",
  "status": "OK"
}
```

### How to use it

1. Add **Search queries** — one per line. Google News operators work: `"interest rates" site:reuters.com`, `"exact phrase"`, `-exclude`.
2. And/or pick **Topics**: top stories, world, nation, business, technology, entertainment, sports, science, health.
3. Set the **Country** and **Language** of the edition (`US` + `en`, `DE` + `de`, `BR` + `pt-419`…).
4. Narrow it down with a **Time frame** (past hour … past year), or set **From date** / **To date** to read a period day by day.
5. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To monitor a brand or a topic, save your input as a task and schedule it hourly or daily.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per article delivered** — see the price on this page. Searches with no articles are free, and so are articles outside your dates. If your run has a **Maximum charge**, the Actor stops cleanly when it is reached and tells you how many searches or topics were left.

### FAQ

**Why do I get at most 100 articles without dates?** Google News returns at most 100 articles per list. Ask for more than 100, or set dates, and the Actor reads the period one day at a time — each day again up to 100.

**Do you get the article text?** No — the headline, source, time and link. Open the `url` to read the article on the publisher's site.

**Why are some articles a few hours outside the day I asked for?** They are not: with dates set, articles whose publish time falls outside them are skipped and not charged. Google's own day boundaries are not UTC, so the Actor checks every article itself.

**Is this affiliated with Google?** No. This is an independent tool that reads the public Google News feeds.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

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

What you would type into Google News. Google operators work too: "tesla" site:reuters.com, "exact phrase", -exclude.

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

Google News gives at most 100 articles per list. Above 100, the Actor reads one day at a time, from today backwards (or over your dates).

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

Google News sections, each as its own list.

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

Two-letter country code of the Google News edition: US, GB, AU, DE, FR, IN, HU…

## `timeframe` (type: `string`):

How recent the articles must be. Ignored when you set dates below.

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

Optional, YYYY-MM-DD. With dates set, every day is read on its own, so a period can return far more than 100 articles.

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

Optional, YYYY-MM-DD. Defaults to today.

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

Language of the edition: en, de, fr, es, hu… (Latin America: es-419, Brazil: pt-419).

## `decodeUrls` (type: `boolean`):

Turn Google News redirect links into the publisher's own URL (one extra lookup per article).

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

How many queries or topics to work on at the same time.

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

Used only to try again after a network error: the first try goes out directly, which is much faster.

## Actor input object example

```json
{
  "queries": [
    "electric vehicles"
  ],
  "maxArticlesPerQuery": 20,
  "country": "US",
  "timeframe": "any",
  "language": "en",
  "decodeUrls": true,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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": [
        "electric vehicles"
    ],
    "maxArticlesPerQuery": 20,
    "country": "US",
    "language": "en",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/google-news-articles").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": ["electric vehicles"],
    "maxArticlesPerQuery": 20,
    "country": "US",
    "language": "en",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/google-news-articles").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": [
    "electric vehicles"
  ],
  "maxArticlesPerQuery": 20,
  "country": "US",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/google-news-articles --silent --output-dataset

```

## MCP server setup

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

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/96ssWKIYB30s5UEuL/builds/EWp4ohc2SuRXj5T3M/openapi.json
