[Skip to main content](#__docusaurus_skipToContent_fallback)

[![Crawlee JavaScript](/img/crawlee-javascript-light.svg)![Crawlee JavaScript](/img/crawlee-javascript-dark.svg)](https://crawlee.dev/js.md)

[![Crawlee JavaScript](/img/crawlee-javascript-light.svg)![Crawlee JavaScript](/img/crawlee-javascript-dark.svg)](https://crawlee.dev/js.md)[![Crawlee Python](/img/crawlee-python-light.svg)![Crawlee Python](/img/crawlee-python-dark.svg)](https://crawlee.dev/python)[![Crawlee](/img/crawlee-light.svg)![Crawlee](/img/crawlee-dark.svg)](https://crawlee.dev/index.md)

[Docs](https://crawlee.dev/js/docs/quick-start.md)[Examples](https://crawlee.dev/js/docs/examples.md)[API](https://crawlee.dev/js/api/core.md)[Changelog](https://crawlee.dev/js/api/core/changelog.md)[Blog](https://crawlee.dev/blog.md)

Search documentation...

[Get started](https://crawlee.dev/js/docs/quick-start.md)

# Build reliable web scrapers. Fast.

Crawlee is a web scraping library for JavaScript and Python. It handles blocking, crawling, proxies, and browsers for you.

![Crawlee JavaScript](/img/crawlee-javascript-light.svg)![Crawlee JavaScript](/img/crawlee-javascript-dark.svg)

[Get started](https://crawlee.dev/js/docs/quick-start.md)[Star](https://github.com/apify/crawlee)

[Run on](https://console.apify.com/actors/6i5QsHBMtm3hKph70?runConfig=eyJ1IjoiRWdQdHczb2VqNlRhRHQ1cW4iLCJ2IjoxfQ.eyJpbnB1dCI6IntcbiAgICBcImNvZGVcIjogXCJpbXBvcnQgeyBQbGF5d3JpZ2h0Q3Jhd2xlciB9IGZyb20gJ2NyYXdsZWUnO1xcblxcbi8vIENyYXdsZXIgc2V0dXAgZnJvbSB0aGUgcHJldmlvdXMgZXhhbXBsZS5cXG5jb25zdCBjcmF3bGVyID0gbmV3IFBsYXl3cmlnaHRDcmF3bGVyKHtcXG4gICAgLy8gVXNlIHRoZSByZXF1ZXN0SGFuZGxlciB0byBwcm9jZXNzIGVhY2ggb2YgdGhlIGNyYXdsZWQgcGFnZXMuXFxuICAgIGFzeW5jIHJlcXVlc3RIYW5kbGVyKHsgcmVxdWVzdCwgcGFnZSwgZW5xdWV1ZUxpbmtzLCBwdXNoRGF0YSwgbG9nIH0pIHtcXG4gICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgcGFnZS50aXRsZSgpO1xcbiAgICAgICAgbG9nLmluZm8oYFRpdGxlIG9mICR7cmVxdWVzdC5sb2FkZWRVcmx9IGlzICcke3RpdGxlfSdgKTtcXG5cXG4gICAgICAgIC8vIFNhdmUgcmVzdWx0cyBhcyBKU09OIHRvIC4vc3RvcmFnZS9kYXRhc2V0cy9kZWZhdWx0XFxuICAgICAgICBhd2FpdCBwdXNoRGF0YSh7IHRpdGxlLCB1cmw6IHJlcXVlc3QubG9hZGVkVXJsIH0pO1xcblxcbiAgICAgICAgLy8gRXh0cmFjdCBsaW5rcyBmcm9tIHRoZSBjdXJyZW50IHBhZ2VcXG4gICAgICAgIC8vIGFuZCBhZGQgdGhlbSB0byB0aGUgY3Jhd2xpbmcgcXVldWUuXFxuICAgICAgICBhd2FpdCBlbnF1ZXVlTGlua3MoKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gVW5jb21tZW50IHRoaXMgb3B0aW9uIHRvIHNlZSB0aGUgYnJvd3NlciB3aW5kb3cuXFxuICAgIC8vIGhlYWRsZXNzOiBmYWxzZSxcXG5cXG4gICAgLy8gQ29tbWVudCB0aGlzIG9wdGlvbiB0byBzY3JhcGUgdGhlIGZ1bGwgd2Vic2l0ZS5cXG4gICAgbWF4UmVxdWVzdHNQZXJDcmF3bDogMjAsXFxufSk7XFxuXFxuLy8gQWRkIGZpcnN0IFVSTCB0byB0aGUgcXVldWUgYW5kIHN0YXJ0IHRoZSBjcmF3bC5cXG5hd2FpdCBjcmF3bGVyLnJ1bihbJ2h0dHBzOi8vY3Jhd2xlZS5kZXYnXSk7XFxuXFxuLy8gRXhwb3J0IHRoZSBlbnRpcmV0eSBvZiB0aGUgZGF0YXNldCB0byBhIHNpbmdsZSBmaWxlIGluXFxuLy8gLi9zdG9yYWdlL2tleV92YWx1ZV9zdG9yZXMvcmVzdWx0LmNzdlxcbmNvbnN0IGRhdGFzZXQgPSBhd2FpdCBjcmF3bGVyLmdldERhdGFzZXQoKTtcXG5hd2FpdCBkYXRhc2V0LmV4cG9ydFRvQ1NWKCdyZXN1bHQnKTtcXG5cXG4vLyBPciB3b3JrIHdpdGggdGhlIGRhdGEgZGlyZWN0bHkuXFxuY29uc3QgZGF0YSA9IGF3YWl0IGNyYXdsZXIuZ2V0RGF0YSgpO1xcbmNvbnNvbGUudGFibGUoZGF0YS5pdGVtcyk7XFxuXCJcbn0iLCJvcHRpb25zIjp7ImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsIm1lbW9yeSI6NDA5Nn19.WKB14SjgTceKYyhONw2oXTkiOao6X4-UAS7cIuwqGvo\&asrc=run_on_apify)

```
import { PlaywrightCrawler } from 'crawlee';



const crawler = new PlaywrightCrawler({

    async requestHandler({ request, page, enqueueLinks, pushData, log }) {

        const title = await page.title();

        log.info(`Title of ${request.loadedUrl} is '${title}'`);



        await pushData({ title, url: request.loadedUrl });

        await enqueueLinks();

    },



    // Uncomment this option to see the browser window.

    // headless: false,

});



await crawler.run(['https://crawlee.dev']);
```

Or start with a template from our CLI

`$npx crawlee create my-crawler`

Built with 🤍 by Apify. Forever free and open-source.

## What are the benefits?

### Unblock websites by default

Crawlee crawls stealthily with zero configuration, but you can customize its behavior to overcome any protection. Real-world fingerprints included.

[Learn more](https://crawlee.dev/js/docs/guides/avoid-blocking.md)

```
{

    fingerprintOptions: {

        fingerprintGeneratorOptions: {

            browsers: ['chrome', 'firefox'],

            devices: ['mobile'],

            locales: ['en-US'],

        },

    },

},
```

### Work with your favorite tools

Crawlee integrates BeautifulSoup, Cheerio, Puppeteer, Playwright, and other popular open-source tools. No need to learn new syntax.

[Learn more](https://crawlee.dev/js/docs/quick-start.md#choose-your-crawler)

![Work with your favorite tools](/img/favorite-tools-light.webp)![Work with your favorite tools](/img/favorite-tools-dark.webp)

### One API for headless and HTTP

Switch between HTTP and headless without big rewrites thanks to a shared API. Or even let Adaptive crawler decide if JS rendering is needed.

[Learn more](https://crawlee.dev/js/api/core.md)

```
const crawler = new AdaptivePlaywrightCrawler({

    renderingTypeDetectionRatio: 0.1,

    async requestHandler({ querySelector, enqueueLinks }) {

        // The crawler detects if JS rendering is needed

        // to extract this data. If not, it will use HTTP

        // for follow-up requests to save time and costs.

        const $prices = await querySelector('span.price')

        await enqueueLinks();

    },

});
```

## What else is in Crawlee?

[![](/img/auto-scaling-light.webp)![](/img/auto-scaling-dark.webp)](https://crawlee.dev/js/docs/guides/scaling-crawlers.md)

### [Auto scaling](https://crawlee.dev/js/docs/guides/scaling-crawlers.md)

[Crawlers automatically adjust concurrency based on available system resources. Avoid memory errors in small containers and run faster in large ones.](https://crawlee.dev/js/docs/guides/scaling-crawlers.md)

[![](/img/smart-proxy-light.webp)![](/img/smart-proxy-dark.webp)](https://crawlee.dev/js/docs/guides/proxy-management.md)

### [Smart proxy rotation](https://crawlee.dev/js/docs/guides/proxy-management.md)

[Crawlee uses a pool of sessions represented by different proxies to maintain the proxy performance and keep IPs healthy. Blocked proxies are removed from the pool automatically.](https://crawlee.dev/js/docs/guides/proxy-management.md)

[![](/img/queue-light-icon.svg)![](/img/queue-dark-icon.svg)](https://crawlee.dev/js/docs/guides/request-storage.md)

### [Queue and storage](https://crawlee.dev/js/docs/guides/request-storage.md)

[Pause and resume crawlers thanks to a persistent queue of URLs and storage for structured data.](https://crawlee.dev/js/docs/guides/request-storage.md)

[![](/img/scraping-utils-light-icon.svg)![](/img/scraping-utils-dark-icon.svg)](https://crawlee.dev/js/api/utils.md)

### [Handy scraping utils](https://crawlee.dev/js/api/utils.md)

[Sitemaps, infinite scroll, contact extraction, large asset blocking and many more utils included.](https://crawlee.dev/js/api/utils.md)

[![](/img/routing-light-icon.svg)![](/img/routing-dark-icon.svg)](https://crawlee.dev/js/api/core/class/Router.md)

### [Routing & middleware](https://crawlee.dev/js/api/core/class/Router.md)

[Keep your code clean and organized while managing complex crawls with a built-in router that streamlines the process.](https://crawlee.dev/js/api/core/class/Router.md)

## Deploy to cloud

Crawlee, by Apify, works anywhere, but Apify offers the best experience. Easily turn your project into an

<!-- -->

[Actor](https://apify.com/actors)—a serverless micro-app with built-in infra, proxies, and storage.

[Deploy to Apify](https://crawlee.dev/js/docs/deployment/apify-platform.md)

1

Install Apify SDK and Apify CLI.

2

Add

```
Actor.init()
```

to the beginning and

<!-- -->

```
Actor.exit()
```

to the end of your code.

3

Use the Apify CLI to push the code to the Apify platform.

## Crawlee helps you build scrapers faster

![](/img/zero-setup-light-icon.svg)![](/img/zero-setup-dark-icon.svg)

### Zero setup required

Copy code example, install Crawlee and go. No CLI required, no complex file structure, no boilerplate.

[Get started](https://crawlee.dev/js/docs/quick-start.md)

![](/img/defaults-light-icon.svg)![](/img/defaults-dark-icon.svg)

### Reasonable defaults

Unblocking, proxy rotation and other core features are already turned on. But also very configurable.

[Learn more](https://crawlee.dev/js/docs/guides/configuration.md)

![](/img/community-light-icon.svg)![](/img/community-dark-icon.svg)

### Helpful community

Join our Discord community of over 10k developers and get fast answers to your web scraping questions.

[Join Discord](https://discord.gg/jyEM2PRvMU)

## Get started now!

Crawlee won’t fix broken selectors for you (yet), but it makes building and maintaining reliable crawlers faster and easier—so you can focus on what matters most.

[Get started](https://crawlee.dev/js/docs/quick-start.md)

[![Docusaurus themed image](/img/crawlee-light.svg)![Docusaurus themed image](/img/crawlee-dark.svg)](https://crawlee.dev/index.md)

Docs

* [Guides](https://crawlee.dev/js/docs/guides.md)
* [Examples](https://crawlee.dev/js/docs/examples.md)
* [API reference](https://crawlee.dev/js/api/core.md)
* [Changelog](https://crawlee.dev/js/api/core/changelog.md)

Product

* [Discord](https://discord.com/invite/jyEM2PRvMU)
* [Stack Overflow](https://stackoverflow.com/questions/tagged/crawlee)
* [Twitter](https://twitter.com/apify)
* [YouTube](https://www.youtube.com/apify)

More

* [Apify platform](https://apify.com)
* [Docusaurus](https://docusaurus.io)
* [GitHub](https://github.com/apify/crawlee)

Crawlee is forever free and open source

©

<!-- -->

2026

<!-- -->

Apify
