mrkeyoor.com_
Thu 24 Sept 19:58 UTC
Automationevaluationupdated 26 Aug 2026

crawlee review

Crawlee is a TypeScript and JavaScript framework for web crawling, scraping, and browser automation. It gives HTTP and browser crawlers a shared system for queues, retries, sessions, proxies, storage, routing, and scaling, so developers do not have to assemble those pieces around Playwright or an HTML parser.

+44stars / 7d
Verdict

Our Crawlee build passed in 38 seconds, but its 374-second test run finished with 1,559 passed, 192 failed, and 38 skipped out of 1,801. Use it when a Node.js crawler needs queues, sessions, retries, storage, and both HTTP and browser execution under one API. Choose Playwright or Puppeteer directly for narrow browser jobs, and hold v4 migration until the request-manager and storage behavior you depend on has targeted coverage.

We ran it

Lab card: what happened when we ran crawleeScreenshot of crawlee (crawlee.dev)
Install✓ · 166s1 packages · 1255 MB
Build✓ · 38s
Tests✗ · 374s1559 passed · 192 failed · 38 skipped of 1801 (vitest)
Repo2999 files~119,207 lines of source · 223.3 MB · 9 CI workflows · tests dir

Answers from our run

Does crawlee build from source?

Dependencies installed in 166 seconds (1 packages), and the build succeeded in 38 seconds. We cloned commit 69a824b into a clean Debian container with 3 CPUs and no project-specific setup.

Do crawlee's tests pass?

Not all of them: 1559 of 1801 passed and 192 failed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use crawlee?

Python-only teams: this repository is the Node.js implementation, while the README points to a separate Crawlee for Python project.

What are the alternatives to crawlee?

Playwright, Puppeteer, Scrapy. Our Crawlee build passed in 38 seconds, but its 374-second test run finished with 1,559 passed, 192 failed, and 38 skipped out of 1,801.

Setup3/5Build passed; 1,255 MB install and 192 test failures add work
Docs4/5Clear quickstart, storage defaults, features, and browser split
Community5/525,514 stars with active work on August 26, 2026
Maturity4/5v3.18.1 is established while v4 changes core request behavior

Discussed on

  1. hnShow HN: Crawlee – Web scraping and browser automation library for Node.js282 points
  2. hnShow HN: Crawlee for Python – a web scraping and browser automation library254 points
  3. hnShow HN: Crawlee Cloud Self-hosted platform for running Crawlee and Apify actor4 points

Who it’s for

Node.js teams building crawlers that must move between raw HTTP, HTML parsing, and real browsers.
Developers who need persistent request queues, retry policy, session handling, proxy rotation, and datasets.
Scraping teams willing to budget browser dependencies and test target sites continuously.
Apify users who want an open-source crawler that also fits the company's hosted platform.

Who it’s NOT for

Python-only teams: this repository is the Node.js implementation, while the README points to a separate Crawlee for Python project.
Small scripts that only fetch a few stable pages: queues, storage, sessions, and browser management add machinery that a direct HTTP client may not need.
Teams requiring the full repository suite to pass in a 3-CPU container: our run ended with 192 failed tests and a Vitest worker timeout.
v4 adopters who need to choose the browser in adaptive mode: issue 4064 says AdaptivePlaywrightCrawler currently exposes no browser option.
Operators relying on v4 throttling without targeted tests: issue 4039 reports requests from a wrapped manager ignoring domain backoff.
Pipelines that must catch dataset write errors at the call site: issue 4065 reports that v4 transactional commits can surface errors only after the handler returns.

Setup reality

Our sandbox install succeeded in 166 seconds and used 1,255 MB on disk; the harness reported 1 installed package in the pnpm workspace. The build passed in 38 seconds. Tests failed after 374 seconds: Vitest reported 1,559 passed, 192 failed, and 38 skipped out of 1,801.

Crawlee needs Node.js 16 or newer. Browser crawling also requires Playwright or Puppeteer and browser binaries, which are deliberately not bundled with the main package. Proxy services, target credentials, and cloud storage add their own configuration when used. Local results go to ./storage by default.

The repository is a monorepo with 9 CI workflow files and no Dockerfile detected by our scan. HTTP crawlers avoid a browser, while Playwright and Puppeteer paths add larger downloads and more platform dependencies. Bot defenses change independently of Crawlee, so target-site regression tests remain part of operating a scraper.

One API covers HTTP crawlers and real browsers

Crawlee sits above several ways of retrieving a page. A lightweight crawler can use HTTP with Cheerio or JSDOM, while browser jobs can run through Playwright or Puppeteer. The surrounding system stays familiar: persistent URL queues, retries, routing, sessions, proxies, hooks, datasets, and resource-based scaling. That shared structure is the reason to choose Crawlee over calling a browser library directly. It is especially useful when some targets need JavaScript rendering and others do not.

