# Google News Scraper | News API, Real URLs, Monitor | $1 / 1K (`hridayrungta/google-news-scraper`) Actor

Google News scraper and news API alternative: articles by keyword, topic and country edition, with the real publisher URL decoded. Only-new mode for scheduled news monitoring. No API key, no login.

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

## Pricing

from $0.70 / 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** is a pay-per-result **news API** alternative: give it keywords, Google News topics or country editions and get one clean row per article, with the headline, publisher, published date and the **real publisher article URL** (not the news.google.com redirect). Try it with the prefilled query, then switch on **only new articles** and put it on a schedule for **news monitoring**, brand mentions or competitor alerts. No API key, no login, no browser.

- **Search Google News like a pro**: every Google News operator works: `"exact phrase"`, `OR`, `-exclude`, `site:reuters.com`, `intitle:`, `when:7d`, `after:` / `before:`.
- **Topics and top stories**: World, Nation, Business, Technology, Entertainment, Sports, Science and Health headlines, plus the front page of each edition.
- **60+ editions**: any country and language Google News supports (`US:en`, `GB:en`, `IN:en`, `DE:de`, `FR:fr`, `MX:es-419`, `BR:pt-419`, `JP:ja` ...).
- **Real article URLs**: each news.google.com link is decoded to the publisher's own URL (1,261 of 1,262 test articles across 16 editions), included in the price.
- **Only-new mode for monitoring**: remembers what it already delivered and skips it next run. Skipped articles are not charged.
- **Apify platform**: run it from the API, schedule it, connect it to Make, n8n, Zapier, Google Sheets or webhooks, monitor runs, and let it rotate proxies for you.

### What data can you extract from Google News?

| Field | What it is |
|---|---|
| `title` | Headline, without Google's " - Publisher" suffix |
| `publisher`, `publisherUrl` | News outlet name and home page |
| `publishedAt` | Published date and time (ISO 8601, UTC) |
| `articleUrl` | The real article URL on the publisher's site (decoded) |
| `urlDecoded` | `true` when `articleUrl` was decoded |
| `googleNewsUrl`, `articleId` | Google News link and its stable ID |
| `relatedArticles` | Topic and top-stories feeds: other outlets covering the same story (title, publisher, link) |
| `position` | Rank of the article in its feed |
| `query`, `topic`, `feedType` | What found the article (search, topic, top-stories or url) |
| `edition`, `language`, `country` | Google News edition, e.g. `US:en`, `en-US`, `US` |
| `feedUrl`, `scrapedAt` | The RSS feed that was read and when |
| `status`, `error` | `ok` for articles; `no_results` / `error` / `skipped` rows explain feeds that returned nothing (never charged) |

Google News feeds carry no article body or summary snippet. For the full article text, send `articleUrl` to a crawler (see Related Actors).

### How to use Google News Scraper

1. Open the Actor and type one or more **search queries**, pick **topics**, or tick **Top stories**.
2. Choose the **editions** (country:language) to search. `US:en` is the default.
3. Optional: set **Published within** (past hour, 24 hours, 7 days ...) and the **max articles** cost cap.
4. For monitoring, turn on **Only new articles since the last run** and give the monitor a name.
5. Click **Start**, then download the articles as JSON, CSV, Excel or HTML, or read them through the API.
6. Create an Apify **Schedule** (for example every hour) to get a steady stream of new articles.

### Input

| Field | Type | Default | Notes |
|---|---|---|---|
| `queries` | list of strings | - | Google News searches; operators allowed |
| `topics` | list | - | `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH` |
| `topStories` | boolean | `false` | Front-page feed of each edition |
| `googleNewsUrls` | list of URLs | - | Any news.google.com search, topic or publication page |
| `editions` | list of strings | `["US:en"]` | `COUNTRY:language`; `en-GB` or `DE` also work |
| `timeRange` | select | `any` | `1h`, `1d`, `7d`, `30d`, `1y` (search queries only) |
| `onlyNewArticles` | boolean | `false` | Skip articles delivered by earlier runs of the same monitor |
| `monitorName` | string | `default` | Separate memory per monitor |
| `decodeUrls` | boolean | `true` | Decode the publisher article URL |
| `includeRelatedArticles` | boolean | `true` | Keep related coverage on topic feeds |
| `maxArticlesPerFeed` | integer | `100` | Google returns up to 100 per feed |
| `maxItems` | integer | `1000` | Total article cap (your cost cap) |

#### Input example

```json
{
  "queries": ["\"electric vehicles\" OR EV when:1d", "site:reuters.com tesla"],
  "topics": ["TECHNOLOGY"],
  "editions": ["US:en", "GB:en"],
  "onlyNewArticles": true,
  "monitorName": "ev-news",
  "maxItems": 500
}
```

### Output example

A real row from a test run (Australian edition, Science topic):

