# Google News Scraper — Search & Topic Headlines (`haketa/google-news-scraper`) Actor

Scrape Google News by keyword search or topic feed, for any language and country. Get title, source, publish date and link for every article. Built for media monitoring, brand & competitor tracking, PR and news research. Keyless, no anti-bot.

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

## Pricing

from $2.00 / 1,000 results

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 — Search & Topic Headlines

Pull **Google News** at scale — as clean JSON/CSV/Excel. Search the news for any keyword, or grab a topic's headlines, for **any language and country**. Every article comes with its **title, source, publish date and link**.

**Keyless**, no anti-bot — built for **media monitoring**, brand and competitor tracking, PR, and news research.

***

### What this Actor does

Give it search terms (and/or topics) and a country/language, and it returns the latest matching news articles — one tidy row each:

- **Search the news** — e.g. `tesla earnings`, `"climate policy"`, your brand, a competitor, a person — and get the freshest headlines about it.
- **Topic feeds** — pull Google News sections like `BUSINESS`, `TECHNOLOGY`, `SPORTS`, `WORLD` directly.
- **Any market** — choose the language (`hl`) and country edition (`gl`): US, UK, Germany, Turkey, France and more.
- **Clean fields** — title (with the source suffix stripped), publisher name and site, publish date (ISO), and the article link.

It runs on Google News' public RSS endpoints, so it's fast, keyless and reliable.

***

### Why use it

- **Media monitoring made simple.** Track every mention of a brand, product, person or topic across thousands of publishers — without an expensive media-monitoring subscription.
- **Competitor & market intelligence.** Watch what's being written about competitors and your industry, in any country.
- **PR measurement.** See who's covering your story, from which outlets, and when.
- **News research & datasets.** Build a structured, deduplicated news dataset for analysis, dashboards or an LLM pipeline.
- **Keyless and global.** No API key, no media-API fees — and full language/country control.

***

### Who it's for

- **PR & comms teams** tracking coverage and share of voice.
- **Marketers & brand managers** monitoring brand and competitor mentions.
- **Analysts & researchers** building news datasets by topic, company or market.
- **Journalists** following a beat across many outlets at once.
- **Product & data teams** feeding fresh, structured headlines into dashboards or AI workflows.

***

### Quick start

#### Run it in the console (no code)

1. In **Search queries**, add one per line:

   ```
   tesla earnings
   "artificial intelligence regulation"
   your-brand-name
   ```

2. *(Optional)* Add **Topic feeds** like `BUSINESS` or `TECHNOLOGY`.

3. Set **Language** (`en-US`, `de`, `tr`…) and **Country** (`US`, `GB`, `DE`…).

4. Click **Start**, then export as **JSON, CSV, Excel or HTML**.

Leave queries and topics empty to run a **demo** and see the output shape.

#### Run it via API (Python)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "queries": ["tesla earnings", "artificial intelligence"],
    "topics": ["BUSINESS"],
    "language": "en-US",
    "country": "US",
    "maxItemsPerQuery": 100,
}

run = client.actor("YOUR_USERNAME/google-news-scraper").call(run_input=run_input)

for a in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(a["publishedAt"], "·", a["source"], "·", a["title"])
```

#### Run it via API (JavaScript)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('YOUR_USERNAME/google-news-scraper').call({
    queries: ['tesla earnings'],
    language: 'en-US',
    country: 'US',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((a) => console.log(`${a.source}: ${a.title}`));
```

***

### Input

