crawlee is a free, open source data extraction & web scraping project written in TypeScript and released under Apache-2.0. It has 25,823 GitHub stars, 1,673 forks and 135 open issues, and was last pushed 7 hours ago. On this registry it ranks #9 of 45 tracked projects in Data Extraction & Web Scraping, with 5 head-to-head comparisons available. It gained 14 stars over the last 3 tracked days.

What is crawlee?

What it is

Crawlee is a web scraping and browser automation library for Node.js, written in TypeScript and published on npm as the crawlee package. It lives in the JavaScript and TypeScript ecosystem, and it covers crawling and scraping end to end: fetching pages, following links, extracting data, and storing the results to disk or to the cloud. The project also has a Python counterpart, Crawlee for Python, maintained alongside it by Apify.

The concrete problem it solves is the boilerplate and fragility that come with writing a crawler from scratch. Instead of hand-rolling URL queues, retry logic, concurrency, header generation, and storage, a developer describes a request handler and Crawlee handles the surrounding machinery. It presents one interface over several crawling backends, so a project can switch between raw HTTP requests and a headless browser without rewriting its scraping logic. The library is licensed under Apache-2.0 and is designed so that crawlers appear human-like and pass under modern bot protections even with the default configuration.

Key capabilities

  • A single interface for HTTP crawling and headless browser crawling, with support for Puppeteer, Playwright, Cheerio, JSDOM, and raw HTTP.
  • A persistent queue for URLs that supports both breadth-first and depth-first traversal.
  • Pluggable storage for tabular data and files, writing by default to ./storage in the current working directory.
  • Automatic scaling with the available system resources.
  • Integrated proxy rotation and session management.
  • Crawl lifecycles customizable through hooks, plus configurable routing, error handling, and retries.
  • HTTP crawling with zero-config HTTP2 support (including through proxies), automatic generation of browser-like headers, replication of browser TLS fingerprints, and integrated fast HTML parsers.
  • Written in TypeScript with generics, with Dockerfiles ready to deploy.

Who uses it and how

  • Teams building scrapers that extract data for AI, LLMs, RAG pipelines, or GPTs.
  • Developers downloading HTML, PDF, JPG, PNG, and other files from websites.
  • Engineers running crawlers in headful mode to debug and headless mode in production.
  • Projects bootstrapped with the Crawlee CLI, which installs dependencies and adds boilerplate code.
  • Users of the Apify SDK, who must add dependency overrides in package.json to avoid installing multiple Crawlee versions.

Getting started

Crawlee requires Node.js 16 or higher. The fastest route is the CLI: npx crawlee create my-crawler, then cd my-crawler and npm start. For manual installation into an existing project, run npm install crawlee playwright; Playwright is not bundled, in order to reduce install size. Beta builds are available with npm install crawlee@next.

When to use it — and when not to

Crawlee is a library rather than a managed scraping service, so a self-hoster operates the crawl, its storage location, and any proxy infrastructure directly. It replaces a large amount of custom crawler code, but it does not remove the need to configure storage, routing, and error handling for the specific target sites. The README notes that Playwright is not bundled to keep the install size down, which means browser-based crawling requires an additional dependency and, in production, a working browser environment.

project readme (upstream, from github) — read inline

Crawlee
</a>

A web scraping and browser automation library

apify%2Fcrawlee | Trendshift

NPM latest version Downloads Chat on discord Build Status

Crawlee covers your crawling and scraping end-to-end and helps you build reliable scrapers. Fast.

Your crawlers will appear human-like and fly under the radar of modern bot protections even with the default configuration. Crawlee gives you the tools to crawl the web for links, scrape data, and store it to disk or cloud while staying configurable to suit your project's needs.

Crawlee is available as the crawlee NPM package.

👉 View full documentation, guides and examples on the Crawlee project website 👈

Do you prefer 🐍 Python instead of JavaScript? 👉 Checkout Crawlee for Python 👈.

Installation

We recommend visiting the Introduction tutorial in Crawlee documentation for more information.

Crawlee requires Node.js 16 or higher.

