- Each group has a rolling per-minute, per-hour, and per-day budget. The tightest wins: an exhausted per-minute window returns
429even with hourly and daily headroom left. - Each endpoint belongs to exactly one group with its own counters, so heavy search traffic never uses your feed budget.
- Only
JobSearchandJobFeedscale with your plan. An upgrade or downgrade changes them within about a minute. - Limits are checked before your wallet is charged, so a rate-limited request costs nothing.
Search and feed: scale with your plan
JobFeed is lower per minute because one feed request can deliver up to 1,000 jobs.
The Unlimited plan and included jobs change what Feed costs (Billing), not how many JobFeed requests you can make.
Everything else: fixed
These budgets are the same on every plan. A larger Job Search plan does not raise them.
Auto Apply also limits how many applications can be active at once (
409 concurrency_limit_reached). That limit is separate from these request budgets.
Which group an endpoint belongs to
Every response names the group that applied in
X-RateLimit-Group.
GET /api/companies/{id} needs no API key and is not rate limited, because it is served from CDN cache. Every other endpoint requires a key and is counted.
Reading the headers
Every response that passes through the rate limiter reports your position in the window. Response headers lists every header.
On a successful response,
Limit, Used, and Remaining describe the per-minute window. On a 429, they describe the window you exhausted.
When you exceed a limit
You get429 with Retry-After and a body that names the window, the group, and the limit. Errors documents the full envelope.
Retry-After seconds, and never hardcode a delay. The retry strategy has a working implementation.
Staying under the limits
1
Throttle on X-RateLimit-Remaining, not on 429
Slow down when
X-RateLimit-Remaining drops below about 15% of X-RateLimit-Limit. A 429 means your pacing is wrong, and every one is a wasted round trip.2
Use the feed for bulk, not paginated search
Paging through search to export the corpus burns
JobSearch requests and skips or repeats jobs as data changes. POST /api/jobs/feed bills the same per delivered job, returns up to 1,000 jobs per request, and has its own budget. See Sync a database.3
Cache geocode results
The same input normally resolves to the same result, so caching removes nearly all repeat
Geocode traffic. See Resolve locations.4
Paginate the feed serially
Keep one request in flight per cursor. Parallel fan-out on a cursor is unsupported and the fastest way to hit the per-minute limit. See Pagination.
Repeated authentication failures
Separately from your account limits, an IP address that produces 60 failed-authentication401s within 5 minutes is blocked for 5 minutes. While blocked, every keyed request from that IP gets 429 with Retry-After: 300, even with a valid key. The body has no code:

