v2.11.0
Firecrawl v2.11.0
Release Notes
Firecrawl v2.11.0
Improvements
- Firecrawl Research Index — Added a specialized index for agentic AI/ML research: search across 3M+ arXiv papers and the GitHub code behind them (issues, merged PRs, and READMEs, refreshed daily), fetch a paper's details or related work, and check claims against full text. It has state-of-the-art recall on arXivQA, outperforming the next best provider by 18% at comparable cost. Available via the API, SDKs, MCP, and CLI.
- Keyless access for core endpoints — Use
/scrape,/search,/interact, and/parsewithout an API key from official MCP, CLI, and SDK clients. - Automatic PII redaction — Added a
redactPIIoption that strips personal and sensitive data like names, emails, phone numbers, addresses, and secrets out of scraped content before it's returned. deterministicJsonformat — Added a format that returns structured JSON without running an LLM on every request. Firecrawl generates a reusable extractor for your schema and caches it per site, so repeat scrapes are cheaper and return consistent results.- Video discovery on any page — Expanded the
videoformat to find videos on any page, not just supported providers like YouTube, returning each video's URL, title, thumbnail, duration, and more. - Attach your own browser automation — Added a CDP WebSocket URL (
cdpUrl) to browser session responses, so you can drive a live Firecrawl browser session directly with Playwright, Puppeteer, or any other CDP client. - Smarter monitor alerts — Added a
goalto monitors so an LLM judges each detected change as meaningful or noise against what you actually care about, cutting alert spam and surfacing the changes that matter first in summary emails. - Field-level JSON diffs for monitors — Monitors that scrape in JSON mode now compare the actual field values between runs instead of the rendered page, so you see exactly which fields changed rather than noise from layout shifts.
- Monitor email confirmation — Added an opt-in confirmation flow with one-click unsubscribe for external monitor recipients; team members are auto-confirmed, and
Monitorresponses now report each recipient's subscription status. - AM/PM monitor schedules — Added support for 12-hour schedule inputs like
daily at 9amanddaily at 5:30pm, converted to the correct UTC cron expression. - Monitor webhook delivery status — Added delivery status to each monitor check, so you can see whether its webhook was attempted, delivered, or failed — and why.
- Steadier monitor checks — Monitors now wait for pages to finish rendering before diffing, cutting false alerts caused by partially-loaded pages.
- PDF size cap — Raised the PDF download and scrape size cap from 30 MB to 50 MB.
- Python SDK
crawl()scrape kwargs — Added direct scrape kwargs (formats,headers,include_tags,exclude_tags, etc.) tocrawl()andstart_crawl(), removing the need to wrap them inScrapeOptions(...). - Clearer
.dataerrors — Improved the error raised when accessing.dataon a search result to point at.web,.news, and.imageswith their counts, instead of returning a silentNone. - Python format defaults — Removed the required
type=argument onJsonFormatandChangeTrackingFormat, defaulting it likeScreenshotFormat. ChangeTrackingFormatcasing — Added acceptance of bothchange_trackingandchangeTrackingfor the formattypeso payloads round-trip between snake_case and camelCase clients.
Fixes
- Resolved security advisories across the API and SDKs by upgrading
axios,esbuild,ws,openssl, and other dependencies. - Fixed scrape workers stalling for tens of seconds on very large LLM-extractor inputs, which previously caused dropped jobs and worker restarts.
- Fixed Wikipedia scrapes missing
metadata.ogImageon roughly half of Wikimedia URLs. - Fixed crawl and batch cancellation not draining the per-team concurrency backlog and reporting stale state; queued jobs are now removed and
statusreportscancelledimmediately. - Fixed monitor checks being charged when the credit lock was denied; denied locks now mark the check
skipped_no_creditsand stop the run. - Fixed JSON-mode monitor diffs returning spurious
changedverdicts when field values were identical but reordered; diffs now use order-insensitive equality. - Fixed JSON-mode monitors treating an empty-string scrape as missing input and reporting
changedon every run. - Fixed monitor webhooks being dispatched twice for the same check.
- Fixed monitor webhooks being dropped as malformed by wrapping
monitor.pageandmonitor.check.completedpayloads in an array to match the crawl/batch shape. - Fixed the monitor judge fabricating before/after text and losing context on long pages; it now receives the full unified diff as its only evidence.
- Fixed corrupt or unexpected stored artifacts breaking
GET /v2/monitor/:id/checks/:checkId; bad data now surfaces as no diff. - Fixed HTML tables losing their header row when the first row used
tdcells; the markdown converter now promotes it to a header so column labels survive intodocument.markdown. - Fixed the PDF size cap being bypassed on certain scrape paths so oversized PDFs are now rejected consistently.
- Fixed
ChangeTrackingFormatoptions (modes,prompt, and related fields) being dropped through Python SDK serialization round-trips.
API
- Replaced the experimental
piiformat withredactPII(booleanor{ mode?, entities?, replaceStyle? }) onPOST /v2/scrape,/v2/batch/scrape,/v2/crawl,/v2/parse, and/v2/extract; when enabled,document.markdownreturns redacted text (defaultsmode: "accurate",replaceStyle: "tag"). The oldpiiformat anddocument.piiblock are removed, and requests including"pii"informatsare now rejected. - Added the
deterministicJsonformat ({ type: "deterministicJson", schema?, prompt? }) toPOST /v2/scrape,/v2/batch/scrape,/v2/crawl,/v2/parse, and/v2/extract, populatingdocument.json. Cannot be combined with thejsonformat. - Added
document.videos: VideoItem[](withurl,sourceURL,source, and optionaltitle,thumbnail,duration, dimensions, and more) toPOST /v2/scrapeand the endpoints sharing its options when thevideoformat is requested. The legacydocument.videostring remains for supported providers. - Added
createdAt,completedAt, andduration(seconds) toGET /v2/crawl/{id}andGET /v2/batch/scrape/{id};completedAtis present only on terminal states. - Added the
/v2/search/researchproxy —GET /v2/search/research/papers,/papers/:id,/papers/:id/similar, and/github— billed againstSEARCH_CREDITSat 2 credits per 10 results (10 per 10 for ZDR teams). The legacy/v2/research/*mount is kept as a deprecated alias. - Added
POST/GET /interact,POST /interact/:sessionId/execute, andDELETE /interact/:sessionIdas full aliases for the/v2/browsersession endpoints; behavior, rate limits, and the 2-credit session-create charge are identical. - Added
cdpUrl(Python:cdp_url) to thePOST /v2/scrape/:jobId/interactand/v2/browserexecute responses, exposing the raw CDP WebSocket URL alongside the existing live-view URLs. - Added
POST /v2/feedbackcovering search, scrape, parse, and map jobs with shared recording and refund logic; the legacyPOST /v2/search/:jobId/feedbackkeeps working and writes to the same store. - Added keyless access to
POST /v2/parse, matching scrape and search, and tightened keyless credit accounting so concurrent requests stay within the per-IP daily cap. - Added a
WWW-Authenticate: Bearer realm="firecrawl"header to all401responses across/v0,/v1, and/v2so agent clients can discover the credential scheme. - Added
searchZDRvalues"forced-zdr"and"forced-anon"and deprecated"forced"(now an alias for"forced-zdr"); the resolved mode drives both billing and routing. - Added
goalandjudgeEnabledtoPOST /v2/monitorandPATCH /v2/monitor/:id;judgeEnableddefaults totruewhengoalis set, andgoal: nullclears it. - Added
judgment,meaningfulChange(with a per-changereason),meaningfulChanges[], a structureddiffobject (textand/orjson), and asnapshotfield to monitor check pages; JSON-mode checks return field-level diffs plus a current-value snapshot. - Added unauthenticated
POST /v2/monitor/email/confirmandPOST /v2/monitor/email/unsubscribe(token accepted in the request body only), plus anemailRecipientSubscriptionsarray onMonitorresponses reporting each recipient'semail,status(pending/confirmed/unsubscribed),source, andconfirmationEmailSent. - Added
originto monitor create/update bodies, matching the other v2 endpoints. - Added stricter validation on
delayforPOST /v2/crawlandPOST /v1/crawl; non-numeric, negative, or values over86400are now rejected with a schema error instead of being silently applied. - Added
include_domainsandexclude_domainsto the Python SDK's syncFirecrawl.search(), matching the async client and the/v2/searchpayload. - Added V1-compatible method aliases (
scrape_url/scrapeUrl,crawl_url/crawlUrl,batch_scrape_urls,map_url, etc.) on the V2 Python and JS clients; aliases emit aDeprecationWarning. - Changed the monitor webhook payload to wrap
datain an array;monitor.pagenow includesisMeaningful,judgment, and adiffobject. - Normalized monitor
scrapeOptions.formatssochangeTrackingjson mode is rewritten tojson, and the mixed["json", "git-diff"]form now runs both diffs instead of silently falling back to one.
Full Changelog: https://github.com/firecrawl/firecrawl/compare/v2.10...v2.11.0