# Google News Scraper - $1 / 1000 Articles (`scrapeunblocker/google-news-scraper`) Actor

Scrape Google News as clean JSON: search any keyword or read a section (world, business, technology, top stories...) and get each article's real publisher URL, title, source, publish time, image and authors. Any language and country, time filters, no login. $1 per 1000 articles.

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

## Pricing

from $1.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

Scrape **Google News** as clean, structured JSON - search any keyword or read a whole section (top stories, world, business, technology...) and get every article's **title**, the **real publisher URL** (not a news.google.com redirect), the **source** and its website, the **publish time** in UTC, the **article image** and the **authors**. Any language and country edition, time filters, no Google account or proxies to set up.

### Features

- **Keyword search** - Google News results for any query, with Google News operators: `"exact phrase"`, `OR`, `-word`, `site:reuters.com`, `intitle:`.
- **Sections** - top stories, world, nation, business, technology, entertainment, sports, science and health, or any topic by its id.
- **Real article links** - `url` is the publisher's own page, ready to fetch.
- **Any edition** - pick the language (`en`, `de`, `fr`, `pt-BR`...) and country (`us`, `gb`, `de`, `in`...).
- **Time filters** - the last hours, days, weeks or months (`1h`, `1d`, `7d`, `1m`), or an exact date window.
- **Clean dates** - `publishedAt` in ISO 8601 UTC.
- **Images and authors** - the article's image with its size, and the author names Google shows.
- **Up to about 100 articles per search and about 250 per section** in one go.

### Use cases

- **Media monitoring** - track mentions of your brand, competitors or executives every hour or day.
- **News feeds** - build topic or industry feeds for apps, newsletters and dashboards.
- **Market and investment research** - follow coverage of companies, sectors and events.
- **PR and reputation** - see which outlets cover a story and when.
- **AI and RAG pipelines** - collect fresh article links to read and summarise.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `queries` | array | - | Searches to run (one search each). |
| `topics` | array | - | Sections to read instead: `top`, `world`, `nation`, `business`, `technology`, `entertainment`, `sports`, `science`, `health`, or a topic id. |
| `language` | string | `en` | Edition language, e.g. `en`, `en-GB`, `de`, `pt-BR`. |
| `country` | string | `us` | Edition country as a 2-letter code. |
| `timeRange` | string | - | Searches only: last period, e.g. `1h`, `1d`, `7d`, `2w`, `1m`, `1y`. |
| `dateFrom` | string | - | Searches only: published after this date (YYYY-MM-DD). |
| `dateTo` | string | - | Searches only: published before this date (YYYY-MM-DD). |
| `maxResultsPerQuery` | integer | `100` | Articles to keep per search or section (1-250). |
| `concurrency` | integer | `3` | Searches or sections read at the same time (1-5). |

Leave both `queries` and `topics` empty to run a small example search.

#### Example input

```json
{
  "queries": ["electric vehicles", "\"battery recycling\""],
  "topics": ["technology"],
  "language": "en",
  "country": "us",
  "timeRange": "7d",
  "maxResultsPerQuery": 50
}
```

### Output

One dataset item per article:

```json
{
  "position": 2,
  "title": "After Welcoming China's Electric Vehicles, This Country Is Paying the Price",
  "url": "https://www.nytimes.com/2026/10/16/business/china-ev-thailand-cars.html",
  "source": "The New York Times",
  "sourceUrl": "https://www.nytimes.com",
  "publishedAt": "2026-10-16T09:24:44Z",
  "imageUrl": "https://static01.nyt.com/images/2026/10/13/00biz-thailand-evs-33637-cover/00biz-thailand-evs-33637-cover-verticalTwoByThree735-v2.jpg",
  "imageWidth": 452,
  "imageHeight": 678,
  "authors": ["author_a"],
  "googleNewsId": "CBMie0FVX3lxTE5ad3drMEpQTjFSQjNNckptcHdNZktDQWdBTVA1S21lZk1MUUJZUUR3V3RtMUFEamU4bWlmNE5XMS1MUTkxWHRZTkprLUQ0X0paVHBfWUlVOFZOckg4OVYzY3k1aWxCTEZuNUZTeHIwaVNUTE1Bc2Myelg4Zw",
  "googleNewsUrl": "https://news.google.com/read/CBMie0FVX3lxTE5ad3drMEpQTjFSQjNNckptcHdNZktDQWdBTVA1S21lZk1MUUJZUUR3V3RtMUFEamU4bWlmNE5XMS1MUTkxWHRZTkprLUQ0X0paVHBfWUlVOFZOckg4OVYzY3k1aWxCTEZuNUZTeHIwaVNUTE1Bc2Myelg4Zw?hl=en&gl=US&ceid=US%3Aen",
  "query": "electric vehicles",
  "topic": null,
  "language": "en",
  "country": "US"
}
```

`query` is set for items from a search and `topic` for items from a section. Searches or sections that return no articles or cannot be read go to the `ERRORS` record in the run's key-value store, with the reason. They are not billed.

### Pricing

**$1 per 1000 articles** (pay per result) - one dataset item is one article. Failed searches and sections are free.

### Notes

- Google News answers a search with up to about 100 articles and has no further pages. To go further back, run the same search over consecutive date windows (`dateFrom` / `dateTo`).
- Time range and dates filter searches only; sections always show their current stories.
- Metadata only: the scraper returns the article link, not the article text.
- Powered by [ScrapeUnblocker](https://www.scrapeunblocker.com).

# Actor input Schema

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

Keywords to search on Google News (one search each), e.g. 'electric cars'. Google News operators work: "exact phrase", OR, -word, site:reuters.com. Use these or 'Sections' below.

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

Google News sections to read instead of searching: top (top stories), world, nation, business, technology, entertainment, sports, science, health - or a topic id (the 'CAAq...' part of a news.google.com/topics/ link).

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

Language of the Google News edition, e.g. 'en', 'en-GB', 'de', 'fr', 'es', 'pt-BR'.

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

Country of the Google News edition as a 2-letter code, e.g. 'us', 'gb', 'de', 'in'. Together with the language it decides which sources and stories you get.

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

Searches only: articles from the last period, e.g. '1h', '12h', '1d', '7d', '2w', '1m', '1y'. Leave empty for any time.

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

Searches only: articles published after this date (YYYY-MM-DD).

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

Searches only: articles published before this date (YYYY-MM-DD).

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

How many articles to keep from each search or section (1-250). Google News returns up to about 100 articles for a search and about 250 for a section.

## `concurrency` (type: `integer`):

How many searches or sections to read at the same time (1-5).

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "language": "en",
  "country": "us",
  "maxResultsPerQuery": 100,
  "concurrency": 3
}
```

# Actor output Schema

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

One item per article with title, publisher URL, source, publish time, image and authors

## `errors` (type: `string`):

Searches or sections that returned no articles or could not be read, with the reason (not billed)

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeunblocker/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"] }

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

```

## MCP server setup

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