
Crawlee review
Node.js library for building crawlers that use plain HTTP or a headless browser
Chandan Kumar is a founder of Geekflare. He is a technology enthusiast and entrepreneur who loves to help businesses and people around the world. Chandan has worked at BNP Paribas, Citibank, Deutsche Bank, Motorola, and HP. He’s got an in-depth understanding of business software and IT infrastructure.
Verdict
Crawlee gives JavaScript teams one API for HTTP and browser crawling, with a persistent queue, proxy rotation and automatic scaling built in. It is a library, so scheduling, monitoring and a user interface are up to you or the Apify platform, and the Playwright template needed two fixes before it built and ran on my server.
Best for
JavaScript and TypeScript teams building production crawlers
Not for
Teams that want a ready-made service with an API and dashboard
Pros
- Switch between HTTP, Playwright and Puppeteer crawlers with the same code
- Persistent request queue and storage for results
- Proxy rotation, sessions and automatic scaling to the server's resources
- A Python version with a similar API
Cons
- No built-in scheduler or web interface
- No built-in Markdown or LLM extraction
- Version 4 is in release candidates, so expect breaking changes
Is Crawlee right for your project?
Describe what you need and AI will check the fit against this review.
Crawlee features and capabilities
One API for HTTP and browsers
Start with a fast HTTP crawler and switch to Playwright or Puppeteer for pages that need JavaScript, keeping the same routing code.
Persistent queue and storage
URLs to visit and scraped results are kept on disk, so a crawl can stop and resume and the results are ready to export.
Proxy and session rotation
Crawlee rotates proxies, keeps sessions tied to them and retries failed requests on its own.
Automatic scaling
It runs more pages in parallel when the server has spare CPU and memory, and fewer when it does not.
Ready Docker setup
Project templates include a Dockerfile built on Apify's browser images, so the crawler runs the same way on any server.
- JavaScript renderingRenders pages that build their content with JavaScript
- YesPlaywright or Puppeteer crawlers
- LLM-ready MarkdownReturns clean Markdown for AI and RAG pipelines
- No
- Structured extractionPulls fields into JSON with selectors or an LLM
- YesCheerio, JSDOM or browser selectors in your code
- Site crawlingFollows links across a site, not just single pages
- Yes
- Proxy supportRoutes requests through your own proxies
- YesBuilt-in rotation and sessions
- REST APIAccepts jobs over HTTP so other services can call it
- No
- MCP serverLets AI agents call it as a tool
- No
At a glance
- Type
- Crawling framework
- Stack
- TypeScript / Node.js
- SSO
- No
- Roles and permissions
- No
- Audit logs
- No
Free vs paid editions
What you get when you self-host, and what needs a paid plan.
Crawlee is free and has no paid edition. Apify, which builds it, runs Crawlee projects on its cloud platform. Apify has a free plan with $5 of usage a month, and paid plans start at $19 a month, or $17 a month billed yearly.
Self-hosting Crawlee
Crawlee's README asks for Node.js 22.13 or later, and Playwright or Puppeteer has to be installed separately for browser crawling. It gives no CPU or RAM figures.
New cloud server to ready
4 min 10 s
50-page crawl
16 s, 499 MB peak
Version tested
3.18.2 · Oct 18, 2026
- The playwright-ts template failed to compile, because it installs TypeScript 6, which wants an explicit rootDir. Adding one line to tsconfig.json fixed it.
- The built image then couldn't launch a browser: the template asks for Playwright 1.64.1, while its Docker base image ships the browsers for 1.58.2. Pinning Playwright to 1.58.2 fixed it.
- With both fixes, an empty server got to a finished crawl in about four minutes, most of it building a 3.3 GB image.
- The crawler fetched 50 pages in 16 seconds with a real browser, peaking at 499 MB, and rendered all 10 quotes on the JavaScript test page. It runs as a job and exits, so there is no idle memory to report.
npx crawlee create books -t playwright-ts
cd books
# TypeScript 6 needs an explicit rootDir: add "rootDir": "src" to tsconfig.json
# Match Playwright to the browsers in the template's Docker image
npm pkg set dependencies.playwright=1.58.2
docker build -t books-crawler .
docker run --rm books-crawlerWhat you can do with Crawlee
Crawling JavaScript-heavy sites
Use real browsers for single-page apps and switch to fast HTTP crawling for pages that don't need them.
Scrapers in a Node.js codebase
Keep crawlers in the same TypeScript repo and CI as the rest of your product.
Long crawls that resume
The persistent request queue lets a large crawl continue after a crash or a redeploy.