# Google News Scraper - Articles, Publisher URLs & Dates (`kamerozkan/google-news-scraper`) Actor

Scrape Google News by keyword, country and time window. Get headline, publisher, real article URL, snippet and exact publish time for media monitoring, PR, brand tracking and AI pipelines. 18 countries, newest-first sorting, pay only per article.

- **URL**: https://apify.com/kamerozkan/google-news-scraper.md
- **Developed by:** [Kamer Ozkan](https://apify.com/kamerozkan) (community)
- **Categories:** News, 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.
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 - Articles, Publisher URLs & Dates

Google News scraper for keywords, brands and topics: headline, publisher, the real article URL on the publisher's site, snippet, exact publish time (UTC) and Google's story cluster ID. 18 countries, time window filter (past hour, day, week, month, year), newest-first sorting, bulk queries, export to JSON, CSV or Excel.

### What does Google News Scraper do?

Type the searches you care about (for example `electric vehicles`, `"Acme Corp"` or `site:reuters.com tesla`), pick a country and a time window, and the actor returns every article Google News shows for each search, one row per article, in Google's order or newest first. It reads further result pages when you ask for more articles per query.

Every row carries the publisher's own article URL, not a Google redirect link, so you can open, deduplicate or crawl the article directly.

It needs no login, no Google account and no proxy setup on your side: pages are fetched through Apify's Google SERP proxy, which is included in the price.

### Who is it for?

- **PR and communications teams**: track press coverage of your company, products and executives every hour or every day.
- **Brand and reputation monitoring**: catch new articles about a brand or competitor as soon as Google indexes them.
- **Market and investment research**: follow news on companies, sectors and topics across 18 countries.
- **AI and data teams**: feed fresh, dated news URLs into RAG pipelines, summarizers and sentiment models.
- **SEO and content teams**: see which publishers rank in Google News for a topic.

### What data can you get?

| Field | Example |
|---|---|
| `query` | electric vehicles |
| `country` | US |
| `position` | 1 (rank in Google News for that query) |
| `title` | BMW Asked Americans How Much EV Range They Need. The Answer Is Surprising |
| `source` | bmwblog (publisher name as Google shows it) |
| `url` | https://www.bmwblog.com/2026/10/09/bmw-asks-americans-how-much-ev-range-need/ |
| `domain` | bmwblog.com |
| `urlResolved` | true when `url` is the publisher's URL |
| `snippet` | Short summary Google shows under the headline |
| `publishedAt` | 2026-10-09T11:41:48Z (exact UTC time) |
| `ageText` | 1 day ago (as shown, in the page language) |
| `storyClusterId` | Google's ID for the story; articles about the same event share it |
| `googleUrl` | Google's redirect link for the article |
| `scrapedAt` | When the run collected the row |

Fields stay empty (null) when Google does not show that detail. Google shows no snippet for some grouped articles.

### How much does it cost?

You pay only for results: **$2.50 per 1,000 articles** ($0.0025 per article) on the Free plan, with Store discounts on paid Apify plans: Bronze $2.25, Silver $2.125, Gold and above $2.00 per 1,000 articles. The Google SERP proxy is included; there is nothing else to buy.

Worked example: 10 brands monitored once a day with 20 articles each = 200 articles a day = 200 x $0.0025 = **$0.50 a day**, about $15 a month on the Free plan.

Set "Max articles per query", "Max articles in total" or a maximum cost per run to cap spending.

### How to use it

1. Click **Try for free**.
2. Enter one or more **Search queries** and choose the **Country** and, if you want, a **Language**.
3. Choose **Published within** (for monitoring use "Past 24 hours" or "Past hour") and turn on **Sort by date** for newest first.
4. Set **Max articles per query** (one results page holds about 10 articles).
5. Click **Start**, then download the results as JSON, CSV or Excel, or read them through the API.
6. For daily monitoring, save the input as a task and add a schedule.

### Input example

```json
{
  "queries": ["Elektroauto", "Bundesliga"],
  "countryCode": "de",
  "timeRange": "day",
  "sortByDate": true,
  "maxResultsPerQuery": 20
}
```

### Output example

Row from a QA run on 2026-10-10:

```json
{
  "query": "interest rates",
  "country": "GB",
  "position": 2,
  "title": "Average five-year mortgage rate hits 6% for first time in three years",
  "source": "BBC",
  "url": "https://www.bbc.co.uk/news/articles/c8r4yxpry5e9o",
  "domain": "bbc.co.uk",
  "urlResolved": true,
  "snippet": "The average interest rate on a new five-year fixed mortgage deal has hit 6% for the first time in three years, figures show. The cost of home loans has been...",
  "publishedAt": "2026-10-05T09:02:21Z",
  "ageText": "5 days ago",
  "storyClusterId": "4858065454",
  "googleUrl": "https://www.google.co.uk/goto?url=CAESbAHrOzAV...",
  "scrapedAt": "2026-10-10T12:26:17.231014Z"
}
```

A German row (`countryCode: "de"`) looks the same, with texts in German, for example `"ageText": "vor 52 Minuten"`.

### Supported countries

United States, United Kingdom, Canada, Australia, India, Germany, Austria, Switzerland, France, Belgium, Netherlands, Italy, Spain, Poland, Sweden, Brazil, Mexico and Japan.

### Integrations and API

Run it from your code with the Apify API or the `apify-client` package, schedule it in Apify, or connect it to Make, n8n, Zapier, Google Sheets, Slack or a webhook.

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("kamerozkan/google-news-scraper").call(run_input={
    "queries": ["electric vehicles"],
    "countryCode": "us",
    "timeRange": "day",
    "sortByDate": True,
    "maxResultsPerQuery": 30,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["publishedAt"], item["source"], item["title"], item["url"])
```

### FAQ

**How many articles do I get per query?** About 10 per results page; the actor reads further pages until it reaches your limit or Google has no more new articles. Google usually shows up to a few hundred articles per query.

**Do I get the real article link?** Yes. Google's result links are redirects; the actor follows each one once and returns the publisher's URL in `url` and its `domain`. If a link ever cannot be resolved, `url` keeps the Google link and `urlResolved` is false.

**Does it return the full article text?** No. It returns the headline, snippet, publisher, URL and publish time. Use the URL with a website content crawler if you need the full text.

**How do I monitor news without duplicates?** Run it on a schedule with "Past hour" or "Past 24 hours" and keep rows by `url`. Articles about the same event share a `storyClusterId`.

**Is it legal to collect this data?** It collects publicly visible search results (headlines, snippets and links). You are responsible for how you use the data and for following the laws and copyright rules that apply to you.

**Something is not working?** Open an issue on the Issues tab with your run link and we will fix it fast.

# Actor input Schema

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

Keywords, brands or topics to search in Google News, one per line. Google search operators work, for example "electric vehicles" or site:reuters.com tesla.

## `countryCode` (type: `string`):

Google News edition. Sources and ranking follow this country.

## `languageCode` (type: `string`):

Interface language code such as en, de or fr. Leave empty to use the country's main language.

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

Only return articles published in this time window. Use 'Past 24 hours' or 'Past hour' for daily or hourly monitoring.

## `sortByDate` (type: `boolean`):

Newest articles first instead of Google's relevance order.

## `maxResultsPerQuery` (type: `integer`):

Stop each query after this many articles. One results page holds about 10 articles; the actor pages further when you ask for more. Google usually returns up to a few hundred articles per query.

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

Stop the whole run after this many articles. You are charged per article, so this also caps the cost of the run.

## Actor input object example

```json
{
  "queries": [
    "electric vehicles"
  ],
  "countryCode": "us",
  "timeRange": "any",
  "sortByDate": false,
  "maxResultsPerQuery": 20,
  "maxItems": 1000
}
```

# Actor output Schema

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

One row per result in the default dataset.

# 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"
    ],
    "countryCode": "us",
    "maxResultsPerQuery": 20
};

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

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

```

## MCP server setup

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