# 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
- **Features:** Limited permissions
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 article scrapeds

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?

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

### What does Google News Scraper do?

**Google News Scraper** is an **Apify Actor** that extracts news articles from Google News for any keyword, brand, or topic — structured and ready for analysis. It acts as a **news articles extractor** and a **Google News data** API, returning title, source URL, publication date, and optional headline sentiment for each result. No API key is needed; it runs on demand or on a schedule and delivers clean JSON output.

Run it with a list of keywords and get up to 200 articles per query, filtered by language, region, and recency — in seconds.

***

### Why use Google News Scraper?

- **Brand and PR monitoring** — track every press mention of your company, product, or executives across global news outlets in real time.
- **Competitor intelligence** — monitor competitor announcements, product launches, and earnings coverage to stay ahead of market moves.
- **Crypto and financial research** — aggregate breaking news on tokens, ETFs, regulatory decisions, and macro events for trading signals and reports.
- **Content marketing and SEO** — discover trending topics and high-traffic keywords in your niche to fuel editorial calendars and link-building campaigns.
- **Academic and media research** — collect structured **Google News data** across languages and regions for large-scale media analysis without scraping bans or CAPTCHAs.

***

### How to use Google News Scraper

1. Open the Actor on Apify and click **Try for free**.
2. Set `queries` to your list of keywords (e.g. `["bitcoin", "OpenAI regulation"]`).
3. Choose `language` and `country` for regional news editions.
4. Set `maxArticlesPerQuery` (default 100, up to 200).
5. Enable `includeSentiment` for positive/negative/neutral headline scoring.
6. Enable `extractFullText` to pull full article body from the source page.
7. Click **Start** — results appear in the dataset in seconds.
8. Export as JSON, CSV, or connect via the **Google News scraper API** endpoint.

***

### Input

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

***

### Output

Sample **Google News data** records from a single run:

```json
[
  {
    "query": "bitcoin",
    "title": "Bitcoin Hits New All-Time High Amid ETF Inflows",
    "source": "Reuters",
    "url": "https://reuters.com/markets/currencies/bitcoin-surges-2026-09-01/",
    "description": "Bitcoin surged past $100,000 on Monday as spot ETF net inflows hit a monthly record...",
    "published_at": "2026-09-01T09:15:00Z",
    "hours_ago": 2.5,
    "language": "en",
    "country": "US",
    "sentiment": { "label": "positive", "score": 0.72 },
    "full_text": "Bitcoin surged past $100,000 on Monday as spot ETF net inflows hit a monthly record of $4.2B..."
  },
  {
    "query": "OpenAI regulation",
    "title": "EU Finalizes AI Act Enforcement Rules Targeting Foundation Models",
    "source": "Financial Times",
    "url": "https://ft.com/content/ai-act-enforcement-2026",
    "description": "European regulators published binding enforcement guidelines for large AI models...",
    "published_at": "2026-09-01T07:30:00Z",
    "hours_ago": 4.2,
    "language": "en",
    "country": "US",
    "sentiment": { "label": "neutral", "score": 0.55 },
    "full_text": null
  }
]
```

***

### Data fields

| Field | Type | Description |
|-------|------|-------------|
| `query` | string | The keyword that produced this article |
| `title` | string | Article headline |
| `source` | string | Publication name (e.g. Reuters, Bloomberg) |
| `url` | string | Direct link to the original article |
| `description` | string | Google News snippet / excerpt |
| `published_at` | string | ISO 8601 publication timestamp |
| `hours_ago` | number | Hours elapsed since publication |
| `language` | string | Language code of the result |
| `country` | string | Country edition code |
| `sentiment.label` | string | `positive`, `negative`, or `neutral` (when enabled) |
| `sentiment.score` | number | Confidence score 0–1 (when enabled) |
| `full_text` | string | Full article body (when `extractFullText` is true) |

***

### Cost estimation

Pricing is **Pay-Per-Event** at **$0.001 per article** scraped (first 20 articles per account (one-time trial, not per run or per day) are free).

| Run scenario | Articles | Estimated cost |
|---|---|---|
| Single keyword, 20 articles | 20 | **Free** |
| Single keyword, 100 articles | 100 | ~$0.08 |
| 3 keywords x 100 articles | 300 | ~$0.28 |
| 5 keywords x 100 articles | 500 | ~$0.48 |
| Daily monitoring, 5 keywords | ~500/day | ~$0.48/day |

***

### FAQ

**Does this Google News scraper API require a Google API key?**
No. The Actor is powered by **Google News RSS feeds**, which are public. No API key, no quota, no billing with Google.

**How is this different from a paid News API?**
Commercial news APIs charge $150-$500/month for similar volume. This **news articles extractor** costs a fraction of that — $0.001 per article — with no subscription lock-in. You only pay for what you use.

**Can I run this on a schedule for continuous monitoring?**
Yes. Use Apify's built-in scheduler to run the Actor daily, hourly, or at any interval. Results accumulate in the dataset so you can track coverage over time.

> **Disclaimer**: This Actor collects publicly available data from Google News RSS feeds for research, monitoring, and automation purposes. Users are responsible for complying with Google's Terms of Service and applicable laws. Do not use for unauthorized commercial redistribution of copyrighted content.

***

**Keywords:** Google News scraper API, news articles extractor, Google News data, news aggregator, RSS alternative, media monitoring, sentiment analysis, keyword news tracker

***

### Related actors

- [Crypto News Aggregator](https://apify.com/gochujang/crypto-news-aggregator) — Crypto-specific news sentiment with Google News as one source alongside CoinDesk and others
- [Hacker News Scraper](https://apify.com/gochujang/hacker-news-scraper) — Tech-focused discussion alongside Google News for broader media coverage
- [Earnings Call Transcript](https://apify.com/gochujang/earnings-call-transcript) — Pair earnings transcripts with Google News coverage for full market context

### Feedback

If this actor powers your news monitoring, a review helps others find it: [Leave a review on Apify Store](https://apify.com/gochujang/google-news-scraper#reviews)

# 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/2WIm36960yCbjiZid/openapi.json
