How Crawl4AI’s scores are calculated
The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.
verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10
PA Score30/100
Agent-ready 38.6 × 0.30 = 11.58
API quality 0.0 × 0.20 = 0.00
Openness 58.2 × 0.20 = 11.64
Built-in AI 19.6 × 0.15 = 2.94
Automation 22.9 × 0.15 = 3.43
(11.58 + 0.00 + 11.64 + 2.94 + 3.43) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 29.59 ÷ 1.00 = 29.6
Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.
Agent-ready38.6/100×0.30 of the PA blend
Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.
Point an agent at llms.txt or agent-oriented docsweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://docs.crawl4ai.com/llms.txt“PROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt”
Run the product headlessly / in CI for automationweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [claimed-docs] https://docs.crawl4ai.com“async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)”
- [github] https://github.com/unclecode/crawl4ai“crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10”
- [github] https://github.com/unclecode/crawl4ai“Dockerized Setup: Optimized Docker image with FastAPI server for easy deployment.”
- [probe] https://docs.crawl4ai.com/core/cli/“official CLI documented at https://docs.crawl4ai.com/core/cli/”
- [community] https://news.ycombinator.com/item?id=46646798“Built crawl4ai.dev as a community-driven documentation hub with one-click Docker setups for n8n/FastAPI and production-ready MCP server guides for Cursor & Claude, including cost/performance benchmarks vs proprietary tools like Firecrawl.”
Plug MCP servers into this product so it can use their toolsweight 3
n/a — not applicable to this product: excluded from numerator and denominator
- [probe] https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support“official MCP server documented at https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support”
- [community] https://news.ycombinator.com/item?id=46646798“New developers often struggle with production configurations—specifically how to use Crawl4AI with MCP servers for Cursor, or how to bridge it with automation tools like n8n.”
- [community] https://news.ycombinator.com/item?id=46646798“Built crawl4ai.dev as a community-driven documentation hub with one-click Docker setups for n8n/FastAPI and production-ready MCP server guides for Cursor & Claude, including cost/performance benchmarks vs proprietary tools like Firecrawl.”
Connect an agent via an official MCP serverweight 3
3 (weight) × 7 (quality) × 0.6 (partial) = 12.6 of 30 max
- [probe] https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support“official MCP server documented at https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support”
- [community] https://news.ycombinator.com/item?id=46646798“New developers often struggle with production configurations—specifically how to use Crawl4AI with MCP servers for Cursor, or how to bridge it with automation tools like n8n.”
- [community] https://news.ycombinator.com/item?id=46646798“Built crawl4ai.dev as a community-driven documentation hub with one-click Docker setups for n8n/FastAPI and production-ready MCP server guides for Cursor & Claude, including cost/performance benchmarks vs proprietary tools like Firecrawl.”
Use an official CLIweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
Drive the product through a documented public APIweight 3
3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max
- [claimed-docs] https://docs.crawl4ai.com“async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)”
- [github] https://github.com/unclecode/crawl4ai“crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10”
- [github] https://github.com/unclecode/crawl4ai“Dockerized Setup: Optimized Docker image with FastAPI server for easy deployment.”
- [probe] https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support“official MCP server documented at https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support”
- [probe] https://docs.crawl4ai.com/core/cli/“official CLI documented at https://docs.crawl4ai.com/core/cli/”
- [probe] https://docs.crawl4ai.com/llms.txt“PROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt”
- [probe] https://docs.crawl4ai.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.crawl4ai.com/openapi.json, https://docs.crawl4ai.com/swagger.json, https://docs.crawl4ai.com/api/openapi.json, https://docs.crawl4ai.com/.well-known/openapi.json)”
Issue scoped/least-privilege API credentials for an agentweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [claimed-docs] https://docs.crawl4ai.com“Open Source: No forced API keys, no paywalls—everyone can access their data.”
- [github] https://github.com/unclecode/crawl4ai“Browser Profiler: Create and manage persistent profiles with saved authentication states, cookies, and settings.”
Build against official SDKsweight 2
2 (weight) × 7 (quality) × 1.0 (full) = 14.0 of 20 max
- [claimed-docs] https://docs.crawl4ai.com“async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)”
- [claimed-docs] https://docs.crawl4ai.com“Structured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.”
- [github] https://github.com/unclecode/crawl4ai“LLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.”
- [github] https://github.com/unclecode/crawl4ai“crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10”
- [probe] https://docs.crawl4ai.com/core/cli/“official CLI documented at https://docs.crawl4ai.com/core/cli/”
- [probe] https://docs.crawl4ai.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.crawl4ai.com/openapi.json, https://docs.crawl4ai.com/swagger.json, https://docs.crawl4ai.com/api/openapi.json, https://docs.crawl4ai.com/.well-known/openapi.json)”
Subscribe to events via webhooksweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Agent-ready = 69.4 ÷ 180 × 100 = 38.6
API quality0.0/100×0.20 of the PA blend
The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.
Explore an interactive API reference with runnable examplesweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [claimed-docs] https://docs.crawl4ai.com“async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)”
- [probe] https://docs.crawl4ai.com/llms.txt“PROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt”
- [probe] https://docs.crawl4ai.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.crawl4ai.com/openapi.json, https://docs.crawl4ai.com/swagger.json, https://docs.crawl4ai.com/api/openapi.json, https://docs.crawl4ai.com/.well-known/openapi.json)”
Download a machine-readable API spec (OpenAPI or equivalent)weight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://docs.crawl4ai.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.crawl4ai.com/openapi.json, https://docs.crawl4ai.com/swagger.json, https://docs.crawl4ai.com/api/openapi.json, https://docs.crawl4ai.com/.well-known/openapi.json)”
- [probe] https://docs.crawl4ai.com/llms.txt“PROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt”
- [github] https://github.com/unclecode/crawl4ai“Dockerized Setup: Optimized Docker image with FastAPI server for easy deployment.”
Test against a sandbox environment without touching production dataweight 1
1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Rely on versioned APIs with a documented deprecation policyweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://docs.crawl4ai.com/llms.txt“PROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt”
- [probe] https://docs.crawl4ai.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.crawl4ai.com/openapi.json, https://docs.crawl4ai.com/swagger.json, https://docs.crawl4ai.com/api/openapi.json, https://docs.crawl4ai.com/.well-known/openapi.json)”
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
API quality = 0.0 ÷ 100 × 100 = 0.0
Openness58.2/100×0.20 of the PA blend
Can you leave, inspect, or self-host — data export, open source, portability.
Do everything through the API that I can do in the UIweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://docs.crawl4ai.com“async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)”
- [github] https://github.com/unclecode/crawl4ai“crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10”
- [github] https://github.com/unclecode/crawl4ai“Dockerized Setup: Optimized Docker image with FastAPI server for easy deployment.”
- [github] https://github.com/unclecode/crawl4ai“Real-time Monitoring Dashboard with live system metrics and browser pool visibility”
- [probe] https://docs.crawl4ai.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.crawl4ai.com/openapi.json, https://docs.crawl4ai.com/swagger.json, https://docs.crawl4ai.com/api/openapi.json, https://docs.crawl4ai.com/.well-known/openapi.json)”
- [probe] https://docs.crawl4ai.com/core/cli/“official CLI documented at https://docs.crawl4ai.com/core/cli/”
Export all of my data in open formats and leaveweight 3
3 (weight) × 7 (quality) × 1.0 (full) = 21.0 of 30 max
- [claimed-docs] https://docs.crawl4ai.com“async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)”
- [claimed-docs] https://docs.crawl4ai.com“Structured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.”
- [claimed-docs] https://docs.crawl4ai.com“Open Source: No forced API keys, no paywalls—everyone can access their data.”
- [github] https://github.com/unclecode/crawl4ai“LLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.”
Read the product's source under an open licenseweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://docs.crawl4ai.com“Open Source: No forced API keys, no paywalls—everyone can access their data.”
- [github] https://github.com/unclecode/crawl4ai“LLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.”
- [community] https://news.ycombinator.com/item?id=46646798“Crawl4AI is an amazing open-source library that solves many LLM-scraping headaches.”
Self-host the core productweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [github] https://github.com/unclecode/crawl4ai“Dockerized Setup: Optimized Docker image with FastAPI server for easy deployment.”
- [claimed-docs] https://docs.crawl4ai.com“Open Source: No forced API keys, no paywalls—everyone can access their data.”
- [probe] https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support“official MCP server documented at https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support”
- [community] https://news.ycombinator.com/item?id=46646798“Built crawl4ai.dev as a community-driven documentation hub with one-click Docker setups for n8n/FastAPI and production-ready MCP server guides for Cursor & Claude, including cost/performance benchmarks vs proprietary tools like Firecrawl.”
Openness = 58.2 ÷ 100 × 100 = 58.2
Built-in AI19.6/100×0.15 of the PA blend
Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.
Get AI-generated insights and suggestions from my data inside the productweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [github] https://github.com/unclecode/crawl4ai“LLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.”
- [claimed-docs] https://docs.crawl4ai.com“Structured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.”
- [claimed-docs] https://docs.crawl4ai.com“Crawl4AI now features intelligent adaptive crawling that knows when to stop! Using advanced information foraging algorithms, it determines when sufficient information has been gathered to answer your query.”
Set up automations that run autonomously in the backgroundweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [github] https://github.com/unclecode/crawl4ai“Dockerized Setup: Optimized Docker image with FastAPI server for easy deployment.”
- [github] https://github.com/unclecode/crawl4ai“resume_state parameter to continue from a saved checkpoint”
- [community] https://news.ycombinator.com/item?id=46646798“New developers often struggle with production configurations—specifically how to use Crawl4AI with MCP servers for Cursor, or how to bridge it with automation tools like n8n.”
- [community] https://news.ycombinator.com/item?id=46646798“Built crawl4ai.dev as a community-driven documentation hub with one-click Docker setups for n8n/FastAPI and production-ready MCP server guides for Cursor & Claude, including cost/performance benchmarks vs proprietary tools like Firecrawl.”
- [claimed-docs] https://docs.crawl4ai.com“Crawl4AI now features intelligent adaptive crawling that knows when to stop! Using advanced information foraging algorithms, it determines when sufficient information has been gathered to answer your query.”
Delegate tasks to a built-in AI assistant inside the productweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Operate the product with natural-language commandsweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [github] https://github.com/unclecode/crawl4ai“LLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.”
- [claimed-docs] https://docs.crawl4ai.com“Crawl4AI now features intelligent adaptive crawling that knows when to stop! Using advanced information foraging algorithms, it determines when sufficient information has been gathered to answer your query.”
- [github] https://github.com/unclecode/crawl4ai“crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10”
- [claimed-docs] https://docs.crawl4ai.com“Structured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.”
Apply a preset configuration tuned for research agents that returns structured, citable outputweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://docs.crawl4ai.com“Structured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.”
- [claimed-docs] https://docs.crawl4ai.com“Crawl4AI now features intelligent adaptive crawling that knows when to stop! Using advanced information foraging algorithms, it determines when sufficient information has been gathered to answer your query.”
- [github] https://github.com/unclecode/crawl4ai“LLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.”
- [claimed-docs] https://docs.crawl4ai.com“async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)”
Built-in AI = 21.6 ÷ 110 × 100 = 19.6
Automation22.9/100×0.15 of the PA blend
Depth of automation primitives — rules, scheduling, bulk operations, webhooks.
Perform bulk operations across many items at onceweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [github] https://github.com/unclecode/crawl4ai“crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10”
- [github] https://github.com/unclecode/crawl4ai“Multi-URL Configuration: Different strategies for different URL patterns in one batch”
- [github] https://github.com/unclecode/crawl4ai“resume_state parameter to continue from a saved checkpoint”
- [github] https://github.com/unclecode/crawl4ai“Dockerized Setup: Optimized Docker image with FastAPI server for easy deployment.”
- [claimed-docs] https://docs.crawl4ai.com“Crawl4AI now features intelligent adaptive crawling that knows when to stop! Using advanced information foraging algorithms, it determines when sufficient information has been gathered to answer your query.”
Define rules that trigger actions automatically on eventsweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
- [community] https://news.ycombinator.com/item?id=46646798“New developers often struggle with production configurations—specifically how to use Crawl4AI with MCP servers for Cursor, or how to bridge it with automation tools like n8n.”
- [community] https://news.ycombinator.com/item?id=46646798“Built crawl4ai.dev as a community-driven documentation hub with one-click Docker setups for n8n/FastAPI and production-ready MCP server guides for Cursor & Claude, including cost/performance benchmarks vs proprietary tools like Firecrawl.”
- [claimed-docs] https://docs.crawl4ai.com“Crawl4AI now features intelligent adaptive crawling that knows when to stop! Using advanced information foraging algorithms, it determines when sufficient information has been gathered to answer your query.”
Schedule recurring jobs or workflowsweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [community] https://news.ycombinator.com/item?id=46646798“New developers often struggle with production configurations—specifically how to use Crawl4AI with MCP servers for Cursor, or how to bridge it with automation tools like n8n.”
- [community] https://news.ycombinator.com/item?id=46646798“Built crawl4ai.dev as a community-driven documentation hub with one-click Docker setups for n8n/FastAPI and production-ready MCP server guides for Cursor & Claude, including cost/performance benchmarks vs proprietary tools like Firecrawl.”
- [github] https://github.com/unclecode/crawl4ai“resume_state parameter to continue from a saved checkpoint”
Version, review, and roll back my automationsweight 1
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Automation = 16.0 ÷ 70 × 100 = 22.9