# Google News Scraper API - Real Article URLs, Any Country (`victorrodi/google-news-scraper-api`) Actor

Google News articles as JSON with the REAL publisher URL (decoded). Searches with operators (site:, intitle:, dates), topic sections, top stories, any language and country, related coverage. Fast, no browser.

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

## Pricing

from $1.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.
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 & API — real article URLs, any country, no browser

**Get Google News articles as clean JSON, CSV or Excel — with the real publisher URL, not the `news.google.com` redirect.** Search any keyword, follow whole topic sections or the top stories, in any language and country. This Google News scraper reads Google News feeds directly and decodes every link — no headless browser, no API key — so runs are fast and cost a fraction of a cent per article.

✅ **Real article URLs**: Google's `news.google.com/rss/articles/CBMi…` links decoded to the publisher's page
✅ **Search with Google News operators**: `"exact phrase"`, `OR`, `-exclude`, `site:reuters.com`, `intitle:`, `after:` / `before:` dates
✅ **Topic sections**: World, Nation, Business, Technology, Entertainment, Sports, Science, Health
✅ **Top stories** of any edition
✅ **Any language and country**: en-US, en-GB, pt-PT, pt-BR, fr-FR, de-DE, es-ES, it-IT, ja-JP… several in one run
✅ **Time filters**: past hour, 24 hours, 7 days, 30 days, year
✅ **Related coverage**: other outlets covering the same story
✅ Title, source, source website, publication date (ISO), rank — up to 100 articles per search

***

### 🚀 Why this Google News API is different

| | This Actor | Typical Google News scrapers |
|---|---|---|
| Real publisher URLs | **Yes, decoded** | Often only `news.google.com` redirects |
| Several countries/languages per run | **Yes** | One per run |
| Topics + top stories + searches in one run | **Yes** | Usually searches only |
| Related coverage of the same story | **Yes** | No |
| Browser needed | **No** — 48 articles with decoded URLs in ~30 s | Slow headless Chrome |
| Blocking handling | Session retries, new IPs, **automatic residential fallback** | Fails on cloud IPs |

***

### 💡 What can you do with Google News data?

- **Media monitoring & PR**: track every mention of your brand, CEO, product or competitors, in every country.
- **AI agents, RAG and LLM apps**: feed fresh news (with the real article URL to read) into ChatGPT, Claude, LangChain or n8n.
- **Finance & trading**: news signals for stocks, crypto and commodities; `when:1h` searches for breaking news.
- **SEO & content**: find trending stories, news angles and publishers covering your niche.
- **Market & competitor research**: product launches, funding rounds, regulation, industry news.
- **Newsletters & alerts**: schedule a run every hour and send new articles to Slack, email or Google Sheets.
- **Research & data science**: build news datasets by topic, language and date for analysis.

***

### 🛠️ How to scrape Google News (3 steps)

1. **Add searches** (one per line), **topic sections** or **top stories**.
2. **Choose editions** (e.g. `en-US`, `pt-PT`) and a **time range**.
3. **Click Start** and download your dataset as **JSON, CSV, Excel, XML or HTML**, or fetch it through the API.

***

### 📥 Input example

```json
{
  "queries": ["\"artificial intelligence\" regulation", "site:reuters.com tesla"],
  "topics": ["BUSINESS", "TECHNOLOGY"],
  "topStories": true,
  "editions": ["en-US", "en-GB"],
  "timeframe": "1d",
  "maxArticlesPerFeed": 50,
  "decodeUrls": true
}
```

### 📤 Output example

```json
{
  "position": 1,
  "title": "Pokémon Happy Meals Are Coming to McDonald's in an Exciting New Way",
  "source": "Pokemon.com",
  "sourceUrl": "https://www.pokemon.com",
  "publishedAt": "2026-10-29T14:04:41+00:00",
  "url": "https://www.pokemon.com/us/news/pokemon-happy-meals-are-coming-to-mcdonalds-in-an-exciting-new-way-",
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMi…",
  "relatedCoverage": [
    { "title": "McDonald's Pokémon cards 2026: set list and release dates", "source": "VICE", "googleNewsUrl": "https://news.google.com/rss/articles/CBMi…" }
  ],
  "feedType": "search",
  "feed": "pokemon cards",
  "edition": "en-US"
}
```

