# Reuters News Scraper (`khadinakbar/reuters-news-scraper`) Actor

Scrape Reuters headlines, publish times, sections, images and tags from the public news sitemap and Bing News site:reuters.com search. Honest metadata — no DataDome bypass. MCP-ready.

- **URL**: https://apify.com/khadinakbar/reuters-news-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** News, AI, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 article founds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Reuters News Scraper

News monitors, research desks, and AI agents use this Actor to extract **Reuters** headline metadata — title, publish time, section, language, image, and tags — from Reuters' public Google News sitemap, with optional Bing News `site:reuters.com` keyword discovery and URL-mode rows. Built for structured monitoring on Apify (API, schedules, datasets). Full article body remains on reuters.com for in-browser reading; this Actor returns honest sitemap/search metadata only (`bodyText` is always `null`).

### Best fit for this Actor

- Monitor World, Business, Markets, Legal, Sports, Technology, and other Reuters sections from the public news sitemap
- Filter by keyword, language, or recency window
- Discover articles by topic via Bing News `site:reuters.com`
- Resolve specific reuters.com article URLs against the sitemap (or return an honest URL-derived row)

Best fit when you need Reuters **headline metadata**. For multi-publisher monitoring, continue with [Google News Scraper](https://apify.com/khadinakbar/google-news-scraper). For Bloomberg section headlines and tickers, use [Bloomberg News Scraper](https://apify.com/khadinakbar/bloomberg-news-scraper). For Financial Times RSS metadata, use [Financial Times News Scraper](https://apify.com/khadinakbar/financial-times-news-scraper).

### Practical scenario

A geopolitics researcher selects sections `world` and `business`, sets `maxItems` to `10`, and schedules the run hourly. Each run returns the latest Reuters headlines with publish times, images, and canonical URLs from the public news sitemap. The researcher opens those URLs in a browser for full reading. The Actor is the discovery layer; Reuters remains the reading layer.

### Quick start input

```json
{
  "sections": ["world", "business"],
  "maxItems": 10,
  "languages": ["en"],
  "searchKeywords": [],
  "sinceHours": 0,
  "maxSitemapPages": 2
}
```

### Input reference

| Field | What it controls |
| --- | --- |
| `sections[]` | Reuters sitemap sections (prefill: world + business) |
| `searchKeywords[]` | Optional headline/keyword filter |
| `searchQuery` | Bing News `site:reuters.com` topic search |
| `articleUrls[]` | Optional reuters.com URLs → sitemap match or URL-derived row |
| `languages[]` | Locale filter (`en` default; `all` for every locale) |
| `sinceHours` | Recency filter (0 = all current items) |
| `maxItems` | Hard cap on billed articles (default 50, prefill 10) |
| `maxSitemapPages` | How many ~50-URL sitemap pages to fetch (default 4) |
| `proxyConfiguration` | Optional; usually unnecessary for sitemap/Bing RSS |

### What data you receive

One dataset item is one Reuters article metadata row.

```json
{
  "title": "Swiss trade surplus nearly doubles in second quarter as exports boom",
  "summary": null,
  "url": "https://www.reuters.com/business/swiss-trade-surplus-nearly-doubles-second-quarter-exports-boom-2026-09-22/",
  "authors": [],
  "publishedAt": "2026-09-22T09:48:14.148Z",
  "section": "business",
  "language": "en",
  "keywords": ["trade"],
  "textAvailability": "SITEMAP_METADATA",
  "sourceMode": "sitemap",
  "bodyText": null,
  "scrapedAt": "2026-09-22T12:00:00.000Z"
}
```

| Field | Meaning |
| --- | --- |
| `title` / `summary` | Headline and Bing snippet (summary often null for sitemap rows) |
| `url` / `canonicalUrl` | Canonical reuters.com article link |
| `publishedAt` / `updatedAt` | ISO publish / lastmod times when exposed |
| `section` / `subsection` / `language` | Path-derived taxonomy |
| `keywords` / `imageUrl` | Tags and lead image when present |
| `textAvailability` | `SITEMAP_METADATA` | `SEARCH_SNIPPET` | `URL_DERIVED` |
| `sourceMode` | `sitemap` | `search` | `url` |
| `bodyText` | Always `null` in v1 (honest DataDome contract) |

Download JSON, CSV, or Excel from the run dataset. Key-value `OUTPUT` / `RUN_SUMMARY` use outcomes `COMPLETE`, `PARTIAL`, `VALID_EMPTY`, `INVALID_INPUT`, `UPSTREAM_FAILED`, or `CONFIG_ERROR`.

### Use through the API

```bash
curl "https://api.apify.com/v2/acts/khadinakbar~reuters-news-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sections":["world","business"],"maxItems":10}'
```

Read rows from the run `defaultDatasetId` after status is SUCCEEDED. Check key-value `OUTPUT.outcome` for the terminal contract above.

### Use with AI agents through Apify MCP

> Scrape the latest Reuters World and Business headlines. Cap at ten articles. Return title, URL, publish time, section, and language. Keep the request metadata-only.

Inspect `OUTPUT.outcome`, keep `url` / `guid` as provenance, and keep `maxItems` small. Client setup: <https://mcp.apify.com>. Tool name after publish: `apify--reuters-news-scraper`.

### Connect the workflow

This Actor is a focused Reuters metadata monitor. When you need headlines across many publishers for the same keyword, continue with [Google News Scraper](https://apify.com/khadinakbar/google-news-scraper). When the story is Bloomberg-specific markets coverage with tickers, use [Bloomberg News Scraper](https://apify.com/khadinakbar/bloomberg-news-scraper). For FT RSS standfirsts, use [Financial Times News Scraper](https://apify.com/khadinakbar/financial-times-news-scraper).

### Pricing

This Actor uses Pay per event plus Apify platform usage. Open the live Pricing tab for current event details, and use Apify's run cost controls to keep the workflow aligned with your budget.

- `apify-actor-start`: $0.00005 per run
- `article-found`: $0.003 per saved article row

A quality prefill that returns ten articles bills one start event plus ten `article-found` events (~$0.03005 before platform usage). Invalid input and empty matches charge no `article-found` events.

### Best results

- Prefer sitemap sections for reliability; use `searchQuery` when you need a topic outside a single section.
- Keep `maxItems` and `maxSitemapPages` low for cheap canaries; raise only after a successful small run.
- Treat this Actor as a headline/metadata discovery layer — open reuters.com URLs in a browser for full reading.
- Re-check important stories on reuters.com before redistribution.

### Design note

In my testing, the public Arc news sitemap (`/arc/outboundfeeds/news-sitemap/`) and Bing News `site:reuters.com` RSS returned stable headline metadata without a proxy, while reuters.com article HTML and Fusion content APIs stayed behind DataDome. That is why `bodyText` stays null and `textAvailability` is an honest enum aligned with public XML/RSS.

### Responsible use

Use public Reuters sitemap and search metadata for lawful monitoring and research. Follow Reuters terms, copyright policy, and applicable law. You are responsible for compliance with licensing and redistribution rules. This Actor stays on public XML/RSS surfaces and leaves paywalls, logins, and bot protection untouched.

"Reuters" is a trademark of Thomson Reuters. This independent Actor is not affiliated with, associated with, or endorsed by Thomson Reuters. Bing is a trademark of Microsoft Corporation. This independent Actor is not affiliated with, associated with, or endorsed by Microsoft.

# Changelog

This Actor's version history is a separate document: https://apify.com/khadinakbar/reuters-news-scraper/changelog.md

# Actor input Schema

## `sections` (type: `array`):

Reuters sections to pull from the public Google News sitemap (headline, publish time, image, tags, URL). Select one or more. Use "latest" for all English paths. reuters.com HTML is DataDome-blocked — this Actor returns sitemap/search metadata only (bodyText is always null).

## `searchKeywords` (type: `array`):

Optional case-insensitive keywords. Keep only articles whose headline, summary, or keywords contain at least one term (e.g. \['Fed','oil']). Leave empty to keep all items from selected sections.

## `searchQuery` (type: `string`):

Optional topic search via Bing News RSS filtered to reuters.com. Use when section sitemap browsing is too broad. Returns headline + snippet + URL. Leave empty to skip.

## `articleUrls` (type: `array`):

Optional list of reuters.com article URLs. Matched against the public news sitemap when possible; otherwise a URL-derived title/date row is returned. Does not scrape article HTML (DataDome) and does not return full body text.

## `languages` (type: `array`):

Language/locale filter from the URL path. Default is English only (en). Add de/es/fr/pt for localized Reuters editions, or "all" to keep every locale present in the sitemap pages fetched.

## `sinceHours` (type: `integer`):

Optional recency window. If set to e.g. 24, only articles with publishedAt within the last 24 hours are kept. Use 0 (default) for all currently returned sitemap/search items.

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

Hard cap on articles scraped and billed across all sources. Each accepted article is one billable article-found event. Defaults to 50. Prefill 10 for cheap quality tests.

## `maxSitemapPages` (type: `integer`):

How many Reuters news-sitemap pages to fetch (~50 URLs each, offset by 100). Default 4 (~200 candidate URLs before section/language filters). Raise only when maxItems is large.

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

Optional Apify proxy. The public news sitemap and Bing News RSS usually work without a proxy. Enable only if your environment blocks outbound XML/RSS.

## Actor input object example

```json
{
  "sections": [
    "world",
    "business"
  ],
  "searchKeywords": [],
  "searchQuery": "",
  "articleUrls": [],
  "languages": [
    "en"
  ],
  "sinceHours": 0,
  "maxItems": 10,
  "maxSitemapPages": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset items containing Reuters headlines, sections, languages, keywords, image metadata, publish times, source URLs, textAvailability, and scrape timestamps.

## `summary` (type: `string`):

Machine-readable run summary with selected sections, filters, sitemap/search counts, dataset item count, charged article count, estimated event cost, and status message.

## `runSummary` (type: `string`):

Alias containing the same terminal outcome at RUN\_SUMMARY.

# 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 = {
    "sections": [
        "world",
        "business"
    ],
    "searchKeywords": [],
    "searchQuery": "",
    "articleUrls": [],
    "languages": [
        "en"
    ],
    "sinceHours": 0,
    "maxItems": 10,
    "maxSitemapPages": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/reuters-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 = {
    "sections": [
        "world",
        "business",
    ],
    "searchKeywords": [],
    "searchQuery": "",
    "articleUrls": [],
    "languages": ["en"],
    "sinceHours": 0,
    "maxItems": 10,
    "maxSitemapPages": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/reuters-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 '{
  "sections": [
    "world",
    "business"
  ],
  "searchKeywords": [],
  "searchQuery": "",
  "articleUrls": [],
  "languages": [
    "en"
  ],
  "sinceHours": 0,
  "maxItems": 10,
  "maxSitemapPages": 2
}' |
apify call khadinakbar/reuters-news-scraper --silent --output-dataset

```

## MCP server setup

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