# Google News API — Search News by Keyword, Topic & Country (`highbrow_fame/google-news-api`) Actor

Google News headlines as JSON by keyword, topic or publication, any country and language, with title, source, publish date and decoded article URL. Unofficial Google News API.

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

## Pricing

$0.50 / 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 API — Search News by Keyword, Topic & Country

Google News headlines as clean JSON: search any keyword, read any section (World, Business, Technology, …) or paste a topic or publication link from news.google.com, in any country and language. Every article comes with title, publisher, publish time and — the part other feeds skip — the publisher's **real article URL**, decoded from Google's redirect link.

**Try it in 1 minute:** press **Start** with the prefilled input (two queries, US edition, English). You get up to 100 recent articles per query, each with `title`, `url`, `source`, `publishedAt`, in about 10–20 seconds. Price: $0.50 per 1,000 articles; queries that return nothing are free.

**Use it to:**

- Monitor a brand, a competitor, a person in public office or a topic across thousands of publishers at once, in one call.
- Feed an AI agent or a RAG pipeline with fresh headlines and the real article links it can open.
- Build a daily news digest for a country and language Google supports (US, GB, DE, FR, IN, BR, JP, …).
- Pull the headlines of one publication or one Google News topic page by pasting its link.
- Replace a paid news API for headline-level data: no key, no monthly plan, pay per article.

### How it works

The Actor reads Google News' public RSS feeds — the same feeds any feed reader can subscribe to — for each query or topic you give, in the edition set by **Country** and **Language**. Google does not expose article links directly; its feeds carry `news.google.com/rss/articles/…` redirects. The Actor decodes them: most are decoded locally from the link itself, the newer ones through Google's own link-resolution endpoint (one small request per article). When a link cannot be decoded, the Google link is kept and `urlDecoded` is `false`, so you always have something to open.

No HTML of Google is scraped, no login, no cookies. The first request for each feed goes out directly; the proxy is used only to try again after a network error or a refusal.

### Input

