# Google News Scraper + Full Article Text (`kirozhang/google-news-scraper`) Actor

Scrape Google News search results and topic headlines in 56 countries. Get real publisher URLs (no news.google.com redirects), publish dates, sources and optional full article text for AI/RAG, sentiment and media monitoring.

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

## Pricing

from $2.00 / 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

### What does Google News Scraper do?

**Google News Scraper** extracts news articles from [Google News](https://news.google.com) — keyword search results and topic headlines (Top stories, World, Business, Technology, Science, Health, Sports, Entertainment) in **56 country and language editions**.

For every article you get the **real publisher URL** (not a `news.google.com` redirect), title, source, publish date and, optionally, the **full article text**, author, excerpt and main image — ready for AI/RAG pipelines, sentiment analysis, media monitoring and research.

Run it from the Apify Console, call it via API, schedule it hourly or daily, or connect it to Make, Zapier, n8n, Google Sheets, Slack or any AI agent through the Apify MCP server.

### Why use this Google News scraper?

- 🔗 **Real article URLs** — Google News RSS only gives obfuscated `news.google.com/rss/articles/...` links. This Actor resolves them to the original publisher URL for every article.
- 📰 **Full article text on demand** — clean text extracted with Mozilla Readability, plus author, excerpt, image and language. You only pay for text when extraction succeeds.
- 📅 **More than 100 results** — Google News returns at most ~100 articles per search. Set a 7-day, 30-day, 1-year or custom date range and the scraper automatically splits the search into daily windows to collect up to 5,000 articles per query.
- 🌍 **56 editions** — US, UK, India, Germany, France, Japan, Brazil, Mexico, China, Korea, Arabic editions and many more, all in one run.
- 🔎 **Google search operators** — `"exact phrase"`, `site:reuters.com`, `-exclude`, `OR`, `intitle:`.
- 🧹 **Clean, deduplicated data** — duplicates across queries and time windows are removed automatically.
- ⚡ **Fast and cheap** — plain HTTP, no browser, no proxy needed for normal use.

#### Popular use cases

- **Media monitoring & PR** — track mentions of your brand, competitors or executives every hour.
- **Financial news & trading signals** — collect news about tickers and companies for sentiment models.
- **AI / LLM / RAG** — feed fresh, full-text news into summarizers, chatbots and agents.
- **Research & journalism** — build datasets of coverage on a topic over months.
- **SEO & content** — see which outlets rank in Google News for your keywords.

### How to scrape Google News

1. Click **Try for free** / **Start**.
2. Enter one or more **search queries** (e.g. `artificial intelligence`, `site:bloomberg.com oil`) and/or pick **topic feeds**.
3. Choose the **editions** (countries/languages) and a **time range**.
4. Turn on **Extract full article text** if you need the article body.
5. Click **Start** and download results as JSON, CSV, Excel, XML or HTML — or read them via the API.

### Input example

```json
{
    "queries": ["artificial intelligence", "site:reuters.com tesla"],
    "topics": ["BUSINESS"],
    "editions": ["US:en", "GB:en"],
    "timeRange": "7d",
    "maxArticlesPerQuery": 200,
    "decodeUrls": true,
    "extractFullText": true
}
```

| Field | Description |
|---|---|
| `queries` | Search keywords. Google search operators are supported. |
| `topics` | Headline feeds: `TOP`, `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`. |
| `editions` | Country/language editions, e.g. `US:en`, `DE:de`, `JP:ja`, `BR:pt-419`, `CN:zh-Hans`. |
| `timeRange` | `any`, `1h`, `1d`, `7d`, `30d`, `1y`. |
| `dateFrom` / `dateTo` | Custom date range (YYYY-MM-DD). Overrides `timeRange`. |
| `maxArticlesPerQuery` | 1–5,000. Above 100 the search is split into daily windows. |
| `decodeUrls` | Resolve real publisher URLs (default `true`). |
| `extractFullText` | Download and extract full article text (default `false`). |
| `includeRelated` | Include related coverage from other outlets (topic feeds). |
| `deduplicate` | Skip duplicates across queries and windows (default `true`). |

### Output example

```json
{
    "query": "nvidia",
    "topic": null,
    "edition": "US:en",
    "title": "Emerald AI, Google and NVIDIA Launch Alliance to Advance Flexible AI Data Centers",
    "source": "NVIDIA Blog",
    "sourceUrl": "https://blogs.nvidia.com",
    "publishedAt": "2026-09-16T13:07:27.000Z",
    "url": "https://blogs.nvidia.com/blog/ai-energy-management-alliance/",
    "googleNewsUrl": "https://news.google.com/rss/articles/CBMibEFVX3lx...",
    "text": "AI factories are the infrastructure of the intelligence era. ...",
    "textLength": 4218,
    "excerpt": "The AI Energy Management Alliance brings together the full AI and power value chain...",
    "author": "Josh Parker",
    "imageUrl": "https://blogs.nvidia.com/wp-content/uploads/2026/09/aema-main-feature-1280x720.png",
    "siteName": "NVIDIA Blog",
    "lang": "en-US",
    "fullTextError": null,
    "scrapedAt": "2026-09-23T06:05:36.628Z"
}
```

You can download the dataset in JSON, CSV, Excel, XML, HTML or RSS. The Output tab has two views: **Articles** and **Full text**.

#### Data fields

| Field | Description |
|---|---|
| `title` | Article headline (source suffix removed) |
| `source`, `sourceUrl` | Publisher name and homepage |
| `publishedAt` | Publish time (ISO 8601, UTC) |
| `url` | Original publisher article URL |
| `googleNewsUrl`, `articleId` | Google News link and ID |
| `query`, `topic`, `edition` | What produced the result |
| `relatedArticles` | Related coverage from other outlets (title, source, link) |
| `text`, `textLength` | Full article text (when enabled) |
| `excerpt`, `author`, `imageUrl`, `siteName`, `lang` | Article metadata (when full text is enabled) |
| `fullTextError` | Why text could not be extracted (paywall, blocked, etc.) |

### How much does it cost to scrape Google News?

This Actor uses simple **pay-per-result** pricing — you pay only for articles saved to the dataset:

- **Article** (title, source, date, real URL): **$2 per 1,000 articles**
- **Full text** (only when extraction succeeds): **+$2 per 1,000 articles**

Example: 1,000 articles with real URLs cost **$2**; with full text about **$3–4** (paywalled articles are not charged for text). Platform usage is included. You can cap the cost of any run with the *Maximum cost per run* setting — the scraper stops cleanly when the limit is reached. Apify's free plan includes monthly credits, enough for thousands of articles.

### Tips

- Need **more than 100 articles**? Use a 7-day+ time range or a custom date range and raise *Max articles per query*.
- Use `site:` to monitor a specific outlet, e.g. `site:ft.com "interest rates"`.
- For **hourly monitoring**, schedule the Actor with `timeRange: "1h"` or `"1d"` and keep `deduplicate` on.
- Some publishers (e.g. Reuters, WSJ) block text extraction or are paywalled — you still get the headline, date and URL, and you are not charged for the text.
- If you run very large jobs (tens of thousands of articles) and see rate limiting, enable Apify Proxy in *Advanced*.

### FAQ

**Is it legal to scrape Google News?**
This Actor only collects publicly available headlines, links and metadata from Google News feeds, and article text from publicly accessible pages. You are responsible for how you use the data — respect copyright and publishers' terms, especially if you republish full text. Do not use it to collect personal data without a legal basis.

**Why is `text` empty for some articles?**
The publisher blocked the request, requires a subscription, or the page is not a standard article. The `fullTextError` field tells you why.

**Can I get news in other languages?**
Yes — choose any of the 56 editions. Each query runs once per selected edition.

**Can AI agents use it?**
Yes. It works great with the Apify MCP server, LangChain, LlamaIndex, CrewAI, n8n and Make — agents can fetch fresh news with real URLs and full text in one call.

**Something doesn't work or you need a feature?**
Open an issue in the **Issues** tab and describe your input — we check issues regularly and ship fixes quickly. Custom news-monitoring pipelines are available on request.

# Actor input Schema

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

Keywords to search in Google News. Google search operators work, e.g. <code>"exact phrase"</code>, <code>site:reuters.com</code>, <code>-exclude</code>, <code>OR</code>. Leave empty to scrape topic feeds only.

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

Scrape Google News topic headline feeds. Works together with search queries.

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

Google News editions to scrape. Each query/topic runs once per edition.

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

Only return articles published within this period (applies to search queries). Ignored when Date from / Date to are set.

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

Only articles published on or after this date (YYYY-MM-DD). Optional.

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

Only articles published on or before this date (YYYY-MM-DD). Optional.

## `maxArticlesPerQuery` (type: `integer`):

Google News returns up to 100 articles per request. For more, set a time range of 7+ days or a date range — the scraper then splits the search into daily windows (up to 5,000).

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

Convert news.google.com redirect links into the original publisher URLs.

## `extractFullText` (type: `boolean`):

Visit each publisher page and extract the clean article text, author, image and excerpt (useful for AI/RAG, summarization and sentiment analysis). Charged as an extra event only when text is extracted successfully.

## `includeRelated` (type: `boolean`):

Include the list of related articles from other outlets that Google groups with a story (mostly in topic feeds).

## `deduplicate` (type: `boolean`):

Skip articles already returned by another query or time window in the same run.

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

Usually not needed. Enable Apify Proxy if Google starts rate-limiting very large runs.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence",
    "site:reuters.com tesla"
  ],
  "topics": [],
  "editions": [
    "US:en"
  ],
  "timeRange": "7d",
  "maxArticlesPerQuery": 20,
  "decodeUrls": true,
  "extractFullText": false,
  "includeRelated": true,
  "deduplicate": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `articles` (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": [
        "US:en"
    ],
    "timeRange": "7d",
    "maxArticlesPerQuery": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("kirozhang/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",
        "site:reuters.com tesla",
    ],
    "editions": ["US:en"],
    "timeRange": "7d",
    "maxArticlesPerQuery": 20,
}

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

```

## MCP server setup

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