# Google News Scraper - Articles by Keyword, Real URLs (`logiover/google-news-scraper`) Actor

Google News API alternative, no API key. Scrape Google News RSS feeds and export articles to CSV/JSON with real publisher URLs across 50+ countries.

- **URL**: https://apify.com/logiover/google-news-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** News, SEO tools, AI
- **Features:** Limited permissions
- **Stats:** 21 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 results

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 — Track Articles, Brands & Topics in Real Time 📰

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-97D700?logo=apify\&logoColor=white)](https://apify.com/logiover/google-news-scraper)
[![No API key required](https://img.shields.io/badge/No%20API%20key-required-success)](https://apify.com/logiover/google-news-scraper)
[![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-blue)](https://apify.com/logiover/google-news-scraper)
[![Category](https://img.shields.io/badge/News-Media%20Intelligence-orange)](https://apify.com/logiover/google-news-scraper)
[![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-informational)](https://apify.com/logiover/google-news-scraper)

Turn any **keyword, brand, topic, or location** into a clean, structured feed of news articles from **Google News** — **no API key, no login, and no proxy required**. This Google News scraper reads public RSS feeds and returns each story's **headline, publisher, Google News link, snippet, thumbnail, and publish date**. With `resolveUrls` enabled it also attempts to resolve the canonical publisher URL; `originalUrl` remains `null` when Google or the publisher cannot be resolved safely.

> ### 🏆 Why this Google News Scraper?
>
> Best-effort publisher URL resolution plus a stable Google News link · **No API key or proxy normally needed** · multilingual/localized feeds · search, topic, location and top-headlines modes · time-window stitching · source/date filters

***

### ✨ What this Actor does

- 🔍 **Search any keyword or phrase** — supports Google search operators: `"exact phrase"`, `OR`, `-exclude`, `site:domain.com`, `intitle:word`.
- 🗂️ **Browse by topic** — pull curated top stories from `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, or `HEALTH`.
- 📍 **Location-based news** — get coverage for a specific city, region, or country (e.g. `New York`, `London`, `Berlin`, `Tokyo`).
- 📰 **Top headlines** — grab the main Google News front-page feed for any language/country, ideal for daily digests.
- 🔗 **Best-effort publisher URLs** — attempts to resolve each Google redirect and stores the canonical publisher URL in nullable `originalUrl`; the stable Google News `link` is always retained.
- 🌍 **50+ countries & 30+ languages** — set `language` and `country` to localize which stories you receive.
- 📈 **100+ articles per query** — set `maxArticles` above 100 and the actor stitches multiple time-windowed feeds (`1h`, `1d`, `7d`, `30d`) and de-duplicates automatically.
- 🎯 **Source & date filters** — whitelist or blacklist publisher domains and restrict results to a date range or recent time window.
- 🖼️ **Thumbnails** — includes each article's preview image when available, at no extra cost.
- 📤 **Export anywhere** — download as **JSON, CSV, Excel, HTML, XML, or JSONL**, or stream results live via the Apify API and webhooks.

### 🚀 Quick start (3 steps)

1. **Enter what to monitor** — add one or more **Search keywords / topics**, or pick a **Topic** category, a **Location**, or toggle **Top headlines**.
2. **Set the region** — choose a **Language** and **Country**, then set **Max articles** (over 100 unlocks time-window stitching).
3. **Click Start** — every article is saved as one dataset row, ready to download or pipe into your stack.

No API key, no cookies, no proxy setup. It just runs.

### 📥 Input

All fields are optional. Choose one input mode — `queries`, `topic`, `geoLocation`, or `topHeadlines` — or run empty input to receive bounded top headlines for the default locale.

#### Example — monitor a brand across the news

```json
{
  "queries": ["openai", "anthropic claude"],
  "language": "en-US",
  "country": "US",
  "maxArticles": 100,
  "resolveUrls": true
}
```

#### Example — top stories in a topic category

```json
{
  "topic": "TECHNOLOGY",
  "language": "en-GB",
  "country": "GB",
  "maxArticles": 50,
  "extractThumbnails": true
}
```

#### Example — multi-query, filtered by source and date

```json
{
  "queries": ["electric vehicles", "\"battery technology\" -tesla", "site:reuters.com hydrogen"],
  "language": "de",
  "country": "DE",
  "maxArticles": 200,
  "fromDate": "2026-06-01",
  "includeSources": ["reuters.com", "bloomberg.com", "ft.com"]
}
```

#### Full parameters

| Field | Type | Description |
|---|---|---|
| `queries` | array | Search queries — each becomes a separate Google News feed. Supports `"exact phrase"`, `OR`, `-exclude`, `site:domain.com`, `intitle:word`. |
| `topic` | string (enum) | Browse top stories by category instead of searching: `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`. |
| `geoLocation` | string | Location-based news for a city/region/country (English name, e.g. `London`). |
| `topHeadlines` | boolean | Fetch the main Google News top-headlines feed and ignore queries/topic/geo. Great for daily digests. |
| `language` | string | Interface language, e.g. `en-US`, `en-GB`, `fr`, `de`, `es`, `ja`, `zh-CN`, `ar`, `tr`, `ru`. Default `en-US`. |
| `country` | string | ISO 2-letter region, e.g. `US`, `GB`, `FR`, `DE`, `JP`, `BR`, `IN`, `TR`. Default `US`. |
| `maxArticles` | integer | Max articles per feed (1–500). Above 100, the actor stitches multiple time windows and de-duplicates. |
| `timeWindow` | string (enum) | Restrict to a recent window: `1h`, `12h`, `1d`, `7d`, `30d`, `1y`. Ignored when `maxArticles` > 100. |
| `fromDate` | string | Drop articles published **before** this date (`YYYY-MM-DD` or full ISO). |
| `toDate` | string | Drop articles published **after** this date (`YYYY-MM-DD` or full ISO). |
| `includeSources` | array | Whitelist of publisher domains — only these sources are returned (e.g. `["reuters.com"]`). |
| `excludeSources` | array | Blacklist of publisher domains — these sources are filtered out. |
| `resolveUrls` | boolean | Attempt to resolve the publisher URL into nullable `originalUrl`; the Google News `link` remains available. Default `true`. |
| `extractThumbnails` | boolean | Include the article thumbnail image URL when available. Default `true`. |
| `proxyConfiguration` | object | Optional Apify Proxy. Off by default — Google News RSS rarely rate-limits. |

> 💡 **Tip:** Use one query per brand/competitor/theme and set `maxArticles` to `200` to pull a deep backlog. Combine `includeSources` with a tier-1 publisher list to build a clean, high-signal media feed.

### 📤 Output

Each article is one clean dataset row. Here is a trimmed, realistic sample (fields are exactly what the actor returns):

```json
{
  "title": "OpenAI unveils new reasoning model for enterprise customers",
  "description": "The company said the model improves multi-step task accuracy while cutting latency for large-scale deployments.",
  "source": "Reuters",
  "sourceDomain": "reuters.com",
  "sourceUrl": "https://www.reuters.com",
  "link": "https://news.google.com/rss/articles/CBMiT2h0dHBzOi8v...",
  "originalUrl": "https://www.reuters.com/technology/openai-reasoning-model-enterprise-2026-07-05/",
  "thumbnailUrl": "https://news.google.com/api/attachments/CC8i...=-w200-h200-p",
  "publishedAt": "2026-07-05T14:22:00.000Z",
  "publishedAtRaw": "Sat, 05 Jul 2026 14:22:00 GMT",
  "guid": "CBMiT2h0dHBzOi8vd3d3LnJldXRlcnMuY29t",
  "query": "openai",
  "language": "en-US",
  "country": "US",
  "timeWindow": "",
  "scrapedAt": "2026-07-06T09:00:00.000Z"
}
```

<details><summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Description |
|---|---|
| `title` | Article headline |
| `description` | Article snippet / summary from the feed |
| `source` | Publisher name (e.g. Reuters, BBC) |
| `sourceDomain` | Publisher domain |
| `sourceUrl` | Publisher home URL |
| `link` | Original Google News link |
| `originalUrl` | Best-effort canonical publisher article URL; nullable when resolution is disabled or unavailable |
| `thumbnailUrl` | Article thumbnail image URL, when available |
| `publishedAt` | Normalized publish timestamp (ISO 8601) |
| `publishedAtRaw` | Raw publish date string from the feed |
| `guid` | Unique article identifier |
| `query` | The search query that produced this result (in query mode) |
| `topic` | The topic category that produced this result (in topic mode) |
| `geoLocation` | The location that produced this result (in location mode) |
| `language` | Language code used for the run |
| `country` | Country code used for the run |
| `timeWindow` | Time window applied to the feed (if any) |
| `scrapedAt` | Timestamp when the article was scraped |

</details>

### 💡 Use cases

- **📡 News & brand monitoring** — track every article mentioning your company, product, or executives across 50+ countries and catch new coverage as it breaks.
- **🏢 Competitive & topic intelligence** — follow competitors, an industry, or a theme and feed fresh headlines into a daily digest or dashboard.
- **📣 PR & media analysis** — measure share of voice and coverage volume using clean source domains and accurate publish dates.
- **✍️ Content research & curation** — source trending stories by topic (`BUSINESS`, `TECHNOLOGY`, `SPORTS`, …) for a newsletter, feed, or blog.
- **🧠 NLP & data pipelines** — collect article metadata and canonical URLs for downstream content extraction, sentiment analysis, or dataset building.
- **🚨 Alerting & sentiment feeds** — schedule the actor and push new articles to Slack, email, or a webhook the moment they appear.

### 👥 Who uses it

PR & comms teams · brand managers · media monitoring & social listening tools · journalists & newsrooms · market and competitive-intelligence analysts · academic and market researchers · hedge funds & quant desks tracking event-driven signals · SEO & content marketers · data engineers building news datasets · agencies reporting on client coverage.

### 💰 Pricing

This Actor uses Apify's **pay-per-result** model — you're billed for the article rows you receive, with no monthly subscription and no per-request fees. Because it runs on plain HTTP with no proxy, runs are fast and cheap.

👉 See the **Pricing** tab on this page for the current rate.

### ❓ Frequently Asked Questions

**Is it legal to scrape Google News?**
This Actor collects **publicly available** news metadata (headlines, publisher names, links, snippets, dates) from Google News feeds — the same information any visitor can see without logging in. It does not access private data or bypass authentication. As always, use the data responsibly and in line with Google's terms and applicable law in your jurisdiction. For legal advice, consult a professional.

**Does Google News have a public API?**
Not really. Google's official Google News API was **deprecated years ago**, and there is no current public API for retrieving Google News article results. This Actor is a practical **Google News API alternative**: it reads the public feeds and returns structured, queryable article data you can integrate anywhere.

**Can I use this without an API key or login?**
Yes. There's **no API key, no login, and no proxy** to configure. Just enter a keyword or topic and run it — the actor reads Google News feeds over plain HTTP, which rarely rate-limits.

**Do I get the real article URL or the Google redirect?**
You always get the Google News RSS URL in `link`. With URL resolution enabled, the Actor also attempts to populate `originalUrl`; it remains `null` when Google or the publisher does not expose a resolvable canonical target.

**How much data can I get per query?**
A single Google News feed caps at about **100 results**. Set **Max articles** above 100 (up to 500) and the actor stitches multiple time-windowed feeds (`1h`, `1d`, `7d`, `30d`) and de-duplicates them to deliver more than the single-feed cap.

**Which languages and countries are supported?**
**30+ languages** (e.g. English, French, German, Spanish, Italian, Portuguese, Dutch, Polish, Japanese, Chinese, Arabic, Turkish, Russian) and **50+ countries** via ISO 2-letter codes. Set `language` and `country` to localize which stories you receive.

**Can I filter by date or recency?**
Yes. Use `timeWindow` for a recent window (`1h` → `1y`), or `fromDate` / `toDate` for a precise ISO date range. Note that `timeWindow` is ignored when `maxArticles` > 100 (the actor manages windows itself in that mode).

**Are duplicate articles removed?**
Yes. When stitching multiple time windows to exceed 100 results, the actor **de-duplicates** so you don't get the same story twice. You can also whitelist or blacklist publisher domains with `includeSources` / `excludeSources`.

**How do I export Google News articles to CSV or JSON?**
Run the Actor, then download the dataset as **CSV, JSON, Excel, HTML, XML, or JSONL** from the Storage tab — or pull the same data live via the Apify API and webhooks (Sheets, Slack, a CRM, or a database).

### 🔗 More scrapers from logiover

Build a full news, media, and competitive-intelligence stack:

| Actor | What it does |
|---|---|
| [news-intelligence-scraper](https://apify.com/logiover/news-intelligence-scraper) | Multi-source news aggregation & intelligence |
| [hacker-news-search-scraper](https://apify.com/logiover/hacker-news-historical-archive-scraper) | Search Hacker News stories, comments & discussions |
| [reddit-search-scraper](https://apify.com/logiover/reddit-search-scraper) | Search Reddit posts & threads by keyword |
| [competitor-ad-intelligence](https://apify.com/logiover/competitor-ad-intelligence) | Monitor competitor ad creatives & spend signals |
| [meta-ad-library-scraper](https://apify.com/logiover/meta-ad-library-scraper) | Scrape the Meta (Facebook/Instagram) Ad Library |
| [google-ads-transparency-scraper](https://apify.com/logiover/google-ads-transparency-scraper) | Pull ads from Google Ads Transparency Center |
| [serp-keyword-research](https://apify.com/logiover/serp-keyword-research) | SERP & keyword research for SEO and content |
| [github-activity-stream](https://apify.com/logiover/github-activity-stream) | Track GitHub repo & developer activity |
| [cve-security-advisory-monitor](https://apify.com/logiover/cve-security-advisory-monitor) | Monitor CVEs & security advisories |
| [arxiv-paper-scraper](https://apify.com/logiover/arxiv-paper-scraper) | Scrape arXiv research papers & metadata |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

### ⏰ Scheduling & integration

News monitoring is only useful if it's **continuous**. Use Apify **Schedules** to run this Actor every hour or every morning and keep a rolling feed of fresh coverage:

- 🔔 **Automated alerting** — trigger a webhook whenever a run finishes and push new articles straight to **Slack, Discord, email, or Microsoft Teams**.
- 🔗 **Live integrations** — connect the dataset to **Google Sheets, Airtable, a CRM, or your database** via the Apify API and webhooks.
- 🧩 **Actor-to-actor pipelines** — feed the canonical `originalUrl` list into a content extractor, summarizer, or sentiment model for an end-to-end media-intelligence workflow.
- 📅 **Daily digests** — pair `topHeadlines` or a `topic` with a morning schedule to generate a ready-to-send news brief.

### 🤖 AI Agents, MCP & RAG Integration

**Google News Scraper** works natively as an on-demand data tool for AI assistants and autonomous workflows.

Connect this Actor directly to **Apify AI**, **Claude Desktop**, **Cursor**, **VS Code**, **Windsurf**, **LangChain**, or **LlamaIndex** via the official **Apify MCP Server** — no custom wrapper code needed:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=logiover/google-news-scraper"
    }
  }
}
```

- **Schema-typed inputs & outputs:** Clean JSON records with explicit `.actor/input_schema.json` and `.actor/output_schema.json` definitions so LLM agents infer parameters and parse fields accurately without HTML noise.
- **Bounded & predictable runs:** Built-in volume caps and pay-per-result budget guards prevent runaway agent tool loops.
- **RAG & automation ready:** Stream run datasets straight into vector stores, n8n, Make, Zapier, or webhook pipelines.

### 💬 Support, Issues & Reviews

- **Bug reports & target-site changes:** Hit an unexpected empty result or selector change? [Open a ticket in the Issues tab](https://apify.com/logiover/google-news-scraper/issues) with your **Run ID** or sample input — we actively monitor issues and ship fixes fast.
- **Feature & field requests:** Need an additional data attribute or filter? [Request it in the Issues tab](https://apify.com/logiover/google-news-scraper/issues).
- **Enjoying this Actor?** If it saved you engineering time, please consider leaving an honest [review on Apify Store](https://apify.com/logiover/google-news-scraper/reviews) or bookmarking [logiover/google-news-scraper](https://apify.com/logiover/google-news-scraper) — organic developer feedback helps others discover reliable tools and keeps maintenance prioritized.

### ⚖️ Legal

This Actor collects publicly available information from Google News feeds. You are responsible for using the exported data in compliance with Google's terms of service, applicable data-protection and copyright laws, and any other relevant regulations in your jurisdiction. This tool is not affiliated with or endorsed by Google.

***

### Google scraping — frequently asked questions

#### Do I need a Google API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

#### How do I export Google data to CSV, Excel, JSON or Google Sheets?

Open the **Storage** tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

#### Can I schedule this Google scraper to run daily or hourly?

Yes. Use the **Schedules** tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the articles you care about really do change that fast.

#### How many articles can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

#### Is scraping Google legal?

This Actor collects only information that Google publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

#### What happens if Google blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run **fails with the reason** instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

#### Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.

### 📝 Changelog

#### 2026-11-14

- Verified live high-volume benchmark (2026-11-14): extracted **474** structured records in **178.8s** on the production build.
- Runtime & reliability improvements: bounded canonical URL resolution against run timeout so all fetched articles flush cleanly.

#### 2026-11-11

- Added reliable terminal run status telemetry and structured Apify AI / MCP Server (`mcp.apify.com`) tool configuration.
- Added direct Issues & Reviews support links and refreshed live maintenance verification.

#### 2026-11-01

- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
- README refreshed: 1 link to renamed Actors updated, 2 links to retired Actors removed.

#### 2026-10-15

- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
- Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.
- The prefilled example for `maxArticles` is now 152 (was 100).
- The default used when the field is left out for `maxArticles` is now 500 (was 100).

#### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 19 columns returned, 78.9% of cells populated.
- Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 4 column(s) came back empty in this sample (`thumbnailUrl`, `topic`, `geoLocation`, `timeWindow`); these are under review.

#### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

#### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

#### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.
- Replaced the field-level output schema with a canonical `results` dataset link so run results open correctly in the Apify Console.
- Declared 19 dataset fields from typed live cloud samples so the output contract is no longer an empty placeholder.
- Declared 19 nullable dataset fields from typed live cloud samples so the output contract is no longer an empty placeholder or brittle to sparse modes.
- Raised fast-xml-parser's aggregate entity limit for legitimate HTML-rich Google News topic feeds while retaining explicit entity-count, depth, entity-size, and expanded-content safety ceilings.
- Made XML/parser and all-feed zero regressions fail explicitly while preserving legitimate post-fetch filter empties; locally verified BUSINESS/en-GB/GB as 30 unique schema-valid rows.
- Tightened URI/date/feed-type schema constraints, corrected best-effort canonical-URL documentation, and upgraded pinned XML/HTTP dependencies to a zero-vulnerability production lockfile.

#### 2026-08-01 — Health-check remediation

- Fixed current Google News topic feeds exceeding `fast-xml-parser`'s 1,000-entity default: ordinary RSS entities now use a bounded 20,000-expansion allowance under explicit depth, entity-size and 2 MB expanded-content ceilings.
- A parser regression or all-feed zero response now fails explicitly instead of producing a misleading successful empty dataset; legitimate source/date filters can still yield zero after a healthy feed.
- Live-tested `BUSINESS / en-GB / GB`: 30 parsed rows, 30 unique GUIDs and links, valid timestamps and no missing titles. Tightened URI/date/enum dataset types.
- Pinned `fast-xml-parser 5.10.1`, `undici 6.28.0` and reproducible dependencies; production audit is clean.

#### 2026-07-06

- ✨ README overhaul: richer output sample, ready-to-run example scenarios, cross-promo links, clearer quick-start and expanded FAQ.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

#### 2026-06-07

- Docs: added coverage for Google News API alternative, scraping without an API key, and exporting articles to CSV/JSON.

#### 2026-06-05

- SEO and documentation refresh; title and metadata aligned to "Google News scraper" with accurate output fields.
- Verified live and rebuilt.

***

\*Maintained: last verified 2026-11-14 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

# Changelog

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

# Actor input Schema

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

List of search queries. Each query becomes a separate Google News RSS feed. Supports Google's search operators: "exact phrase" for exact match, OR for boolean OR (default is AND between words), -word to exclude, site:domain.com to filter by source, intitle:word to match in title only.

Leave empty if using 'topic' or 'geoLocation' mode instead.

## `topic` (type: `string`):

Browse top stories by topic instead of searching keywords. Use this OR queries, not both. Returns curated top headlines from Google News in that category.

## `geoLocation` (type: `string`):

Get news for a specific city, state, or region instead of search/topic. Use city or country name in English (e.g. 'New York', 'London', 'Berlin', 'Tokyo'). Leave empty if using queries or topic.

## `topHeadlines` (type: `boolean`):

If true, fetches the main Google News top headlines feed for the selected language/country and ignores queries/topic/geoLocation. Useful for daily news digests.

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

Google News interface language (hl parameter). Determines the language of the returned headlines. Leave on the default (English US) for the broadest coverage.

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

Geographic region for news (gl parameter). Google News tailors story selection to this region. Leave on the default (United States) for broad global coverage.

## `maxArticles` (type: `integer`):

Maximum articles to return per query (or per topic/geo feed). Google News RSS caps at ~100 per single feed; if set higher than 100, the actor automatically stitches multiple time-windowed feeds (when:1h, when:1d, when:7d, when:30d) and deduplicates to deliver more results.

## `timeWindow` (type: `string`):

Restrict results to a recent time window using Google's 'when:' operator. Ignored when maxArticles > 100 (the actor stitches multiple windows automatically in that case).

## `fromDate` (type: `string`):

Filter out articles published BEFORE this date. Format: YYYY-MM-DD or full ISO (2026-05-01T00:00:00Z). Applied post-fetch on the publication date in the RSS feed.

## `toDate` (type: `string`):

Filter out articles published AFTER this date. Format: YYYY-MM-DD or full ISO. Applied post-fetch.

## `includeSources` (type: `array`):

Whitelist of publisher domains. If set, only articles from these sources are returned. Example: \['reuters.com', 'bloomberg.com', 'ft.com']. Matched against the source URL host.

## `excludeSources` (type: `array`):

Blacklist of publisher domains. Articles from these sources are filtered out. Example: \['clickbait.com', 'spam-news.net'].

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

Google News links go through a redirect (news.google.com/articles/CBMi...). When enabled, the actor follows the redirect once per article via a fast HEAD request and returns the canonical publisher URL. Adds ~50ms per article but gives clean URLs for downstream use (CRM, content extraction, SEO analysis).

## `extractThumbnails` (type: `boolean`):

Include the thumbnail image URL from each article's media:content tag when available. No extra cost.

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

Google News RSS rarely rate-limits, so most users don't need a proxy. If your account hits rate limits with very high volumes, enable Apify Proxy here.

## Actor input object example

```json
{
  "queries": [
    "openai",
    "anthropic",
    "claude ai"
  ],
  "topic": "",
  "geoLocation": "",
  "topHeadlines": false,
  "language": "en-US",
  "country": "US",
  "maxArticles": 152,
  "timeWindow": "",
  "fromDate": "",
  "toDate": "",
  "includeSources": [],
  "excludeSources": [],
  "resolveUrls": true,
  "extractThumbnails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All structured records produced by this run. Open the Dataset tab to inspect or export them.

# 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": [
        "openai",
        "anthropic",
        "claude ai"
    ],
    "language": "en-US",
    "country": "US",
    "maxArticles": 152
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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": [
        "openai",
        "anthropic",
        "claude ai",
    ],
    "language": "en-US",
    "country": "US",
    "maxArticles": 152,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/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": [
    "openai",
    "anthropic",
    "claude ai"
  ],
  "language": "en-US",
  "country": "US",
  "maxArticles": 152
}' |
apify call logiover/google-news-scraper --silent --output-dataset

```

## MCP server setup

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