# Google News Scraper (`deriverge/google-news-scraper`) Actor

Articles from Google News searches, topic sections and front pages in any language edition, with the publisher's own link, date, image, description and optionally the full article text. A date range runs each query day by day to get past 100 results per search.

- **URL**: https://apify.com/deriverge/google-news-scraper.md
- **Developed by:** [deriverge s.r.o.](https://apify.com/deriverge) (community)
- **Categories:** News, Automation, AI
- **Features:** Limited permissions
- **Stats:** 10 total users, 4 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

## Google News Scraper

Google News Scraper turns Google News searches, topic sections and front pages into one row per article: the headline, the publisher, the publication time, the short summary from the feed and the article's address on the publisher's own site. Enter a keyword in **Search queries** and click **Start**. With **Read article pages** on, each row also gets the article's image and the description the publisher wrote, and with **Include article text** the full text of the article. It costs $1.50 per 1,000 articles on the Free plan ($0.75 on Business), and the $5 of monthly credit in Apify's Free plan covers about 3,300 articles.

### What data does it return?

| Field | Description |
|---|---|
| `title` | Headline as Google News lists it, with the publisher's name after a dash: `AI Bots Push Beyond Web Scraping Into Customer Accounts - TechNewsWorld`. |
| `url` | The article on the publisher's site, with tracking parameters such as `utm_` tags, `fbclid` and `gclid` removed. If the Google link could not be resolved, the Google link itself. |
| `googleUrl` | The original news.google.com link. `null` for items from your own feeds. |
| `sourceName`, `sourceUrl` | Publisher name and home page, for example `TechNewsWorld` and `https://www.technewsworld.com`. |
| `publishedAt` | Publication time as an ISO 8601 timestamp in UTC. |
| `summary` | The feed's description with the HTML removed. For search results it usually repeats the headline and the publisher; topic and front page items often add related headlines from other outlets. |
| `source.type`, `source.value` | What found the article: `query`, `topic`, `top` or `feed`, and the query text, topic, edition or feed URL. With a date range, the day is added to the query in brackets. |
| `language`, `country` | The Google News edition, for example `en` and `US`. `null` for your own feeds. |
| `key` | The article URL, or Google's item ID when the link stayed on Google. Duplicates and the new-only mode are decided by this value. |
| `firstSeenAt` | When the run collected the article, as an ISO 8601 timestamp in UTC. |
| `imageUrl`, `description` | The article's main image and the summary the publisher wrote, from the publisher's page. Only with **Read article pages** on. |
| `articleText`, `wordCount` | Full text of the article as plain text with paragraph breaks (up to 50,000 characters) and its word count. Only with **Include article text** on. |
| `articleStatus`, `articleError` | How reading the publisher's page went: `ok`, `no_text`, `blocked` (bot protection, paywall or HTTP 401, 403, 429), `robots_disallowed`, `error` or `not_resolved`, and why in plain words. Only with **Read article pages** on. |

### How to scrape Google News

1. Add keywords to **Search queries**, one query per line. A comma stays part of the query, so `Smith, John` is one search. Google's operators work inside a query: quotes for an exact phrase, `site:reuters.com` for one publisher, `-word` to leave a word out and `when:7d` for the past week.
2. To follow a section, pick **Topics** (World, Nation, Business, Technology, Entertainment, Sports, Science or Health) or turn on **Top stories** for the edition's front page. **Extra RSS or Atom feeds** adds any other feed to the same table.
3. Set **Language** and **Country** to the edition you want, for example `de` and `DE` for the German edition in Germany.
4. For a past period, fill in **From date** and **To date** as YYYY-MM-DD. For fresh news only, set **Published within the last N hours**.
5. Leave **Read article pages** on for images and real descriptions, turn on **Include article text** for the text of each article, or turn both off for the fastest run.
6. Click **Start**. Articles appear in the **Output** tab, which exports them as CSV, Excel or JSON.

A one-week search as API input:

```json
{
  "queries": ["\"web scraping\"", "site:reuters.com markets"],
  "language": "en",
  "country": "US",
  "dateFrom": "2026-09-22",
  "dateTo": "2026-09-28",
  "maxItemsPerSource": 100
}
```

### Example output

One article from a run on 26 October 2026 with **Read article pages** on, found by the query `Apify`:

```json
{
  "key": "https://affinco.com/apify-review/",
  "title": "Apify Review 2026: Web Scraping Platform Tested 3 Months - AFFiNCO",
  "url": "https://affinco.com/apify-review/",
  "googleUrl": "https://news.google.com/rss/articles/CBMiSEFVX3lxTE1EMDc2QU1XdnhYLVhYUm50VzhfTHFGdzhsdGFvX0JielA1VUtlN0UweHVHT2RzYlYyMFpobE8teW0yRFZsYUFsUQ?oc=5",
  "sourceName": "AFFiNCO",
  "sourceUrl": "https://affinco.com",
  "publishedAt": "2026-07-10T07:00:00.000Z",
  "summary": "Apify Review 2026: Web Scraping Platform Tested 3 Months AFFiNCO",
  "source": {
    "type": "query",
    "value": "Apify"
  },
  "language": "en",
  "country": "US",
  "firstSeenAt": "2026-10-26T21:15:30.486Z",
  "imageUrl": "https://affinco.com/wp-content/uploads/2026/06/Honest-Apify-Review.webp",
  "description": "Full Apify review after 3 months of heavy use: 8,000+ Actors, MCP integration with Claude and ChatGPT, pricing from free to $999/month, plus real costs and drawbacks.",
  "articleText": null,
  "wordCount": null,
  "articleStatus": "ok",
  "articleError": null
}
```

### Searching past the 100-result cap

Google News answers any search with 100 items at most, whether it covers a day or a year. When **From date** and **To date** are set, the actor runs every query once for each day of the range with Google's `after:` and `before:` operators, then merges the days and removes duplicates. Measured in September 2026 for `artificial intelligence`, one week returned 100 articles as a single search and more than 600 when it was searched day by day. A range covers at most 92 days; a longer one is cut at 92. **Maximum articles per query, topic or feed** applies to each day on its own. Topics, top stories and feeds have no date range and always return their current items.

### Alerts for new articles

For a news alert on a brand, a company or a topic, turn on **Return only articles that appeared since the last run** and schedule the run hourly or daily, either as a saved task or with a **Watch name** that names the snapshot. Each run compares its articles with the previous run by `key` and returns only the ones that were not there. Only the previous run counts: an article that drops out of Google's results and comes back later is returned again. A `CHANGES` record in the run's key-value store counts the new articles and lists their keys.

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

| | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| 1,000 articles | $1.50 | $1.20 | $0.975 | $0.75 |

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

Collecting 5,000 articles costs $7.50 on the Free plan and $3.75 on Business. Duplicates, articles older than **Published within the last N hours** and articles already sent in new-only mode are not charged.

### Limits

- Google returns at most 100 items per search, and with a date range at most 100 per day. A keyword with more articles than that in one day is still cut.
- Without `when:`, a date range or **Published within the last N hours**, a search returns Google's best matches from any year. The query `Apify` brought articles from 2018 to 2026 in a run on 28 September 2026.
- Each Google link needs its own lookup to find the publisher's address. When Google rate-limits these lookups, the actor stops looking them up for ten minutes, and the links in the meantime stay on news.google.com. The `SUMMARY` record counts them in `linksLeftOnGoogle`; in the run of the example row it was 4 of 61.
- With **Resolve Google redirect links** turned off the run is faster, and `url` holds the Google link.
- For your own feeds, `sourceName` is the item's `<source>` when the feed has one, and the feed's title otherwise.
- Google News has editions for some language and country pairs only, such as `en`/`US`, `en`/`GB`, `cs`/`CZ` or `de`/`DE`. For a pair it lacks, such as `en`/`CZ`, Google serves its US English edition: the rows then say `US` and `en`, the log explains it, and `SUMMARY` has the edition in `editionServed`.
- A feed of your own that does not answer or is not RSS or Atom is skipped with a warning and listed with its error in `SUMMARY`; the rest of the run goes on.
- Article pages are read only where the site's robots.txt allows it, 8 pages at a time and 2 per site. A site that answers with bot protection, a paywall or HTTP 401, 403 or 429 gets `blocked` and is not asked again in the run; the actor does not try to get around it. Paywalled articles often still give an image and a description, but no text.

### FAQ

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

Google News publishes these feeds for anyone to read in a feed reader. The actor collects headlines, the short feed summaries, publisher names and links, and with **Read article pages** the image, description and text from pages that the publisher's robots.txt allows to be read. Names of authors are not collected. You are responsible for how you use the results, for example when you republish headlines.

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

Yes, turn on **Include article text**. The text comes from the publisher's page in `articleText`, without menus, ads and comments, and is included in the price of the article. Publishers own the copyright to their articles, so check the terms before you republish text.

#### How do I follow one publisher?

Search for `site:` followed by its domain, for example `site:reuters.com`, alone or together with keywords. For everything a publisher posts, add its own RSS feed under **Extra RSS or Atom feeds**; rows from that feed link straight to the publisher's pages.

### Related scrapers

- [Article Extractor](https://apify.com/deriverge/article-extractor)
- [Google Trends Trending Now Scraper](https://apify.com/deriverge/google-trends-trending-now-scraper)
- [Substack Scraper](https://apify.com/deriverge/substack-scraper)
- [RSS Feed Scraper](https://apify.com/deriverge/rss-feed-scraper)
- [Hacker News Search Scraper](https://apify.com/deriverge/hacker-news-search)

### Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the **Issues** tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the **API** tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/deriverge/google-news-scraper/changelog.md

# Actor input Schema

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

Keywords to search in Google News. Google's operators work: "exact phrase", site:reuters.com to limit to a publisher, -word to exclude, when:7d for the last week.

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

Google News topic sections for the chosen language and country.

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

Include the front page of the chosen edition.

## `feeds` (type: `array`):

Any feed URLs to read alongside Google News, for example a publisher's own RSS. Same output format, same deduplication.

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

Two-letter language code of the Google News edition (en, de, fr, cs, es, pt, ja...).

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

Two-letter country code of the Google News edition (US, GB, DE, CZ, BR, IN...).

## `maxItemsPerSource` (type: `integer`):

Google News returns up to 100 items per query.

## `resolveLinks` (type: `boolean`):

Google News links point to news.google.com. When on, the actor decodes or follows each link to the publisher's own URL. Turn off for faster runs if you only need titles and sources.

## `articleDetails` (type: `boolean`):

Opens each article on the publisher's site and adds its image and real description (Google News itself only gives the headline). Pages are read only where robots.txt allows it; sites with bot protection or a paywall are skipped. Free of charge, but a run takes longer.

## `articleText` (type: `boolean`):

Also returns the full text of each article as plain text in articleText, up to 50,000 characters. Turns on Read article pages. Paywalled articles give no text.

## `publishedWithinHours` (type: `integer`):

Drop articles older than this. Leave empty for no limit.

## `newOnly` (type: `boolean`):

Keeps a snapshot per watch name (or per saved task) and returns only articles not seen in the previous run. Schedule it hourly or daily and you get a clean news feed for a brand, a competitor or a topic.

## `watchName` (type: `string`):

Name of the snapshot used by new-only mode, for example "brand-mentions". Runs from a saved task get a snapshot automatically.

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

Start of the period to cover. Google News returns at most 100 items per query, so when a date range is set every query is split into day-sized windows and the results are merged and deduplicated. A week of one busy keyword returned more than 600 articles instead of 100 in September 2026.

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

End of the period, inclusive. Ranges longer than 92 days are cut to 92 days.

## Actor input object example

```json
{
  "queries": [
    "Apify",
    "\"web scraping\" when:7d"
  ],
  "topStories": false,
  "language": "en",
  "country": "US",
  "maxItemsPerSource": 100,
  "resolveLinks": true,
  "articleDetails": true,
  "articleText": false,
  "newOnly": false
}
```

# Actor output Schema

## `articles` (type: `string`):

One row per article: title, real URL, source, published date, summary and which query, topic or feed found it.

## `changes` (type: `string`):

New articles compared with the previous snapshot of the same watch name or task.

## `summary` (type: `string`):

Per-source counts, unresolved links and totals.

# 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": [
        "Apify",
        "\"web scraping\" when:7d"
    ],
    "articleDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("deriverge/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": [
        "Apify",
        "\"web scraping\" when:7d",
    ],
    "articleDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("deriverge/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": [
    "Apify",
    "\\"web scraping\\" when:7d"
  ],
  "articleDetails": true
}' |
apify call deriverge/google-news-scraper --silent --output-dataset

```

## MCP server setup

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