# Cloudflare Status & Incident History Scraper (`slate_spool/cloudflare-status-web-scraper`) Actor

Scrapes the public Cloudflare status page history into structured incident and maintenance records. Each record includes the incident ID, title, impact classification, inferred status (resolved, monitoring, in-progress, identified, investigating, or active), status message, time-window text, and a c

- **URL**: https://apify.com/slate\_spool/cloudflare-status-web-scraper.md
- **Developed by:** [Wes Shields](https://apify.com/slate_spool) (community)
- **Categories:** Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 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.

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

## Cloudflare Status & Incident History Scraper

Scrapes the public Cloudflare status page history into structured incident and maintenance records. Each record includes the incident ID, title, impact classification, inferred status (resolved, monitoring, in-progress, identified, investigating, or active), status message, time-window text, and a canonical detail URL. Ideal for SRE teams, uptime monitoring, and incident-response automation.

### Features

- Structured JSON output with recordType (incident or maintenance), impact, and inferred status
- Canonical detail URLs constructed from verified incident IDs
- robots.txt compliance check before every run
- Configurable caps: maxRecords, maxRequests, maxRunSeconds, maxResponseBytes
- Rate-limited requests with configurable minimum interval (default 1500 ms)
- Automatic retries on HTTP 429 and 5xx responses
- Run summary with metrics: requests, retries, bytes downloaded, records emitted
- Optional filtering: includeScheduled toggle to exclude planned maintenance

### Use Cases

- SRE and DevOps incident monitoring and alerting pipelines
- Uptime and reliability tracking for Cloudflare-dependent services
- Historical incident analysis and post-mortem data enrichmentment
- Automated status-page aggregation across infrastructure providers
- Competitive intelligence on CDN and edge-network reliability

### FAQ

**Q: What data source does this actor use?**
A: The public Cloudflare status history page at cloudflarestatus.com/history. No authentication or API key is required.

**Q: How are incidents vs. maintenance distinguished?**
A: The impact field from Cloudflare's structured data is used — entries marked 'maintenance' are classified as maintenance records; all others are incidents.

**Q: Can I exclude scheduled maintenance?**
A: Yes — set includeScheduled to false in the input to receive only incident records.

**Q: Is this scraper respectful of the source?**
A: Yes — it checks robots.txt before scraping, uses rate-limited requests, and caps response size and run duration.

# Actor input Schema

## `maxRecords` (type: `integer`):

Hard output and metering cap.

## `includeScheduled` (type: `boolean`):

Include maintenance alongside service incidents.

## `maxRequests` (type: `integer`):

Hard cap including robots.txt, redirects, and retries.

## `maxRunSeconds` (type: `integer`):

Hard wall-clock cost cap.

## `maxRetries` (type: `integer`):

Retry count for 429 and 5xx responses; retries are metered.

## `minRequestIntervalMs` (type: `integer`):

Polite delay between all source requests.

## `maxResponseBytes` (type: `integer`):

Cumulative response-byte cost cap across the run.

## `failOnEmpty` (type: `boolean`):

Fail explicitly instead of silently succeeding with no detail records.

## Actor input object example

```json
{
  "maxRecords": 50,
  "includeScheduled": true,
  "maxRequests": 4,
  "maxRunSeconds": 60,
  "maxRetries": 1,
  "minRequestIntervalMs": 1500,
  "maxResponseBytes": 5000000,
  "failOnEmpty": true
}
```

# Actor output Schema

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

Validated incident, maintenance, and explicit run-status rows in the default dataset.

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

Completion/failure state, request/byte/record meters, and cap status.

# 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("slate_spool/cloudflare-status-web-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("slate_spool/cloudflare-status-web-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 '{}' |
apify call slate_spool/cloudflare-status-web-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2KPwOZPFi0ZClKRct/builds/PsOrJqxWWuCdM3yXM/openapi.json