| Field | Type | Description |
|---|---|---|
| **Search queries** | array | One search per line. Supports Google News search operators (quotes, `OR`, etc.). Empty = demo. |
| **Topic feeds** | array | Optional. Google News sections: `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`. |
| **Language (hl)** | string | Content language, e.g. `en-US`, `en-GB`, `de`, `tr`, `fr`, `es`. Default `en-US`. |
| **Country (gl)** | string | Country edition, e.g. `US`, `GB`, `DE`, `TR`, `FR`. Default `US`. |
| **Max articles per query** | integer | Up to ~100 per feed (Google's limit). Default 100. |
| **Speed (parallel feeds)** | integer | How many feeds to fetch at once. Default 5. |
| **Proxy configuration** | object | Apify Proxy. On by default. |

***

### Output

One record per article:

```json
{
  "type": "search",
  "query": "tesla earnings",
  "title": "Tesla Delivered 486,532 Vehicles in Q3. Here's the Margin Math",
  "source": "Yahoo Finance",
  "sourceUrl": "https://finance.yahoo.com",
  "publishedAt": "2026-10-08T09:17:00.000Z",
  "pubDate": "Thu, 08 Oct 2026 09:17:00 GMT",
  "link": "https://news.google.com/rss/articles/CBMi...",
  "description": "Tesla reported third-quarter deliveries...",
  "language": "en-US",
  "country": "US",
  "scrapedAt": "2026-10-08T14:00:00.000Z"
}
```

| Field | Description |
|---|---|
| `type` | `search` or `topic`. |
| `query` | The search term or topic that produced this article. |
| `title` | Article headline (publisher suffix removed). |
| `source` / `sourceUrl` | Publisher name and website. |
| `publishedAt` / `pubDate` | Publish date in ISO and raw form. |
| `link` | Google News link — opens the article on the publisher's site. |
| `description` | Short snippet / related context. |
| `language` / `country` | The `hl` / `gl` used. |
| `scrapedAt` | ISO timestamp. |

> **About the link:** Google News serves its articles through a `news.google.com` redirect link that opens the real publisher page when clicked. The publisher itself is always available in `source` / `sourceUrl`, so you can group, filter and dedupe by outlet.

***

### Tips & notes

- **Monitor continuously.** Schedule the Actor (e.g. hourly/daily) with your brand and competitor queries to build a running coverage log. Dedupe on `title` + `source`.
- **Go local.** Set `language` + `country` to a specific edition to capture regional coverage — e.g. `de` / `DE`, `tr` / `TR`.
- **Use search operators.** Quotes for exact phrases, `OR` to combine, `-term` to exclude, `site:` to limit to a domain — same operators as Google News search.
- **Topics vs. search.** Topics give you a section's top headlines; search gives you everything about a specific subject. Use both.
- **Freshness.** Google News RSS returns the most recent articles for a query (typically the last days/weeks, up to ~100 items).

***

### Frequently asked questions

**Do I need an API key?**
No. The Actor uses Google News' public RSS endpoints — no key, no account.

**Which countries and languages are supported?**
Any Google News edition — set `language` (`hl`) and `country` (`gl`) to the market you want (US, UK, Germany, Turkey, France, and many more).

**Why is the link a `news.google.com` URL?**
That's how Google News serves articles — the link redirects to the publisher's page when opened. The publisher name and site are always in `source` / `sourceUrl`.

**How many articles per query?**
Up to around 100 — Google News RSS caps each feed there. Use several focused queries to widen coverage.

**Can I track a brand or competitor over time?**
Yes — schedule recurring runs with your queries and append to a dataset to build a coverage timeline.

**Can it feed an LLM / RAG pipeline?**
Absolutely — the clean, structured output (title, source, date) is ideal for summarization, sentiment and news-aware assistants.

***

### Export & integrate

Results are available as **JSON, CSV, Excel, HTML** and via the **Apify API**. Push to **Google Sheets**, a **webhook**, **Make**, **Zapier**, Slack or your database — and **schedule** runs for continuous news monitoring.

# Actor input Schema

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

One search per line — e.g. `tesla earnings`, `"climate policy"`, `apple vision pro`. Each returns the latest matching news with title, source, date and link. Supports Google News search operators. Leave empty (and set no topics) to run a demo.

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

Optional. Pull Google News topic headlines instead of (or alongside) a search. Valid values: WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH.

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

Interface/content language code, e.g. `en-US`, `en-GB`, `de`, `tr`, `fr`, `es`.

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

Two-letter country/edition code, e.g. `US`, `GB`, `DE`, `TR`, `FR`.

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

How many articles to keep per query/topic. Google News returns up to ~100 per feed.

## `maxConcurrency` (type: `integer`):

How many feeds to fetch at once.

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

Apify Proxy. On by default — the feeds are public, but rotation keeps large runs smooth.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence",
    "tesla"
  ],
  "topics": [],
  "language": "en-US",
  "country": "US",
  "maxItemsPerQuery": 100,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

search / topic

## `query` (type: `string`):

Search term or topic

## `title` (type: `string`):

Article headline

## `source` (type: `string`):

Publisher name

## `sourceUrl` (type: `string`):

Publisher site

## `publishedAt` (type: `string`):

ISO publish date

## `pubDate` (type: `string`):

Raw publish date

## `link` (type: `string`):

Google News article link (opens the publisher's page)

## `description` (type: `string`):

Snippet / related

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

hl code

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

gl code

## `scrapedAt` (type: `string`):

Timestamp

# 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",
        "tesla"
    ],
    "topics": [],
    "maxItemsPerQuery": 100,
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/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",
        "tesla",
    ],
    "topics": [],
    "maxItemsPerQuery": 100,
    "maxConcurrency": 5,
}

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

```

## MCP server setup

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