# Google News & RSS Scraper — Articles, Publishers, Dates (`cycha/rss-news-aggregator`) Actor

Search Google News by keyword, language and country, and parse any RSS or Atom feed, into clean article rows with title, publisher, link, date, summary and images. Optional full-text extraction for regular feeds.

- **URL**: https://apify.com/cycha/rss-news-aggregator.md
- **Developed by:** [Ken Digital](https://apify.com/cycha) (community)
- **Categories:** News, AI
- **Stats:** 31 total users, 4 monthly users, 98.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 articles

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 & RSS Scraper — Articles, Publishers, Dates

Search **Google News** by keyword, language and country, and parse **any RSS or Atom feed**, into clean article rows: title, publisher, link, publication date, summary and image. Built for news monitoring, media tracking and feeding LLM pipelines.

> **New name:** this actor is now `cycha/rss-news-aggregator` (it was `joyouscam35875/rss-news-aggregator` until 21 October 2026). If an API call or integration stopped working, update the name, or use the actor ID `qb2e09kApBm3meotS`, which never changes.

### Google News in one line

```json
{
  "googleNewsQueries": ["openai", "\"electric vehicles\" site:reuters.com"],
  "googleNewsLanguage": "en",
  "googleNewsCountry": "US",
  "googleNewsTimeRange": "1d"
}
```

Each query returns up to about 100 recent articles, with the publisher in `source` and its site in `sourceUrl`; the publisher suffix is removed from `title`. Google News operators work inside the query: quotes, `site:`, `intitle:`, `-exclude`. Mix Google News queries and regular feed URLs in the same run.

`link` for Google News articles is Google's redirect URL, which opens the original article in a browser. Full-text extraction (`fetchFullContent`) applies to regular feeds only.

### Features

- **Google News search** — keyword, language, country and time-range filters, publisher on every row
- **Multi-format support** — RSS 2.0, RSS 1.0 (RDF), and Atom feeds
- **Namespace handling** — Parses `media:`, `dc:`, `content:encoded`, and standard Atom namespaces
- **Full content extraction** — Optionally follows article links and strips HTML to plain text
- **Robust parsing** — Handles encoding issues, CDATA blocks, malformed dates, and missing fields
- **Structured output** — Consistent schema across all feed types

### Output Schema

Each article in the dataset contains:

| Field | Type | Description |
|-------|------|-------------|
| `feedUrl` | string | Source feed URL |
| `feedTitle` | string | Feed/channel title |
| `title` | string | Article title |
| `link` | string | Article permalink (Google redirect URL for Google News) |
| `source` | string | Publisher name, when the feed provides it (always for Google News) |
| `sourceUrl` | string | Publisher website |
| `description` | string | Article summary (HTML stripped, max 5000 chars) |
| `author` | string | Author name |
| `publishedDate` | string | ISO 8601 publication date |
| `categories` | string\[] | Tags/categories from the feed |
| `imageUrl` | string | Thumbnail or featured image URL |
| `guid` | string | Unique identifier (GUID or permalink) |
| `fullContent` | string | Full article text (only when `fetchFullContent` is enabled) |

### Input Parameters

```json
{
    "feedUrls": [
        "https://feeds.bbci.co.uk/news/rss.xml",
        "https://rss.nytimes.com/services/xml/rss/index.xml",
        "https://hnrss.org/frontpage"
    ],
    "maxArticles": 100,
    "fetchFullContent": false
}
```

- **googleNewsQueries** — Google News searches, one feed per query
- **googleNewsLanguage** (default: `en`), **googleNewsCountry** (default: `US`) — edition to search
- **googleNewsTimeRange** (default: `any`) — `1h`, `1d`, `7d` or `30d`
- **feedUrls** — Array of RSS/Atom feed URLs to aggregate. At least one of `feedUrls` or `googleNewsQueries` is required.
- **maxArticles** (default: 100) — Maximum articles for the whole run, across all feeds and queries. Set to 0 for unlimited.
- **fetchFullContent** (default: false) — Follow article links and extract full text content

### Use Cases

#### 📡 News Monitoring & Media Intelligence

Track coverage across dozens of news outlets. Monitor specific topics by aggregating topic-specific RSS feeds from major publishers. Feed results into sentiment analysis or trend detection pipelines.

#### 📋 Content Curation & Newsletters

Aggregate content from niche blogs, industry publications, and thought leaders into a single dataset. Use as the data source for automated newsletter generation or content recommendation systems.

#### 🔍 Competitive Intelligence

Subscribe to competitor blogs, press release feeds, and industry news. Get structured alerts when new content is published. Combine with keyword filtering for targeted monitoring.

#### 📊 Research & Dataset Building

Build timestamped article datasets for NLP research, media studies, or training data collection. The consistent schema makes downstream processing straightforward.

#### 🤖 AI Pipeline Input

Use as a data source for LLM-powered summarization, classification, or knowledge base updates. The structured output integrates directly with vector databases and RAG pipelines.

#### ⏰ Scheduled Monitoring

Run on a schedule (hourly, daily) with Apify's scheduling feature. Combine with deduplication logic downstream to maintain a continuously updated article database.

### Technical Notes

- Uses Python stdlib `xml.etree.ElementTree` for XML parsing (no lxml dependency)
- HTTP requests via `httpx` with async support and configurable timeouts
- Handles BOM-prefixed feeds and common encoding edge cases
- Date parsing supports RFC 822 (RSS) and ISO 8601 (Atom) formats
- Full content extraction removes `<script>`, `<style>`, and `<noscript>` blocks before stripping HTML

### Pricing

$0.001 per article parsed and pushed to the dataset.

### Example Feeds to Get Started

| Feed | URL |
|------|-----|
| BBC News | `https://feeds.bbci.co.uk/news/rss.xml` |
| Hacker News | `https://hnrss.org/frontpage` |
| TechCrunch | `https://techcrunch.com/feed/` |
| ArXiv CS.AI | `http://arxiv.org/rss/cs.AI` |
| Reddit r/technology | `https://www.reddit.com/r/technology/.rss` |

***

### Related actors by the same developer

| Actor | What it does |
|---|---|
| [Google Trends Scraper](https://apify.com/cycha/google-trends-scraper) | Interest over time, related queries and regions for up to 500 keywords |
| [Website Content Crawler](https://apify.com/cycha/website-content-crawler) | Any website as clean Markdown for AI and RAG |
| [YouTube Channel Scraper](https://apify.com/cycha/youtube-channel-scraper) | All videos and Shorts of a channel with stats |
| [TikTok Scraper](https://apify.com/cycha/tiktok-scraper) | Videos, profiles and comments, no login |

### 🔗 Quick Integration

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("cycha/rss-news-aggregator").call(run_input={...})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('cycha/rss-news-aggregator').call({...});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### No-code: Make / Zapier / n8n

Search for this actor in the Apify connector. No code needed.

### Feedback

Missing a field, hit a bug, or need an input this actor doesn't take yet? Open an issue on the actor's **Issues** tab. If the Google News & RSS Scraper saved you time, a short review on the Store page helps other people find it.

# Actor input Schema

## `googleNewsQueries` (type: `array`):

Search Google News directly, e.g. 'openai', 'electric cars'. Each returns up to ~100 recent articles with publisher and date. Supports Google News operators like site:, intitle: and quotes.

## `googleNewsLanguage` (type: `string`):

Language code, e.g. en, fr, de, es.

## `googleNewsCountry` (type: `string`):

Country code, e.g. US, FR, DE, GB.

## `googleNewsTimeRange` (type: `string`):

Only articles published within this window.

## `feedUrls` (type: `array`):

List of RSS 2.0 or Atom feed URLs to aggregate. Supports any valid XML feed endpoint. Optional when Google News queries are set.

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

Maximum total number of articles to output across all feeds. Set to 0 for unlimited.

## `fetchFullContent` (type: `boolean`):

Follow each article link and extract the full text content (stripped of HTML). Increases run time and memory usage.

## Actor input object example

```json
{
  "googleNewsQueries": [],
  "googleNewsLanguage": "en",
  "googleNewsCountry": "US",
  "googleNewsTimeRange": "any",
  "feedUrls": [
    "https://feeds.bbci.co.uk/news/rss.xml",
    "https://rss.nytimes.com/services/xml/rss/index.xml"
  ],
  "maxArticles": 100,
  "fetchFullContent": false
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per article from the feeds and Google News searches.

# 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 = {
    "googleNewsQueries": [],
    "feedUrls": [
        "https://feeds.bbci.co.uk/news/rss.xml",
        "https://rss.nytimes.com/services/xml/rss/index.xml"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cycha/rss-news-aggregator").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 = {
    "googleNewsQueries": [],
    "feedUrls": [
        "https://feeds.bbci.co.uk/news/rss.xml",
        "https://rss.nytimes.com/services/xml/rss/index.xml",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("cycha/rss-news-aggregator").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 '{
  "googleNewsQueries": [],
  "feedUrls": [
    "https://feeds.bbci.co.uk/news/rss.xml",
    "https://rss.nytimes.com/services/xml/rss/index.xml"
  ]
}' |
apify call cycha/rss-news-aggregator --silent --output-dataset

```

## MCP server setup

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

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/qb2e09kApBm3meotS/builds/4J0PuIezjsmubO6i0/openapi.json