***

### ⚙️ Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `queries` | array | `["artificial intelligence"]` | One search per line. Google News operators work: "exact phrase", OR, -exclude, site:reuters.com, intitle:bitcoin, after:2026-01-01, before:2026-06-30. |
| `topics` | array | — | Headlines of whole Google News sections, in each edition below. |
| `topStories` | boolean | `false` | Also get the Top stories page of each edition. |
| `editions` | array | `["en-US"]` | Google News editions to search, e.g. en-US, en-GB, pt-PT, pt-BR, fr-FR, de-DE, es-ES, it-IT, ja-JP. Every query and topic runs in each edition. |
| `timeframe` | string | — | Only articles published in this period. Use after:/before: in the query for exact dates. Values: \`\`, `1h`, `1d`, `7d`, `30d`, `1y`. |
| `maxArticlesPerFeed` | integer | `50` | Google News returns up to 100 articles per search or section. Lower it to control cost. |
| `decodeUrls` | boolean | `true` | Replace Google News redirect links (news.google.com/rss/articles/CBMi...) with the real article URL on the publisher's site. |
| `proxyConfiguration`, `maxRetries` | object, integer | Apify Proxy, auto | Proxy and retries; the defaults work for most runs. |

### 📋 Output fields

| Field | Type | Description |
|---|---|---|
| `position` | integer | Rank of the article in the feed |
| `title` | string | Headline, without the source suffix |
| `source` | string | Publisher name |
| `sourceUrl` | string | Publisher home page |
| `publishedAt` | string | Publication time, ISO 8601 UTC |
| `googleNewsUrl` | string | Google News link of the article |
| `url` | string | Decoded article URL on the publisher's site |
| `relatedCoverage` | array | Other articles about the same story |
| `feedType` | string | search, topic or top |
| `feed` | string | Search query, topic name or Top stories |
| `edition` | string | Edition language-country, e.g. en-US |

Export as JSON, CSV, Excel, XML or HTML, or read it through the API.

***

### 💰 Pricing — pay only for articles

| What you run | Results | Cost (free plan) |
|---|---|---|
| 1 search, top 20 articles | 20 | $0.06 |
| 5 searches × 50 articles | 250 | $0.75 |
| Top stories of 3 countries | ~100 | $0.30 |
| Hourly brand monitoring (10 new articles/hour) | ~7,200/month | ~$21.60/month |

Higher Apify plans pay less: $0.0025 (Bronze), $0.002 (Silver), $0.0015 (Gold and above). Platform usage and proxies are **included**. Set a **maximum cost per run** and the Actor stops cleanly when it is reached. Failed searches are never charged.

***

### 🔌 Use the Google News API from your code

**Python**

```python
from apify_client import ApifyClient  # pip install "apify-client>=3"

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("victorrodi/google-news-scraper-api").call(
    run_input={"queries": ["nvidia earnings"], "timeframe": "1d", "maxArticlesPerFeed": 20}
)
for article in client.dataset(run.default_dataset_id).iterate_items():
    print(article["publishedAt"], article["source"], article["title"], article["url"])
```

**JavaScript / Node.js**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('victorrodi/google-news-scraper-api').call({
  topics: ['TECHNOLOGY'],
  editions: ['en-US', 'fr-FR'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((a) => console.log(a.edition, a.title, a.url));
```

**cURL** (run and get the results in one call)

```bash
curl -X POST "https://api.apify.com/v2/acts/victorrodi~google-news-scraper-api/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"queries": ["bitcoin"], "timeframe": "1h", "maxArticlesPerFeed": 10}'
```

Also works with **Make, Zapier, n8n, Google Sheets, Slack, LangChain** and **MCP / AI agents** through Apify integrations.

#### 🤖 Use it from AI agents (Claude, ChatGPT, Cursor…)

