mrkeyoor.com_
Fri 16 Oct 18:54 UTC
Dataevaluationupdated 05 Oct 2026

crawl4ai review

Crawl4AI is a Python crawler that drives real browsers and turns web pages into Markdown, structured data, screenshots, links, and other material for retrieval systems or agents. It solves the awkward middle step between loading a JavaScript-heavy site and handing useful content to your own code.

+463stars / 7d
Verdict

Our Crawl4AI run installed 159 packages and occupied 6,113 MB, then failed its build and ended pytest with 37 collection or setup errors, so adopting it means accepting a capable crawler with a rough contributor path. Use it when browser sessions, dynamic pages, and several output forms justify that weight. Choose a smaller extractor for static content, and put hard limits plus process monitoring around any self-hosted deployment.

We ran it

Lab card: what happened when we ran crawl4aiScreenshot of crawl4ai (crawl4ai.com)
Install✓ · 54s159 packages · 6113 MB
Build✗ · 2s
Tests✗ · 32s0 passed · 0 failed · 1 skipped · 37 errors of 37 (pytest)
Known vulns1(pip-audit)
Repo943 files~172,124 lines of source · 29.1 MB · 4 CI workflows · Dockerfile · tests dir

Answers from our run

Does crawl4ai build from source?

Dependencies installed in 54 seconds (159 packages), and the build failed. We cloned commit e5d2e78 into a clean Debian container with 3 CPUs and no project-specific setup.

Do crawl4ai's tests pass?

Yes: 0 of 37 passed when we ran the project's own test command (pytest), with 37 collection errors. Some failures need services or credentials a bare container does not have.

Does crawl4ai have known vulnerabilities in its dependencies?

pip-audit flagged 1 known advisory in the dependency tree at the time of our run.

Who should not use crawl4ai?

Teams scraping mostly static articles: our install occupied 6,113 MB, far more machinery than a focused text extractor needs.

What are the alternatives to crawl4ai?

Firecrawl, Scrapy, Trafilatura. Our Crawl4AI run installed 159 packages and occupied 6,113 MB, then failed its build and ended pytest with 37 collection or setup errors, so adopting it means accepting a capable crawler with a rough contributor path.

Setup2/56,113 MB installed; build and pytest both failed in our run
Docs4/5Clear library, Docker, CLI, extraction, and browser examples
Community5/584,793 stars with same-day pushes and issue responses
Maturity3/5Broad v0.9.4 feature set, but our source checks did not pass

Discussed on

  1. hnCrawl4AI is an open-source, LLM-friendly web crawler and scraper7 points
  2. hnCrawl4AI: Open-Source Web Crawler for Seamless AI Data Scraping6 points
  3. hncrawl4ai: The Adaptive Intelligence Update4 points

Who it’s for

Python teams that need browser sessions, JavaScript execution, and Markdown output in one library.
RAG and agent builders crawling dynamic pages, authenticated sessions, or linked sections of a site.
Data engineers who want CSS or XPath extraction before paying for model-assisted extraction.
Self-hosters prepared to operate browser workers, tokens, proxies, caches, and resource limits.

Who it’s NOT for

Teams scraping mostly static articles: our install occupied 6,113 MB, far more machinery than a focused text extractor needs.
Contributors whose release gate requires a green fresh-container build and pytest run: our build exited 1, and pytest ended with 37 collection or setup errors.
Self-hosters who need the built-in web search or answer endpoints: the README lists both as cloud-only features.
Docker users who need request-level deep-crawl settings today: open issue 2308 says v0.9.4 rejects them, and the opt-in fix was still an open pull request on October 5, 2026.
Crawlers that treat max_pages as a hard safety limit: open issue 2338 reports a 50-page BFS cap returning 193 pages on v0.9.4.

Setup reality

Our sandbox installed commit e5d2e78 in 54 seconds, adding 159 packages and using 6,113 MB. The build failed with exit 1 after 2 seconds. Pytest failed with exit 3 after 32 seconds: its overall report recorded 0 passed, 0 failed, 1 skipped, and 37 collection or setup errors.

Basic local use also needs Playwright browser setup. CSS, XPath, and Markdown extraction do not need a model credential, while model-assisted extraction needs a provider configuration. The Docker server expects CRAWL4AI_API_TOKEN; the hosted API uses its own key.

Self-hosters supply their own proxies and bot-wall settings, and the README keeps web search and direct answers in the cloud product. Pip-audit found 1 known vulnerability in our installed environment. The supplied audit result does not identify its package or severity.

What happened when we ran it

Our sandbox installed commit e5d2e78 in 54 seconds. Our measurement setup was an unprivileged Debian container with 3 CPUs, 8 GB of RAM, the ghcr.io/astral-sh/uv:python3.12-bookworm image, and no secrets. The checkout contained 943 files, about 172,124 lines of source, and occupied 29.1 MB. Installation added 159 Python packages and expanded the environment to 6,113 MB. That step succeeded. The configured build did not: it exited 1 after 2 seconds. The end of its log shows SyntaxWarnings for invalid escape sequences in three documentation examples, but it does not show the terminating error. We cannot honestly name the cause from that tail.

Pytest failed with exit 3 after 32 seconds. Its overall report recorded 0 passed, 0 failed, 1 skipped, and 37 collection or setup errors out of 37. The last error came from tests/test_cloud_bugs_batch.py, which called sys.exit(1) during import and triggered an internal pytest error. A separate summary line inside the log says 84 passed and 2 failed out of 86 tests. Treat them as intermediate results inside a command that never completed cleanly. Pip-audit also found 1 known vulnerability; the supplied result gives no package or severity.

The 6,113 MB environment buys unusually deep browser control

Crawl4AI v0.9.4 supports Chromium, Firefox, and WebKit. It can preserve sessions, use saved browser profiles, execute JavaScript, wait for elements, scroll lazy pages, rotate authenticated proxies, and connect to remote browsers through Chrome DevTools Protocol. A run can return Markdown, raw HTML, links, media, screenshots, or PDFs. For a JavaScript storefront or an authenticated research portal, that is a useful amount of control in one Python interface.

The extraction layer is sensibly split. CSS, XPath, and regular-expression schemas can produce structured data without a model call. Markdown filters can prune boilerplate or rank sections against a query. An LLM strategy is available when the page refuses to fit a stable schema, but it requires a provider configuration and adds runtime work outside the 54-second install we measured. Keeping deterministic extraction available is important because repeatable page layouts rarely need a model in the loop.

Static pages rarely justify 159 installed packages

Our 6,113 MB environment is hard to justify when a site sends useful HTML without client-side rendering. Trafilatura targets that narrower job. Scrapy makes more sense when you want spiders, scheduling, item pipelines, and crawling policy but do not need browser-first Markdown. Crawl4AI earns its larger footprint when a plain HTTP client cannot reach the state or content your application needs.

The repository does offer several ways in: Python, a crwl command, and a Docker server on port 11235. The README's Python quick start is short, but contributors meet a different scale. Our 29.1 MB checkout grew past 6 GB after installation, and the source build plus complete test command both failed. Pin the package and browser versions, cache the browser download, and repeat the exact crawl fixtures your service depends on before an upgrade.

Self-hosting keeps proxies and bot walls on your side

Crawl4AI v0.9.4 reserves web search and experimental answers for the hosted service. With the Python library or your own Docker server, you run the browsers and manage proxies, cookies, sessions, and site-specific settings. The hosted service handles those browser operations for you, so self-hosting the crawler does not reproduce the entire paid product.

The Docker path needs an API token before it is useful beyond the container. The documented command exposes port 11235, allocates 1 GB of shared memory, and passes CRAWL4AI_API_TOKEN. Model-assisted extraction needs an LLM provider or the cloud extraction endpoint; ordinary Markdown and schema extraction do not. That separation lets a team keep routine crawls local without sending every page to a model, but operating the browser pool remains their job.

Deep crawling in v0.9.4 needs guardrails outside the library

Crawl4AI v0.9.4 has 2 open reports that matter when crawl limits control cost or safety. Issue 2308 says the Docker API has rejected request-supplied deep-crawl strategies since v0.9.0. An open pull request on October 5 proposed an operator opt-in. Issue 2338 reports that BFSDeepCrawlStrategy(max_pages=50) returned 193 pages because sibling pages could overfill the next-level queue. A separate fix was open the same day.

These reports also show maintainers engaging with specific defects. GitHub recorded a push on October 5, 2026, v0.9.4 had shipped on September 23, and the repository had 84,793 stars plus 233 combined open issues and pull requests when checked. Those dates establish active maintenance. They do not prove every boundary is settled. If a page cap protects money, time, or a target site, enforce it in the caller as well and verify the returned count.

Use it when the browser is part of the problem

Crawl4AI is strongest when extraction starts after login, scrolling, script execution, or multi-page navigation. Its outputs are already shaped for retrieval and agent code, and the deterministic paths keep a model optional. Those benefits are concrete. So are the costs: 159 packages, 6,113 MB on disk, a failed build, 37 collection or setup errors, and one known audit finding in our sandbox.

For browser-heavy Python work, a pinned pilot is warranted. Test the exact sites, soak the Docker workers, cap work outside the crawler, and compare raw output with the filtered Markdown before trusting it downstream. For static news pages or documentation, start smaller. The easiest dependency to operate is still the browser you never had to launch.

Alternatives

ProjectWhat it isPick it when
Firecrawl gh↗A crawl-and-extract API with both managed and self-hosted deployment paths.pick this instead when an API product matters more than direct control of a Python browser session.
Scrapy gh↗A mature Python framework for programmable crawling and scraping.pick this instead when crawl scheduling, spiders, and pipelines matter more than LLM-ready Markdown.
TrafilaturaA focused Python and command-line extractor for main text and page metadata.pick this instead when clean article text is enough and running a browser would waste resources.

Sources

  1. Crawl4AI repository and README
  2. Crawl4AI v0.9.4 release
  3. Docker deep-crawl configuration issue
  4. BFS max-pages issue
  5. Docker deep-crawl opt-in pull request
  6. BFS page-budget fix pull request

More data reviews

wine-quality-svc-tuning · dhis2-immunisation-audit · OpenTerminal · The-Quant-Trading-Vault · multimodal-product-discovery · edgequake · the whole board →