Skip to content
ScrapeField

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.

Calls at once, by credits bought
Credits bought, in totalCalls at once
None yet: trial credits5
100,000 or more25
1,000,000 or more100
5,000,000 or more250

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.

Errors

Error codes
CodeHTTPWhen, and what to do
concurrency_limit429More 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_busy429The 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_limit429About 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_limit4291000 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_unavailable502We 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_credits403The 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.