# Google News Scraper - Headlines, Source, Date, API (`om_kh/google-news-scraper`) Actor

Google News API: articles for any keyword, topic section, city or Google News link, in any country and language. Up to 5,000 per search, custom dates, the publisher's own link, picture and summary. No API key. $2 per 1,000 articles ($3 from Nov 12).

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

## Pricing

from $1.65 / 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.
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  Headlines, Source, Date, API

Search **Google News** for any keyword, company, person or topic and get every matching
article back as clean, structured data: **headline, publisher, publication date, Google News
link**, and on request the **publisher's own article link, picture, summary and author**. Also
reads Google News **topic sections** (Business, Technology, Sports…), **top stories**, **local
news** for any city and any **news.google.com link**. More than 100 articles per search, custom
dates, publisher filters. It reads Google News' own feeds: no login and no API key.

### In short: what you give, what you get, what it costs

| | |
|---|---|
| **You give** | Searches (a brand, a company, a person, a topic), Google News sections, or cities for local news |
| **We do** | Read Google News' own feeds and, on request, the publisher's page |
| **You get** | One row per article: headline, publisher, publication date and link; option: the publisher's own link, picture, summary and author |
| **It costs** | **$2 per 1,000 articles, $3 from 12 November 2026**, no start fee. A search with no result costs nothing; the first result of every run is free |
| **It does not** | Give the full article text. Above 100 articles a search is cut into date windows (one day at the smallest) |

A real result row is shown further down this page.

### Free tier — 1 result free on every run

**The first 1 result of every run is free**, on every run you ever make — not a one-off trial. One guard: the free allowance never covers more than half of a run, so the offer stays sustainable.

### What does this Google News scraper do?

- Searches Google News for **one or many queries in one run**, in any country edition and language.
- Returns **up to 5,000 articles per search**: Google gives 100 at a time, so the period is cut
  into smaller date windows until your number is reached, newest first.
- Reads **topic sections**, **top stories**, **local news** (`locations`) and any pasted
  **Google News link** (topic, publication, search).
- **Custom dates** (`dateFrom`, `dateTo`) or a quick range (last hour to last year).
- **Publisher filters**: only these domains, or everything except these domains.
- **The real article link** (`decodeUrls`): the address on the publisher's site instead of the
  `news.google.com` redirect.
- **Picture, summary, author and site name** (`includeArticleDetails`), read from the article page.
- **Related coverage**: when Google groups several outlets on one story, their headlines are listed.
- Supports Google News search operators: `"exact phrase"`, `OR`, `-exclude`, `site:reuters.com`, `intitle:`.
- Can **return only articles you have not seen before** (set `monitorEnabled`), for daily news alerts.

### Compared with s-r/google-news

Read on the Store on 2026-10-23 (Google News API - News Scraper by Keyword, Country & Language). Where it does better, this section says so.

- **Built on the site's own data**, not a resold scraper: no second Actor between you and the source.
- **Free results on every run** and a hard cost cap (`maxTotalChargeUsd`).
- **Price:** $2 per 1,000 here ($3 from 12 November 2026), $4 there.

### Why use it

- **Built on Google's own feeds** — not a headless browser, so it does not break when Google changes its page layout.
- **Fast and cheap** — a search returns in about a second, 400 articles in about 12 seconds, at **$0.002 per article** ($0.003 from 12 November 2026). The publisher's link, picture and summary are included in that price.
- **One row shape** — the same fields for every article, ready for a sheet, a database or an LLM.
- **AI-agent ready** — usable through Apify's MCP server and payable by AI agents with x402.

### How to scrape Google News in 3 steps

1. Click **Try for free** and type one or more searches in **News search queries**.
2. Optional: add operators such as `when:7d` (last 7 days) or `site:bloomberg.com`.
3. Click **Start** and download as **JSON, CSV, Excel, HTML or XML**, or read it from the API.

### Input

