# Aljazeera Scraper (`piotrv1001/aljazeera-scraper`) Actor

Scrapes news articles from Al Jazeera, extracting titles, excerpts, dates, authors, tags, geographic regions, full body text, image  credits, and audio URLs from section pages or direct article URLs — ideal for media monitoring, news aggregation, and content analysis.

- **URL**: https://apify.com/piotrv1001/aljazeera-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** News, SEO tools, Automation
- **Stats:** 12 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 1,000 listing results

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/platform/actors/running/actors-in-store#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

### Al Jazeera Scraper

Extract news articles from [Al Jazeera](https://www.aljazeera.com) with structured data. Get article metadata from section pages, or full enriched content including body text, tags, geographic regions, and related articles.

### Features

- **Two output modes**: Lean listings (metadata only, ultra-fast) or enriched articles (full body text, tags, regions, related articles)
- **Section page scraping**: Provide any Al Jazeera section URL to get 20-60 articles per page
- **Direct article URLs**: Skip discovery and scrape specific articles directly
- **Rich structured data**: Authors, tags, categories, geographic regions, audio URLs, image credits
- **No browser needed**: Pure HTTP/Cheerio-based, making it fast and cost-efficient

### How it works

1. **Provide section URLs** (e.g. `https://www.aljazeera.com/news/`) and/or **direct article URLs**
2. The scraper extracts article data from Al Jazeera's server-rendered Apollo GraphQL cache
3. With **Enrich articles** enabled, each article page is visited for full body text, tags, and regions
4. With **Enrich articles** disabled, only metadata from the section page is returned (no extra requests)

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `sectionUrls` | `string[]` | — | Al Jazeera section URLs to scrape (e.g. `/middle-east/`, `/news/`, `/opinion/`) |
| `articleUrls` | `string[]` | — | Specific article URLs to scrape directly |
| `enrichArticles` | `boolean` | `true` | Visit each article page for full body text, tags, and regions |
| `maxArticles` | `integer` | `100` | Maximum total articles to process |
| `proxyConfiguration` | `object` | No proxy | Optional proxy settings (datacenter proxies are sufficient) |

### Sample output

#### Enriched article (`enrichArticles: true`)

```json
{
    "type": "article",
    "url": "https://www.aljazeera.com/news/2026/3/7/hezbollah-israeli-troops-clash-on-the-ground",
    "title": "Hezbollah, Israeli troops clash on the ground in eastern Lebanon's Bekaa",
    "excerpt": "Lebanese Health Ministry says at least 16 people killed, 35 wounded...",
    "subheading": "Lebanese Health Ministry says at least 16 people killed...",
    "date": "2026-03-07T07:35:45",
    "modifiedDate": "2026-03-07T07:51:36",
    "articleType": "post",
    "author": [
        {
            "name": "Al Jazeera Staff",
            "url": "https://www.aljazeera.com/author/al_jazeera_staff",
            "avatarUrl": "https://www.aljazeera.com/wp-content/uploads/2024/05/...",
            "jobTitle": ""
        }
    ],
    "source": ["Al Jazeera"],
    "tags": ["Israel attacks Lebanon"],
    "categories": ["News"],
    "where": ["Iran", "Israel", "Lebanon", "Middle East"],
    "shortUrl": "https://aje.news/cd9pbr",
    "featuredImageUrl": "https://www.aljazeera.com/wp-content/uploads/2026/03/...",
    "featuredImageCaption": "Lebanese civil defence inspect the destruction...",
    "featuredImageCredit": "AFP",
    "bodyHtml": "<p>Clashes have erupted as Israeli forces attempted...</p>",
    "bodyText": "Clashes have erupted as Israeli forces attempted...",
    "wordCount": 1247,
    "audioPlaybackUrl": "https://tts.aljazeera.net/aje/2026/03/...",
    "audioDuration": "237.505306",
    "relatedArticles": [
        {
            "title": "Why has Hezbollah joined Middle East war?",
            "url": "https://www.aljazeera.com/video/inside-story/2026/3/5/..."
        }
    ],
    "videoId": "",
    "isBreaking": false,
    "isLive": false,
    "isDeveloping": false
}
```

#### Lean listing (`enrichArticles: false`)

```json
{
    "type": "listing",
    "url": "https://www.aljazeera.com/news/2026/3/7/hezbollah-israeli-troops-clash-on-the-ground",
    "title": "Hezbollah, Israeli troops clash on the ground in eastern Lebanon's Bekaa",
    "excerpt": "Lebanese Health Ministry says at least 16 people killed...",
    "date": "2026-03-07T07:35:45",
    "articleType": "post",
    "author": ["Al Jazeera Staff"],
    "source": ["Al Jazeera"],
    "shortUrl": "https://aje.news/cd9pbr",
    "featuredImageUrl": "https://www.aljazeera.com/wp-content/uploads/2026/03/...",
    "audioPlaybackUrl": "https://tts.aljazeera.net/aje/2026/03/...",
    "discoverySource": "section",
    "sectionUrl": "https://www.aljazeera.com/middle-east/"
}
```

### Available sections

Use any of these as `sectionUrls`:

- `https://www.aljazeera.com/news/`
- `https://www.aljazeera.com/middle-east/`
- `https://www.aljazeera.com/opinion/`
- `https://www.aljazeera.com/sport/`
- `https://www.aljazeera.com/economy/`
- `https://www.aljazeera.com/science-and-technology/`
- `https://www.aljazeera.com/features/`
- `https://www.aljazeera.com/africa/`
- `https://www.aljazeera.com/explained/`

### Pricing

This Actor uses a **Pay Per Event** pricing model.

| Event | Price | Per 1,000 | What you get |
|-------|-------|-----------|--------------|
| **Lean listing** | $0.001 | $1.00/1K | Title, excerpt, URL, date, author, type, image, short URL |
| **Enriched article** | $0.004 | $4.00/1K | Full body text, tags, categories, geographic regions, related articles, image credits, audio URL |
| **Actor start** | $0.00005/GB | — | One-time charge per run based on memory allocation |

#### Cost examples

| Scenario | Requests | Est. cost |
|----------|:--------:|:---------:|
| 1 section, lean only | 1 | ~$0.03 |
| 1 section, enriched | ~30 | ~$0.12 |
| 3 sections, enriched | ~83 | ~$0.32 |
| 10 direct articles, enriched | 10 | ~$0.04 |

# Actor input Schema

## `sectionUrls` (type: `array`):

Al Jazeera section URLs to scrape, e.g. https://www.aljazeera.com/middle-east/, https://www.aljazeera.com/news/, https://www.aljazeera.com/opinion/

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

Specific article URLs to scrape directly (skips discovery phase)

## `enrichArticles` (type: `boolean`):

When true, visits each article page to extract full body text, tags, regions, and related articles. When false, outputs lean listings only.

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

Maximum total articles to process

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

Optional. Datacenter proxies are sufficient — no anti-bot protection detected.

## Actor input object example

```json
{
  "sectionUrls": [
    "https://www.aljazeera.com/middle-east/"
  ],
  "enrichArticles": true,
  "maxArticles": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "sectionUrls": [
        "https://www.aljazeera.com/middle-east/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/aljazeera-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 = { "sectionUrls": ["https://www.aljazeera.com/middle-east/"] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/aljazeera-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sectionUrls": [
    "https://www.aljazeera.com/middle-east/"
  ]
}' |
apify call piotrv1001/aljazeera-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=piotrv1001/aljazeera-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tW51h5Kweg8nV51tq/builds/TxjgSl0qzdVcqYzSL/openapi.json
