# Google News Scraper – Full Article Text & Real Publisher URLs (`openharvest/google-news-scraper`) Actor

Google News scraper for headlines, keyword search, topics and local news in any language and country. Get the real publisher article URL (decoded from news.google.com links), source, publish date and optional full article text, author and image. No login, no API key.

- **URL**: https://apify.com/openharvest/google-news-scraper.md
- **Developed by:** [Enes Bulanık](https://apify.com/openharvest) (community)
- **Categories:** News, SEO tools, AI
- **Stats:** 1 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.

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 – Full Article Text & Real Publisher URLs

Google News scraper for headlines, keyword search, topics and local news in any language and country. Get the real publisher article URL (decoded from news.google.com links), source, publish date and optional full article text, author and image. No login, no API key.

**Price: $1.50 per 1,000 articles** ($4 per 1,000 with full text). No start fee, no login, no API key.

### What data do you get?

- 📰 **Headline, source and publisher homepage** – the title is cleaned (no trailing " - Reuters")
- 🔗 **Real article URL** (`articleUrl`) – the actual `reuters.com/…` link, not Google's redirect. Most Google News scrapers only return the `news.google.com` link, which you can't open in code, deduplicate or feed into other tools.
- 🕒 **Publish date** in ISO 8601 (UTC)
- 🧾 **Full article text** (optional) – main text with paragraph breaks extracted with Mozilla Readability (the engine behind Firefox Reader View), plus **word count, author, description and main image**
- 🚦 **Honest status fields** – `decodeStatus` and `fullTextStatus` (`ok`, `paywalled`, `blocked`, `no-content`, `timeout`…) tell you exactly what worked
- 🗞 **Related coverage** – for top stories, the other outlets covering the same story
- 🌍 **Any edition** – `language` + `country` (en-US, en-GB, de-DE, fr-FR, es-MX, pt-BR, tr-TR, ja-JP, zh-TW, …)

### Use cases

- **Media monitoring & PR** – track mentions of your brand, competitors or executives every hour or day.
- **Market & financial research** – follow news about tickers, sectors or crypto and feed it to sentiment models.
- **AI agents, RAG & LLM pipelines** – fetch fresh news with clean full text in one call.
- **News aggregation & newsletters** – build topic digests with real publisher links.
- **Academic & policy research** – build news datasets by keyword, country and date range.
- **SEO & content research** – see which publishers rank in Google News for your keywords.

### How to use it

1. Click **Try for free** / **Start**.
2. Enter one or more **Search queries** (Google operators like `"exact phrase"`, `OR`, `-word`, `site:reuters.com` work) and/or pick **Topics** or **Locations**. Leave everything empty to get today's top stories.
3. Choose **Language**, **Country** and **Time range**, set **Max articles per query / topic** and decide whether you want **full text**.
4. Click **Start** and export the results as JSON, CSV, Excel or via API, or connect Make, Zapier, n8n, Google Sheets or webhooks.

### Input

| Field | Type | Description |
|---|---|---|
| `queries` | array of strings | Keywords to search. Google search operators work. |
| `topics` | array (enum) | `TOP_STORIES`, `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH` |
| `locations` | array of strings | Local news, e.g. `London`, `California` |
| `language` | string | 2-letter language code. Default `en` |
| `country` | string | 2-letter country code. Default `US` |
| `timeRange` | enum | `any` (default), `1h`, `1d`, `7d`, `30d`, `1y` |
| `maxItems` | integer | Max articles **per query / topic / location**. Default `20`, up to `5000` |
| `decodeUrls` | boolean | Decode real publisher URLs. Default `true` |
| `fullText` | boolean | Extract full article text, author, description, image. Default `false` |
| `proxyConfiguration` | object | Optional. Not needed for normal use |

With `{}` (empty input) the Actor returns the 20 current US top stories.

Example input:

```json
{
    "queries": ["artificial intelligence", "site:reuters.com bitcoin"],
    "topics": ["TECHNOLOGY"],
    "language": "en",
    "country": "US",
    "timeRange": "7d",
    "maxItems": 50,
    "decodeUrls": true,
    "fullText": true
}
```

**More than 100 results:** Google News returns at most 100 articles per feed. For search queries with `maxItems` above 100 the Actor automatically searches **day by day** (Google's `after:` / `before:` operators) and deduplicates, so you can collect thousands of articles for one keyword.

### Output

One row per article (`type: "article"`). Real sample (full text shortened):

```json
{
    "type": "article",
    "rank": 2,
    "title": "Jaguar reveals $130K electric vehicle two years after failed ‘woke’ rebrand video",
    "source": "New York Post",
    "sourceUrl": "https://nypost.com",
    "articleUrl": "https://nypost.com/2026/10/07/business/jaguar-reveals-130k-electric-vehicle-two-years-after-failed-woke-rebrand-video/",
    "articleDomain": "nypost.com",
    "googleNewsUrl": "https://news.google.com/rss/articles/CBMiugFBVV95cUxQTGU4d0ROampoQzV2c2t5...?oc=5",
    "decodeStatus": "decoded",
    "publishedAt": "2026-10-07T18:27:00.000Z",
    "description": "Jaguar is shifting gears — away from “woke” weirdos and back to classy babes after an attempted rebrand drew widespread derision.",
    "author": "Taylor Herzlich",
    "imageUrl": "https://nypost.com/wp-content/uploads/sites/2/2026/10/COMP-GettyImages-2188001841.jpg?quality=75&strip=all&w=1200",
    "fullText": "See more of our coverage in your search results.\n\nJaguar is shifting gears — away from “woke” weirdos and back to classy babes after an attempted rebrand drew widespread derision.\n\nThe British luxury automaker unveiled a $130,500 electric vehicle Tuesday night...",
    "wordCount": 739,
    "fullTextStatus": "ok",
    "fullTextError": null,
    "query": "electric vehicles",
    "topic": null,
    "location": null,
    "language": "en",
    "country": "US",
    "relatedArticles": [],
    "scrapedAt": "2026-10-07T21:07:23.703Z"
}
```

Top stories also include `relatedArticles` (`title`, `source`, `googleNewsUrl`) – other outlets covering the same story.

`description`, `author`, `imageUrl`, `fullText` and `wordCount` are filled only when `fullText` is on (Google News RSS itself does not contain them).

`fullTextStatus` values: `ok`, `paywalled` (only the free part, if any), `blocked` (site refuses bots, e.g. HTTP 403 or captcha), `no-content`, `not-html`, `timeout`, `failed`, `not-requested`.

Queries without results and invalid topics produce a free `type: "error"` row (`errorCode`: `NO_RESULTS`, `INVALID_INPUT`, `SCRAPE_FAILED`), so the run still succeeds.

The dataset has ready-made views in Apify Console: **Overview**, **Full text** and **Errors & status**.

### Pricing

Pay-per-event: you only pay for articles you get. Platform usage is included.

| Event | Price | When it is charged |
|---|---|---|
| `article` | **$0.0015** ($1.50 / 1,000) | Each article saved, with decoded URL |
| `article-full-text` | **$0.004** ($4 / 1,000) | Instead of `article`, when full text was successfully extracted |
| Errors / no results | **Free** | |

Each article is charged **once**: either `article` or `article-full-text`. If you turn on full text but the page is paywalled or blocked, you pay only the normal `article` price.

| Job | Cost |
|---|---|
| 20 top stories (default input) | **$0.03** |
| 100 articles for 1 keyword, real URLs | **$0.15** |
| 100 articles with full text (≈80 extracted) | about **$0.35** |
| 1,000 articles per day for a month | about **$45** |

Tip: set **Max cost per run** in the run options. The Actor stops cleanly when your budget is reached.

### Use with AI agents (MCP)

Add the Actor to the [Apify MCP server](https://mcp.apify.com) (`https://mcp.apify.com?tools=openharvest/google-news-scraper`) or let agents find it with `search-actors` ("google news"). The input is small and every field has a default, so agents can call it with only a query.

Example `call-actor` input for "What's the latest news about Nvidia this week? Summarize the articles.":

```json
{
    "queries": ["Nvidia"],
    "timeRange": "7d",
    "maxItems": 10,
    "fullText": true
}
```

Example for "Give me today's top business headlines in Germany":

```json
{ "topics": ["BUSINESS"], "language": "de", "country": "DE", "timeRange": "1d", "maxItems": 15 }
```

### FAQ

**How are the real article URLs decoded?**
Google News links (`news.google.com/rss/articles/CBMi…`) are encrypted redirect ids. The Actor reads each article's signature from Google News and asks Google's own web endpoint (the same one the Google News website uses) to resolve the ids in batches. Old-format ids are decoded locally. In our tests more than 99% of articles were decoded; if one fails you still get the `googleNewsUrl` and `decodeStatus: "failed"`.

**Why is the full text missing for some articles?**
Some publishers block automated access (`blocked`) or put articles behind a paywall (`paywalled`). Those rows are charged as a normal `article`, not as full text. The Actor never bypasses paywalls or logins.

**How many articles can I get?**
Up to 100 per topic / location feed (Google's limit) and up to 5,000 per search query thanks to the day-by-day deep search.

**Are duplicates removed?**
Yes. If the same article appears in several of your queries or topics, it is saved and charged only once.

**Which languages and countries work?**
Every Google News edition. Use the 2-letter codes, e.g. `en`/`GB`, `fr`/`FR`, `es`/`MX`, `pt`/`BR`, `hi`/`IN`, `ja`/`JP`, `tr`/`TR`.

**Can I run it on a schedule?**
Yes. Use Apify Schedules with `timeRange: "1h"` or `"1d"` to collect only fresh articles.

### Is it legal to scrape Google News?

The Actor reads only **publicly available** Google News feeds and public article pages, without logging in, and it does not circumvent paywalls. Headlines and article texts are copyrighted by their publishers: use full texts for analysis, research, monitoring or internal AI processing, and check the publisher's terms and your local copyright law before republishing content. Google's feed terms limit some commercial uses. If you are unsure, consult a lawyer.

### Related actors

- RSS Feed Reader & Discovery – Parse Any RSS/Atom/JSON Feed, Find Feeds on Websites, Get Full Text *(coming soon)*
- Hacker News Scraper – Stories, Comments, Search & Who Is Hiring *(coming soon)*
- Google Trends Scraper *(coming soon)*
- Telegram Channel Scraper – Public Posts, Views & Media *(coming soon)*

### Support & feedback

Found a bug or a missing field? Open an issue in the **Issues** tab. We usually reply within a day.

# Actor input Schema

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

Keywords to search on Google News, one per line. Google search operators work: <code>"exact phrase"</code>, <code>OR</code>, <code>-exclude</code>, <code>site:reuters.com</code>, <code>intitle:</code>. Leave empty (and leave Topics empty) to get today's top stories.

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

Google News topic sections to scrape (headlines for the chosen language/country).

## `locations` (type: `array`):

Optional. City, region or country names for Google News local headlines, e.g. <code>London</code>, <code>California</code>, <code>Berlin</code>.

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

2-letter language code of the Google News edition, e.g. <code>en</code>, <code>de</code>, <code>fr</code>, <code>es</code>, <code>tr</code>, <code>ja</code>.

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

2-letter country code of the Google News edition, e.g. <code>US</code>, <code>GB</code>, <code>IN</code>, <code>DE</code>, <code>TR</code>, <code>BR</code>.

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

Only articles published within this period. For search queries Google filters on its side (<code>when:</code> operator); for topics and locations the Actor filters by publish date.

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

Maximum number of articles for each query, topic or location. One Google News feed holds up to 100 articles; for search queries above 100 the Actor automatically searches day by day to go deeper (up to 5,000). You pay per article, so this also caps your cost.

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

Convert Google's <code>news.google.com/rss/articles/...</code> redirect links into the real publisher URL (<code>articleUrl</code>). Turn off only if you just need titles and Google links (slightly faster).

## `fullText` (type: `boolean`):

Open every article on the publisher's site and extract the main text (Mozilla Readability), plus description, author and image. Charged as <code>article-full-text</code> only when text was extracted; paywalled or blocked articles are marked in <code>fullTextStatus</code> and charged as a normal <code>article</code>.

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

Usually not needed. Enable Apify Proxy only if you run very large jobs and see many 429 (rate-limit) warnings or decodeStatus = failed.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence",
    "Tesla earnings",
    "site:reuters.com bitcoin"
  ],
  "topics": [
    "TECHNOLOGY",
    "BUSINESS"
  ],
  "locations": [
    "London",
    "New York"
  ],
  "language": "en",
  "country": "US",
  "timeRange": "7d",
  "maxItems": 50,
  "decodeUrls": true,
  "fullText": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped items in the default dataset (JSON, CSV, Excel and more via the dataset export).

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

Records saved in the default key-value store, e.g. the run summary.

# 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"
    ],
    "timeRange": "7d",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("openharvest/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"],
    "timeRange": "7d",
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("openharvest/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"
  ],
  "timeRange": "7d",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call openharvest/google-news-scraper --silent --output-dataset

```

## MCP server setup

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