| Field | Type | What it does |
|---|---|---|
| `queries` | array | Google News searches: brands, companies, people, topics, with any Google News operator |
| `topics` | array | Sections of the edition: `TOP`, `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH` |
| `locations` | array | Cities or regions for Google News' local headlines: `Montreal`, `Texas` |
| `topicUrls` | array | Any `news.google.com` topic, publication or search link |
| `country` | string | Google News edition country: `US` (default), `GB`, `FR`, `DE`, `IN`, `BR`, `CA`… |
| `language` | string | Edition language: `en` (default), `fr`, `de`, `es`, `pt`… |
| `timeRange` | string | Only recent articles: `1h`, `1d`, `7d`, `30d`, `1y` (empty = any time) |
| `dateFrom` / `dateTo` | string | Exact period, `YYYY-MM-DD`, both days included. Replaces `timeRange` |
| `maxArticlesPerQuery` | integer | 1 to 5,000 per search. Default 100 |
| `sourceDomains` / `excludeDomains` | array | Keep only, or leave out, these publishers (`reuters.com`) |
| `decodeUrls` | boolean | Adds `articleUrl`, the article's address on the publisher's site |
| `includeArticleDetails` | boolean | Adds `image`, `description`, `articleAuthor`, `siteName` (and `articleUrl`) |
| `monitorEnabled` | boolean | `true` returns only articles not seen in earlier runs of the same monitor (for schedules) |
| `monitorId` | string | Name of the monitor, to keep several independent watch lists |
| `maxTotalChargeUsd` | number | Hard spending cap for the run |

```json
{
  "queries": ["openai", "\"electric vehicles\""],
  "topics": ["TECHNOLOGY"],
  "country": "US",
  "language": "en",
  "timeRange": "7d",
  "maxArticlesPerQuery": 400,
  "includeArticleDetails": true
}
```

### Output

One row per article. Real example (search `openai`, last 24 hours, `includeArticleDetails` on;
the long Google News identifiers are shortened here):

A real row from this Actor's latest run on Apify (2026-10-24; long texts are cut and people's names hidden here, your dataset has them in full):

```json
{
  "record_id": "CBMiogFBVV95cUxQRXdjM1lJeFg0SF9wQ1FfYVpqMzZfY2R4aVhqaHVRT252Q2lZMm5QVTc3TDlkR3pCWG8yR3FPOTQxak1SUk4zVkhYaUhXdk9TbVhwcXhKSXU2SUw1OEZRNGpxS...",
  "query_id": "openai",
  "title": "An OpenAI Model Spent Ethereum Without Permission. Here's What That Means For Crypto Investors. - Yahoo Finance",
  "url": "https://news.google.com/rss/articles/CBMiogFBVV95cUxQRXdjM1lJeFg0SF9wQ1FfYVpqMzZfY2R4aVhqaHVRT252Q2lZMm5QVTc3TDlkR3pCWG8yR3FPOTQxak1SUk4z...",
  "text": "An OpenAI Model Spent Ethereum Without Permission. Here's What That Means For Crypto Investors. Yahoo Finance",
  "author": "(hidden here)",
  "published_at": "2026-10-24T21:26:00+00:00",
  "headline": "An OpenAI Model Spent Ethereum Without Permission. Here's What That Means For Crypto Investors.",
  "sourceUrl": "https://finance.yahoo.com",
  "sourceDomain": "finance.yahoo.com",
  "publishedTimestamp": 1792877160,
  "resultRank": 1,
  "queryType": "search",
  "country": "US",
  "language": "en"
}
```

| Field | Description |
|---|---|
| `title` | Headline as shown on Google News (publisher appended) |
| `headline` | The headline alone |
| `url` | Google News article link, which redirects to the publisher |
| `articleUrl` | The article's own address on the publisher's site (`decodeUrls` or `includeArticleDetails`) |
| `author` | Publisher name |
| `sourceUrl` / `sourceDomain` | Publisher's site |
| `published_at` / `publishedTimestamp` | Publication date, ISO 8601 UTC and Unix seconds |
| `text` | Google News snippet (headline and publisher) |
| `description`, `image`, `articleAuthor`, `siteName`, `articlePublishedAt` | Read from the article page (`includeArticleDetails`) |
| `relatedHeadlines` | Other outlets Google groups on the same story (topic sections and top stories) |
| `resultRank` | Position in the results of its query |
| `queryType` | `search`, `topic` or `page` |
| `query_id` | The query, topic, place or link that found the article |

### How much does it cost?

