# Euronews Articles Scraper (`scrapyx/euronews-articles-scraper`) Actor

Fetches Euronews's most recent articles via its public sitemap plus each article's own embedded JSON-LD -- headline, full body text, author, section, publish/modified dates and lead image, not just a summary.

- **URL**: https://apify.com/scrapyx/euronews-articles-scraper.md
- **Developed by:** [Ibnu Adzim](https://apify.com/scrapyx) (community)
- **Categories:** News, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 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

## Euronews Articles Scraper

Fetches Euronews's most recent articles -- the full article, not just a
summary. Two-stage: discovers the newest article URLs from Euronews's
public sitemap, then reads each article's own embedded structured data for
the actual content.

### What you get

One `SEARCH_SUMMARY` row plus one `ARTICLE` row per article, most recently
modified first:

- `articleHeadline`, `articleDescription`, `articleBodyText` (the full article, not a preview)
- `articleDatePublished` / `articleDateModified` (ISO 8601)
- `articleAuthorNames`, `articleSections`, `articleImageUrl`, `articleUrl`

### Why this actor fetches one page per article

Unlike this NEWS family's other feed-based actors, Euronews's sitemap
carries only a URL and a timestamp -- no title, no body. There is no
single feed anywhere on the site that returns full articles in bulk; the
content only exists on each article's own page (in a `NewsArticle`
JSON-LD block). `maxItems` therefore fetches that many real pages, so it
directly controls run time and is the actor's main cost knob -- default 10
keeps a default run fast; raise it for more coverage per run.

### No keyword filter, on purpose

This actor does not offer a `keywords` input. Every other actor in this
family that has one applies it to an already-fetched full result set; here
that would only ever be able to search within the `maxItems` articles
already fetched (not the whole month), which would look like a real search
while quietly missing everything outside that small window. Rather than
ship a filter with that footgun, `maxItems` simply returns the N most
recent articles, unfiltered -- narrow further downstream if you need to.

### Coverage: current month, most-recent-first

Euronews publishes one sitemap per calendar month
(`/sitemap/articles-<year>-<month>.xml`, going back to 2008) -- this actor
always uses the current month's file (picked by the highest year/month pair
actually present in the sitemap index, not assumed from today's date) and
returns the most recently modified articles within it first.

The month sitemap also lists `/video/...` news-bulletin pages. Those carry
a `VideoObject` (no article body), not a `NewsArticle`, so they are skipped
at discovery: `maxItems` counts real articles, and the `SEARCH_SUMMARY` row
reports how many video URLs were skipped (`videoUrlsSkipped`).

### No WAF, no auth; datacenter proxy by default

The sitemap index, a month sitemap, `news.xml` and article pages all
answered clean on every TLS profile tested (chrome124, firefox133,
safari17\_0, chrome99\_android), cold, no warmup (re-verified 2026-09-21).
Because no gate was observed, the default `proxyConfiguration` is Apify's
shared datacenter pool (`{"useApifyProxy": true}`), which is included in
every plan; Residential remains selectable in the proxy editor but is not
required and is billed per gigabyte. See CRAWLING\_METHOD.md for
the full robots.txt capture, including this site's unusual three-way split
between a wildcard bot policy, a named-AI-bots allowlist, and a named
GPTBot/CCBot/Google-Extended blocklist -- and why the wildcard group is the
one that governs this actor.

### Known limits

- One request per article means `maxItems` is capped (200) to keep a
  single run's cost bounded and predictable.
- No section/category filter -- Euronews sections vary by article and
  aren't a clean fixed enum on the sitemap side; `articleSections` is
  still returned per article for downstream filtering.
- Video bulletins (`/video/...` URLs) are not returned -- they have no
  article body. Their count is reported in `videoUrlsSkipped`.
- The sitemap location is upstream's to change: it moved once already
  (`/sitemaps/en/` to `/sitemap/`, September 2026). The actor follows the
  `Sitemap:` directives' current target; if it moves again the run fails
  loudly with an `ERROR` row rather than returning an empty dataset.

# Actor input Schema

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

Fetches the N most recently modified articles from Euronews's current-month sitemap and returns the full article (headline, full body text, author, section, image) for each. Each item is a real page fetch, so this directly controls run time -- there is no server-side filter to narrow the fetch before it happens (see README).

## `maxConcurrency` (type: `integer`):

Upper bound on article-page requests in flight at once.

## `minRequestInterval` (type: `number`):

Shared pacing floor across all requests this run makes. robots.txt sets no Crawl-delay for this host; the default is this portfolio's own politeness baseline, not a site requirement.

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

Apify Proxy on the shared datacenter pool. This is the default because it is included in your plan at no extra cost and this target works through it (no bot-mitigation gate was observed on the sitemap or article pages, 4 TLS profiles clean). If you start seeing blocks, challenges or empty results, switch the group here to Residential -- Apify bills residential traffic per gigabyte, so leave it off unless you need it.

## Actor input object example

```json
{
  "maxItems": 10,
  "maxConcurrency": 5,
  "minRequestInterval": 0.25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per scraped record. See the dataset's default view for field definitions.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapyx/euronews-articles-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("scrapyx/euronews-articles-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 '{}' |
apify call scrapyx/euronews-articles-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapyx/euronews-articles-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/LhLqDGEtruZkeZnN6/builds/BZKINkGz7l24qff3o/openapi.json