```json
{
  "status": "ok",
  "title": "Scientists discover metals that defy the deep freeze at -424°F",
  "publisher": "Science Daily",
  "publisherUrl": "https://www.sciencedaily.com",
  "publishedAt": "2026-10-31T12:48:15.000Z",
  "articleUrl": "https://www.sciencedaily.com/releases/2026/10/261029072127.htm",
  "urlDecoded": true,
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMib0FVX3lxTE1iczF5VVJsT3JFSWVfQ1dZYUdBRnlQUjRYaFJWTWtVSGFyVHJOOTJqWVJjRTk1SUFZMXVtTGgwdlFDbV9uSUdkQl81aFdrSmtYczR5ZEVMV3FOaFlicFF0ZmYzTGdsRGd2YUV3TTFLcw?oc=5",
  "articleId": "CBMib0FVX3lxTE1iczF5VVJsT3JFSWVfQ1dZYUdBRnlQUjRYaFJWTWtVSGFyVHJOOTJqWVJjRTk1SUFZMXVtTGgwdlFDbV9uSUdkQl81aFdrSmtYczR5ZEVMV3FOaFlicFF0ZmYzTGdsRGd2YUV3TTFLcw",
  "relatedArticles": [
    {
      "title": "Scientists identify alloys resistant to damage at −253°C — ScienceDaily",
      "publisher": "UA.NEWS",
      "googleNewsUrl": "https://news.google.com/rss/articles/CBMipwFBVV95cUxPR2hSU2llRVF6M0tPZmlrdnQ5Zk9KUFRDbnpRLXdzQ3BqYXkybXh3TE1Xc1JpVE5Oc3Y2R3pwT3BraGtoZU5hdFJPWHl3c3NIMnZ0ZlZWMHRPRC1mOWdlRlg5SDZxUHdPUFlJakJla1Q4ZjFDaTlHeXhISnhOQTdXYkQyUFN6Zi1ldGs3QVhsSFVtdWxMUW96bFgwbGZoVUtBWUJJSTQxYw?oc=5"
    }
  ],
  "position": 22,
  "query": null,
  "topic": "SCIENCE",
  "feedType": "topic",
  "edition": "AU:en",
  "language": "en-AU",
  "country": "AU",
  "feedUrl": "https://news.google.com/rss/headlines/section/topic/SCIENCE?hl=en-AU&gl=AU&ceid=AU%3Aen",
  "scrapedAt": "2026-11-02T11:03:43.857Z"
}
```

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

Pay per event: a small fee per run plus a price per article. The real article URL is included, there is no extra charge for it.

| Event | Free plan | Bronze | Silver | Gold, Platinum, Diamond |
|---|---|---|---|---|
| Article (per 1,000) | $1.00 | $0.90 | $0.80 | $0.70 |
| Actor start (per run) | $0.002 | $0.002 | $0.002 | $0.002 |

Worked examples at the Free-plan price:

- **1,000 articles in one run**: $0.002 + $1.00 = **$1.002**.
- **Hourly brand monitor** (only-new mode, about 20 new articles an hour): 720 runs a month x $0.002 + 14,400 articles x $0.001 = **$15.84 a month**. Already-seen articles cost nothing.
- **Daily digest of 5 topics in 3 editions** (about 300 articles a day): about **$9.06 a month**.

Apify's free plan includes $5 of monthly credit, which covers roughly **4,900 articles** a month with this Actor. Duplicates across queries, already-seen articles and status rows are never charged.

### Integrations and scheduling for news monitoring

- **Apify Schedules**: run every hour or every morning with **only new articles** on, and each run returns just the fresh stories.
- **Make, n8n, Zapier**: send new articles to Slack, email, Notion or your CRM.
- **Google Sheets**: append new articles to a sheet for a simple media-monitoring log.
- **Webhooks**: get a call to your own endpoint when a run finishes.
- **API**: start runs and read the dataset from any language (REST, JavaScript and Python clients). It works as a lightweight **Google News API**.
- **MCP for AI agents**: AI assistants can call this Actor through the Apify MCP server to fetch current news for a question.

### FAQ

#### Is there an official Google News API?

No. Google shut the Google News API down years ago and only offers RSS feeds, which return Google redirect links and no structured fields. This Actor reads those public feeds, adds editions, operators and topics, decodes the real article URLs and gives you clean JSON, CSV or Excel.

#### How is this different from other news APIs?

Paid news APIs index their own list of sources and charge monthly plans. This Actor shows exactly what Google News shows for your query in each country, and you pay only per article. It suits monitoring, research and alerting; it is not a historical archive.

#### How do I monitor news about my brand or competitors?

Add one query per brand (for example `"Acme Corp" -jobs`), turn on **Only new articles since the last run**, give the monitor a name and schedule the Actor hourly or daily. Each run returns only articles you have not seen yet.

#### Can I get articles from a specific website or date range?

