429.
Two limits apply to every call — an account-wide cap across all endpoints, and a per-endpoint limit — each over a fixed window. Check either with
get_usage_limits or the X-RateLimit-* headers on every response.How the limits stack
Every request passes through two limits, and it has to clear both:- Account-wide cap — the ultimate bucket. Every call, to any endpoint, counts against one shared cap: 25 / second and 100,000 / month. Run either down and every endpoint returns
429until the window resets. - Per-endpoint limits — the individual buckets. On top of the cap, each endpoint has its own allowance (for example,
domain_quick_searchat 100 / day). This only affects that endpoint.
429 either by hammering one endpoint or by high total volume across all of them, whichever empties first. Windows are calendar-aligned in UTC (a daily limit resets at the end of the UTC day, a monthly one at month end), and failed calls are refunded — only successful requests count.
Check your usage
CallGET /service/get_usage_limits/ to see your limits and consumption — per endpoint and account-wide. It reads the same live counters the rate limiter enforces, so used and remaining are exact.
services— one block per endpoint you can call. Eachlimitsentry is one window:limit,used,remaining, andreset_seconds(seconds until it resets).periodis the window label (1 Day,1 Hour,1 Month).total— your account-wide limits across all endpoints, when any are set. Returned only when you don’t filter.
→
get_usage_limits in the API reference
On every response, too
You don’t have to pollget_usage_limits to stay aware of your budget — every rate-limited response also carries it in headers:
get_usage_limits when you want the full picture up front — for example, before a large batch job.
Live Search adds a capacity endpoint on top of this —
live_search_capacity — reporting remaining real-time searches for the hour, day, and month plus current queue depth, because it draws on a limited pool of live crawler accounts.When you exceed a limit
A request over the limit returns429 Too Many Requests before it runs, and tells you exactly how long to wait:
Retry-After(header) andretry_after_seconds(body) both give the seconds to wait before retrying. For a daily window that can be hours — queue the work rather than blocking on it.- A
429doesn’t cost you — rejected requests aren’t counted against your budget. - Failed requests are refunded too. If a call returns a non-2xx (say a
400or a502), the slot it took is credited back — so only successful work counts against your limit.
Limits by endpoint
Every endpoint has its own limit. See Rate limits by endpoint for the exact limit on every endpoint, or callget_usage_limits for your account’s live figures.
Best practices
1
Read your usage, don't guess
Watch
X-RateLimit-Remaining (or poll get_usage_limits) and ease off before it reaches zero. That’s cheaper than recovering from a 429.2
Respect Retry-After on a 429
When you do hit a
429, wait retry_after_seconds before retrying — don’t hammer the endpoint. For daily windows that value can be hours, so queue the work.3
Spread out batch jobs
Enriching a large list? Pace requests across the window instead of firing them all at once — and where one exists, prefer a bulk/database endpoint (10,000/day) over per-item quick searches (100/day).
4
Cache what you can
Results don’t change second to second. Cache responses and reuse them rather than re-querying the same term.
Rate limits are separate from credits. API requests are governed by the rate limits on this page. Credits are an organization-level measure, surfaced as
used_credits in your organization info — they track dashboard usage, not API rate limiting.