Skip to content

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.txtPROBE 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.comasync with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)
  • [github] https://github.com/unclecode/crawl4aicrwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10
  • [github] https://github.com/unclecode/crawl4aiDockerized 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=46646798Built 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-supportofficial MCP server documented at https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support
  • [community] https://news.ycombinator.com/item?id=46646798New 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=46646798Built 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-supportofficial MCP server documented at https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support
  • [community] https://news.ycombinator.com/item?id=46646798New 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=46646798Built 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

  • [github] https://github.com/unclecode/crawl4aicrwl 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/

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.comasync with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)
  • [github] https://github.com/unclecode/crawl4aicrwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10
  • [github] https://github.com/unclecode/crawl4aiDockerized Setup: Optimized Docker image with FastAPI server for easy deployment.
  • [probe] https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-supportofficial 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.txtPROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt
  • [probe] https://docs.crawl4ai.com/openapi.jsonPROBE 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.comOpen Source: No forced API keys, no paywalls—everyone can access their data.
  • [github] https://github.com/unclecode/crawl4aiBrowser 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.comasync with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)
  • [claimed-docs] https://docs.crawl4ai.comStructured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.
  • [github] https://github.com/unclecode/crawl4aiLLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.
  • [github] https://github.com/unclecode/crawl4aicrwl 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.jsonPROBE 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.comasync with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)
  • [probe] https://docs.crawl4ai.com/llms.txtPROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt
  • [probe] https://docs.crawl4ai.com/openapi.jsonPROBE 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.jsonPROBE 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.txtPROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt
  • [github] https://github.com/unclecode/crawl4aiDockerized 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.txtPROBE llms.txt: HTTP 404 at https://docs.crawl4ai.com/llms.txt
  • [probe] https://docs.crawl4ai.com/openapi.jsonPROBE 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)

The documented rate limit (requests per second or minute) enforced on my API key before throttling kicks inweight 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

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.comasync with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)
  • [github] https://github.com/unclecode/crawl4aicrwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10
  • [github] https://github.com/unclecode/crawl4aiDockerized Setup: Optimized Docker image with FastAPI server for easy deployment.
  • [github] https://github.com/unclecode/crawl4aiReal-time Monitoring Dashboard with live system metrics and browser pool visibility
  • [probe] https://docs.crawl4ai.com/openapi.jsonPROBE 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.comasync with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://crawl4ai.com") print(result.markdown)
  • [claimed-docs] https://docs.crawl4ai.comStructured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.
  • [claimed-docs] https://docs.crawl4ai.comOpen Source: No forced API keys, no paywalls—everyone can access their data.
  • [github] https://github.com/unclecode/crawl4aiLLM-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.comOpen Source: No forced API keys, no paywalls—everyone can access their data.
  • [github] https://github.com/unclecode/crawl4aiLLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.
  • [community] https://news.ycombinator.com/item?id=46646798Crawl4AI 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/crawl4aiDockerized Setup: Optimized Docker image with FastAPI server for easy deployment.
  • [claimed-docs] https://docs.crawl4ai.comOpen Source: No forced API keys, no paywalls—everyone can access their data.
  • [probe] https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-supportofficial MCP server documented at https://docs.crawl4ai.com/core/self-hosting/#mcp-model-context-protocol-support
  • [community] https://news.ycombinator.com/item?id=46646798Built 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/crawl4aiLLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.
  • [claimed-docs] https://docs.crawl4ai.comStructured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.
  • [claimed-docs] https://docs.crawl4ai.comCrawl4AI 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/crawl4aiDockerized Setup: Optimized Docker image with FastAPI server for easy deployment.
  • [github] https://github.com/unclecode/crawl4airesume_state parameter to continue from a saved checkpoint
  • [community] https://news.ycombinator.com/item?id=46646798New 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=46646798Built 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.comCrawl4AI 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/crawl4aiLLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.
  • [claimed-docs] https://docs.crawl4ai.comCrawl4AI 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/crawl4aicrwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10
  • [claimed-docs] https://docs.crawl4ai.comStructured 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.comStructured Extraction: Parse repeated patterns with CSS, XPath, or LLM-based extraction.
  • [claimed-docs] https://docs.crawl4ai.comCrawl4AI 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/crawl4aiLLM-Driven Extraction: Supports all LLMs (open-source and proprietary) for structured data extraction.
  • [claimed-docs] https://docs.crawl4ai.comasync 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/crawl4aicrwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10
  • [github] https://github.com/unclecode/crawl4aiMulti-URL Configuration: Different strategies for different URL patterns in one batch
  • [github] https://github.com/unclecode/crawl4airesume_state parameter to continue from a saved checkpoint
  • [github] https://github.com/unclecode/crawl4aiDockerized Setup: Optimized Docker image with FastAPI server for easy deployment.
  • [claimed-docs] https://docs.crawl4ai.comCrawl4AI 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=46646798New 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=46646798Built 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.comCrawl4AI 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=46646798New 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=46646798Built 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/crawl4airesume_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