Skip to content
Troubleshooting

HTTP 429 Too Many Requests: How Rate Limits Work and How to Survive Them

HTTP 429 Too Many Requests means your request was well-formed and refused purely because of volume. The server is not questioning who you are or what you asked for — it is telling you that this identity, in this window, has had enough. Which identity is being counted matters more than the number itself: rate limits attach to an IP address, an API key, an account, a session cookie or some combination, and you cannot pace correctly until you know which.

seamless Team10 min readAugust 9, 2026
  • troubleshooting
  • http status codes
  • 429
  • rate limiting
Cube payloads piled up against a narrow metering gate lit crimson, with a thin single-file line continuing beyond it

429 behaves differently from every other error in a scraping stack, because the naive reaction makes it worse. A failed request that gets retried immediately looks, from the server's side, exactly like the abuse the rate limit exists to stop — so the window extends, the penalty escalates, and the client concludes the site is broken.

What the server is actually counting

Before touching your code, work out the scope of the limit. It is usually visible in one experiment: change one variable and see whether the limit follows.

ScopeTestWhat helps
Per IPSame key, new exit — does it succeed?More exits, lower rate per exit
Per API keyNew exit, same key — still limited?Slower pacing, higher plan tier, more keys if permitted
Per accountSecond account from the same exit works?Spread work across accounts, each on its own identity
Per sessionNew cookie jar clears it?Shorter sessions, fresh jars, avoid cookie reuse across workers
Global / endpointEverything limited at once, everywhereOnly pacing helps; the limit is not about you

If a new exit IP does not clear the limit, adding proxies is pure cost. The single most expensive mistake with 429 is buying bandwidth to solve a key-scoped limit.

Read the headers before writing any code

Well-behaved APIs tell you exactly what they want. The response usually carries more information than the status line.

  • Retry-After — seconds, or an HTTP date. This is an instruction, not a suggestion.
  • X-RateLimit-Limit — the ceiling for the current window.
  • X-RateLimit-Remaining — what is left. Throttle *before* this reaches zero.
  • X-RateLimit-Reset — when the window rolls over, usually a Unix timestamp.
  • RateLimit and RateLimit-Policy — the newer standardised form; the same information in one line.

The best-tuned clients never see a 429 at all, because they watch Remaining and slow down as it approaches zero rather than waiting to be told off. Treat the 429 itself as a bug in your pacing rather than a normal part of the loop.

Backoff that actually works

Three properties separate a retry policy that recovers from one that entrenches the problem.

  1. 1Exponential, not linear. Double the wait each attempt: 1s, 2s, 4s, 8s, with a sane ceiling.
  2. 2Jittered. Add randomness. Without it, every worker that failed at the same moment retries at the same moment, and you recreate the spike that caused the limit.
  3. 3Capped and surfaced. Give up after a fixed number of attempts and record it. A retry loop that never terminates hides a broken assumption for weeks.

When Retry-After is present it overrides all of this. The server has told you the exact moment it will listen again; arriving early is both rude and counterproductive.

Pause the whole queue for that exit, not just the failed request. Letting nine other workers keep hitting an address that was just rate-limited turns a short cooldown into a long one.

Spreading load without looking like an attack

For IP-scoped limits the arithmetic is simple: if one address may make 60 requests a minute and you need 600, you need at least ten addresses and headroom on top. What matters is that each address behaves like a plausible client rather than a shard of one large machine.

  • Keep a per-exit rate meaningfully below the observed ceiling, not at it.
  • Vary the interval. Requests landing exactly every 900ms are a signature no human produces.
  • Keep a session's cookies, headers and exit together. Rotating the IP mid-session while keeping the cookie is a strong bot signal — the trade-offs are in rotating vs sticky sessions.
  • Separate read-only crawling from logged-in flows so a limit on one does not stall the other.

Rotating residential proxies fit the first case, where each request can come from a different consumer address. For anything that carries a session — carts, dashboards, queues — a static ISP proxy per worker keeps the identity stable while still letting you scale the number of identities.

Need more exits, not more bandwidth?

Residential from €1.20/GB with data that never expires, ISP proxies from €1.80/IP. Pay-as-you-go, no subscription.

See pricing

429 that is not really 429

Not every rate limit uses the correct status code, and not every 429 is a rate limit.

What you seeWhat it usually is
403 with a challenge bodyBot protection using abuse controls — see HTTP 403
Cloudflare 1015Cloudflare's own rate limiter, not the origin's
503 with Retry-AfterOverload or maintenance; correct code, different cause
200 with an empty result setSilent throttling. The most expensive one, because nothing fails

That last row is worth guarding against explicitly. Validate the shape of successful responses, not just their status, or a throttled crawl will quietly write thousands of empty rows and look healthy the whole time.

A working policy in five lines

  1. 1Track X-RateLimit-Remaining per identity and slow down at 20% left.
  2. 2On 429, honour Retry-After; fall back to exponential backoff with jitter.
  3. 3Pause the affected identity's queue, not the whole crawl.
  4. 4Cap retries, then park the task and alert rather than looping.
  5. 5Log status, identity, exit IP, endpoint and timestamp on every failure.

Rate limits are the one class of block where the polite client genuinely wins. Sites publish limits because they would rather you stay inside them than disappear behind a proxy pool, and staying inside them is almost always cheaper than the infrastructure needed to route around them.

Sources

Frequently asked questions

What does HTTP 429 Too Many Requests mean?

The request was valid but you have sent too many in the server's counting window. The limit attaches to an identity — usually an IP address, API key, account or session — and stays in force until that window resets.

How long should I wait after a 429?

Exactly as long as the Retry-After header says, if one is present. Without it, back off exponentially with jitter starting around one second and cap the total attempts, because retrying early is what most often extends the penalty.

Do more proxies fix 429 errors?

Only for limits counted per IP address. Send the same request through a fresh exit: if it succeeds, more exits raise your ceiling. If it fails, the limit is tied to your key, account or session and additional proxies add cost without adding throughput.

What is the difference between 429 and Cloudflare error 1015?

429 comes from the origin's own rate limiter. Error 1015 is Cloudflare's edge rate limiter refusing the request before it ever reaches the origin, so the site owner's application limits are not involved at all.

Why do I get 429 even at a low request rate?

Because the limit is probably not scoped to you alone. Shared exits, carrier NAT and busy residential addresses mean other traffic can consume the same budget, and burst limits count concurrency rather than average rate — ten simultaneous requests can trip a limit that a steady stream of the same volume would not.

Should I retry a 429 immediately?

No. An immediate retry is indistinguishable from the behaviour the limit exists to block, and many implementations extend the window when they see it. Wait out the cooldown and pause the rest of that identity's queue while you do.

SE
seamless Team
Proxy infrastructure

The seamless team runs residential, ISP and datacenter proxy infrastructure and writes these guides from day-to-day operational experience.

Ready to try seamless proxies?

Residential, ISP and datacenter proxies with no data expiry.

Browse Plans