1. [Documentation](/docs)
2. Limits and concurrency

# Limits and concurrency

We limit how many calls you have in flight at once, not how many you make per second or per day. The limit rises with what you've bought.

## Calls in flight

Your account may have this many calls running at the same moment. It’s set by the credits you’ve bought in total, over the life of the account. It goes down only if a purchase is refunded or lost in a bank dispute.

| Credits bought, in total | Calls at once |
| --- | --- |
| None yet: trial credits | 5 |
| 100,000 or more | 25 |
| 1,000,000 or more | 100 |
| 5,000,000 or more | 250 |

One more call than that is refused at once with `concurrency_limit` (HTTP 429) and a `Retry-After` of one second. It costs nothing. Retry it, or run fewer calls side by side. There’s no limit per second, per minute or per day on top of this, apart from the hourly limit on calls that find nothing, below.

Each platform also has its own limit of calls at once, shared by all our customers, and no one account can take all of it. Google Maps and LinkedIn have the fewest places today. When the places are full, or your account already has its share of them running, a call waits in line for one, in the order calls arrived, for as long as its own time allows. If its turn does not come in time, it is refused with `endpoint_busy` (HTTP 429) and a `Retry-After` of five seconds, and it costs nothing.

Demo calls, made with `demo=true` and no key, are the one exception: they’re limited to about 60 a minute from one address, and the next one gets `demo_limit` with a `Retry-After` saying how long until the minute is up.

## How long a call may take

Each call has 25 seconds. Most answer in a few. If we can’t get the data in time, the call fails with `upstream_unavailable` and the credits are refunded at once. Set your client’s timeout a little above 25 seconds so you see our answer rather than your own timeout.

## Everything else

- Up to 10 active API keys per account.
- Up to 1,000 calls an hour that find nothing, such as an account that does not exist, or 50 before you buy credits. They cost you nothing, but each one reaches the source. Past that, the next call gets `not_found_limit` (HTTP 429). Only “does not exist” counts: a failure on our side never does.
- A list returns at most the `limit` on its endpoint’s page per call, or, without one, its fixed page size. Walk the rest with [cursors](/docs/responses#pagination).

**Need more at once?**

Concurrency rises with what you’ve bought. If you need more than that, [write to us](/contact).

## Errors

| Code | HTTP | When, and what to do |
| --- | --- | --- |
| [`concurrency_limit`](/docs/errors#concurrency_limit) | 429 | More requests are in flight than the account allows. Retry after the seconds in `Retry-After`. Concurrency is what we limit, not requests per second, and it rises with credits purchased. |
| [`endpoint_busy`](/docs/errors#endpoint_busy) | 429 | The call waited in line for a place among this endpoint's calls at once, which all customers share, and its turn did not come within its time. It can happen before your own limit. Retry after the seconds in `Retry-After`. Nothing was charged. |
| [`demo_limit`](/docs/errors#demo_limit) | 429 | About 60 demo calls a minute came from one address. Wait the seconds in `Retry-After`, or add an API key: keyed calls are limited by concurrency, not by rate. |
| [`not_found_limit`](/docs/errors#not_found_limit) | 429 | 1000 calls in an hour that found nothing, or 50 on an account that has not bought credits. Only "does not exist" answers count, never a failure of ours. They cost nothing, but each one reached the source. Check the names, URLs and ids you send, and retry after the seconds in `Retry-After`. The same call for something that does not exist answers again from the cache for up to 6 hours, free, and does not count. |
| [`upstream_unavailable`](/docs/errors#upstream_unavailable) | 502 | We could not get the answer from the platform: every source we asked failed, most often within a second or two, or the call ran out of its 25 seconds. The message says which, without the detail. Retry. This call was not charged, and the refund is already in your usage ledger. When the message says the endpoint has no capacity left, retrying will not help until our status page says it is back. |
| [`insufficient_credits`](/docs/errors#insufficient_credits) | 403 | The balance is less than the call costs. Buy a pack on the dashboard’s billing page; calls work again at once. Nothing was charged for this call. |