**$0.002 per article, $0.003 from 12 November 2026.**

| Articles | Cost |
|---:|---:|
| 100 | $0.20 |
| 1,000 | $2.00 |
| 10,000 | $20.00 |

- A query with no results costs nothing.
- `maxTotalChargeUsd` caps every run.
- The most-used Google News Actors charge $0.002–$0.005 per article.

### Use cases

- **Brand and competitor monitoring** — schedule it daily with `monitorEnabled` and get only new coverage.
- **PR and media lists** — which publishers write about your market.
- **Market and investment research** — news flow per company or ticker.
- **LLM and RAG pipelines** — fresh, dated headlines for an agent or a newsletter.
- **Dashboards** — send results to Google Sheets, Airtable or a database.

### Use it from code (API)

Every Apify Actor is an API. Start a run and read the results with one call.

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/google-news-scraper").call(run_input={"queries": ["openai", "\"electric vehicles\" when:7d"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('om_kh/google-news-scraper').call({
    "queries": [
        "openai",
        "\"electric vehicles\" when:7d"
    ]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**One HTTP call (cURL)** — runs the Actor and returns the dataset in the same response:

```bash
curl -X POST "https://api.apify.com/v2/acts/om_kh~google-news-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["openai", "\"electric vehicles\" when:7d"]}'
```

### Integrations: n8n, Make, Zapier, Google Sheets

- **n8n** — the official *Apify* node, operation *Run Actor and get dataset*, Actor `om_kh/google-news-scraper`.
- **Make** — *Apify › Run an Actor*, then *Apify › Get Dataset Items*.
- **Zapier** — *Apify › Run Actor*; map the dataset items into your next step.
- **Google Sheets, webhooks, Slack** — add an integration from the *Integrations* tab of this Actor.
- **Schedules** — run it every hour or day from *Schedules* in Apify Console.

### Use it from an AI agent (MCP and x402)

Connect Claude Desktop, Cursor, VS Code or any MCP client to Apify's MCP server
at `https://mcp.apify.com` and add this Actor, `om_kh/google-news-scraper`, as a tool — the
agent passes the same JSON as the run input and gets the dataset back.

AI agents that pay with **x402** can run it too, without an Apify account: the
Actor charges only per result delivered, so an agent pays exactly for what it gets.

### Tips and limits

- Google News gives 100 articles per search. Above that, set `maxArticlesPerQuery`: the Actor cuts the
  period into date windows. A window is one day at the smallest, so a single day with more than 100
  articles returns its first 100. One search reads at most 80 windows.
- Topic sections, top stories and local news return what Google shows there now (about 30 to 70 articles).
- In the test behind this page (290 articles: one search, one topic section, one city), the publisher's
  link was found for 290 of 290 articles and a picture for 213 of 290, in 55 seconds. Some publishers
  block robots: those rows keep empty `image` and `description`.
- With `dateFrom` / `dateTo`, rows are kept by their UTC publication day.
- Set `timeRange` to `1d` or `7d` (or write `when:1d` in the query) to keep results fresh.
- Links are Google News redirect links; they open the publisher's article in a browser.

### FAQ

**Is it legal to scrape Google News?**
It reads Google's public RSS feed, the same one any news reader uses, and collects no personal data. Check the terms of the sites you republish from and your local law.

**Do I need a Google API key?**
No.

**Can I get the full article text?**
It returns the headline, snippet and link. Full text lives on each publisher's site.

**Can I search in other languages or countries?**
Yes. Set `country` and `language` to read any Google News edition — for example `FR` + `fr` for Google News France, `DE` + `de` for Germany, `IN` + `en` for India. Each edition ranks its own local publishers.

**How do I get only new articles every day?**
Set `monitorEnabled: true` and schedule the Actor. Each run returns only articles it has not returned before.

**Can my AI agent use it?**
Yes, through MCP (`google_news_search`) or the HTTP API.

### Related Actors

- [Hacker News Scraper - Posts, Points, Comment Count](https://apify.com/om_kh/hacker-news-scraper)
- [YouTube Transcript Scraper - Full Text, Timestamps, Language](https://apify.com/om_kh/youtube-transcript-api)
- [YouTube Channel Transcripts Scraper - Every Video to Text](https://apify.com/om_kh/youtube-channel-transcripts)
- [YouTube Comments Scraper - Likes, Replies, Date, $0.40/1K](https://apify.com/om_kh/youtube-comments-scraper)

### Support

Found a bug or need a feature? Open an issue in the **Issues** tab — every report gets an answer.

### All input fields

The main fields are described above; these are the others the form accepts:

- **`currentItems`** (Bring your own items (optional)) — Skip the chained fetch and pass records directly (no upstream call, no fetch fee).
- **`sources`** (Data source (informational)) — Declare every upstream source before this run. Each item needs name, authorization, and estimated_cost_usd.

### Your feedback

Did this Actor save you time? A short review on the **Reviews** tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the **Issues** tab: it is answered and fixed fast.

# Actor input Schema

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

Keywords, brands, companies or people to search on Google News, one per line. Google operators work: "exact phrase", OR, -word, site:reuters.com, intitle:word.

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

Google News sections of the chosen country edition: the headlines Google shows there right now.

## `locations` (type: `array`):

Cities or regions: Montreal, Texas, Lyon. Returns Google News' local headlines for each.

## `topicUrls` (type: `array`):

Any news.google.com topic, section, publication or search link: its articles are returned.

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

Two-letter country code of the Google News edition, e.g. US, GB, FR, DE, IN, BR, CA. Default US.

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

Two-letter language code of the edition, e.g. en, fr, de, es, pt. Default en. Combine with country: FR + fr = Google News France.

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

Only articles from the last hour/day/week/month/year (Google's own 'when:' filter). Empty = any time.

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

YYYY-MM-DD. With a start or end date, the time range above is ignored.

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

YYYY-MM-DD, included. Default: today.

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

Google News gives 100 articles per search. Above 100, the period (time range or dates; last 30 days when none is set) is cut into smaller date windows until the number is reached. Newest first.

## `sourceDomains` (type: `array`):

Domains to keep: reuters.com, bbc.com, lemonde.fr.

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

Domains to leave out.

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

Google News links point to news.google.com. Turn on to also get the article's own address on the publisher's site (articleUrl). Slower: about 1 second per 10 articles.

## `includeArticleDetails` (type: `boolean`):

Open each article's page for its picture, summary, author and site name. Includes the publisher's link. Publishers that block robots return empty fields.

## `currentItems` (type: `array`):

Skip the chained fetch and pass records directly (no upstream call, no fetch fee).

## `maxTotalChargeUsd` (type: `number`):

Hard maximum amount that this run may charge.

## `sources` (type: `array`):

Declare every upstream source before this run. Each item needs name, authorization, and estimated_cost_usd.

## `monitorEnabled` (type: `boolean`):

The first monitored run stores a free baseline. Later runs deliver and charge only new results.

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

Pins the persistent baseline to a name of your choice, so separate targets never share state. Leave empty to derive it automatically.

## Actor input object example

```json
{
  "queries": [
    "openai",
    "electric vehicles"
  ],
  "country": "US",
  "language": "en",
  "timeRange": "",
  "maxArticlesPerQuery": 100,
  "decodeUrls": false,
  "includeArticleDetails": false,
  "currentItems": [],
  "sources": [
    {
      "name": "Google News official RSS feed (first-party, no third-party scraper)",
      "authorization": "public_official",
      "estimated_cost_usd": 0
    }
  ],
  "monitorEnabled": false,
  "monitorId": ""
}
```

# Actor output Schema

## `report` (type: `string`):

A visual summary of delivery, charges, changes, and source issues.

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

Business-ready results in a sortable table. No JSON knowledge required.

## `csv` (type: `string`):

Results ready for spreadsheets, CRMs, and analytics tools.

## `excel` (type: `string`):

Results as an Excel workbook for non-technical teams.

## `runSummary` (type: `string`):

Machine-readable delivery, billing, and source diagnostics.

# 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": [
        "openai",
        "electric vehicles"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/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": [
        "openai",
        "electric vehicles",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("om_kh/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": [
    "openai",
    "electric vehicles"
  ]
}' |
apify call om_kh/google-news-scraper --silent --output-dataset

```

## MCP server setup

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