# Google News Scraper (`robertosan16/google-news-scraper`) Actor

Search Google News by keyword or collect topic headlines for 38 countries and languages. Date ranges split by day for more than 100 results, related coverage, optional publisher URLs. Fast, no browser.

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

## Pricing

from $2.00 / 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

## Google News Scraper

Search Google News by keyword or collect the latest headlines by topic, for 38 countries and languages. Get clean, structured articles with title, source, publication date, the Google News link and, optionally, the original article URL on the publisher's site. Fast and lightweight: no browser, no login, no API key.

### What can this Google News Scraper do?

- 🔎 **Search Google News by keyword**, with full support for Google News operators: `"exact phrase"`, `OR`, `-exclude`, `site:reuters.com`, `intitle:`.
- 🗂️ **Collect topic headlines**: World, Nation, Business, Technology, Entertainment, Sports, Science and Health, plus the Top stories front page.
- 🌍 **38 editions**: United States, United Kingdom, Germany, France, Spain, Brazil, India, Japan, Thailand and many more. Any other Google News edition works too.
- 📅 **Filter by time**: past hour, day, week, month or year, or any date range.
- 📈 **Get more than 100 results per query**: Google News returns at most about 100 articles per search, so the scraper searches each day of a date range separately and collects far more.
- 🔗 **Resolve publisher URLs** (optional): turn `news.google.com` redirect links into the real article URLs, ready for further processing.
- 🧩 **Related coverage**: clustered topic stories include the other outlets covering the same story.
- 🔁 **No duplicates** across queries, days and topics within a run.

### What data does it extract?

| Field | Example |
|---|---|
| `title` | Self-Driving Cars Are Getting Better. The Risks Are Getting Bigger. |
| `source` | The New York Times |
| `sourceUrl` | https://www.nytimes.com |
| `publishedAt` | 2026-09-24T10:21:39.000Z |
| `url` | https://www.nytimes.com/2026/09/22/business/self-driving-cars-tesla-fsd.html (with *Resolve publisher URLs*) |
| `googleNewsUrl` | https://news.google.com/rss/articles/CBMi… |
| `query` / `topic` | tesla / TECHNOLOGY |
| `edition` | US:en |
| `relatedArticles` | other outlets covering the same story (topics and top stories) |

### How to use it

1. Enter one or more **search queries**, pick **topics**, or enable **top stories**.
2. Choose the **country and language**.
3. Optionally set a **time range** or a **date range**, and enable **Resolve publisher URLs**.
4. Click **Start** and download the results as JSON, CSV, Excel or HTML, or use them via the API.

#### Example input

```json
{
  "queries": ["artificial intelligence", "\"interest rates\" site:reuters.com"],
  "topics": ["BUSINESS", "TECHNOLOGY"],
  "edition": "US:en",
  "timeRange": "1d",
  "resolveUrls": true
}
```

#### Example output

```json
{
  "title": "Tesla Roadster reveal is creating a unique options opportunity, says Mike Khouw",
  "source": "CNBC",
  "sourceUrl": "https://www.cnbc.com",
  "publishedAt": "2026-09-23T18:52:11.000Z",
  "url": "https://www.cnbc.com/2026/09/23/tesla-roadster-reveal-is-creating-a-unique-options-opportunity-says-mike-khouw.html",
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMitgFBVV95cUxQQmt1…",
  "articleId": "CBMitgFBVV95cUxQQmt1…",
  "position": 2,
  "query": "tesla",
  "topic": null,
  "dateWindow": null,
  "edition": "US:en",
  "relatedArticles": [],
  "scrapedAt": "2026-09-24T10:51:38.097Z"
}
```

### Use cases

- **Media monitoring and PR**: track mentions of your brand, products or executives.
- **Competitive intelligence**: follow competitors, markets and industries every day.
- **Finance and trading**: collect news for tickers and companies for sentiment analysis.
- **AI and LLM pipelines**: feed fresh, structured news into agents, RAG systems and summaries.
- **Research**: build news datasets for a topic, country and period.

### How much does it cost?

You pay only for results: **$2 per 1,000 articles**, and **$1 per 1,000 resolved publisher URLs** when that option is on. There is no start fee. The Apify free plan covers thousands of articles per month.

### Tips

- **Scheduled monitoring**: run the Actor on a schedule with *From date* set to a relative date such as `1 day`, and get every new article since yesterday.
- **Big datasets**: set a long date range and keep *Search each day separately* on.
- **Precise searches**: use operators like `"exact phrase"`, `site:` and `-exclude` in the query.

### FAQ

**Is scraping Google News legal?** This Actor collects publicly available headlines and links, not personal data. Check the terms of the sources and your local laws for your use case.

**Why do some articles have `url: null`?** Resolving publisher URLs is optional. When it is on, a small share of links can still fail to resolve because of temporary Google limits; the Google News link is always present.

**Can I get the full article text?** Not yet. Enable *Resolve publisher URLs* and pass the URLs to a content extractor such as Website Content Crawler.

Found a bug or need a feature? Open an issue in the Issues tab and we will reply quickly.

# Actor input Schema

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

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

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

Also collect the current headlines of these Google News sections.

## `includeTopStories` (type: `boolean`):

Also collect the Google News front page (top stories) for the chosen edition.

## `edition` (type: `string`):

Google News edition to use. You can also type any edition as COUNTRY:language, for example NG:en.

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

Only return articles published within this period. Applies to search queries.

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

Start of the date range (UTC), as a date or relative, for example "3 days" for three days ago. Applies to search queries.

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

End of the date range (UTC, inclusive). Defaults to today.

## `splitByDay` (type: `boolean`):

Google News returns at most about 100 articles per search. Searching each day of the date range separately collects many more articles for long periods.

## `maxItemsPerFeed` (type: `integer`):

Maximum articles to keep from each search, day or topic. Google News itself returns up to about 100.

## `maxItems` (type: `integer`):

Stop after this many articles across all searches and topics. 0 means no limit.

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

Replace Google News redirect links with the original article URL on the publisher's site. Slower, and charged as a separate event for each resolved URL.

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

Apify Proxy keeps Google from rate-limiting the requests. The default works for most runs.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "includeTopStories": false,
  "edition": "US:en",
  "timeRange": "any",
  "splitByDay": true,
  "maxItemsPerFeed": 100,
  "maxItems": 0,
  "resolveUrls": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

News articles with title, source, publication date, Google News link and, optionally, the publisher URL.

# 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"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("robertosan16/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": ["artificial intelligence"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("robertosan16/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": [
    "artificial intelligence"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call robertosan16/google-news-scraper --silent --output-dataset

```

## MCP server setup

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