Rank tracking
Monitor keyword positions by location and device without a proxy farm.
Perform a lightweight Google search. Returns structured JSON results. Limitations: - Max 200 results per query (10 pages × 20 results) Tip: Use query modifiers like `filetype:pdf`, `site:reddit.com`, or `"exact phrase"` in your query. * * Response includes total_results at the root level as a convenience accessor * that mirrors search_information.total_results. people_also_search_for is * best-effort autocomplete enrichment and may be empty. * * @queryParam query string required The search query. Use modifiers like filetype:pdf, site:reddit.com, or "exact phrase". Example: artificial intelligence * @queryParam num integer Number of results per page (1-20). Default: 10. Example: 10 * @queryParam page integer Page number for pagination (1-10). Mutually exclusive with "start". Example: 1 * @queryParam start integer Starting index for offset-based pagination (0-170). Mutually exclusive with "page". Example: 0 Returns structured JSON from a single API call — no proxies, browsers or parsers to maintain.
POST the scraper slug and your parameters to a single endpoint, authorized with your API key. No proxies to rotate, no browser to run — the response is parsed and ready to use.
curl -X POST https://app.serpproxies.com/api/v1/scrape \
-H "Authorization: Bearer $SERP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"slug":"search-light","params":{"query":"coffee"}}'Google Search (Light) accepts 13 parameters. Pass them in the "params" object of your request body.
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | text | Required | Query |
| num | number | Optional | Pagination page and start are mutually exclusive - use page for easier pagination (1-based) or start for direct offset control (0-based) Max start is 170 because the upstream search provider caps offset + num at 190. |
| start | number | Optional | Start |
| page | number | Optional | Page |
| hl | text | Optional | Language |
| lr | text | Optional | Lr |
| gl | text | Optional | Geolocation |
| cr | text | Optional | Cr |
| safe | select(2) | Optional | Safetyactive · off |
| dateRestrict | text | Optional | Date filtering |
| sort | select(3) | Optional | Sortdate · date:r · date:d |
| filter | select(2) | Optional | Content filtering (only params that can't be set via query modifiers) NOTE: fileType, exactTerms, siteSearch removed - use query modifiers instead: filetype:pdf, "exact phrase", site:domain.com0 · 1 |
| rights | select(5) | Optional | Rightscc_publicdomain · cc_attribute · cc_sharealike · cc_noncommercial · cc_nonderived |
One key, one endpoint and a predictable response envelope — the same contract applies to every scraper.
Send your API key as an "Authorization: Bearer <key>" header, or as "x-api-key: <key>". Create and rotate keys in the dashboard — one key works across all 179 scrapers.
Up to 120 requests per minute per key; exceed it and the API returns 429. For large jobs, reach out and we'll raise your limit. Your balance is drawn only on a successful scrape.
| Status | Meaning | When |
|---|---|---|
| 200 | OK | success: true, with the parsed result in data. |
| 400 | Bad request | Missing slug or a required input parameter. |
| 401 | Unauthorized | Missing or invalid API key. |
| 402 | Payment required | Insufficient balance — top up to continue. Not charged. |
| 404 | Not found | The slug doesn't match a scraper. |
| 429 | Too many requests | Over 120 requests/minute for this key. |
| 502 / 503 | Scrape failed / unavailable | Upstream problem — you're not charged. |
| 500 | Server error | Unexpected error — you're not charged. |
{
"success": false,
"data": null,
"error": "Insufficient balance"
}Every response uses the same shape — success, data and error — so you branch on one field.
SEO teams, rank trackers, market researchers and AI grounding pipelines.
Monitor keyword positions by location and device without a proxy farm.
Pull knowledge panels, People Also Ask, images and news into one schema.
See which advertisers bid on your terms, market by market.
Feed live, cited search results to RAG and agent workflows.
Why teams reach for the Google Search scraper instead of an official API.
Google's only sanctioned option, the Custom Search JSON API, is capped at 10k queries/day, scoped to a configured set of sites, and returns a trimmed result set with no ads or most SERP features — it isn't built for rank tracking.
One flat rate across all 179 scrapers, drawn from your prepaid balance as you go. No tiers to decode, no overage traps — top up and start pulling data.
Every scraper runs on proxies and browsers we own and operate. There's no reseller markup and no separate proxy bill — the request price is the whole price, and it already includes the anti-bot work.
Flat pricing at $0.60 per 1,000 requests, billed from your balance as you go. Failed requests aren't charged, nothing expires, and there's no monthly minimum or seat licensing to reason about.
Each endpoint returns a stable, documented shape — parsed, typed and consistent — so you build against a schema instead of babysitting brittle CSS selectors that break on every redesign.
179 scrapers share a single endpoint, a single auth key and a single balance. Learn it once and every source — from Google to TikTok to Booking.com — works the same way.
Perform a lightweight Google search. Returns structured JSON results. Limitations: - Max 200 results per query (10 pages × 20 results) Tip: Use query modifiers like `filetype:pdf`, `site:reddit.com`, or `"exact phrase"` in your query. * * Response includes total_results at the root level as a convenience accessor * that mirrors search_information.total_results. people_also_search_for is * best-effort autocomplete enrichment and may be empty. * * @queryParam query string required The search query. Use modifiers like filetype:pdf, site:reddit.com, or "exact phrase". Example: artificial intelligence * @queryParam num integer Number of results per page (1-20). Default: 10. Example: 10 * @queryParam page integer Page number for pagination (1-10). Mutually exclusive with "start". Example: 1 * @queryParam start integer Starting index for offset-based pagination (0-170). Mutually exclusive with "page". Example: 0 The response is structured JSON with a consistent shape, so you can parse it directly instead of scraping HTML.
Create an account, grab your API key and send your first request in minutes. Flat pricing, structured JSON, no proxies to run.

Against the backdrop of rapid growth in cross-border e-commerce, overseas social media operations, and globalized business expansion, companies and teams are facing increasingly…

What are sneaker proxies? Sneaker proxies are IP addresses that let your bot run multiple simultaneous tasks on sites like Nike SNKRS, Adidas, and Shopify drops. Each task gets…

What are burned proxies? Burned proxies are IP addresses flagged by anti-bot systems from previous botting activity. Once an IP's reputation score drops below a threshold, it…