# Google News Scraper with Original URLs (`neatfeeds/google-news-scraper`) Actor

Google News search results, topics and top stories in any language and country, with the publisher's real article URL instead of Google's redirect link. Fast, no browser.

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

## Pricing

from $2.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 with Original URLs

Get **Google News** articles for any **search query**, **topic** (World, Business, Technology…) or the **Top stories** page, in **any language and country**, with the **publisher's real article URL**, not Google's `news.google.com` redirect link.

**Price: $2.50 per 1,000 articles** ($0.0025 per article) + $0.00005 per run. 20 articles cost about $0.05.

### Why this actor

- **Original article URLs.** `url` is the publisher's own link (e.g. `https://www.reuters.com/…`), resolved from Google's redirect, so you can fetch, deduplicate or cite the article directly. The Google link is kept in `googleNewsUrl`.
- **No browser.** Feeds and URL resolution are plain HTTP requests: fast runs, low cost.
- **Any edition.** Searches, the eight Google News topics and Top stories, for any language and country.
- **Google search operators work.** `site:`, `intitle:`, quotes, `OR` and `-word` in queries.
- **Pay only for what you keep.** Duplicates across feeds are removed before saving, and URLs are resolved only for articles that fit in `maxResults` and your spending limit.

### What you can use it for

- Media monitoring and brand mentions across thousands of publishers.
- News feeds for AI agents, RAG pipelines and newsletters: the real URL lets you fetch the full article.
- Market and competitor intelligence by country edition and language.

### Input

Give at least one of `queries`, `topics` or `includeTopStories`. Everything else is optional.

| Field | What it does |
|---|---|
| `queries` | Google News searches. Operators work: `site:reuters.com`, `intitle:`, quotes, `OR`, `-word`. |
| `topics` | `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`. |
| `includeTopStories` | Also fetch the Top stories front page. |
| `language`, `country` | Edition, e.g. `en` + `US`, `it` + `IT`, `de` + `DE`, `pt-BR` + `BR` (default `en` + `US`). |
| `timeRange` | Searches only: past hour, 24 hours, week, month or year. |
| `decodeUrls` | Resolve the publisher URL (default on). Off = fastest, Google links only. |
| `dedupe` | Return each article once across all feeds (default on). |
| `maxResultsPerFeed` / `maxResults` | Up to ~100 per feed (default 100); total cap (default 500). |

Example:

```json
{
  "queries": ["electric vehicles", "site:reuters.com tariffs"],
  "topics": ["BUSINESS"],
  "language": "en",
  "country": "GB",
  "timeRange": "1d"
}
```

### Output (one item per article)

```json
{
  "feedType": "search",
  "feedValue": "ferrari",
  "title": "Ferrari Hypersail: the hull completed and the technology unveiled",
  "source": "Ferrari",
  "sourceUrl": "https://www.ferrari.com",
  "publishedAt": "2026-10-16T10:00:00.000Z",
  "url": "https://www.ferrari.com/en-EN/articles/ferrari-hypersail-the-hull-completed-and-technology-unveiled",
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMi…",
  "relatedArticles": [{ "title": "…", "source": "…", "googleNewsUrl": "…" }],
  "language": "en-US",
  "country": "US",
  "scrapedAt": "2026-10-19T19:49:39.249Z"
}
```

| Field | Meaning |
|---|---|
| `feedType`, `feedValue` | Which feed the article came from (`search`, `topic`, `topStories`) and its query or topic. |
| `title`, `source`, `sourceUrl` | Headline without the publisher suffix, publisher name and homepage. |
| `publishedAt` | Publication time, ISO 8601. |
| `url` | The publisher's real article URL (`null` if Google does not resolve it, or with `decodeUrls` off). |
| `googleNewsUrl` | Google's link to the article; always present and works in a browser. |
| `relatedArticles` | Other coverage Google groups with this story. |
| `language`, `country` | Edition the article was found in. |
| `scrapedAt` | When the article was collected. |

### Pricing

Pay per event, no subscription:

| Event | Price |
|---|---|
| Article returned | $0.0025 ($2.50 per 1,000) |
| Run start | $0.00005 |

Examples:

- 20 articles for one query: 20 × $0.0025 + $0.00005 ≈ **$0.05**
- A full feed of 100 articles: **$0.25**
- 5 brand queries checked daily with `timeRange: "1d"`, about 30 articles per day: about **$2.25 per month**

### FAQ

**How do I cap what a run costs?**
Set a maximum cost per run in the run options (or with `maxTotalChargeUsd` via the API). The actor stops cleanly when the limit is reached, keeps every article collected so far and does not spend requests on articles it would not return. `maxResults` caps the number of articles as well.

**Why is `url` sometimes `null`?**
In rare cases Google does not resolve a redirect link. The article is still returned with `googleNewsUrl`, which opens the article in a browser. A feed that fails to load is reported in the log and skipped; the run continues with the others.

**How do I get more than ~100 articles for a subject?**
Google News lists up to about 100 articles per feed. Split the subject into narrower queries (e.g. by `site:` or keyword) or use shorter time ranges and run it more often.

**Can I call it from code, an AI agent or an automation tool?**
Yes. Run it through the [Apify API](https://docs.apify.com/api/v2) and get the dataset in the same call:

```bash
curl -X POST "https://api.apify.com/v2/acts/Neatfeeds~google-news-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["electric vehicles"], "timeRange": "1d", "maxResults": 20}'
```

It also works with Apify schedules, webhooks and integrations such as Make, Zapier and n8n, and with AI agents through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### Notes

- Data comes from Google News public feeds. You are responsible for how you use the content and for respecting publishers' rights.

# Actor input Schema

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

Google News searches, one feed each. Google operators work: "site:reuters.com", "intitle:", quotes, OR, -exclude.

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

Google News sections: WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH.

## `includeTopStories` (type: `boolean`):

Also fetch the Top stories front page for the chosen language and country.

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

Interface/news language code, e.g. en, it, de, fr, es, pt-BR, ja.

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

Two-letter country edition, e.g. US, GB, IT, DE, FR, IN, BR.

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

Limit search results to the last hour, day, week, month or year.

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

Replace Google's news.google.com redirect links with the publisher's real article URL (field "url"). Turn off for the fastest runs; "googleNewsUrl" is always included.

## `dedupe` (type: `boolean`):

Return each article once even if it appears in several queries or topics.

## `maxResultsPerFeed` (type: `integer`):

Google returns up to about 100 articles per feed.

## `maxResults` (type: `integer`):

Stop after this many articles in total (each article is one billed result).

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

Google rate-limits repeated requests from one IP. Apify Proxy gives every retry a fresh IP; switch to residential proxies if runs fail with "blocked by Google".

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "includeTopStories": false,
  "language": "en",
  "country": "US",
  "timeRange": "",
  "decodeUrls": true,
  "dedupe": true,
  "maxResultsPerFeed": 100,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Dataset items in the "Articles" view: publishedAt, source, title, url, feedValue.

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

Every dataset item with all fields.

# 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"
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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