# Google News Scraper (Search, Top Stories, Any Country) (`pagecraft/google-news-scraper`) Actor

Scrape Google News search results and top stories for any keyword, country and language: headline, publisher, publisher site, date and link. Time filters, dedupe, no login.

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

## Pricing

from $1.50 / 1,000 article scrapeds

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 for Any Keyword, Country and Language

Scrape **Google News** search results and **top stories** for any keyword, in any country edition and language. Each article comes back with its headline, publisher, publisher website, publish time and Google News link, ready for monitoring, dashboards and AI pipelines.

### What it does

- Searches Google News the way a reader would, using Google's public news feeds (no login, no browser).
- Works in **any edition**: set the country (GB, US, IE, AU, DE...) and language.
- Supports Google News search operators: `"exact phrase"`, `site:bbc.co.uk`, `-exclude`.
- **Time filter**: past hour, 12 hours, day, week or month.
- **Removes duplicates** across searches and lets you exclude publishers.
- Splits the publisher name out of the headline, so titles are clean.

### Who it's for

- **PR and comms teams** tracking coverage of a brand, a spokesperson or a competitor.
- **Analysts and investors** following companies, sectors and markets.
- **AI and newsletter pipelines** that need fresh headlines on a schedule.

### Input

| Field | What to enter |
| --- | --- |
| Search queries | Keywords or phrases, one per line |
| Also get top stories | Adds the edition's current top stories |
| Country / Language | e.g. `GB` and `en` |
| Published within | Any time, past hour, 12 hours, day, week or month |
| Maximum articles per search | Up to 100 (Google News' own limit per search) |
| Exclude publishers | e.g. `dailymail.co.uk` |
| Remove duplicates across searches | On by default |

```json
{ "queries": ["\"Bank of England\"", "UK inflation"], "country": "GB", "language": "en", "timeRange": "1d" }
```

### Output

```json
{
  "query": "UK inflation", "position": 1,
  "title": "Inflation falls for third month in a row", "source": "BBC", "sourceUrl": "https://www.bbc.co.uk",
  "publishedAt": "2026-10-27T08:00:00.000Z",
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMi...?oc=5", "edition": "GB:en"
}
```

### Pricing

| Event | When it is charged | Price per 1,000 (Free / Bronze / Silver / Gold plan) |
| --- | --- | --- |
| Search run | Each search (or top stories request), including ones with no results. | $1.50 on every plan |
| Article scraped | Each article returned in the dataset. | $2 / $1.80 / $1.60 / $1.50 |

Example: 20 searches returning 50 articles each on the Free plan costs 20 × $0.0015 + 1,000 × $0.002 = $2.03.

### Notes and limits

- Google News returns up to about 100 articles per search. For more, split a topic into narrower searches or shorter time windows and schedule the run.
- Links are Google News links, which open the publisher's article in a browser.
- Results follow what Google shows for that edition, so they can differ from a personalised Google News page.

### More Pagecraft tools

- [Telegram Channel Scraper](https://apify.com/pagecraft/telegram-channel-scraper): posts, views and reactions from any public Telegram channel.
- [Hacker News Scraper](https://apify.com/pagecraft/hacker-news-scraper): stories and comments from Hacker News.
- [RSS Feed Reader](https://apify.com/pagecraft/rss-feed-reader): any RSS, Atom or JSON feed as clean data.

# Actor input Schema

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

Keywords or phrases, one per line. Google News operators work, e.g. "exact phrase", site:bbc.co.uk, -exclude.

## `topStories` (type: `boolean`):

Add the edition's current top stories as an extra search.

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

Two-letter country code of the Google News edition, e.g. US, GB, IE, AU, DE.

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

Language code, e.g. en, de, fr, es.

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

Only articles published within this time.

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

Google News returns up to about 100 articles per search.

## `excludeSources` (type: `array`):

Skip articles from these publishers or sites, e.g. dailymail.co.uk.

## `deduplicate` (type: `boolean`):

The same story often appears in several searches; keep it once.

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

Optional. Apify datacenter proxies or your own proxies. Residential proxies are not supported.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence",
    "UK economy"
  ],
  "topStories": false,
  "country": "GB",
  "language": "en",
  "timeRange": "any",
  "maxArticlesPerQuery": 20,
  "deduplicate": true
}
```

# Actor output Schema

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

No description

# 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",
        "UK economy"
    ],
    "country": "GB",
    "maxArticlesPerQuery": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("pagecraft/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",
        "UK economy",
    ],
    "country": "GB",
    "maxArticlesPerQuery": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("pagecraft/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",
    "UK economy"
  ],
  "country": "GB",
  "maxArticlesPerQuery": 20
}' |
apify call pagecraft/google-news-scraper --silent --output-dataset

```

## MCP server setup

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