Yes. Use `site:example.com` in the query, and `when:7d` or `after:2026-01-01 before:2026-02-01` for dates.

#### Can I get the full article text?

Not from Google News: its feeds carry headlines only. Pass `articleUrl` to [Website to Markdown Crawler](https://apify.com/hridayrungta/website-to-markdown-crawler) or Apify's Website Content Crawler for the text.

#### How many articles can I get per query?

Google News returns up to 100 articles per query, topic or edition. For more, split the query by edition, by `site:` or by date range with `after:` and `before:`.

#### Is it legal to scrape Google News?

The Actor reads public feeds that Google publishes for anyone, without logging in. Google's feed terms describe personal, non-commercial use, and the articles belong to their publishers. You are responsible for how you use the data; link to the publisher and check the rules that apply to you. This is not legal advice.

#### What happens when a query has no results or a feed fails?

You get a status row (`no_results`, `error` or `skipped`) with the reason, and it is not charged. Requests that Google throttles are retried on fresh proxy sessions.

#### Why do some rows have no articleUrl?

Decoding failed for that link after retries (rare: 1 in 1,262 in our tests, and that one was caused by a bug that is now fixed). The row still has the Google News link, which redirects to the article in a browser.

### Limits

- Up to 100 articles per feed; Google decides the ranking and which outlets appear.
- No article body or summary from Google News (headlines, publisher, date and links only).
- Decoding article URLs takes about one extra request per article, so runs deliver about 2 articles a second (200 articles in about 85 seconds in our tests); turn `decodeUrls` off when the Google link is enough.
- Topic and top-stories feeds always show current headlines; `timeRange` applies to search queries.

### Related Actors

- [Google Trends Scraper](https://apify.com/hridayrungta/google-trends-scraper): see which news topics people are searching for.
- [Website to Markdown Crawler](https://apify.com/hridayrungta/website-to-markdown-crawler): turn article URLs into clean text for AI and RAG.
- [RAG Web Search](https://apify.com/hridayrungta/rag-web-search): web search results with page content for AI agents.
- [Reddit Scraper](https://apify.com/hridayrungta/reddit-scraper): track discussions about the same stories on Reddit.
- [Website Content Crawler](https://apify.com/apify/website-content-crawler): Apify's crawler for full page text.

# Actor input Schema

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

One Google News search per line. Google News operators work: "exact phrase", OR, -exclude, site:reuters.com, intitle:word, when:7d, after:2026-01-01, before:2026-02-01. Each query is searched in every edition you pick.

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

Google News topic sections for each edition: World, Nation (the edition's country), Business, Technology, Entertainment, Sports, Science, Health.

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

Also read the Top stories (front page) feed of each edition.

## `googleNewsUrls` (type: `array`):

Any news.google.com search, topic or publication page URL, e.g. https://news.google.com/search?q=nvidia\&hl=en-US\&gl=US\&ceid=US:en. It is read through its RSS twin.

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

Google News editions as COUNTRY:language, e.g. US:en, GB:en, IN:en, DE:de, FR:fr, ES:es, MX:es-419, BR:pt-419, JP:ja. Shortcuts like en-GB or DE also work. Default US:en.

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

Limits search queries to recent articles (adds when:… to each query unless it already has when:, after: or before:). Topic and top-stories feeds always show the current headlines.

## `onlyNewArticles` (type: `boolean`):

For scheduled monitoring: remembers every article delivered by this monitor and skips it next time. Skipped articles are not charged. The memory lives in the named key-value store "google-news-scraper-state" in your account.

## `monitorName` (type: `string`):

Keeps separate "already seen" memories for different schedules, e.g. "brand-mentions" and "competitors". Letters, numbers, - and \_.

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

Turns each news.google.com/rss/articles/… link into the publisher's own article URL (articleUrl). Included in the article price. Turn off for slightly faster runs that only need the Google News link.

## `includeRelatedArticles` (type: `boolean`):

Topic and top-stories feeds group stories: keep the other outlets' articles on the same story in relatedArticles (title, publisher, link). Free, no extra rows.

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

Google News returns up to 100 articles per query, topic or edition.

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

Stops after this many article rows. Duplicates across queries are removed and never charged.

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

How often a throttled request is retried on a fresh proxy session.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "topStories": false,
  "editions": [
    "US:en"
  ],
  "timeRange": "any",
  "onlyNewArticles": false,
  "monitorName": "default",
  "decodeUrls": true,
  "includeRelatedArticles": true,
  "maxArticlesPerFeed": 20,
  "maxItems": 20,
  "maxRetries": 3
}
```

# 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 = {
    "queries": [
        "artificial intelligence"
    ],
    "editions": [
        "US:en"
    ],
    "maxArticlesPerFeed": 20,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("hridayrungta/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"],
    "editions": ["US:en"],
    "maxArticlesPerFeed": 20,
    "maxItems": 20,
}

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

```

## MCP server setup

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