Skip to main content

Overview

Enrow implements rate limits to ensure fair usage and maintain service quality. The limit is the same across all endpoints and all plans.

Default Limits

EndpointRate Limit
POST /email/find/single10 req/s
POST /email/find/bulk10 req/s
POST /email/verify/single10 req/s
POST /email/verify/bulk10 req/s
POST /phone/single10 req/s
POST /phone/bulk10 req/s
GET endpoints are not rate limited.
Rate limits are per API key and measured in requests per second (RPS).

Exceeding the Limit

When you exceed the rate limit, you’ll receive a 429 Too Many Requests response:
{
  "error": "TooManyRequests",
  "message": "Rate limit exceeded",
  "status": 429
}
Best practice — implement exponential backoff:
async function requestWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const delay = Math.pow(2, attempt) * 1000;
      await new Promise(resolve => setTimeout(resolve, delay));
      continue;
    }

    return response;
  }

  throw new Error('Max retries exceeded');
}

Need Higher Limits?

We can increase your RPS on a case-by-case basis. Contact us at api@enrow.io with your use case.

Tips

Instead of making 100 single requests, make 1 bulk request (up to 5,000 items). A single bulk POST counts as 1 request against your rate limit.
// ❌ 100 requests = 10 seconds at 10 RPS
for (const contact of contacts) {
  await findEmail(contact);
}

// ✅ 1 request
await findEmailsBulk(contacts);
Polling the GET endpoint wastes your rate limit quota. Use webhooks to receive results automatically.
Store results to avoid redundant API calls for the same contact.