webscrape.dev

Crawl-Delay

Crawl-delay is a directive publishers place in robots.txt asking crawlers to wait a minimum number of seconds between requests, written as a line such as Crawl-delay: 10 inside a user-agent group. It is not part of the original robots exclusion standard and support is uneven. Google's robots.txt documentation, read on 2026-07-27, is explicit: "Google supports the following fields (other fields such as crawl-delay aren't supported): user-agent, allow, disallow, sitemap." Bing and Yandex have historically honored it, and most open-source crawlers read it. It applies alongside allow and disallow rather than instead of them, so a delay never grants access to a disallowed path.

Treat a published delay as the floor of a wider pacing policy rather than the whole of one. The rest is per-host concurrency held to one or two connections, adaptive pacing that slows down when origin response times rise, and honoring Retry-After on a 429 or 503 instead of retrying immediately. Frameworks expose this directly. Scrapy has DOWNLOAD_DELAY, CONCURRENT_REQUESTS_PER_DOMAIN, and an AutoThrottle extension that targets a latency rather than a fixed interval; Crawlee, Nutch, and node-crawler each carry an equivalent. Adaptive pacing usually beats a fixed number, because a delay that is comfortable at 3am is not comfortable during the target's traffic peak.

Politeness here is self-interested, not only courteous. Aggressive pacing is the fastest way to get an entire ASN or proxy subnet blocked, and that block outlives the job that caused it. It affects every crawl you run through the same pool, it is slow to lift, and replacing the burned addresses costs more than the throughput the burst bought. Sustained moderate rates finish more jobs than bursts that end in a block, and CDN-level defenses respond to request rate per origin long before they respond to anything about your fingerprint.

The decision is what per-host rate to set and how to justify it later. A workable default: respect a published Crawl-delay where one exists, and where none does, derive a delay from measured origin latency, for example one concurrent request per host with a delay near the observed median response time. Record that policy somewhere durable, along with the robots.txt fetch you based it on. When a compliance question or an abuse complaint arrives, the difference between a documented pacing policy and an undocumented one is the whole conversation.

Tools that handle crawl-delay

4 tools in the webscrape.dev directory are commonly used for crawl-delay workflows, spanning crawling frameworks. Each is reviewed independently with pricing and editorial assessment.

Scrapy

Scrapy is a mature, widely-used Python framework for building crawlers. It handles request scheduling, concurrency, and data pipelines, leaving proxies and anti-bot handling to you or an add-on service.

Free
Apache Nutch

Apache Nutch is an open-source, Java-based web crawler framework and a top-level Apache Software Foundation project. It's built for large-scale batch crawling that traditionally runs on Apache Hadoop for distributed fetch, parse, and index jobs, though it can also run on a single machine for smaller crawls. It integrates with Apache Tika for content parsing and can index crawled content into Apache Solr or Elasticsearch, and its plugin-based architecture exposes stable extension points for parsers, HTML filtering, indexing, and scoring. The GitHub repo has roughly 3.3k stars and is Apache-2.0 licensed.

Free
Crawlee

Crawlee is a crawling and scraping library for Node and Python from Apify. It ships with request queuing, session pooling, and anti-blocking helpers, so more of the hard parts are built in than with a bare framework.

Free
node-crawler

node-crawler (npm package "crawler") is an open-source Node.js web scraping and crawling library maintained by bda-research. It wraps HTTP requests with connection pooling, rate limiting, a priority request queue, automatic retries, charset detection, and request deduplication, and it parses fetched HTML server-side with Cheerio for jQuery-style DOM querying by default. Version 2 is a TypeScript rewrite shipped as native ESM that requires Node.js 22+, and it has no headless browser, so it can't render client-side JavaScript.

Free

Browse by category

Crawling Frameworks Self-hosted libraries for building crawlers you run and own, with no per-request pricing.