What Is Crawlee?
Scrapeless Agent Browser provides managed browser execution for automation clients that need to render and interact with dynamic web pages.
Crawlee is an open-source web crawling and scraping framework with JavaScript and Python implementations. Crawlee organizes work around requests, crawler handlers, execution resources, and result storage. A framework coordinates which pages are processed and how records are saved; it is different from the browser engine that renders a page or a service that hosts a browser.
That distinction becomes valuable when a one-page script grows into a crawl. The challenge is no longer just reading an element. You need a bounded list of work, a way to discover additional URLs, clear rules for duplicate requests, and a record format that remains useful after the browser closes. Crawlee supplies components for those jobs, while your application defines the crawl's purpose and acceptable results.
What Crawlee Adds to a Page Script
Crawlee adds orchestration around code that retrieves pages and extracts data. The Crawlee crawling framework exposes HTTP and browser crawling, request storage, result storage, resource-aware execution, and lifecycle customization.
An ordinary page script starts with a URL and ends with some observations. A crawler also needs to track its frontier: the work that has been discovered but not yet completed. That frontier can expand as a handler finds category pages, detail pages, or pagination links. A durable request queue makes the work visible rather than hiding it inside a growing collection of browser tabs.
Handlers are still application code. A framework cannot decide whether a price is tax-inclusive, whether a title belongs to the current product, or whether an empty list means “no results.” Define those distinctions explicitly. A crawler that processed every queued URL can still produce an unusable dataset if its handlers accept incomplete or mismatched records.
HTTP Crawlers and Browser Crawlers Solve Different Problems
An HTTP crawler retrieves responses for parsing, while a browser crawler can execute page scripts and interact with rendered documents. The right choice depends on where the required content becomes available.
If a public article's text exists in the downloaded HTML, parsing that response may be enough. Starting a complete browser adds runtime work without necessarily adding information. If a page builds its useful content after JavaScript execution, a browser path may be necessary. An interactive filter or client-side pagination control can make that distinction visible.
Do not decide from the site's appearance alone. A visually complex page may include its records in the initial response, while a plain interface may populate everything later. Inspect the actual response and rendered state for the fields the task requires.
A browser also changes how documents are addressed. A price widget inside an embedded frame is not simply a deeper node in the parent document. The HTML document and browsing-context model explains why the crawler must identify the document containing its target before extracting from it.
Request Identity Determines What Gets Processed
Request identity determines whether two discovered links represent the same unit of crawl work. Deduplicating URLs is helpful only when the identity rule matches the application.
A tracking parameter may leave a product page unchanged, while a language or pagination parameter can select different content. Removing every query string could collapse distinct results. Keeping every parameter can produce repeated work. Define which URL components carry meaning for the target, and test the rule against representative links.
The request's identity is also different from a record's identity. A catalog page may contain many products; a product may appear on several catalog pages. Deduplicating page requests cannot by itself guarantee a dataset with one record per product.
Preserve a stable record identifier when the source provides one, along with the source URL and relevant collection context. If the source lacks a reliable identifier, document the matching rule used downstream. A guessed equality rule can silently merge different variants or different products with similar titles.
A Bounded Catalog Crawl as a Design Example
A bounded catalog crawl begins with approved seed URLs and admits only links that belong to the intended catalog. This is a conceptual design example, not a reported execution or a package-specific code recipe.
Start by separating discovery pages from detail pages. A category handler identifies eligible detail links and pagination paths. A detail handler extracts the fields belonging to one item. That separation makes scope and completeness easier to inspect than a single handler that treats every page as interchangeable.
Specify host and path rules before adding discovered links to the queue. A navigation menu can contain account pages, external promotions, and unrelated sections. Following every anchor would change the job's scope without a corresponding decision from the person operating it.
Define completion in terms of the dataset. A product record may require a stable identifier and title, with a nullable availability field. Missing required fields should produce a distinct incomplete outcome. An empty category can be valid, but only when the page actually represents the intended category and shows a completed empty state.
Storage Must Match the Shape of the Result
Crawlee distinguishes queued work from stored output, so a crawl can organize execution and results independently. Select storage around how the downstream application will read the data.
A dataset suits a collection of records. A key-value store suits named values or artifacts. Neither storage choice defines the correctness of a record. Establish a schema covering field names, nullable values, text normalization, and the source context needed to interpret the result.
For example, a displayed price without currency may be ambiguous. A stock status without a chosen location may be misleading. A record can be structurally valid JSON and still lack the context needed for a business decision. Preserve those inputs rather than trying to reconstruct them later.
Treat artifacts separately from ordinary records. Screenshots can explain a missing field, but they can also capture unrelated page information. Store them only when needed, protect access, and use a retention policy appropriate to the task. A diagnostic artifact should have a clear relationship to the request or record it explains.
Sessions Are an Input to the Crawl
Sessions influence what a crawler sees, even when the target URLs remain unchanged. Cookies, account state, language preferences, and browser storage can alter the returned page or rendered application.
The HTTP cookie mechanism explains one way a server relates requests to stored browser state. Browser storage has additional rules: Web Storage isolation and lifetime distinguish origin-scoped data from tab-associated session storage.
Use clean state for workflows that should be independent. Reuse authorized state only when continuity is a stated requirement. Sharing one mutable browser profile among unrelated jobs can cause the output of one task to depend on what another task clicked earlier.
The framework's session facilities, browser context, website session, and remote browser allocation should not be treated as interchangeable. Describe which component owns each boundary. That makes it possible to determine whether a failure concerns queue processing, browser availability, website authentication, or a changed page state.
How to Evaluate a Crawlee Project
Evaluate Crawlee by the work it organizes and the evidence the resulting dataset contains. A small representative crawl is more informative than counting how many URLs entered a queue.
| Check | Question to answer |
|---|---|
| Scope | Did every admitted URL belong to the approved job? |
| Execution path | Was HTTP parsing or browser rendering necessary? |
| Request identity | Were meaningful page variants preserved? |
| Record quality | Did required fields and source context survive? |
| Completion | Can empty, incomplete, and successful outcomes be distinguished? |
Also test a page with missing optional data and a page outside the admitted scope. These cases reveal whether handlers are implementing the intended policy. Keep error outcomes visible in the job summary instead of treating the absence of a record as proof that nothing was found.
Where Scrapeless Fits in This Architecture
Scrapeless Agent Browser belongs to the browser execution layer, while Crawlee belongs to crawl orchestration. The Agent Browser Puppeteer connection describes a supported client surface; it should not be interpreted as proof that an arbitrary Crawlee browser-pool configuration works unchanged.
The Agent Browser platform is relevant when a workflow needs managed dynamic-page execution. A related discussion of Crawlee for Python and crawl design can help frame the orchestration choices. Check language-specific documentation before translating concepts into methods or configuration.
Assess Scrapeless pricing against the browser work that remains after choosing the simplest adequate retrieval path. This definition does not claim that a Crawlee-to-Scrapeless integration was executed or benchmarked.
Conclusion
Crawlee turns a set of page operations into an organized crawl. Begin with request scope, choose HTTP or browser execution around the required content, and define records independently from page requests. A useful crawl finishes with explainable data and visible incomplete outcomes, rather than only an exhausted queue.
Put Browser Concepts Into Practice
Explore an authorized browser workflow with Scrapeless Agent Browser, then validate the page state and output your task requires.
Sign up today and get $5 in free credit — no credit card required.
Claim Your $5 Credit →FAQ
Is Crawlee a browser?
Crawlee is a crawling and scraping framework, not a browser. It can coordinate HTTP requests or browser-based work, while a browser runtime performs page rendering and interaction.
Does Crawlee require browser rendering for every URL?
Crawlee does not require a browser for every URL. Use an HTTP path when the required content is available in the response, and a browser path when script execution or interaction is necessary.
Does request deduplication prevent duplicate data records?
Request deduplication does not automatically prevent duplicate records. The same item can appear on several pages, and one page can contain many items. Define record identity separately from request identity.
Are the JavaScript and Python APIs interchangeable?
The JavaScript and Python APIs should not be assumed interchangeable. They share crawling concepts, but classes, configuration, and supported features must be checked in the documentation for the language and version used.