The repository itself is a large pnpm workspace. At commit 69a824b, our checkout had 2,999 files, roughly 119,207 source lines, and occupied 223.3 MB before installation. The scan found a tests directory and 9 CI workflow files, with no Dockerfile. The README says deployment Dockerfiles are available through the wider project experience, but this measured checkout did not contain one. Plan to inspect the scaffold or deployment path you will actually use.

Browser support is optional and intentionally separate

A manual Playwright example installs both crawlee and playwright because browser automation is not bundled into the main package. That keeps an HTTP-only project from paying for browser packages and binaries. The CLI can create a starter crawler, while local queues and datasets default to ./storage. Node.js 16 or newer is required. Teams should select HTTP first when the target returns usable HTML and add a browser only for pages that need scripts, interaction, or screenshots.

Even without a bundled browser, our pnpm install used 1,255 MB and took 166 seconds. The harness reported 1 installed package for the workspace, so that count should not be read as a count of every transitive module present on disk. The build completed in 38 seconds. Browser projects will have additional downloads and operating requirements that this repository-only measurement did not include. Proxy accounts and cloud storage are also outside the local build.

What happened when we ran it

We ran commit 69a824b in an unprivileged container with 3 CPUs, 8 GB of RAM, Node 22, and no secrets. Installation succeeded in 166 seconds and the build passed in 38 seconds. The test command ran for 374 seconds before failing with exit code 1. Vitest reported 1,559 passed, 192 failed, and 38 skipped out of 1,801 tests.

The final log showed Vitest failing to start a forks worker for test/core/error_snapshotter.test.ts. The cause line says the pool runner timed out waiting for the worker to respond. The log tail does not prove why 192 tests failed or whether one resource limit explains all of them, so we will not assign a cause. It does establish that this commit did not pass the full suite in our 3-CPU, 8 GB sandbox.

Queues and storage are the feature, and the risk

Persistent requests let a crawl resume, deduplicate URLs, and enqueue discovered links. Datasets and key-value storage give handlers a standard output path. Retries, session management, and proxy rotation reduce the application code around unreliable sites. These features matter once a crawler lasts longer than one process or visits enough pages that restarts and duplicate work become expensive. A one-page extraction script may be clearer with a direct HTTP request and an HTML parser.

Crawlee's 374-second test run shows why storage and scheduling paths deserve their own acceptance suite. Test restart recovery, duplicate prevention, maximum crawl depth, oversized records, and partial output. Issue 4065 reports that v4 transactional writes can fail during commit after pushData has already returned, changing where an application can catch and repair a record. That is a v4 report, so stable v3 users should treat it as migration evidence rather than current v3 behavior.

v4 work is changing request management

Recent issues and pull requests show active changes around throttling, recoverable state, request locks, storage commits, and adaptive crawling. Issue 4039 reports a v4 path where requests supplied by a wrapped manager ignored a domain's backoff. Issue 4064 says adaptive Playwright crawling did not expose a browser choice. These are narrow reports with reproductions, and open work may change them. They still justify pinning a version and testing 429 responses, pacing, browser selection, and shutdown before upgrading.

GitHub recorded the last push on August 26, 2026, with 25,514 stars and 153 combined issues and pull requests. Stable release v3.18.1 arrived on August 12 and fixed storage purging, Cloudflare challenge handling, and crawl-depth behavior. The active maintenance is reassuring. Our 192 failed tests prevent an unconditional recommendation for this checkout. Use Crawlee for the orchestration it provides, then verify the precise crawler class, storage backend, and target behavior you plan to run.

Alternatives

ProjectWhat it isPick it when
Playwright gh↗A browser automation and testing framework for Chromium, Firefox, and WebKit.pick this instead when browser control is the job and you do not need Crawlee's queue, storage, and crawling policy.
Puppeteer gh↗A JavaScript API for controlling Chrome and Firefox.pick this instead when a direct browser API is enough and crawler orchestration would be extra weight.
Scrapy gh↗A mature Python framework for crawling and scraping websites.pick this instead when your scraping stack is Python and browser rendering is not the default path.

What people are saying

  1. [github-trending] apify/crawlee

Sources

  1. Crawlee repository and README
  2. Crawlee v3.18.1 release
  3. Issue 4065: transactional storage write errors
  4. Issue 4064: adaptive crawler browser selection
  5. Issue 4039: throttled request manager backoff

More automation reviews

alchemy · laya · prod-FARM-IOS-Core · ha_xiaomi_home · FreePEP · fragment-api-dev · the whole board →