# 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)
- [Unblocker (formerly ASP)](https://scrapfly.io/docs/scrape-api/unblocker)
- [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)
- [Search](https://scrapfly.io/docs/crawler-api/search)
- [Prompt & Extract](https://scrapfly.io/docs/crawler-api/prompt)
- [Auto Refresh](https://scrapfly.io/docs/crawler-api/refresh)
- [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.

##### 38 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, recovery window, re-notify interval, hard 6/day cap, snooze, and auto-snooze on edit 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** Open **Alerts** from the dashboard left navigation. Click **Create alert** in the top-right corner. The **Create from template** button next to it opens a chooser of ready-made rules. Picking one lands you on the same form with the metric already filled in.
2. **Name the alert** The create page is a single form, not a wizard: the settings sit in the left column and a live preview plus the rule inputs sit in a sticky right column. Nothing is saved until you submit, so you can move between sections in any order.

     In the **Identity** card, give the alert a name (for example *web-scraping.dev block rate too high*) and, optionally, a description.
3. **Pick a metric and scope it** In **What to measure**, open the **Metric** dropdown and choose **Block rate (Unblocker + status)**. The list is one select grouped by product, so Web Scraping API metrics sit together under their own heading. Pick the project you want to watch in the **Project** select below it.

     The dimension filters shown depend on the metric you picked. Block rate exposes **Root domain filter** (for example `web-scraping.dev`); leave it blank to monitor the whole project. There is no environment control: block rate, like every other scrape metric, is measured on `LIVE` traffic only.
4. **Define the rule** The **rule** card is in the right column, directly under the preview, because the two are coupled: dragging the threshold line on the chart updates the inputs. Set:

    - **Condition:** *greater than*
    - **Threshold:** `20`
    - **Trigger after:** `5 minutes`
    - **Recover after:** `Immediately`, the default

     Back in the left column, set **Evaluate every** to `5 minutes` in the **Evaluation cadence** card, and leave **No-data policy** on **Ignore**, which keeps the current alert state (recommended unless you are using this as a liveness check).

     The preview replays the rule against the last 24 hours of your real data. Adjust the threshold until the sensitivity looks right.
5. **Add a notification channel** At least one channel is required in the **Notifications** card:

    - **Email**: pick one of **All project members**, **All workspace members**, **Custom addresses**, or **No email**. Choosing **Custom addresses** reveals a textarea that takes one address per line.
    - **Webhook**: paste the URL of your endpoint, or click **Use registered webhook** to fill it from a webhook you already registered. 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.

     Leave **Re-notify while triggered every** on **Every hour**, which the form pre-selects, or pick **Never (notify once only)** for a single notification per breach. The server enforces a hard cap of 6 notifications per alert per day regardless of this setting.
6. **Save** Click **Create alert** at the bottom of the form. The alert immediately enters the evaluator queue and your first metric check runs within five minutes.

 **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 (the one you pick: 5 minutes, 15 minutes, 1 hour, 1 day or 1 week). 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 six 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, or until resolved. The evaluator continues running and the audit log continues growing, but no notification fires until the snooze expires.

 Editing an alert's rule snoozes it automatically for its full `sustained_minutes` window. This prevents a rule 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 | 5 minutes | Allowed values: 5 minutes, 15 minutes, 1 hour, 1 day, 1 week |

## Next steps

 [  **Metric reference**: all 38 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)
