Threat Protection is an enterprise feature and is gated per organization. Contact your Firecrawl account team to have it enabled for your account.
Modes
Threat Protection has two modes, set at the organization level:- Off (default) — no checks are performed.
- Normal — URLs are checked against Google Web Risk, which flags pages and sites associated with malware, social engineering (phishing), and unwanted software. +2 credits per URL scanned.
Policy controls
Beyond the classifier, a policy can include:- Custom blacklist — exact domains or globs (e.g.
*.example.com) that are always blocked, without a classifier call. - Custom whitelist — exact domains or globs that are always allowed. The whitelist wins over every other rule, so a domain you trust is never blocked.
- Blocked TLDs — top-level domains to block outright (e.g.
zip), matched on label boundaries. - Risk score threshold — the normalized score (0–100) at or above which a classifier verdict is treated as a block. Lower is stricter. The default is
75. - Failure policy — what to do when the classifier can’t be reached: block (
closed, the default and recommended for a security control) or allow (open).
Configuring the policy
Team admins configure Threat Protection from Enterprise Controls → Threat Protection in the dashboard:- Open Enterprise Controls → Threat Protection.
- Choose a mode, set your risk score threshold, and add any blacklist, whitelist, or blocked-TLD entries.
- Choose whether to allow per-request overrides, and set the failure policy.
- Save. Changes take effect immediately — the next request is evaluated against the new policy.
Per-request overrides
Every endpoint that accepts URLs also accepts an optionalthreatProtection object, so an individual request can tighten (or, if your organization allows it, adjust) the policy for that call:
threatProtection object is rejected with a 403 — this lets an administrator guarantee that the organization policy is the floor for every request.
If Threat Protection is enforced for your team, an override may still tighten the policy but may not include "mode": "off" — a request that tries is rejected with a 403.
When a URL is blocked
A blocked request fails with a403 and a stable error code:
- Scrape, batch scrape, extract, agent — a blocked target returns the
unsafe_domain_blockederror for that URL. - Crawl — a blocked seed URL fails the request; blocked links discovered mid-crawl are skipped and the crawl continues.
- Search, map — blocked URLs are removed from the returned results rather than surfaced and refused.
Billing
A scan costs +2 credits per URL scanned in Normal mode, on top of the base cost of the request. A few details:- Decisions made entirely from your own policy (blacklist, whitelist, or blocked-TLD matches) do not call the classifier and are not charged a scan fee.
- A request that is blocked is still charged for the scan that produced the verdict.
- Scans are deduplicated within a single scrape: a redirect re-check that resolves to the same URL shares the original scan, while a redirect that lands on a different URL is a second scan.
- Crawls and batch scrapes check every page independently. Verdicts are never reused across pages — nothing about your traffic is stored (see above) — so in Normal mode expect +2 credits per scraped page. A link that is discovered mid-crawl and blocked bills its scan once per crawl, no matter how many pages link to it.
- Search and map scan each unique URL in the result set once per request, so their scan fees scale with the number of results scanned — which can slightly exceed the number returned when results are trimmed to your
limit.
Error reference
Notes
- The policy is organization-wide: it applies to every API key and every endpoint automatically.
- The whitelist always wins, so a URL on an explicitly trusted domain is never blocked by the classifier or a TLD rule.
- The error code
unsafe_domain_blockedis kept stable for compatibility even though checks are URL-level. - With the failure policy set to
closed(the default), a classifier outage causes affected requests to be blocked rather than silently allowed.

