API documentation
One endpoint, plain HTTPS and JSON. Base URL: https://api.scraperdata.com
Quick start
- Create a free account and copy your API key from the dashboard.
- Send a GET request to the search endpoint with your query.
- Read the JSON response. Check your usage any time in the dashboard.
curl -G "https://api.scraperdata.com/v1/search" \
-H "X-API-Key: YOUR_API_KEY" \
--data-urlencode "q=coffee shops" \
-d gl=us -d hl=enAuthentication
Every request needs your API key. Send it in the X-API-Key header (recommended), as Authorization: Bearer YOUR_API_KEY, or as the api_key query parameter.
Keep your key secret and call the API from your server, not from browser code. If a key leaks, create a new one on the API key page of your dashboard; the old key stops working at once.
Search endpoint
GET https://api.scraperdata.com/v1/search runs a search and returns the results as JSON. A request can take a few seconds; use a client timeout of at least 60 seconds.
Parameters
| Name | Required | Description | Example |
|---|---|---|---|
| q | Yes | The search query. | coffee shops |
| gl | No | Country to search from, as a two-letter code. | us |
| hl | No | Language of the results page. | en |
| location | No | City or region to search from. | Austin, Texas |
| num | No | Number of results per page. | 10 |
| page | No | Results page, starting at 1. | 2 |
| device | No | desktop, mobile or tablet. | mobile |
| api_key | No | Your API key, if you do not send it in a header. | sd_... |
Response
A successful search returns status 200 and a JSON object. The main list is organic_results; each item has a position, title, link and snippet.
{
"search_parameters": { "engine": "google", "q": "coffee shops", "gl": "us", "hl": "en" },
"search_information": { "total_results": 3270000, "time_taken_displayed": 0.42 },
"organic_results": [
{
"position": 1,
"title": "The 10 Best Coffee Shops in Town",
"link": "https://www.example.com/best-coffee-shops",
"displayed_link": "www.example.com › best-coffee-shops",
"snippet": "Our guide to the best coffee shops, with opening hours and reviews."
},
{
"position": 2,
"title": "Coffee Shops Near You: Map and Reviews",
"link": "https://maps.example.org/coffee-shops",
"displayed_link": "maps.example.org › coffee-shops",
"snippet": "Find coffee shops near you and compare ratings."
}
],
"related_searches": [{ "query": "coffee shops near me" }, { "query": "best coffee beans" }]
}Every successful response also carries these headers:
X-Searches-UsedandX-Searches-Left: your usage in the current monthly period.X-Searches-Limit: searches included in your plan.X-Plan: your current plan.
Errors
Errors use normal HTTP status codes and a JSON body with a stable code and a readable message. Requests that fail are never charged.
{
"error": {
"code": "quota_exceeded",
"message": "You have used all 250 searches of your Free plan for this period."
},
"charged": false
}| Status | Code | Meaning |
|---|---|---|
| 400 | missing_query, invalid_request | The q parameter is missing or a parameter was rejected. |
| 401 | missing_api_key, invalid_api_key | No API key was sent, or the key is wrong. |
| 403 | account_disabled | The account is disabled. Contact support. |
| 429 | hourly_limit_reached | Too many requests in this hour for your plan. |
| 429 | concurrency_limit_reached | Too many requests at the same time for your plan. |
| 429 | quota_exceeded | All searches of this monthly period are used. |
| 502 | upstream_error, upstream_unavailable | The search failed on our side. Retry in a moment. |
| 504 | upstream_timeout | The search took too long. Retry in a moment. |
Limits
Each plan has three limits. You can see yours on the Billing page.
- Searches per month. Successful searches in the current monthly period. The period renews on the day your plan started.
- Concurrent requests. How many requests can run at the same time. Extra requests get
429withconcurrency_limit_reached. - Requests per hour. A safety limit per clock hour. When it is reached, the
Retry-Afterheader says how many seconds to wait.
Account endpoint
GET https://api.scraperdata.com/v1/account returns your plan and usage. It does not use a search.
{
"plan": { "id": "developer", "name": "Developer" },
"searches_per_month": 15000,
"searches_used": 1240,
"searches_left": 13760,
"period_start": "2026-10-01T09:30:00+00:00",
"period_end": "2026-11-01T09:30:00+00:00",
"concurrency": 5,
"requests_per_hour": 3000
}