← Back to Explore

Google Search Scraper

Collect Google Search results instantly with our SERP Scraper API. Get organic listings, ads, snippets, and metadata for SEO and automation.

6 credits / req
4

Overview

Scrape real-time Google search results for any keyword, in any country or language. Get clean, structured organic results, sponsored listings, related searches, AI overviews, and FAQs from a single API call — no proxies, no CAPTCHAs, no HTML parsing. Built for SEO rank tracking, SERP monitoring, keyword research, and AI-powered search data pipelines at scale.

Who Is This For?

Role Use Case
SEO Teams Track keyword rankings and monitor SERP volatility across countries and languages.
Growth & Marketing Teams Analyze competitor visibility, ad presence, and content gaps directly from search results.
AI & LLM Developers Feed live, structured Google search data into RAG pipelines, agents, and research tools.
Data Engineers Automate large-scale SERP data collection for analytics and reporting pipelines.

What You Can Build

  • Keyword rank trackers — Monitor organic positions for target keywords across countries, languages, and devices.
  • Competitor SERP analysis tools — Compare organic and sponsored listings to spot competitor strategy shifts.
  • AI search & RAG pipelines — Ground LLM responses with live, structured Google search data including AI overviews and FAQs.
  • Content gap finders — Use related searches and FAQs to uncover topics your content is missing.
  • SERP monitoring dashboards — Schedule recurring queries and visualize ranking changes over time.
  • Hyper-local rank checkers — Use precise location or UULE targeting to see exactly what searchers in a specific city or zip code see.
  • Fresh-content watchers — Use time filters to track newly indexed or recently updated pages for a query.

Endpoint

POST https://api.scravity.com/v1/google/search

Cost: 6 credits per successful extraction  ·  No Results Found: 0 credits

Authentication

Include your API key as a Bearer token in the Authorization header.

Authorization: Bearer YOUR_API_KEY

Request Body

Parameter Type Required Description
query string Yes The search query string (max 500 characters).
device string No Device type to simulate: desktop or mobile. Defaults to desktop.
country string No Target country for geo-specific results (ISO 3166-1 alpha-2, e.g. US, DE, GB). Uses the matching local Google domain. Defaults to US.
language string No Interface language for the results (Google's hl parameter, e.g. en, fr, zh-CN). Defaults to en.
page integer No The page number of results to scrape (1–10). Page 1 returns the first set of organic results. Defaults to 1.
location string No Canonical location string for granular local targeting (e.g. "Austin, Texas, United States", "90210, California").
uule string No Base64-encoded UULE parameter for precise location spoofing. Takes precedence over location if both are provided.
time_filter string No Restrict results to a timeframe. Maps to Google's tbs=qdr: parameter: h (past hour), d (past day), w (past week), m (past month), y (past year).

Code Examples

cURL

curl -X POST https://api.scravity.com/v1/google/search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "best web scraping api", "country": "US", "language": "en", "device": "desktop", "page": 1}'

Python

import requests

url = "https://api.scravity.com/v1/google/search"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "query": "best web scraping api",
    "country": "US",
    "language": "en",
    "device": "desktop",
    "page": 1
}

r = requests.post(url, json=payload, headers=headers)
print(r.json())

JavaScript

const res = await fetch("https://api.scravity.com/v1/google/search", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    query: "best web scraping api",
    country: "US",
    language: "en",
    device: "desktop",
    page: 1
  })
});

const data = await res.json();
console.log(data);

Python — Local Targeting with a Time Filter

import requests

url = "https://api.scravity.com/v1/google/search"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "query": "best coffee shop",
    "location": "Austin, Texas, United States",
    "time_filter": "w",
    "device": "mobile"
}

r = requests.post(url, json=payload, headers=headers)
print(r.json())

Response Format

Success (200)

{
  "meta": {},
  "data": {
    "organic_results": [
      {
        "position": 1,
        "title": "Example Result Title",
        "link": "https://example.com",
        "snippet": "Example description text extracted from the search result..."
      }
    ],
    "sponsored_results": [],
    "related_searches": [
      { "query": "web scraping api free" }
    ],
    "ai_overview": {
      "text": "Example AI-generated overview text summarizing top results..."
    },
    "faqs": [
      { "question": "What is a web scraping API?", "answer": "Example answer text..." }
    ]
  }
}

No Results Found (404)

{
  "error": "No search results found for the query",
  "query": "your search query here",
  "details": ["No organic results could be found for the specified query."]
}

Credits

Metric Cost
Successful extraction (1+ results returned) 6 credits
No results found 0 credits

Rate Limits

Window Limit
Per minute 1000 requests

Tips

  • Use the country and language parameters together to get truly localized SERP data — e.g. country: "DE" with language: "de" for a German-language, German-market search.
  • Set device: "mobile" when tracking rankings the way most real searchers see them, since mobile and desktop SERPs often differ.
  • For hyper-local results — think "coffee near me" style queries — use location or uule instead of just country. If both are set, uule wins.
  • Use time_filter to isolate recently published or updated content, which is useful for tracking news cycles or freshness-sensitive rankings.
  • Only successful extractions consume credits—queries with no results cost nothing, so it's safe to test edge-case keywords.
  • Use the ai_overview and faqs fields to power AI search and RAG applications with grounded, up-to-date search context.
  • Paginate with the page parameter (1–10) to analyze deeper rankings beyond the first page of results.