# Google News Feed (legacy — use google-news-scraper) (`halobartku/google-news-feed`) Actor

Google News scraper for any topic, brand or competitor. 10 languages, one deduplicated feed: headline, publisher, ISO 8601 time, snippet, edition. Pay per harvested query only — zero-coverage queries and failed runs are never charged.

- **URL**: https://apify.com/halobartku/google-news-feed.md
- **Developed by:** [B](https://apify.com/halobartku) (community)
- **Categories:** News, Agents, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $150.00 / 1,000 query feed delivereds

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 — Topic & Brand Monitoring Feed (No API Key)

Normalised topic feeds from Google News RSS for monitoring, dashboards and AI
agents. No Google account, no API key, no proxy needed — the same public feed
Google News itself is built on.

Give it topic queries (`openai`, `acme competitor`, `"exact phrase"`,
`künstliche intelligenz` in the German edition) and get one clean dataset:
article title, URL, publisher name + URL, publish time (ISO 8601 UTC),
language/geo edition and a snippet — deduplicated across queries.
10 languages out of the box (en/de/fr/es/pl/it/pt/nl/ja/ko/zh), country
edition inferred from the language.

**Why this one:** pay-per-event, not a monthly rental. You are charged once
per successfully harvested topic query — a query with zero coverage returns
no rows and is **never charged**. Failed runs are never charged either.

### Example input

```json
{
  "queries": ["openai", "\"ai chip export controls\"", "künstliche intelligenz"],
  "language": "en"
}
```

### Sample output (real rows from a live run, 2026-08-20)

Dataset: `t0tvcrcvFDiDIZZuG`

```json
[
  {
    "query": "openai",
    "title": "Exclusive | OpenAI's Second-Quarter Sales Show Tepid Growth Compared With Anthropic - WSJ",
    "url": "https://news.google.com/rss/articles/CBMiqwFBVV95cUxPOEdPZTRQN2NiUEpURUc2cFBxaGN3QlpNV203c05DczRMdFJDWHRoazgtZGVaQlE0aU9CWW9LcC1JcGJwZ1VXd1lsQ0dnOEQ0MzlDdjJZOV9Oend0M1NON0RnUEZ5UHlMMFhrR09UU3pzSlAwRnl5OXRPbWd3NVljR21NNjBmWkVnWm9fZWkxVmZjbFEyQjJod1ZvMjFqSHNFX0VOb0s1X0puUVk?oc=5",
    "published_at": "2026-08-18T23:47:00Z",
    "source_name": "WSJ",
    "source_url": "https://www.wsj.com",
    "fetched_at": "2026-08-20T16:09:00.787863Z",
    "language": "en",
    "geo": "us",
    "description_snippet": "Exclusive | OpenAI's Second-Quarter Sales Show Tepid Growth Compared With Anthropic WSJ"
  },
  {
    "query": "openai",
    "title": "OpenAI 'will be a public company in 2027' or sooner, CFO Friar tells employees - CNBC",
    "url": "https://news.google.com/rss/articles/CBMidEFVX3lxTFBjVnJGYzVGcWt5c0F3WTY3elk5SkRrSUV3U3Y2OFdIV1dCRm4wVU5PZF8wV1VXT2Q4cFZZU3NZWlRFRTVhMzNYNTZNbEh2bmZ1aDJEWnFINFR6dlVqdGVsQ1RRSmhBV0dKYkFwcTZpQk56MGlZ0gF6QVVfeXFMTnhrRVAzUVl4M3FxY3gxcjdrZFhGODd4X2sxYzRpS1JTaHNJaXNxVEFuSExkOWlNVkYwZnJKX0xXV1hCOUxORnVpLWM1UEszb3BLa1gxMmZVa3dDQ2JNc3hyMERhMXFibThXczd5Y05BRFo5QlRONXdxQ3c?oc=5",
    "published_at": "2026-08-19T19:23:36Z",
    "source_name": "CNBC",
    "source_url": "https://www.cnbc.com",
    "fetched_at": "2026-08-20T16:09:00.787863Z",
    "language": "en",
    "geo": "us",
    "description_snippet": "OpenAI 'will be a public company in 2027' or sooner, CFO Friar tells employees CNBC"
  }
]
```

*(URLs truncated for readability? No — those are the real Google News redirect
links, exactly as delivered. They resolve to the publisher's article.)*

### Use with AI agents (MCP)

Expose this actor as a tool to Claude, Cursor, VS Code or any MCP client — add
the [Apify MCP server](https://mcp.apify.com) pinned to this actor:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?actors=halobartku~google-news-feed"
    }
  }
}
```

Then just ask: *"Pull the latest 50 articles about 'anthropic' and summarise
the sentiment by publisher."*

### For AI agents & LLM apps (compact reference)

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com/) or the Apify API (actor: `halobartku/google-news-feed`).

**Purpose:** One normalised Google News dataset for any set of topic queries — brand mentions, competitor moves, industry keywords — across 10 language editions, without API keys or proxies. Designed as the detection/routing layer of a news pipeline: find what changed, fetch full text in a second pass only where it matters.

**Minimal input:**

```json
{ "queries": ["your brand", "\"competitor name\""], "language": "en" }
```

**Output:** one row per article — `query`, `title`, `url` (Google News redirect, resolves to publisher), `source_name`, `source_url`, `published_at` (ISO 8601 UTC), `fetched_at`, `language`, `geo`, `description_snippet`.

**Behaviors an agent should know:**

- `queries` is an array; all results land in one dataset with one schema, deduplicated across queries by URL.
- `language` sets the Google News edition (en/de/fr/es/pl/it/pt/nl/ja/ko/zh); query in the same language for best recall. Country `geo` is inferred.
- Feed order is Google's relevance ranking, not chronological — sort by `published_at` downstream if you need time order.
- \~100 items per query per fetch is the feed's coverage window; schedule recurring runs for continuous monitoring.
- A query with zero coverage returns zero rows and fires **no charge event** — safe to probe speculative queries cheaply.
- `published_at` can be an empty string when the feed carries no date; treat as unknown, not as epoch.

### What you get per item

| field | notes |
|---|---|
| `query` | the topic this item was harvested for |
| `title` | article headline |
| `url` | Google News redirect URL — resolves to the publisher article |
| `source_name` / `source_url` | publisher |
| `published_at` | ISO 8601 UTC (empty string when the feed carries no date) |
| `fetched_at` | ISO 8601 UTC harvest time |
| `language` / `geo` | edition used |
| `description_snippet` | first 300 chars, HTML stripped |

### FAQ

**How many articles per query?**
Google News RSS caps a topic at ~100 items per fetch — that is the feed's
coverage window, not ours. Items arrive in feed order (Google's relevance
ranking), not date-sorted; sort by `published_at` downstream if you need
chronology.

**What if my query has zero coverage?**
No rows, no charge. The `feed-harvested` event fires only after a query's
rows are actually written. A run monitoring 10 brands where 3 have no news
costs 7 events.

**Do I need a proxy, API key or Google account?**
No. The feed is public and keyless. Runs work without any proxy
configuration in normal conditions.

**Can I monitor competitors in other languages?**
Yes — set `language` and query in that language; the country edition is
inferred (de→Germany, pl→Poland, ja→Japan, …). Exact phrases in quotes work
in every edition.

**Full article text?**
Not in this layer — this is the feed layer (headline, publisher, time,
link, snippet). Use it to detect and route; fetch full text in a second pass
only for the articles that matter.

**What does a failed run cost me?**
Nothing. Failed or empty queries are never charged — that is the core of our
per-event pricing.

### Pricing

Pay-per-event: **one `feed-harvested` event per successfully harvested topic
query** ($0.15). A run with 5 topics that all return coverage = 5 events.
Empty queries and failed runs are free. No monthly fee, no minimum.

**Honest math vs the $19.99/month alternative:** pay-per-event wins when you
check occasionally or track a handful of topics (4 topics × 1 run/week ≈
$2.40/mo). If you poll 50 topics hourly, a monthly plan is cheaper — use the
Pricing tab's calculator for your volume.

### Changelog

- **0.1** — initial release: multi-query harvest, 10-language editions,
  cross-query dedup, per-query pay-per-event pricing.

### Disclosure

This actor was built and is operated by an AI agent (Jarvis, for its operator
Bartosz). The parsing logic is deterministic, the listing claims are backed
by live end-to-end runs, and the human operator reviews and publishes
releases.

### SEO keywords

google news scraper, google news api, google news rss feed, news scraper no api key, news feed scraper, topic monitoring news, brand monitoring news, competitor news monitoring, media monitoring api, press clipping service, news aggregation tool, google news search api, news dataset for llm, news data for ai agents, multilingual news scraper, google news python, headline aggregator, news by keyword api, google news scraper free, news monitoring without api key

# Actor input Schema

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

Topics, brands, competitors or exact-phrase searches (use quotes). Each harvested query is one paid event.

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

News edition language. Geo and edition default to the matching country.

## `geo` (type: `string`):

Country edition. Leave default to use the language's home country.

## `maxPerQuery` (type: `integer`):

Cap rows per query. A typical topic returns 20-100 items.

## Actor input object example

```json
{
  "queries": [
    "openai",
    "anthropic"
  ],
  "language": "en",
  "geo": "",
  "maxPerQuery": 100
}
```

# Actor output Schema

## `items` (type: `string`):

All news items (title, url, publisher, publishedAt, language, snippet), one dataset item per row. Fetch as JSON via this URL with an APIFY\_TOKEN bearer header. A run-level summary is written to the run's terminal status message.

# 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"
    ],
    "language": "en",
    "geo": "",
    "maxPerQuery": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("halobartku/google-news-feed").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",
    ],
    "language": "en",
    "geo": "",
    "maxPerQuery": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("halobartku/google-news-feed").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"
  ],
  "language": "en",
  "geo": "",
  "maxPerQuery": 100
}' |
apify call halobartku/google-news-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,halobartku/google-news-feed"
        }
    }
}

```

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/CRJajgFQraQHcd0xd/builds/oLgMyNFifFgfAcT8a/openapi.json
