# Guardian Rss Scraper (`real-estate-api/guardian-rss-scraper`) Actor

Guardian RSS Scraper is a Python tool designed to parse RSS feeds from The Guardian. It automatically extracts article titles, publication dates, section categories, authors, and full article links into clean CSV or JSON formats for media monitoring and news analysis.

- **URL**: https://apify.com/real-estate-api/guardian-rss-scraper.md
- **Developed by:** [real-estate-api](https://apify.com/real-estate-api) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 results

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

## The Guardian RSS Scraper: World and Technology Headlines

<p align="center">
  <img src="https://imgur.com/0Y5Mhwt.png" alt="The Guardian RSS Scraper" width="800" />
</p>

The Guardian RSS Scraper collects headlines from The Guardian's public World and Technology feeds. Each dataset row includes the headline, short summary, article link, publication date, categories, author, and image URL when available.

Export results to JSON, CSV, or Excel for news monitoring, research, and scheduled reporting. The feeds contain recent stories rather than a complete archive, so schedule recurring runs and use the `guid` field to identify duplicate stories.

### Use Cases

- **News monitoring:** Track the latest World and Technology headlines on a schedule.
- **Keyword tracking:** Filter stories by words in their headlines or summaries.
- **Research exports:** Collect headlines, links, and publication dates in structured formats.
- **Briefing preparation:** Organize short summaries and article links for news digests.
- **Duplicate detection:** Compare `guid` values across runs to identify previously collected stories.

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `feedUrls` | Array | World and Technology feeds | Accepted Guardian RSS feed URLs. Only the two verified feeds are processed. |
| `keyword` | String | Empty | Optional case-insensitive filter for headlines and short summaries. |
| `maxItems` | Integer | `100` | Maximum number of headline rows per run, from 1 to 1000. |
| `timeoutSecs` | Integer | `300` | Overall run time limit in seconds. |
| `requestTimeoutSecs` | Integer | `30` | Timeout for an individual feed request in seconds. |

### Example Input

```json
{
  "feedUrls": [
    "GUARDIAN_WORLD_RSS_FEED_URL",
    "GUARDIAN_TECHNOLOGY_RSS_FEED_URL"
  ],
  "keyword": "",
  "maxItems": 100,
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30
}
```

### What Data Does This Actor Extract?

Each headline becomes one dataset row. HTML in headlines and summaries is converted to plain text. The actor collects feed metadata and short summaries, not full article bodies.

#### Example Output

```json
{
  "itemTitle": "Example Guardian News Headline",
  "itemDescription": "A short summary of the story provided by the feed.",
  "link": "ARTICLE_URL",
  "categories": [
    "Technology",
    "World"
  ],
  "pubDate": "Fri, 09 Oct 2026 21:36:18 GMT",
  "guid": "STORY_IDENTIFIER",
  "image": "IMAGE_URL",
  "author": "Example Author",
  "scrapedAt": "2026-10-12T00:00:00+00:00"
}
```

#### Output Fields

| Field | Type | Description |
|---|---|---|
| `itemTitle` | String | Headline in plain text. |
| `itemDescription` | String or null | Short summary in plain text. |
| `link` | String | Article URL supplied by the feed. |
| `categories` | Array | Category labels provided by the feed. Empty when none are available. |
| `pubDate` | String or null | Publication date from the feed. |
| `guid` | String | Story identifier used for deduplication. |
| `image` | String or null | Image URL when available. |
| `author` | String or null | Author or byline when available. |
| `scrapedAt` | String | UTC timestamp when the row was collected. |
| `error` | String | Error description for a failed feed or invalid input. |
| `input` | String | Value associated with the error. |

#### Error Handling

Invalid feed URLs, HTTP errors, and non-XML responses produce error rows. The actor continues processing the remaining feeds when possible, so one failed feed does not necessarily stop the entire run.

### How It Works

1. Reads the configured feed list, optional keyword, item limit, and timeout settings.
2. Validates the feed URLs against the two supported Guardian sections.
3. Requests each feed using a descriptive User-Agent.
4. Retries HTTP 429 responses, server errors (5xx), and timeouts up to three times, with delays of 2, 4, and 8 seconds. A suitable `Retry-After` value is respected when provided.
5. Extracts headlines, summaries, links, dates, categories, authors, and available images.
6. Removes duplicate `guid` values, applies the optional keyword filter, and stops when the configured item limit is reached.
7. Waits one second between feeds in the same run.

### Limits and Terms

- **Supported feeds:** Only the verified World and Technology feeds are processed.
- **Recent stories only:** Each feed is a single document and does not provide backward pagination through the archive.
- **Item limit:** The default is 100 rows, with a maximum of 1000.
- **Request frequency:** Schedule each feed approximately 5–15 minutes apart.
- **Request handling:** The actor limits simultaneous requests and retries temporary failures.

The Guardian's terms may restrict commercial use, republication, and certain AI or machine-learning uses. Review the applicable terms before using exported content, especially for commercial applications or model training.

This actor collects headlines, links, dates, categories, bylines, image URLs, and short summaries rather than full article bodies. You are responsible for complying with applicable source terms, copyright requirements, attribution rules, and other relevant restrictions.

**Pricing:** The actor is free to run. Normal Apify platform usage charges may apply.

### FAQ

#### Can I use any Guardian section feed?

No. Only the verified World and Technology feeds are supported. Other feed URLs are recorded as error rows.

#### How many headlines can one run save?

The default is `100`, and the maximum is `1000`.

#### What happens if a feed fails?

The actor saves an error row containing the failed input and continues with the remaining feeds when possible.

#### Why are the fields named `itemTitle` and `itemDescription`?

These are the dataset field names used by the actor. They contain the headline and short description supplied by the RSS feed.

#### Does the actor collect the full article?

No. It collects feed metadata and short summaries, not full article text.

#### How can I avoid duplicate stories?

Store the `guid` values from each run and compare them with later results before processing new stories.

### Trademark Notice

The Guardian and related names, logos, and trademarks belong to their respective owners. Their use in this documentation is solely to identify the source of the data and does not imply affiliation, sponsorship, endorsement, or partnership.

### Disclaimer

This actor is an independent tool and is not affiliated with, endorsed by, sponsored by, or officially associated with The Guardian or its owners. Users are responsible for complying with applicable source terms, rate limits, attribution requirements, and licensing restrictions.

### Is Web Scraping Legal?

Collecting information that is already public is generally legal. Scraping is not the same thing as hacking, and there is no single law that bans it. The limits are the usual ones: do not break into accounts, do not take private or confidential data, and be careful with personal data and copyrighted works. A site's terms can also restrict how you access it. Facts such as a public name, price, or rating are not the same thing as republishing someone's article or photo.

This actor collects information from public pages. It does not log in and it does not bypass access controls.

For a longer explanation, see Apify's article [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

# Actor input Schema

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

Verified Guardian section RSS URLs. Accepted values are the world feed and the technology feed. Other addresses are saved as error rows.

## `keyword` (type: `string`):

Optional case-insensitive filter applied to the headline and the short summary. Leave blank to keep every item.

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

Maximum number of headline rows to save in one run. Values are clamped between 1 and 1000.

## `timeoutSecs` (type: `integer`):

Overall run time limit in seconds. Fetching stops when this limit is reached.

## `requestTimeoutSecs` (type: `integer`):

Per-request HTTP timeout in seconds for each feed download.

## `proxyConfiguration` (type: `object`):

Optional proxy for feed requests. Leave Apify Proxy off. The verified Guardian RSS feeds respond without a proxy.

## Actor input object example

```json
{
  "feedUrls": [
    "https://www.theguardian.com/world/rss",
    "https://www.theguardian.com/technology/rss"
  ],
  "maxItems": 100,
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

## `datasetUrl` (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 = {
    "feedUrls": [
        "https://www.theguardian.com/world/rss",
        "https://www.theguardian.com/technology/rss"
    ],
    "keyword": "",
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("real-estate-api/guardian-rss-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 = {
    "feedUrls": [
        "https://www.theguardian.com/world/rss",
        "https://www.theguardian.com/technology/rss",
    ],
    "keyword": "",
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("real-estate-api/guardian-rss-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 '{
  "feedUrls": [
    "https://www.theguardian.com/world/rss",
    "https://www.theguardian.com/technology/rss"
  ],
  "keyword": "",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call real-estate-api/guardian-rss-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,real-estate-api/guardian-rss-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/BP3GC6FoSHYeRICpV/builds/WauDIVtU9OcWEW765/openapi.json