| Field | Required | What it does |
|---|---|---|
| `queries` | one of queries/topics | Keywords to search, one per line. Google syntax works: `"exact phrase"`, `site:reuters.com`, `after:2026-10-01`. |
| `topics` | one of queries/topics | Section names `TOP`, `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SCIENCE`, `SPORTS`, `HEALTH`, or links copied from news.google.com (topic, publication, search). |
| `country` | no | Two-letter edition country, default `US`. |
| `language` | no | Edition language, default `en` (`de`, `fr`, `es`, `pt-BR`, `hi`, …). |
| `maxItems` | no | Articles per query or topic, default 100 (Google's feed maximum). |
| `publishedSince` | no | `YYYY-MM-DD`: skip older articles (free). |
| `decodeUrls` | no | Resolve the publisher's real URL (default on). |
| `maxConcurrency`, `proxyConfiguration` | no | Speed and proxy; the defaults work. |

### Output

One record per article, plus one free record per query or topic that gave nothing (`status` `NO_RESULTS`, `NOT_FOUND`, `INVALID_INPUT` or `FAILED` with an `error`).

| Field | What it is |
|---|---|
| `title` | headline, without the trailing publisher name |
| `url` | the publisher's article URL (or the Google link when decoding failed) |
| `urlDecoded` | `true` when `url` is the publisher's address |
| `googleNewsUrl` | the original news.google.com redirect link |
| `source`, `sourceUrl` | publisher name and website |
| `publishedAt` | ISO 8601 publish time |
| `snippet` | short description when the feed carries one (Google News usually does not) |
| `input`, `query` / `topic`, `position` | what you gave and the article's place in the feed |
| `country`, `language` | the edition that was searched |
| `status`, `error`, `scrapedAt` | `OK` for a delivered article; otherwise why the input gave nothing |

#### Example

```json
{
  "input": "artificial intelligence",
  "query": "artificial intelligence",
  "position": 1,
  "title": "City council approves new AI rules for public offices",
  "url": "https://www.example.com/news/ai-rules-2026",
  "urlDecoded": true,
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMiKmh0dHBzOi8vd3d3LmV4YW1wbGUuY29tL25ld3MvYWktcnVsZXMtMjAyNtIBAA?oc=5",
  "source": "Example Times",
  "sourceUrl": "https://www.example.com",
  "publishedAt": "2026-10-19T09:15:00.000Z",
  "snippet": null,
  "country": "US",
  "language": "en",
  "status": "OK",
  "scrapedAt": "2026-10-19T11:40:12.000Z"
}
```

### Pricing

You pay **per article delivered** — see the price on this page. Queries and topics without results, invalid inputs and failed fetches are free. Keep the bill predictable with **Max articles per query** or the run's **Maximum charge**.

### FAQ

**Is this an official API?** No, it's an unofficial API built on public pages — Google News' public RSS feeds.

**How many articles can one query return?** Google News caps each feed at about 100 articles. For more, split the search: by `after:`/`before:` dates, by `site:` publisher, or by country edition.

**Why is `urlDecoded` false for some articles?** Google's newest redirect links can only be resolved through its link endpoint, which occasionally refuses or times out. The Google link still opens the article in a browser; run again later for the rest.

**Does it return the article text?** No — headline, source, date and link. Pass the `url` values to an article extractor to get the full text.

**Can I get only new articles on a schedule?** Yes: run it hourly or daily as a task with **Published since** set to yesterday, or plug it into Make, Zapier or n8n. It also works from the Apify API and from AI agents through the Apify MCP server.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

### Related Actors

- [RSS & Atom Feed Reader](https://apify.com/highbrow_fame/rss-feed-reader) — any feed or website as one clean list
- [Hacker News Scraper](https://apify.com/highbrow_fame/hacker-news-stories) — stories, comments and search
- [AI Brand Monitor](https://apify.com/highbrow_fame/ai-search-visibility-tracker) — track your brand in ChatGPT and Perplexity answers
- [News Search API](https://apify.com/highbrow_fame/news-search-api) — news by keyword with date range and full text
- [Article Extractor API](https://apify.com/highbrow_fame/article-extractor-api) — title, author, date and full text of any article

# Actor input Schema

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

Keywords to search Google News for, one per line. Google search syntax works: quotes for exact phrases, site:reuters.com for one publisher, after:2026-10-01 for a date.

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

Optional. Section names — TOP, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SCIENCE, SPORTS, HEALTH — or links copied from news.google.com (a topic, a publication, a search). One per line.

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

Two-letter country code of the Google News edition: US, GB, DE, FR, IN, BR, …

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

Language code of the edition: en, de, fr, es, pt-BR, hi, …

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

Stops each query or topic after this many articles. Google News returns at most about 100 per feed.

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

Optional, YYYY-MM-DD: skip articles published before this day (free).

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

Turn the news.google.com redirect links into the publisher's real article URL. Costs one or two extra requests per article; when a link cannot be decoded the Google link is kept and urlDecoded is false.

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

How many queries or topics to read at the same time.

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

Used only to try again after a network error or a refusal: the first try goes out directly.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence",
    "climate change"
  ],
  "topics": [],
  "country": "US",
  "language": "en",
  "maxItems": 100,
  "decodeUrls": true,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every result as a JSON record, with a status for each input.

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

The same records as CSV, for a spreadsheet.

# 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",
        "climate change"
    ],
    "topics": [],
    "country": "US",
    "language": "en",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/google-news-api").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",
        "climate change",
    ],
    "topics": [],
    "country": "US",
    "language": "en",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/google-news-api").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",
    "climate change"
  ],
  "topics": [],
  "country": "US",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/google-news-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,highbrow_fame/google-news-api"
        }
    }
}
```

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/5hFCFFFVJG8iJKsq4/builds/RvAWOmWhTuGgBTzhB/openapi.json
