# Google News Scraper — Multi-keyword, Sentiment, Full Text (`gochujang/google-news-scraper`) Actor

Scrape Google News for any keyword or topic. Supports multiple queries, language/region filtering, date ranges, sentiment analysis, and optional full article text extraction. No API key required. $0.001/article.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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

> **Google News scraper** for any keyword, topic, or brand. Use as a **news aggregator** or **RSS alternative** with multi-keyword batch support, language & region filtering, headline sentiment analysis, and optional full article text extraction. Structured **news API**-style output. No API key required. **$0.001/article.**

***

### ⚡ Quick start

Set your keywords and click **Start**:

```json
{
  "queries": ["bitcoin price", "OpenAI", "Apple earnings"],
  "language": "en",
  "country": "US",
  "maxArticlesPerQuery": 100
}
```

Returns up to 100 articles per keyword with title, source, URL, and publication date — ready for analysis or export.

***

### Use cases

| Use case | Example query |
|----------|---------------|
| **Brand monitoring** | `"YourCompany"` — track press coverage in real time |
| **Competitor intelligence** | `"Tesla earnings"`, `"OpenAI product"` |
| **Market research** | `"semiconductor shortage"`, `"AI regulation"` |
| **Crypto & finance** | `"bitcoin"`, `"Fed rate decision"`, `"ETF approval"` |
| **Content marketing** | Find trending topics in any niche |
| **Academic research** | Aggregate news coverage of any topic |
| **SEO monitoring** | Track keyword mentions across news sources |

***

### Output fields

```json
{
  "query": "bitcoin",
  "title": "Bitcoin Hits New All-Time High Amid ETF Inflows",
  "source": "Reuters",
  "url": "https://reuters.com/...",
  "description": "Bitcoin surged past $100,000 on Thursday...",
  "published_at": "2026-08-28T09:15:00Z",
  "hours_ago": 2.5,
  "language": "en",
  "country": "US",
  "sentiment": { "label": "positive", "score": 0.6 },
  "full_text": "Bitcoin surged past $100,000 on Thursday as..."
}
```

***

### Input options

| Field | Default | Description |
|-------|---------|-------------|
| `queries` | — | **Required.** List of keywords/topics to search (each returns up to 200 articles) |
| `language` | `en` | Language code: `en`, `ko`, `ja`, `de`, `fr`, `es`, `pt`, etc. |
| `country` | `US` | Country code: `US`, `KR`, `JP`, `GB`, `DE`, `FR`, etc. |
| `maxArticlesPerQuery` | `100` | Max articles per keyword (1–200) |
| `deduplicateAcrossQueries` | `true` | Remove duplicate URLs when queries overlap |
| `includeSentiment` | `false` | Add `positive`/`negative`/`neutral` label + score to each headline |
| `extractFullText` | `false` | Fetch full article body from source URL (slower, uses more memory) |
| `minPublishedHoursAgo` | `0` | Only return articles published within the last N hours (0 = no filter) |
| `limit` | `0` | Hard cap on total articles across all queries (0 = no cap) |

***

### Multi-language & regional news

Combine `language` and `country` to get regional editions:

| Region | `language` | `country` |
|--------|-----------|---------|
| Korean news | `ko` | `KR` |
| Japanese news | `ja` | `JP` |
| German news | `de` | `DE` |
| UK English | `en` | `GB` |
| Brazilian Portuguese | `pt` | `BR` |

***

### Pricing

- **$0.001** flat per run start
- **$0.001** per article scraped (first **20 articles free**)

| Articles | Cost |
|----------|------|
| Up to 20 | **Free** |
| 100 articles | ~$0.08 |
| 3 keywords × 100 articles | ~$0.28 |
| Daily run, 5 keywords | ~$0.46/day |

***

### Integration example

Schedule a daily news digest via the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/gochujang~google-news-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["your brand", "competitor name", "industry trend"],
    "includeSentiment": true,
    "maxArticlesPerQuery": 50
  }'
```

Then retrieve results:

```bash
curl "https://api.apify.com/v2/acts/gochujang~google-news-scraper/runs/last/dataset/items?token=YOUR_TOKEN"
```

***

### Notes

- Powered by **Google News RSS feeds** — no scraping bans, no CAPTCHAs, no proxies needed
- Articles are deduplicated by GUID across multiple queries
- `sentiment` uses rule-based keyword scoring — fast and lightweight, not ML-based
- `extractFullText` fetches the source article page; may fail for paywalled content
- Google News RSS returns up to ~100 articles per query (latest news only)
- For historical news archive, combine with `minPublishedHoursAgo` filtering

**Keywords:** Google News scraper, news aggregator, news API alternative, multi-keyword news, sentiment analysis, RSS scraper, media monitoring, news data extraction

# Actor input Schema

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

List of keywords or topics to search. Each query fetches up to 100 articles.

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

Language code for results (e.g. en, ko, ja, de, fr). Default: en

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

Country code for regional news (e.g. US, KR, JP, GB, DE). Default: US

## `maxArticlesPerQuery` (type: `integer`):

Maximum number of articles to return per query (1–200). Default: 100

## `extractFullText` (type: `boolean`):

Fetch and extract the full article body from the source URL. Slower but more data-rich.

## `deduplicateAcrossQueries` (type: `boolean`):

Remove duplicate articles when multiple queries return the same URL.

## `minPublishedHoursAgo` (type: `integer`):

Only include articles published at most N hours ago. 0 = no filter.

## `includeSentiment` (type: `boolean`):

Add basic positive/negative/neutral sentiment score for each headline.

## `limit` (type: `integer`):

Maximum total articles across all queries. 0 = no limit.

## Actor input object example

```json
{
  "queries": [
    "bitcoin",
    "AI market"
  ],
  "language": "en",
  "country": "US",
  "maxArticlesPerQuery": 100,
  "extractFullText": false,
  "deduplicateAcrossQueries": true,
  "minPublishedHoursAgo": 0,
  "includeSentiment": false,
  "limit": 0
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (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": [
        "bitcoin",
        "AI market"
    ]
};

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

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

```

## MCP server setup

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