```yaml
product: AlterLab
title: "Exponential Backoff — Web Scraping Glossary | AlterLab"
comparison_context: "AlterLab is an alternative to Firecrawl, ScrapingBee, and Bright Data."
source_url: https://alterlab.io/glossary/exponential-backoff
```

infrastructure

# Exponential Backoff

Exponential backoff is a retry strategy where the wait time between successive retries increases exponentially, reducing load on rate-limited or temporarily unavailable endpoints.

When a request fails due to a transient error — a 429 Too Many Requests, a 503 Service Unavailable, or a network timeout — immediately retrying the request at full speed risks overwhelming the server and receiving the same error repeatedly. Exponential backoff addresses this by waiting progressively longer between retries: 1 second, 2 seconds, 4 seconds, 8 seconds, and so on, typically with a random jitter added to prevent a thundering-herd effect when many clients retry simultaneously.

A standard formula is `wait = min(cap, base * 2^attempt + jitter)`, where `cap` limits the maximum wait time, `base` is the initial wait (often 0.5–1 second), and `jitter` is a random value up to the current wait time. Most scraping frameworks and HTTP client libraries provide built-in retry utilities with configurable backoff parameters.

For rate-limited endpoints, exponential backoff is the polite and effective strategy. AlterLab's worker layer implements backoff internally, so callers receive results without managing retry logic themselves.

### What is Exponential Backoff?

Exponential backoff is a retry strategy where the wait time between successive retries increases exponentially, reducing load on rate-limited or temporarily unavailable endpoints.

### How does AlterLab handle Exponential Backoff?

For rate-limited endpoints, exponential backoff is the polite and effective strategy. AlterLab's worker layer implements backoff internally, so callers receive results without managing retry logic themselves.

## Examples

```
import time, random

def backoff_retry(fn, max_retries=5):
    for attempt in range(max_retries):
        try:
            return fn()
        except RateLimitError:
            wait = min(60, (2 ** attempt) + random.uniform(0, 1))
            time.sleep(wait)
    raise Exception("Max retries exceeded")
```

## Related Terms

[Retry LogicAutomated re-sending of failed requests with backoff strategies, essential for handling transient errors, rate limits, and flaky anti-bot challenges.](https://alterlab.io/glossary/retry-logic)[Rate LimitingA server-side control that caps the number of requests accepted from a single IP or session within a time window, returning HTTP 429 when exceeded.](https://alterlab.io/glossary/rate-limiting)[Circuit BreakerA circuit breaker is a fault-tolerance pattern that stops making requests to a failing endpoint after a threshold of errors, allowing the downstream service time to recover.](https://alterlab.io/glossary/circuit-breaker)[WebhookAn HTTP callback that delivers data to a specified URL when an async scrape job completes.](https://alterlab.io/glossary/webhook)[Scraping APIA managed web scraping service that abstracts proxy rotation, JavaScript rendering, and automatic website compatibility into a single HTTP endpoint.](https://alterlab.io/glossary/scraping-api)

## Extract Exponential Backoff data from any website

AlterLab returns clean, structured data from any public URL — no scraper infrastructure needed. Start free, no credit card required.

[View API docs](https://alterlab.io/docs/api/rest)

[Back to Glossary](https://alterlab.io/glossary)