Rate Limits & Quotas¶
ScrapeNest enforces limits at two levels — your organization (plan-wide) and each API key. Together they protect platform stability and your budget. You set the per-key limits when you create or update a key.
Organization limits¶
Plan-wide limits apply across every key in your organization.
| Tier | Requests per Minute (RPM) | Requests per Hour (RPH) |
|---|---|---|
| Trial | 60 | 1,000 |
| Standard | 600 | 10,000 |
| Enterprise | 3,000 | 60,000 |
Concurrency (how many jobs run at once) and your monthly credit pool are also plan-wide — see Billing & Usage.
Per-key limits¶
When creating an API key (Console → Developer → API Keys, or POST /api/v1/keys), you can scope tighter limits to that specific key. This is ideal for isolating a noisy integration or a third party.
| Setting | Description |
|---|---|
rate_limit_rpm |
Requests per minute allowed for this key. |
daily_quota |
Maximum requests per day for this key. |
max_concurrent_jobs |
Maximum jobs this key may run simultaneously. |
enforcement_mode |
block rejects requests over the limit with 429; observe only meters and logs them (useful for sizing limits before enforcing). |
curl -X POST "https://api.scrapenest.com/api/v1/keys" \
-H "X-API-Key: sn_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "nightly-batch",
"scopes": ["jobs:write", "jobs:read"],
"rate_limit_rpm": 120,
"daily_quota": 50000,
"max_concurrent_jobs": 10,
"enforcement_mode": "block"
}'
The effective limit on any request is the most restrictive of the org and key limits.
Handling 429s¶
When a request exceeds an enforced limit, the API returns 429 Too Many Requests. Inspect these headers:
X-RateLimit-Limit— the total request limit for the window.X-RateLimit-Remaining— requests remaining in the current window.X-RateLimit-Reset— when the window resets.Retry-After— seconds to wait before retrying (when present).
Retry strategy¶
Back off exponentially on 429, preferring Retry-After/X-RateLimit-Reset over a fixed delay, and always pair retries with an idempotency_token. The Python SDK errors guide has a ready-made retry helper.
Pace large crawls
Most 429s come from bursting. When paginating or crawling, spread submissions and use max_concurrent_jobs to self-limit.
See also¶
- Billing & Usage — credit pool, concurrency, overage.
- Errors & Retries — handling
429cleanly. - Authentication — API key scopes and IP allowlisting.