# Google News Scraper - Real Article URLs, Not Redirects (`automia-admin/google-news-scraper`) Actor

Scrape Google News by search query or topic, in any country and language. Returns headline, publisher, publication time and related coverage - plus the publisher real article URL decoded from Google encrypted redirect link. No browser, no proxy, no API key.

- **URL**: https://apify.com/automia-admin/google-news-scraper.md
- **Developed by:** [Andrés Santiso](https://apify.com/automia-admin) (community)
- **Categories:** News, AI, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google News Scraper — headlines with the real article URL

Scrape Google News by **search query** or by **topic**, for any country and language, and get
back clean records: headline, publisher, publication time, related coverage — and, optionally,
**the publisher's real article URL** instead of Google's encrypted redirect.

No browser, no proxy, no API key. Runs in about a second.

### The problem this solves

Every Google News feed hands you a link like this:

```
https://news.google.com/rss/articles/CBMi_AFBVV95cUxOWlBTLUU3b2YxdmZlMkx5VVEwamFhelN4OHNmWFNy...
```

That is a ~720-character encrypted redirect. You cannot tell which site it points to, you cannot
deduplicate by domain, you cannot filter by publisher, and you cannot hand it to a scraper or an
LLM to read the article. Most Google News actors stop there and leave you with that string.

Turn on **Resolve publisher URLs** and you get the real one:

```
https://www.reuters.com/technology/...
```

### What you get per article

| Field | Description |
|---|---|
| `title` | Headline, with the redundant " - Publisher" suffix removed |
| `source` | Publisher name |
| `sourceUrl` | Publisher home page |
| `publishedAt` | Publication time, ISO 8601 UTC |
| `articleUrl` | **The publisher's real URL** (when *Resolve publisher URLs* is on) |
| `googleNewsUrl` | The original Google News link |
| `relatedCoverage` | Other outlets covering the same story — headline, publisher and link |
| `scrapedAt` | When this run fetched the feed |

To deduplicate between runs, use `googleNewsUrl`: it is stable for a given article.

`relatedCoverage` is filled on topic feeds, where Google groups the coverage of one story across
outlets. It is empty on search feeds, because Google does not group those.

### Input

| Field | Default | Notes |
|---|---|---|
| `query` | *empty* | Supports Google News operators: `site:`, `-exclusion`, `"exact phrase"`, `OR`. Leave empty to read a topic feed. |
| `topic` | `TOP_STORIES` | `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`. Used only when there is no query. |
| `country` | `US` | Two-letter code: `US`, `GB`, `AR`, `BR`, `DE`, `IN`, … |
| `language` | `en-US` | `en-US`, `es-419`, `pt-BR`, `de`, `fr`, … It has to be a language Google News publishes for that country. |
| `publishedWithin` | `any` | `1h`, `12h`, `1d`, `7d`, `1y`. Searches only. |
| `maxItems` | `50` | Google caps a feed at about 100 articles. `0` means no limit. |
| `resolveArticleUrls` | `false` | Adds `articleUrl`. Costs one extra request per article and is charged separately. |

#### Example — AI news from Argentina in the last 24 hours, with real URLs

```json
{
  "query": "inteligencia artificial",
  "country": "AR",
  "language": "es-419",
  "publishedWithin": "1d",
  "maxItems": 50,
  "resolveArticleUrls": true
}
```

#### Example — technology headlines in Germany

```json
{
  "topic": "TECHNOLOGY",
  "country": "DE",
  "language": "de"
}
```

### Pricing

Pay per event, so you pay for what you get:

- **Actor start** — one small charge per run.
- **Article scraped** — per article returned.
- **Publisher URL resolved** — only when `resolveArticleUrls` is on, and **only for URLs that
  actually came back**. If Google refuses to resolve one, it is left `null` and you are not
  charged for it.

Reading a feed is cheap. Resolving a URL means fetching a page per article, which is why it is
a separate, opt-in charge instead of a higher price for everyone.

### Honest limits

- Google News returns **about 100 articles per feed**, and there is no pagination. For more
  coverage, run several narrower queries instead of one broad one.
- `relatedCoverage` only exists on topic feeds.
- Not every URL resolves. Some articles come from partners whose links Google will not translate;
  those keep `articleUrl: null` and are not charged.
- The feed is what Google publishes for that country/language edition. An unusual combination
  (for example an edition Google does not run) returns nothing — the run says so in the log
  rather than failing silently.

### Notes

Built on the public Google News RSS feeds. No login, no personal data, no scraping of user
profiles: only what Google News publishes openly.

# Actor input Schema

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

What to search for on Google News. Supports Google News operators, e.g. "tesla site:reuters.com", "climate -opinion", ""exact phrase"". Leave empty to get a topic feed instead.

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

Which headlines feed to read when "Search query" is empty.

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

Two-letter country code for the edition, e.g. US, GB, AR, BR, DE, IN.

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

Language code of the edition, e.g. en-US, es-419, pt-BR, de, fr. It must be a language Google News publishes for the chosen country.

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

Only applies to searches. Restricts results to articles published in this window.

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

How many articles to return. Google News caps a feed at about 100 articles. Use 0 for no limit.

## `resolveArticleUrls` (type: `boolean`):

Google News hides the real article link behind an encrypted redirect. Turn this on to get the publisher's actual URL in "articleUrl". It costs one extra request per article and is charged separately, so leave it off if the Google News link is enough for you.

## Actor input object example

```json
{
  "query": "artificial intelligence",
  "topic": "TOP_STORIES",
  "country": "US",
  "language": "en-US",
  "publishedWithin": "any",
  "maxItems": 50,
  "resolveArticleUrls": false
}
```

# 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 = {};

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

# Run the Actor and wait for it to finish
run = client.actor("automia-admin/google-news-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call automia-admin/google-news-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automia-admin/google-news-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/HcgapSy4SEkpyoK1D/builds/wEGiWLFCvxDd3bya4/openapi.json