With Crawlee CLI

The fastest way to try Crawlee out is to use the Crawlee CLI and choose the Getting started example. The CLI will install all the necessary dependencies and add boilerplate code for you to play with.

npx crawlee create my-crawler
cd my-crawler
npm start

Manual installation

If you prefer adding Crawlee into your own project, try the example below. Because it uses PlaywrightCrawler we also need to install Playwright. It's not bundled with Crawlee to reduce install size.

npm install crawlee playwright
import { PlaywrightCrawler, Dataset } from 'crawlee';

// PlaywrightCrawler crawls the web using a headless
// browser controlled by the Playwright library.
const crawler = new PlaywrightCrawler({
    // Use the requestHandler to process each of the crawled pages.
    async requestHandler({ request, page, enqueueLinks, log }) {
        const title = await page.title();
        log.info(`Title of ${request.loadedUrl} is '${title}'`);

        // Save results as JSON to ./storage/datasets/default
        await Dataset.pushData({ title, url: request.loadedUrl });

        // Extract links from the current page
        // and add them to the crawling queue.
        await enqueueLinks();
    },
    // Uncomment this option to see the browser window.
    // headless: false,
});

// Add first URL to the queue and start the crawl.
await crawler.run(['https://crawlee.dev']);

By default, Crawlee stores data to ./storage in the current working directory. You can override this directory via Crawlee configuration. For details, see Configuration guide, Request storage and Result storage.

Installing pre-release versions

We provide automated beta builds for every merged code change in Crawlee. You can find them in the npm list of releases. If you want to test new features or bug fixes before we release them, feel free to install a beta build like this:

npm install crawlee@next

If you also use the Apify SDK, you need to specify dependency overrides in your package.json file so that you don't end up with multiple versions of Crawlee installed:

{
    "overrides": {
       "apify": {
           "@crawlee/core": "$crawlee",
           "@crawlee/types": "$crawlee",
           "@crawlee/utils": "$crawlee"
       }
    }
}

🛠 Features

  • Single interface for HTTP and headless browser crawling
  • Persistent queue for URLs to crawl (breadth & depth first)
  • Pluggable storage of both tabular data and files
  • Automatic scaling with available system resources
  • Integrated proxy rotation and session management
  • Lifecycles customizable with hooks
  • CLI to bootstrap your projects
  • Configurable routing, error handling and retries
  • Dockerfiles ready to deploy
  • Written in TypeScript with generics

👾 HTTP crawling

  • Zero config HTTP2 support, even for proxies
  • Automatic generation of browser-like headers
  • Replication of browser TLS fingerprints
  • Integrated fast HTML parsers. Cheerio and JSDOM
  • Yes, you can scrape JSON APIs as well

💻 Real browser crawling

  • JavaScript rendering and screenshots
  • Headless and headful support
  • Zero-config generation of human-like fingerprints
  • Automatic browser management
  • Use Playwright and Puppeteer with the same interface
  • Chrome, Firefox, Webkit and many others

Usage on the Apify platform

Crawlee is open-source and runs anywhere, but since it's developed by Apify, it's easy to set up on the Apify platform and run in the cloud. Visit the Apify SDK website to learn more about deploying Crawlee to the Apify platform.

Support

If you find any bug or issue with Crawlee, please submit an issue on GitHub. For questions, you can ask on Stack Overflow, in GitHub Discussions or you can join our Discord server.

Contributing

Your code contributions are welcome, and you'll be praised to eternity! If you have any ideas for improvements, either submit an issue or create a pull request. For contribution guidelines and the code of conduct, see CONTRIBUTING.md.

License

This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.

Frequently asked questions

Is crawlee free to use?

crawlee is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does crawlee do?

Crawlee—A web scraping and browser automation library for Node.js to build reliable crawlers. In JavaScript and TypeScript. Extract data for AI, LLMs, RAG, or G

What is crawlee written in?

crawlee is primarily written in TypeScript. Its source is publicly available at https://github.com/apify/crawlee, and it has 25,823 GitHub stars.