# Scrapfly Documentation

## Table of Contents

### Dashboard

- [Intro](https://scrapfly.io/docs)
- [Project](https://scrapfly.io/docs/project)
- [Account](https://scrapfly.io/docs/account)
- [Workspace & Team](https://scrapfly.io/docs/workspace-and-team)
- [Billing](https://scrapfly.io/docs/billing)

### Products

#### MCP Server

- [Getting Started](https://scrapfly.io/docs/mcp/getting-started)
- [Tools & API Spec](https://scrapfly.io/docs/mcp/tools)
- [Authentication](https://scrapfly.io/docs/mcp/authentication)
- [Examples & Use Cases](https://scrapfly.io/docs/mcp/examples)
- [FAQ](https://scrapfly.io/docs/mcp/faq)
##### Integrations

- [Overview](https://scrapfly.io/docs/mcp/integrations)
- [Claude Desktop](https://scrapfly.io/docs/mcp/integrations/claude-desktop)
- [Claude Code](https://scrapfly.io/docs/mcp/integrations/claude-code)
- [ChatGPT](https://scrapfly.io/docs/mcp/integrations/chatgpt)
- [Cursor](https://scrapfly.io/docs/mcp/integrations/cursor)
- [Cline](https://scrapfly.io/docs/mcp/integrations/cline)
- [Windsurf](https://scrapfly.io/docs/mcp/integrations/windsurf)
- [Zed](https://scrapfly.io/docs/mcp/integrations/zed)
- [Roo Code](https://scrapfly.io/docs/mcp/integrations/roo-code)
- [VS Code](https://scrapfly.io/docs/mcp/integrations/vscode)
- [LangChain](https://scrapfly.io/docs/mcp/integrations/langchain)
- [LlamaIndex](https://scrapfly.io/docs/mcp/integrations/llamaindex)
- [CrewAI](https://scrapfly.io/docs/mcp/integrations/crewai)
- [OpenAI](https://scrapfly.io/docs/mcp/integrations/openai)
- [n8n](https://scrapfly.io/docs/mcp/integrations/n8n)
- [Make](https://scrapfly.io/docs/mcp/integrations/make)
- [Zapier](https://scrapfly.io/docs/mcp/integrations/zapier)
- [Vapi AI](https://scrapfly.io/docs/mcp/integrations/vapi)
- [Agent Builder](https://scrapfly.io/docs/mcp/integrations/agent-builder)
- [Custom Client](https://scrapfly.io/docs/mcp/integrations/custom-client)


#### Web Scraping API

- [Getting Started](https://scrapfly.io/docs/scrape-api/getting-started)
- [API Specification]()
- [Monitoring](https://scrapfly.io/docs/monitoring)
- [Customize Request](https://scrapfly.io/docs/scrape-api/custom)
- [Debug](https://scrapfly.io/docs/scrape-api/debug)
- [Anti Scraping Protection](https://scrapfly.io/docs/scrape-api/anti-scraping-protection)
- [Proxy](https://scrapfly.io/docs/scrape-api/proxy)
- [Proxy Mode](https://scrapfly.io/docs/scrape-api/proxy-mode)
- [Proxy Mode - Screaming Frog](https://scrapfly.io/docs/scrape-api/proxy-mode/screaming-frog)
- [Proxy Mode - Apify](https://scrapfly.io/docs/scrape-api/proxy-mode/apify)
- [(Auto) Data Extraction](https://scrapfly.io/docs/scrape-api/extraction)
- [Javascript Rendering](https://scrapfly.io/docs/scrape-api/javascript-rendering)
- [Javascript Scenario](https://scrapfly.io/docs/scrape-api/javascript-scenario)
- [SSL](https://scrapfly.io/docs/scrape-api/ssl)
- [DNS](https://scrapfly.io/docs/scrape-api/dns)
- [Cache](https://scrapfly.io/docs/scrape-api/cache)
- [Batch (Multi-URL Scraping)](https://scrapfly.io/docs/scrape-api/batch)
- [Session](https://scrapfly.io/docs/scrape-api/session)
- [Webhook](https://scrapfly.io/docs/scrape-api/webhook)
- [Schedule](https://scrapfly.io/docs/scrape-api/schedule)
- [Screenshot](https://scrapfly.io/docs/scrape-api/screenshot)
- [Errors](https://scrapfly.io/docs/scrape-api/errors)
- [Timeout](https://scrapfly.io/docs/scrape-api/understand-timeout)
- [Throttling](https://scrapfly.io/docs/throttling)
- [Troubleshoot](https://scrapfly.io/docs/scrape-api/troubleshoot)
- [Billing](https://scrapfly.io/docs/scrape-api/billing)
- [FAQ](https://scrapfly.io/docs/scrape-api/faq)

#### Crawler API

- [Getting Started](https://scrapfly.io/docs/crawler-api/getting-started)
- [API Specification]()
- [Retrieving Results](https://scrapfly.io/docs/crawler-api/results)
- [WARC Format](https://scrapfly.io/docs/crawler-api/warc-format)
- [Data Extraction](https://scrapfly.io/docs/crawler-api/extraction-rules)
- [Webhook](https://scrapfly.io/docs/crawler-api/webhook)
- [Schedule](https://scrapfly.io/docs/crawler-api/schedule)
- [Billing](https://scrapfly.io/docs/crawler-api/billing)
- [Errors](https://scrapfly.io/docs/crawler-api/errors)
- [Troubleshoot](https://scrapfly.io/docs/crawler-api/troubleshoot)
- [FAQ](https://scrapfly.io/docs/crawler-api/faq)

#### Screenshot API

- [Getting Started](https://scrapfly.io/docs/screenshot-api/getting-started)
- [API Specification]()
- [Accessibility Testing](https://scrapfly.io/docs/screenshot-api/accessibility)
- [Webhook](https://scrapfly.io/docs/screenshot-api/webhook)
- [Schedule](https://scrapfly.io/docs/screenshot-api/schedule)
- [Billing](https://scrapfly.io/docs/screenshot-api/billing)
- [Errors](https://scrapfly.io/docs/screenshot-api/errors)

#### Extraction API

- [Getting Started](https://scrapfly.io/docs/extraction-api/getting-started)
- [API Specification]()
- [Rules Template](https://scrapfly.io/docs/extraction-api/rules-and-template)
- [LLM Extraction](https://scrapfly.io/docs/extraction-api/llm-prompt)
- [AI Auto Extraction](https://scrapfly.io/docs/extraction-api/automatic-ai)
- [Webhook](https://scrapfly.io/docs/extraction-api/webhook)
- [Billing](https://scrapfly.io/docs/extraction-api/billing)
- [Errors](https://scrapfly.io/docs/extraction-api/errors)
- [FAQ](https://scrapfly.io/docs/extraction-api/faq)

#### Data API


#### Proxy Saver

- [Getting Started](https://scrapfly.io/docs/proxy-saver/getting-started)
- [Fingerprints](https://scrapfly.io/docs/proxy-saver/fingerprints)
- [Optimizations](https://scrapfly.io/docs/proxy-saver/optimizations)
- [SSL Certificates](https://scrapfly.io/docs/proxy-saver/certificates)
- [Protocols](https://scrapfly.io/docs/proxy-saver/protocols)
- [Pacfile](https://scrapfly.io/docs/proxy-saver/pacfile)
- [Secure Credentials](https://scrapfly.io/docs/proxy-saver/security)
- [Billing](https://scrapfly.io/docs/proxy-saver/billing)

#### Cloud Browser API

- [Getting Started](https://scrapfly.io/docs/cloud-browser-api/getting-started)
- [Proxy & Geo-Targeting](https://scrapfly.io/docs/cloud-browser-api/proxy)
- [Unblock API](https://scrapfly.io/docs/cloud-browser-api/unblock)
- [Captcha Solver](https://scrapfly.io/docs/cloud-browser-api/captcha-solver)
- [File Downloads](https://scrapfly.io/docs/cloud-browser-api/file-downloads)
- [Session Resume](https://scrapfly.io/docs/cloud-browser-api/session-resume)
- [Human-in-the-Loop](https://scrapfly.io/docs/cloud-browser-api/human-in-the-loop)
- [Debug Mode](https://scrapfly.io/docs/cloud-browser-api/debug-mode)
- [Browser Extensions](https://scrapfly.io/docs/cloud-browser-api/extensions)
- [Native Browser MCP](https://scrapfly.io/docs/cloud-browser-api/mcp)
- [DevTools Protocol](https://scrapfly.io/docs/cloud-browser-api/cdp-reference)
##### Integrations

- [Puppeteer](https://scrapfly.io/docs/cloud-browser-api/puppeteer)
- [Playwright](https://scrapfly.io/docs/cloud-browser-api/playwright)
- [Selenium](https://scrapfly.io/docs/cloud-browser-api/selenium)
- [Vercel Agent Browser](https://scrapfly.io/docs/cloud-browser-api/agent-browser)
- [Browser Use](https://scrapfly.io/docs/cloud-browser-api/browser-use)
- [Stagehand](https://scrapfly.io/docs/cloud-browser-api/stagehand)

- [Billing](https://scrapfly.io/docs/cloud-browser-api/billing)
- [Errors](https://scrapfly.io/docs/cloud-browser-api/errors)


### Tools

- [Antibot Detector](https://scrapfly.io/docs/tools/antibot-detector)

### SDK

- [Golang](https://scrapfly.io/docs/sdk/golang)
- [Python](https://scrapfly.io/docs/sdk/python)
- [Rust](https://scrapfly.io/docs/sdk/rust)
- [TypeScript](https://scrapfly.io/docs/sdk/typescript)
- [Scrapy](https://scrapfly.io/docs/sdk/scrapy)

### Integrations

- [Getting Started](https://scrapfly.io/docs/integration/getting-started)
- [LangChain](https://scrapfly.io/docs/integration/langchain)
- [LlamaIndex](https://scrapfly.io/docs/integration/llamaindex)
- [CrewAI](https://scrapfly.io/docs/integration/crewai)
- [Zapier](https://scrapfly.io/docs/integration/zapier)
- [Make](https://scrapfly.io/docs/integration/make)
- [n8n](https://scrapfly.io/docs/integration/n8n)

### Academy

- [Overview](https://scrapfly.io/academy)
- [Web Scraping Overview](https://scrapfly.io/academy/scraping-overview)
- [Tools](https://scrapfly.io/academy/tools-overview)
- [Reverse Engineering](https://scrapfly.io/academy/reverse-engineering)
- [Static Scraping](https://scrapfly.io/academy/static-scraping)
- [HTML Parsing](https://scrapfly.io/academy/html-parsing)
- [Dynamic Scraping](https://scrapfly.io/academy/dynamic-scraping)
- [Hidden API Scraping](https://scrapfly.io/academy/hidden-api-scraping)
- [Headless Browsers](https://scrapfly.io/academy/headless-browsers)
- [Hidden Web Data](https://scrapfly.io/academy/hidden-web-data)
- [JSON Parsing](https://scrapfly.io/academy/json-parsing)
- [Data Processing](https://scrapfly.io/academy/data-processing)
- [Scaling](https://scrapfly.io/academy/scaling)
- [Walkthrough Summary](https://scrapfly.io/academy/walkthrough-summary)
- [Scraper Blocking](https://scrapfly.io/academy/scraper-blocking)
- [Proxies](https://scrapfly.io/academy/proxies)

---

#  Alerting

 **Gated Preview:** Alerting is available to early-access customers. Contact your account manager or [reach out to us](https://scrapfly.io/contact) to request access.

 Alerting lets you attach a threshold rule to any metric in your Scrapfly project and be notified by email, webhook, or in-app notification when the rule fires. You set the condition, the sustained window, and how often to re-notify. Scrapfly handles the rest.

 Alerts evaluate against your project's existing telemetry, the same data that drives the [Monitoring dashboard](https://scrapfly.io/docs/monitoring). No extra instrumentation is needed.

##### 19 alertable metrics

 Success rate, block rate, P95 latency, LLM cost, schedule failure rate, RPA failure rate, and more, across every product surface.

##### No spam

 Sustained-window debounce, re-notify interval, hard 6/day cap, snooze, and email digest coalescing keep your inbox quiet.

##### Webhook ready

 Same HMAC-SHA256 signing convention as scrape webhooks. If you already verify scrape callbacks, alert webhooks need zero additional code.

## Create your first alert in 60 seconds

 The walkthrough below creates an alert that fires when the block rate on your LIVE project exceeds 20 percent for at least 5 minutes. Pick any metric that matters to your workload; the steps are the same.

1. **Open the Alerts dashboard** Go to **Dashboard → Alerts** in the left navigation. Click **Create alert** in the top-right corner.
2. **Pick a metric (Step 1)** The wizard shows two columns: a product picker on the left and the metrics for that product on the right. Select **Web Scraping API**, then choose **Block rate (ASP + status)**. A short description appears below the list explaining what the metric measures. Click **Next**.
3. **Scope the metric (Step 2)** Choose the project and environment you want to watch. For this example, pick your production project and set **Environment** to `LIVE`. You can optionally narrow the scope to a specific domain (for example, `web-scraping.dev`) or a scraping origin. Leave these blank to monitor the whole project. Click **Next**.
4. **Define the rule (Step 3)** This is the most important screen. Set:

    - **Condition:** *block\_rate* is *greater than* `20` %
    - **For at least:** `5` minutes (within the last 5 minutes)
    - **Evaluate every:** `1` minute
    - **No-data policy:** keep current state (recommended unless you are using this as a liveness check)

     The live preview graph shows when this rule would have fired against the last 24 hours of your real data. Adjust the threshold until the sensitivity looks right, then click **Next**.
5. **Add a notification channel (Step 4)** Add at least one channel. Supported options:

    - **Email**: type an email address and click Add.
    - **Webhook**: paste the URL of your endpoint. Scrapfly signs every delivery with HMAC-SHA256. See [Webhook payload](https://scrapfly.io/docs/alerting/webhook-payload) for the full header and payload reference.
    - **In-app**: increments the bell icon counter in the dashboard.

     Set **Re-notify while triggered every** to 60 minutes (the default). The server enforces a hard cap of 6 notifications per alert per day regardless of this setting. Click **Next**.
6. **Review and save (Step 5)** The final step shows a read-only summary of every setting. Click **Create**. The alert immediately enters the evaluator queue and your first metric check runs within one minute.

 **Done.** Your alert is now live. You can see it on the [Alerts dashboard](https://scrapfly.io/dashboard/alerts) with a green **OK** badge. It will turn red when the rule fires.

## How it works

 Every metric has an evaluation cadence (1 minute or 5 minutes depending on the source data granularity). On each tick, the evaluator pulls the same metric the Monitoring dashboard shows, compares it to your threshold, and advances a simple state machine.

 The state machine has five states:

 | State | Meaning | Notifications? |
|---|---|---|
| OK | Metric is within threshold | No (one notification when returning to OK from TRIGGERED) |
| PENDING | Threshold breached but sustained window has not elapsed yet | No |
| TRIGGERED | Sustained breach confirmed | Yes (on entry, then every `renotify_minutes`) |
| RECOVERING | Metric back within threshold, waiting for recovery window | No |
| SNOOZED | User muted the alert temporarily | No (evaluator still runs; audit log still written) |
| NO\_DATA | Evaluation window returned no data for this metric | Only if `no_data_policy = triggered` |

 See [State machine](https://scrapfly.io/docs/alerting/state-machine) for the full transition diagram and the `no_data_policy` reference.

## The alert detail page

 Click any alert row to open its detail page. You get:

- A Datadog-style time-series graph overlaid with the threshold band and state-change markers. Use the 1h / 4h / 1d / 7d toggles to zoom out.
- A rule panel showing the metric, comparator, threshold, sustained window, and evaluation cadence.
- A notifications panel showing how many notifications have fired today, when the next re-notify is scheduled, and the per-channel delivery log.
- An event log showing every state transition with its metric value and timestamp. This is the audit trail.

## Snoozing an alert

 Click **Snooze** on any triggered alert to temporarily silence notifications. Choose a duration: 30 minutes, 2 hours, 1 day, or until resolved. The evaluator continues running and the audit log continues growing, but no notification fires until the snooze expires.

 Editing an alert snoozes it automatically for its full `sustained_minutes` window. This prevents a configuration change from immediately re-triggering a notification cycle. See [Anti-spam controls](https://scrapfly.io/docs/alerting/anti-spam) for the full set of noise reduction mechanisms.

## Limits

 | Limit | Value | Notes |
|---|---|---|
| Notifications per alert per day | 6 | Hard server-side cap |
| Minimum evaluation cadence | 1 minute | Sub-minute alerting is not supported |

## Next steps

 [  **Metric reference**: all 19 alertable metrics with units and dimension axes  ](https://scrapfly.io/docs/alerting/metric-reference) [  **Webhook payload**: JSON shape, headers, and HMAC verification snippets  ](https://scrapfly.io/docs/alerting/webhook-payload) [  **Anti-spam controls**: how Scrapfly keeps your inbox quiet  ](https://scrapfly.io/docs/alerting/anti-spam) [  **State machine**: OK, PENDING, TRIGGERED, RECOVERING, SNOOZED, NO\_DATA transitions  ](https://scrapfly.io/docs/alerting/state-machine) [  **Error reference**: all `ERR::ALERT::*` codes with remediation  ](https://scrapfly.io/docs/alerting/error-reference)
