# Google News Scraper — Headlines & Article URLs (`taroyamada/google-news-scraper`) Actor

Google News scraper: headlines, links, RSS URLs. Paste query and Start. JSON.

- **URL**: https://apify.com/taroyamada/google-news-scraper.md
- **Developed by:** [naoki anzai](https://apify.com/taroyamada) (community)
- **Categories:** News, Developer tools, Automation
- **Stats:** 8 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 google news rss 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 📰 Google News Scraper

Build robust content discovery pipelines by extracting fresh article URLs and metadata straight from Google News. This actor serves as a highly efficient discovery surface, querying Google News RSS to find the latest articles matching your target keywords. It is explicitly designed for data engineers and developers who need to feed news links into downstream processing tools, such as an Article Content Extractor or LLM ingestion scripts.

Instead of scraping entire news sites blindly, use this tool to discover highly relevant, localized content. You can configure the scraper to pull results for specific regions and languages, making it ideal for global topic monitoring or localized sentiment analysis. The built-in deduplication engine ensures that even if you run dozens of overlapping queries, your final dataset contains only unique article URLs.

Every run delivers structured records containing the target article URL, headline, publisher identity, and precise publication timestamp. This makes it incredibly easy to schedule weekly topic digests, track industry trends over time, or gather a continuous stream of training data for AI models. Stop wrestling with complex news APIs and use this fast, query-based scraper to fuel your data workflows.

### Store Quickstart

- Start with **Quickstart (company news)** for a reliable first run.
- Use **Brand Monitoring** to track multiple companies or themes.
- Use **Google News → Article Cleanup** when your next step is article extraction.

### Where this actor fits

| Surface | Best for |
|---|---|
| **Google News Scraper** | Discover current article URLs by query |
| **Article Content Extractor** | Clean the discovered article/news/blog pages |
| **Website Content Extractor** | Clean discovered non-article pages |
| **RSS Feed Aggregator** | Discover fresh URLs from known publishers and blogs |

### Key Features

- 🔎 **Query-based discovery** — Pull article URLs from Google News RSS without a paid API
- 🌍 **Localized results** — Tune by `language` and `country`
- 🔄 **Deduplication** — Remove duplicate URLs across multiple queries
- 📰 **Publisher context** — Keep headline, source, description, and publish date
- ⚡ **Fast feeder step** — Lightweight discovery before deeper extraction

### Use Cases

| Who | Why |
|---|---|
| PR teams | Find the latest media mentions to hand off for cleanup |
| Competitive intelligence | Build newsroom watchlists from search queries |
| Content ops | Discover trending stories before enrichment |
| AI / RAG teams | Create a steady article URL feed for downstream extraction |

### Input

| Field | Type | Default | Description |
|---|---|---:|---|
| `queries` | `string[]` | required | Search queries (max 50) |
| `language` | `string` | `en` | Google News language code |
| `country` | `string` | `US` | Google News country code |
| `maxItems` | `integer` | `25` | Max articles per query |
| `deduplicate` | `boolean` | `true` | Remove duplicate links across queries |
| `timeoutMs` | `integer` | `15000` | Request timeout |
| `delivery` | `string` | `dataset` | `dataset` or `webhook` |
| `webhookUrl` | `string` | — | Webhook target when `delivery=webhook` |
| `dryRun` | `boolean` | `false` | Run without saving |

#### Input Example

```json
{
  "queries": ["OpenAI", "Google AI"],
  "language": "en",
  "country": "US",
  "maxItems": 20,
  "deduplicate": true
}
```

### Input Examples

#### Example: Daily tech news in English

```json
{
  "queries": [
    "AI safety",
    "open source"
  ],
  "language": "en",
  "country": "US",
  "maxItemsPerQuery": 30
}
```

#### Example: Localized news (JP)

```json
{
  "queries": [
    "人工知能"
  ],
  "language": "ja",
  "country": "JP",
  "maxItemsPerQuery": 50
}
```

#### Example: Multi-keyword dedupe run

```json
{
  "queries": [
    "climate",
    "renewable energy"
  ],
  "language": "en",
  "country": "US",
  "maxItemsPerQuery": 40,
  "dedupeAcrossQueries": true
}
```

### Output

| Field | Type | Description |
|---|---|---|
| `title` | string | Article headline |
| `link` | string | Direct article URL for downstream cleanup |
| `source` | string | Publisher name |
| `pubDate` | string | Original RSS publish date |
| `pubDateISO` | string | ISO timestamp version of `pubDate` |
| `description` | string | Short Google News snippet |
| `query` | string | Search query that surfaced the row |

#### Output Example

```json
{
  "title": "Codex for (almost) everything",
  "link": "https://openai.com/index/codex-for-almost-everything",
  "source": "OpenAI",
  "pubDate": "Thu, 16 Apr 2026 10:00:00 GMT",
  "pubDateISO": "2026-04-16T10:00:00.000Z",
  "description": "The updated Codex app for macOS and Windows adds computer use...",
  "query": "OpenAI"
}
```

### First-run buyer experience

1. Run **Quickstart (company news)**.
2. Confirm the dataset shows real article URLs, not generic homepages.
3. Pick the top URLs and send them to **Article Content Extractor**.
4. If a discovered URL is actually a docs/product/policy page, clean it with **Website Content Extractor** instead.

### Tips & Limitations

- Use broad queries for the first run; refine later.
- RSS is a discovery layer only — it does not return full article bodies.
- Combine multiple narrower queries instead of one overloaded boolean query when relevance matters.

### FAQ

**Can I get full article text here?**

No. This actor discovers URLs and returns metadata only. Use Article Content Extractor for full content.

**Why use this instead of scraping the Google News UI?**

The RSS surface is lighter, more stable, and better suited for recurring discovery runs.

**Can I schedule recurring news monitoring?**

Yes — run it on a schedule, then pass the discovered URLs into an article-cleanup step.

### Related Actors

Content Intelligence Pack handoffs:

- [📰 Article Content Extractor](https://apify.com/taroyamada/article-content-extractor) — clean newsroom and blog article pages
- [📄 Website Content Extractor](https://apify.com/taroyamada/website-content-extractor) — clean discovered non-article pages
- [📡 RSS Feed Aggregator](https://apify.com/taroyamada/rss-feed-aggregator) — discover fresh URLs from known publisher feeds

### Cost

**Pay Per Event**:

- `actor-start`: $0.01
- `dataset-item`: $0.003 per output item

### ⭐ Was this helpful?

If this actor saved you time, please [leave a ★ rating](https://apify.com/taroyamada/google-news-scraper/reviews) on Apify Store.

# Actor input Schema

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

Google News search queries (max 50). Start with broad terms for the strongest first-run proof.

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

Language code (for example `en`, `ja`, `de`).

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

Country code (for example `US`, `JP`, `GB`).

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

Maximum articles to keep per query (1-100).

## `deduplicate` (type: `boolean`):

Remove duplicate article URLs across queries.

## `timeoutMs` (type: `integer`):

Request timeout in milliseconds.

## `delivery` (type: `string`):

How to deliver results.

## `webhookUrl` (type: `string`):

URL to POST discovery results when delivery=webhook.

## `dryRun` (type: `boolean`):

Run without saving results.

## Actor input object example

```json
{
  "queries": [
    "OpenAI",
    "Google AI"
  ],
  "language": "en",
  "country": "US",
  "maxItems": 25,
  "deduplicate": true,
  "timeoutMs": 15000,
  "delivery": "dataset",
  "dryRun": false
}
```

# 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",
        "Google AI"
    ]
};

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

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

```

## MCP server setup

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