This Actor is available to AI assistants through the **[Apify MCP server](https://mcp.apify.com)**. Add it with `--actors victorrodi/google-news-scraper-api`, then ask:

> *"What does the press say about Nvidia today? Use the Google News scraper and summarize the 10 latest articles with their links."*

> *"List today's top business stories in Portugal and Brazil."*

***

### 🛡️ Reliability

- Requests are paced and retried on the same session first, then with a **new IP** and exponential backoff.
- If Google keeps blocking, the Actor **switches to residential IPs automatically**.
- Works from any region: Google's cookie consent wall is handled.
- One failing search never stops the run; every run writes a `RUN_SUMMARY` record (articles, decoded URLs, failed feeds, retries).

More examples and docs for all our Actors: **[trendpulse-scrapers](https://github.com/Vicshock/trendpulse-scrapers)**.

***

### 📌 Tips

- Google News returns **at most 100 articles per search**: split broad topics into several precise searches (or use `after:`/`before:` date windows) to collect more.
- Use `site:` to follow one publisher and `intitle:` for headlines only.
- `NATION` is the national news section of each edition (e.g. Portugal for `pt-PT`).
- Turn **decodeUrls** off if you only need titles and sources: runs are faster.

***

### ❓ FAQ

**Is there an official Google News API?** No. Google retired its News API years ago; this Actor reads the public Google News feeds.

**Why are Google News links decoded?** Google News feeds only give `news.google.com/rss/articles/…` redirect links. The Actor resolves them to the article on the publisher's site so you can read, store or summarize it directly.

**Which countries and languages are supported?** Every Google News edition: use the `language-COUNTRY` code (en-US, en-IN, pt-BR, es-MX, de-DE, ja-JP…).

**Do I get the full article text?** You get the title, source, date, rank, related coverage and the real URL. Use the URL with any article extractor (e.g. Apify's Website Content Crawler) for the full text.

**Is scraping Google News legal?** The Actor collects public headlines, sources and links — no personal data. Respect publishers' copyrights and the terms and laws that apply to you.

***

### 💬 Support

Missing a field or found an issue? Open an issue in the **Issues** tab — it is answered fast. Feature requests are welcome.

# Actor input Schema

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

One search per line. Google News operators work: "exact phrase", OR, -exclude, site:reuters.com, intitle:bitcoin, after:2026-01-01, before:2026-06-30.

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

Headlines of whole Google News sections, in each edition below.

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

Also get the Top stories page of each edition.

## `editions` (type: `array`):

Google News editions to search, e.g. en-US, en-GB, pt-PT, pt-BR, fr-FR, de-DE, es-ES, it-IT, ja-JP. Every query and topic runs in each edition.

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

Only articles published in this period. Use after:/before: in the query for exact dates.

## `maxArticlesPerFeed` (type: `integer`):

Google News returns up to 100 articles per search or section. Lower it to control cost.

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

Replace Google News redirect links (news.google.com/rss/articles/CBMi...) with the real article URL on the publisher's site.

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

Apify Proxy is used by default; the Actor switches to residential IPs automatically if Google starts blocking.

## `maxRetries` (type: `integer`):

Retries per request with a new IP and exponential backoff.

## `debugLog` (type: `boolean`):

Log every request (for troubleshooting).

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence",
    "site:reuters.com tesla"
  ],
  "topics": [],
  "topStories": false,
  "editions": [
    "en-US"
  ],
  "timeframe": "",
  "maxArticlesPerFeed": 50,
  "decodeUrls": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxRetries": 6,
  "debugLog": false
}
```

# Actor output Schema

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

No description

## `summary` (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",
        "site:reuters.com tesla"
    ],
    "editions": [
        "en-US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("victorrodi/google-news-scraper-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",
        "site:reuters.com tesla",
    ],
    "editions": ["en-US"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("victorrodi/google-news-scraper-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",
    "site:reuters.com tesla"
  ],
  "editions": [
    "en-US"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call victorrodi/google-news-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,victorrodi/google-news-scraper-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/pRUNFT8HZGBTEH3JX/builds/XY5l3uQPyfL3jA1GE/openapi.json
