# Google News Scraper | Articles by Keyword & Topic (`genial_candlestand/google-news-articles-search-scraper`) Actor

Get Google News articles by keyword, topic, place or top stories: title, source, publish time, position, related coverage and Google News link. 86 editions (country + language), date ranges, many queries per run, no login.

- **URL**: https://apify.com/genial_candlestand/google-news-articles-search-scraper.md
- **Developed by:** [Flowo](https://apify.com/genial_candlestand) (community)
- **Categories:** News, Automation, SEO tools
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.54 / 1,000 news 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 by Keyword, Topic, Country & Language

![Google News Scraper | Articles by Keyword & Topic](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/google-news-news-articles-search-banner-74b3a8dc.png)

This actor returns Google News articles as flat rows: `title`, `source` (publisher), `sourceUrl`, `publishedAt`, `position` in the feed and the Google News `url`, plus the story cluster in `relatedArticles` and `relatedCount`. Search by keyword (with Google operators), by topic section, topic page or local place, or take the top stories — in any of the Google News editions (country + language). No login or API key.

### What it does

- Searches Google News by **keyword** with operators (`"exact phrase"`, `OR`, `-word`, `site:`, `intitle:`, `source:`, `when:`, `after:`/`before:`).
- Reads the 8 **topic sections** (World, Nation, Business, Technology, Entertainment, Sports, Science, Health), any Google News **topic page** (id starting with `CAAq` or URL), **local news** by place name, and the **top stories** of an edition.
- Works per **edition**: `country` (ISO 3166-1, e.g. US, GB, DE, IN, BR, JP) and `language` (e.g. en, de, es, pt-BR, zh-Hant).
- Filters by **time range** (past hour, 24 hours, 7 days, 30 days, year) or by **Date from / Date to**. With a date range each keyword is split into one search per day, so you get far more than the ~100 articles a single search returns.
- Returns the **related coverage** of a story (other articles in the same cluster) in `relatedArticles` where Google groups them.
- Optional paid add-ons: `publisherUrl` (the real article URL on the publisher's site) and `imageUrl`, `description`, `author` from the publisher's page.

### How to use

![How Google News Scraper works: Builds a Google News feed request per keyword, topic, place or top stories; Sets the chosen country and language edition; Splits date ranges into one search per day for ](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/google-news-news-articles-search-how-0738d768.png)

1. Open the actor in Apify Console and add keywords, topics, topic pages or places. With none of these, the top stories of the edition are fetched.
2. Choose Country and Language (default US / the country's main language).
3. Optionally set a time range or dates, and set Max articles.
4. Run it and download the dataset as JSON, CSV, Excel or HTML, or read it through the API.

Example input:

```json
{ "queries": ["tesla"], "country": "US", "language": "en", "timeRange": "7d", "maxItems": 100 }
```

### Pricing

Pay per event:

| Event | Price |
|---|---|
| News article (one dataset row) | $0.0022 (about $2.20 per 1,000 articles) |
| Add-on: publisher URL, per article where decoding succeeds | $0.0008 |
| Add-on: image, description, author, per article where at least one is found | $0.0008 |
| Actor start | $0.00005 |

Searches that return nothing are free. `maxItems` caps the number of paid articles in a run.

### Input

![Google News Scraper input example: Search keywords, Topic sections, Top stories, Country (edition), Time range, Max articles, Max articles per keyword / topic / place](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/google-news-news-articles-search-input-47ee0f69.png)

| Field | Meaning |
|---|---|
| `queries` | Keywords, one per line; Google operators work |
| `topics` | Topic sections: WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH |
| `topicIds` | Google News topic page ids or URLs |
| `locations` | Place names for local news, in the edition's country |
| `topStories` | Also fetch the edition's top stories |
| `country`, `language` | The Google News edition |
| `timeRange` | any, 1h, 1d, 7d, 30d, 1y (not together with dates) |
| `dateFrom`, `dateTo` | Day range, YYYY-MM-DD |
| `maxItems`, `maxItemsPerQuery` | Limits for the run and per keyword/topic/place |
| `decodeUrls`, `fetchArticleDetails` | Paid add-ons |
| `proxyConfiguration` | Proxy; the default Apify datacenter proxy works |

### Output

![Google News Scraper output example: Title, Source, Published, Query, Edition, Position](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/google-news-news-articles-search-output-5f665915.png)

One row is one article in one feed. Fields: `id`, `title`, `url`, `publishedAt`, `source`, `sourceUrl`, `position`, `relatedCount`, `relatedArticles` (`url`, `title`, `source`), `feedType` (search, topic, topicId, location, topStories), `query`, `topic`, `location`, `country`, `language`, `edition`, `publisherUrl`, `imageUrl`, `description`, `author`, `scrapedAt`. Values that are not available are `null`; `relatedArticles` is `[]` when the article has no cluster. The add-on fields are `null` unless the add-on is on.

Real example (search for `tesla`, US:en):

```json
{
  "title": "BMW is taking on Tesla’s FSD with urban driver assist starting in 2027",
  "url": "https://news.google.com/rss/articles/CBMiiwFBVV95cUxQczBw...?oc=5",
  "publishedAt": "2026-11-02T20:03:52.000Z",
  "source": "The Verge",
  "sourceUrl": "https://www.theverge.com",
  "position": 1,
  "relatedCount": 0,
  "relatedArticles": [],
  "feedType": "search",
  "query": "tesla",
  "topic": null,
  "location": null,
  "country": "US",
  "language": "en",
  "edition": "US:en",
  "publisherUrl": null,
  "imageUrl": null,
  "description": null,
  "author": null,
  "scrapedAt": "2026-11-03T14:04:34.583Z"
}
```

Other rows in the same run have clusters, e.g. a Reuters article with `relatedCount: 2` and two entries in `relatedArticles`.

### Use cases

- Media and brand monitoring: track mentions of a company or product by keyword and country.
- PR and competitor tracking with `site:` and `source:` operators.
- Market and trading research: headlines with publish time per day over a date range.
- Research datasets and news archives across languages and editions.
- Feeding AI agents or RAG pipelines with fresh headlines, optionally with publisher URL, description and author.

### Limitations

- One keyword search returns up to about 100 articles; topic and top-stories feeds return roughly 34–70. Use Date from / Date to to get more for keywords. Topic feeds cannot be date-filtered by Google, so the time range filters them by publish time.
- Google News links in `url` redirect to the publisher; the real URL needs the Publisher URL add-on (slower, one Google page per article).
- Only editions that Google offers work; an unsupported country is an input error, and a language must exist for the country (for example DE: de only).
- Places outside the edition's country or unknown to Google give no articles.
- Result content depends on what Google News shows at the time of the run.

### FAQ

**Do I need a login or API key?** No.

**Is it legal?** The actor reads public Google News feeds and returns headlines, publishers, times and links. Google's terms describe the feed as meant for personal feed readers, so check them and the copyright of the publishers' content for your use case; the actor does not return full article texts. Do not use it to process personal data without a legal basis.

**Why are there fewer than 100 articles for my keyword?** Google returns what it has for that search and time window.

**Can I get articles from several countries?** Run once per edition (country + language); each row carries `country`, `language` and `edition`.

### Also useful

- [Google Trends Trending Now Scraper](https://apify.com/genial_candlestand/google-trending-now-scraper) — find what is trending by country, with related news articles
- [Google Trends Scraper](https://apify.com/genial_candlestand/google-trends-scraper) — add search interest over time and by region for your news keywords
- [SEC EDGAR Filings Search](https://apify.com/genial_candlestand/sec-edgar-filings-search) — pair company news with official filings: form type, date and links

# Actor input Schema

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

Keywords to search on Google News, one per line. Operators work: "exact phrase", OR, -word, site:reuters.com, intitle:, source:, when:7d, after:YYYY-MM-DD before:YYYY-MM-DD. Do not put when:/after:/before: in a query when Time range or the dates below are set. One search gives up to ~100 articles; set Date from/Date to for more.

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

Google News sections of the chosen edition (50–70 articles each, with related coverage).

## `topicIds` (type: `array`):

Any Google News topic page: an id starting with CAAq, or a URL like https://news.google.com/topics/CAAq...; the hl/gl/ceid of the URL are ignored, the edition comes from Country and Language.

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

Local news by place name, e.g. Chicago or München. Use a place in the edition's country and its local spelling; places outside that country or unknown to Google give no articles (a warning).

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

Also fetch the top stories (home page) of the edition. They are fetched automatically when no keywords, topics, topic pages or places are given.

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

Google News edition country, ISO 3166-1 alpha-2: US, GB, DE, FR, IN, BR, JP, MX, ... (UK is accepted as GB). 71 countries have an edition; others (e.g. DK) are an input error that lists the supported ones.

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

Edition language, ISO 639-1 (en, de, es, pt, zh, ...) or Google's code (es-419, pt-BR, zh-Hant). Only languages Google offers for the country work, e.g. US: en, es; IN: en, hi, bn, ta, te, ml, mr, gu; CA: en, fr; DE: de only. Empty = the country's main language.

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

Only articles from the last hour/day/week/month/year. Searches use Google's when: filter; topics, topic pages, places and top stories are filtered by publish time. Not together with Date from/Date to.

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

Only articles published on or after this day (YYYY-MM-DD). Each search is split into one search per day, so you get far more than 100 articles per keyword. Date to defaults to today. Not together with Time range.

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

Only articles published on or before this day (YYYY-MM-DD). Needs Date from; a future day is treated as today.

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

Maximum number of articles in the whole run (each article is one paid result).

## `maxItemsPerQuery` (type: `integer`):

Maximum articles for each keyword, topic, topic page, place and the top stories (a keyword with a date range counts as one). Empty = no limit.

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

Add publisherUrl, the real article URL on the publisher's site, next to the Google News link. Charged per decoded article; slower (one Google page per article).

## `fetchArticleDetails` (type: `boolean`):

Open each article on the publisher's site and add imageUrl, description and author. Turns on Publisher URL (needed to find the page). Charged per article with details; slower.

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

Proxy settings. The default Apify datacenter proxy works. With an add-on on, a residential proxy is replaced by datacenter (article pages are heavy).

## Actor input object example

```json
{
  "queries": [
    "tesla"
  ],
  "topStories": false,
  "country": "US",
  "timeRange": "any",
  "maxItems": 100,
  "decodeUrls": false,
  "fetchArticleDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset with all articles

## `overview` (type: `string`):

Overview table of the articles

# 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": [
        "tesla"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("genial_candlestand/google-news-articles-search-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": ["tesla"],
    "maxItems": 100,
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,genial_candlestand/google-news-articles-search-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/lfyWxhxRXnQMK7ppA/builds/9IurTufOM73Anfr3y/openapi.json
