# Google News Scraper: Articles, Real Publisher URLs, Dates (`redfoxscout/google-news-scraper`) Actor

Scrape Google News articles by keyword, topic, city, country and language. Each row has the title, publisher, ISO 8601 date and the publisher's own article URL (the Google link if decoding fails). $1.00 per 1,000 articles, pay per result.

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

## Pricing

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

Scrape **Google News articles** by **keyword, topic or city**, in the **language and country edition you choose**. Each row has the **title, publisher, ISO 8601 date and the publisher's own article link**, plus time ranges, exact dates and keyword searches past Google's usual 100-article feed. **No login, no cookies, no API key.**

**Price: $1.00 per 1,000 articles.** Failed searches and error rows are free. Apify's free plan ($5 monthly credit) covers about 5,000 articles a month.

![Google News Scraper output: title, publisher, date and publisher link for OpenAI and technology articles](https://raw.githubusercontent.com/TikTop-Data/apify-store-assets/main/images/google-news-scraper-output.png)

### Questions it answers

- Which publishers covered a company or product this week, and when?
- What did German news say about a topic in the last 7 days?
- What are the latest headlines for a city or a news section?
- Which outlets covered this subject, and what did each one headline?

### Who uses this

- 📰 **Media monitoring and PR teams:** track which publishers mention a brand, product or event, with dates and links.
- 📊 **Analysts and researchers:** build a dated dataset of headlines on a topic, by country and language.
- 📍 **Local businesses and newsletters:** pull the latest headlines for the cities they serve.
- 🤖 **AI agent builders:** give an agent a news feed with real article links.

### Why this Google News Scraper

- 🔗 **Publisher links:** each row links to the publisher's own article when Google's decoder resolves it. Otherwise the row keeps Google's link and says so with `resolved: false`.
- 🕒 **Dates in ISO 8601 (UTC):** ready to sort, filter and join.
- 🌍 **Any edition:** 20 verified language and country pairs, such as de-DE, ja-JP and en-GB.
- 📚 **Past the 100-article feed:** keyword searches read back day by day, up to 60 days.
- 📰 **Related headlines:** the other articles in the same story, with their publishers.

### How to use the Google News Scraper

1. Click **Try for free** (a free Apify account is enough).
2. Enter keywords and cities, one per line, e.g. `"electric vehicles" OR EV` or `site:reuters.com climate`. Pick any topics you want.
3. Optional: set the language and country edition, a time range or exact dates.
4. Click **Start**, then download as JSON, CSV or Excel, or schedule it for a daily feed.

### Input

| Field | Default | What it does |
|---|---|---|
| `queries` | – | Keywords or phrases, one per line. Google News operators work: `"quoted phrase"`, `OR`, `site:` and `intitle:`. |
| `topics` | – | Google News sections: TOP, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH. |
| `locations` | – | City or region names for local headlines, one per line, e.g. `Berlin`. |
| `language` | `en` | Language of the edition, two letters, e.g. `de`. |
| `country` | `US` | Country of the edition, two letters, e.g. `DE`. |
| `timeRange` | `any` | Keyword searches only: `any`, `1h`, `1d`, `7d`, `30d` or `1y`. |
| `dateFrom`, `dateTo` | – | Keyword searches only: days as `YYYY-MM-DD`. Either or both. They override `timeRange`. |
| `resolveUrls` | `true` | Swap Google's link for the publisher's URL. Off keeps every Google News link. |
| `maxItems` | 100 | Articles per query, topic or city (max 1,000). |

Example (the input behind the output below):

```json
{ "queries": ["openai"], "topics": ["TECHNOLOGY"], "maxItems": 15 }
```

### Output

One row per article. A real row from that run (IDs and the Google link shortened):

```json
{
  "articleId": "CBMid0FVX3lxTE5l...",
  "title": "OpenAI Releases Findings on 377 Math Problems, Further Roiling Field",
  "source": "The New York Times",
  "sourceUrl": "https://www.nytimes.com",
  "publishedAt": "2026-10-06T23:46:31.000Z",
  "url": "https://www.nytimes.com/2026/10/06/science/openai-math-problems.html",
  "resolved": true,
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMid0FVX3lxTE5l...?oc=5",
  "relatedArticles": [
    { "title": "OpenAI unleashes hundreds more math results upon a field already in shock", "source": "Scientific American" },
    { "title": "After Navier-Stokes, OpenAI’s 377 math results leave experts demanding a voice", "source": "Yahoo" }
  ],
  "language": "en",
  "country": "US",
  "feedType": "search",
  "searchQuery": "openai"
}
```

`url` is the publisher's link when `resolved` is `true`, and the Google News link when it is `false`. `feedType` is `search`, `topic`, `top` or `location`. `searchQuery` names the keyword, topic or city that found the article.

### Example tasks

Ready-made inputs you can open, change and run:

- [Monitor daily news mentions of a company](https://apify.com/redfoxscout/google-news-scraper/examples/google-news-brand-mentions-daily)

### Editions and languages

The language and country pair picks the Google News edition. `language: "de"` with `country: "DE"` gives German news from Germany's edition. These pairs are verified: en-US, en-GB, en-IN, en-AU, en-CA, de-DE, fr-FR, es-ES, es-MX, it-IT, pt-BR, ja-JP, ko-KR, ar-AE, hi-IN, nl-NL, sv-SE, pl-PL, tr-TR, id-ID. Other pairs still run and write a warning to the log. If Google serves another country's edition instead, the search fails with a message rather than returning articles from the wrong country.

### Time ranges and more than 100 articles

Google's keyword feed holds about 100 articles. For a keyword search above 100, the Actor reads one day at a time, back from your end date (or today) for up to 60 days, and stops after three empty days in a row. Last hour and Last 24 hours stay on the single feed. Each day is requested about two seconds after the last, so long searches take minutes.

### How much does it cost?

$1.00 per 1,000 articles.

- 100 articles: about $0.10
- 1,000 articles: about $1
- 10,000 articles: about $10

Publisher-link resolution is included. Failed searches, error rows and articles repeated within one run are free. Articles whose link stays unresolved (`resolved: false`) are still articles, so they are charged.

Apify's free plan gives $5 of credit every month, enough for about 5,000 articles.

### FAQ

**Is this legal?** It reads Google News's public RSS feeds and the public article pages Google serves to anyone, without signing in. It does not use cookies, solve CAPTCHAs or open publisher websites. The output holds headlines, publisher names, dates and links, with no article text and no personal data. Google does not offer these feeds as an official API, so they can change without notice.

**Why do some rows have resolved: false?** Google News gives each article a link to Google, and the Actor decodes it to the publisher's URL. Decoding sometimes fails for one article; then the row keeps the Google News link. If Google shows a CAPTCHA check or rate-limits the run, decoding stops, the remaining searches end with an error message, and the rows already collected are kept. Rows with `resolved: false` are still charged.

**How many articles can I get per search?** You set `maxItems` for each query, topic or city, up to 1,000. Topic and city feeds hold about 100 articles. Keyword searches above 100 read back day by day (see Time ranges), so a search returns fewer articles when Google has fewer matches.

### Related Actors

- [RSS Feed Finder](https://apify.com/redfoxscout/rss-feed-finder): the RSS, Atom and JSON feeds of a list of websites, with their latest posts.
- [URL Status & SSL Checker](https://apify.com/redfoxscout/url-status-ssl-checker): check that article links still load, with redirects and SSL expiry.
- [Company Social Links Finder](https://apify.com/redfoxscout/company-social-links): a company's official social profiles and contact pages from its website.

# Actor input Schema

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

Keywords or phrases, one per line, with Google operators allowed, e.g. "electric vehicles" OR EV or site:reuters.com climate.

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

Google News section feeds, one or more, e.g. Technology for the latest tech headlines.

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

City or region names for local news, one per line, e.g. Berlin or San Francisco.

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

Two-letter language code of the articles, e.g. de for German news.

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

Two-letter country code of the Google News edition, e.g. DE for Germany or GB for the United Kingdom.

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

Only keyword articles from this period, e.g. Last 7 days for a weekly digest; the dates below override it.

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

Keyword searches only: articles published on or after this day, e.g. 2026-09-01.

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

Keyword searches only: articles published on or before this day, e.g. 2026-09-30.

## `resolveUrls` (type: `boolean`):

Swaps the Google News redirect for the publisher's own article URL, e.g. a reuters.com link, and keeps the Google link when decoding fails.

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

Stop each search after this many results.

## `maxConcurrency` (type: `integer`):

How many searches run at once.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "language": "en",
  "country": "US",
  "timeRange": "any",
  "resolveUrls": true,
  "maxItems": 100,
  "maxConcurrency": 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("redfoxscout/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"] }

# Run the Actor and wait for it to finish
run = client.actor("redfoxscout/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"
  ]
}' |
apify call redfoxscout/google-news-scraper --silent --output-dataset

```

## MCP server setup

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