ScraperData

Getting started

Errors

Errors use normal HTTP status codes and a JSON body with a stable code and a readable message. Requests that fail never cost credits.

Error format

The body always has error.code, which your code can rely on, error.message, which you can show to people, and charged: false.

Error codes

StatusCodeMeaning
400missing_queryThe q parameter is missing.
400query_too_longThe q parameter is longer than 2,048 characters.
400invalid_response_typeresponse_type is not json, html or both.
400invalid_pingback_urlpingback_url is not a public http or https address.
401missing_api_keyNo API key was sent.
401invalid_api_keyThe API key is wrong or was replaced.
403account_disabledThe account is disabled. Contact support.
404task_not_foundNo task with this id in your account, or it is older than 7 days.
429concurrency_limit_reachedToo many requests at the same time for your plan. Retry after Retry-After seconds.
429hourly_limit_reachedToo many requests in this hour on the Free plan.
429quota_exceededNot enough credits left for this request.
429spend_limit_reachedUsage charges reached the monthly spend limit you set.
429queue_full10,000 of your async searches are already waiting or running.
429too_many_attemptsToo many calls to a free endpoint in a short time. Wait a minute.
502upstream_errorThe search failed on our side. Retry in a moment.
503upstream_unavailableAll search workers are busy. Retry in a few seconds.
503api_pausedThe API is paused for maintenance. Retry after Retry-After seconds.
504upstream_timeoutThe search took too long. Retry in a moment.

When to retry

  • 429 with Retry-After: wait that many seconds, then send the request again.
  • 502, 503 and 504: retry after a moment. Nothing was charged.
  • 400, 401, 403 and 404: fix the request first; sending it again gives the same answer.

Queued searches retry failed searches for you, up to 3 times (see Async tasks).