Skip to main content
Rate limits vary by plan. All limits are per API key.

Limits by plan

PlanRate Limit
$0n/a
$27 / month30 requests/min
$97 / month1000 requests/min
$497 / month (reg. $999)5000 requests/min

What counts as a request

Every API call counts toward the rate limit, regardless of whether it returns data. Empty results and account management calls (get_account, get_billing, get_usage) all count as requests.

Rate limit errors

When you exceed your plan’s rate limit, the API returns a 429 Too Many Requests response:
{
  "error": "Too Many Requests",
  "message": "Rate limit exceeded."
}
The request is not retried automatically — your client is responsible for handling 429 responses.

Handling rate limits

Exponential backoff is the recommended approach. When you receive a 429, wait before retrying:
async function callWithBackoff(fn, retries = 4) {
  for (let i = 0; i < retries; i++) {
    try {
      return await fn();
    } catch (err) {
      if (err.status !== 429 || i === retries - 1) throw err;
      await new Promise(r => setTimeout(r, Math.pow(2, i) * 200));
    }
  }
}
Multiple API keys can be used to distribute load if a single key is a bottleneck. Each key operates under its own limit, so spreading requests across keys increases effective throughput. Batch endpoints where available (e.g. enrich_phone supports up to 100 linkedin_urls per call) let you reduce total request count significantly.