SFOLN

Catalogue / SEO & search

Google Search Results Scraper

sfoln/google-search-results · SEO tools, AI, Automation On request

Scrape Google organic search results for any query and country: rank, title, URL, domain, snippet, date and sitelinks, plus knowledge graph, answer box, People Also Ask and related searches. $2.50 per 1,000 result pages of 10 results.

About

What it does

Google Search Results Scraper gets Google organic search results as clean, stable JSON, with one dataset row per result: rank, title, URL, domain, snippet, date and sitelinks. Each query also gets a summary row with the knowledge graph, answer box, People Also Ask and related searches. Built for SEO rank tracking, lead research, market monitoring and AI agents that need fresh Google results without running a browser.

Price

Price per delivered record

EventPricePer 1,000Charged for
Google results page
google-search-query
$0.0025$2.5 / 1,000Charged once per Google results page of up to 10 organic results (one upstream credit). A query with 10 results = 1 event, 20 results = 2 events, and so on.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~google-search-results/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["apify web scraping"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/google-search-results"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~google-search-results/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Search Google in the US for "best crm for startups" and list the top 10 organic results with their domains, plus the People Also Ask questions.

Input

Input fields

Enter search queries (one per line). For every query the Actor writes one row per organic result plus one `query_summary` row (knowledge graph, answer box, People Also Ask, related searches).

FieldTypeDefaultMeaning
queries *arrayrequiredSearch queries
Google search queries, one per line. Search operators such as site: or intitle: work. Duplicates are removed. Accounts on the Apify free plan can process up to 10 queries per run.
countrystring"us"Country (gl)
Two-letter country code for the Google domain and ranking, e.g. us, gb, de, in.
languagestring"en"Language (hl)
Interface language code, e.g. en, de, es, pt-br.
locationstring—Location
Optional free-text location to search from, e.g. "Austin, Texas, United States". Leave empty for country-level results.
resultsPerQueryinteger10Results per query
How many organic results to fetch per query, rounded up to a multiple of 10. Each page of 10 results costs one google-search-query event. Range 10–100.
pageinteger1Start page
Result page to start from (1 = top results). Use 2 to get positions 11–20, and so on. Range 1–100.
timeRangestring"any"Time range
Only return results published within this period. One of "any", "hour", "day", "week", "month", "year".
autocorrectbooleantrueAutocorrect query
Let Google correct spelling mistakes in the query. Turn it off for exact-match research.
includePeopleAlsoAskbooleantrueInclude People Also Ask
Add the People Also Ask questions to the query_summary row.
includeRelatedSearchesbooleantrueInclude related searches
Add Google's related searches to the query_summary row.
maxQueriesinteger1000Max queries
Safety cap on the number of queries processed in this run. Range 1–10000.
concurrencyinteger5Concurrency
How many queries run in parallel. Range 1–10.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified upstream pages to each query_summary row (larger output).
Example input
{
  "queries": [
    "apify web scraping"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstringInput
The query this row belongs to.
querystringQuery
Search query. e.g. "apify web scraping"
resultTypestringResult type
organic = one search result; query_summary = one row per query (not charged itself). e.g. "organic"
rankinteger | nullRank
Overall position: (page − 1) × 10 + the result's place on its page, so page 2 starts at 11 even when page 1 had fewer organic results.
positioninteger | nullPosition
Position as reported by the upstream for this result, passed through unchanged.
pageinteger | nullPage
Results page the row came from.
titlestring | nullTitle
urlstring | nullURL
domainstring | nullDomain
Host without www., derived from url.
snippetstring | nullSnippet
datestring | nullDate
Date shown by Google, as displayed (e.g. "Mar 10, 2022").
sitelinksarraySitelinks
[{ title, url }] shown under the result.
attributesobject | nullAttributes
Extra key/value facts Google shows under some results.
totalOrganicinteger | nullOrganic results
query_summary: number of organic rows written for the query.
pagesFetchedinteger | nullPages fetched
creditsUsednumber | nullCredits used
query_summary: upstream credits the query used.
creditsChargednumber | nullCredits charged
query_summary: google-search-query events charged for the query, before any of its rows was written (equal to creditsUsed unless the maximum cost per run was reached).
topResultUrlstring | nullTop result URL
topDomainsarrayTop domains
Distinct domains in rank order (max 10).
knowledgeGraphobject | nullKnowledge graph
answerBoxobject | nullAnswer box
peopleAlsoAskarrayPeople Also Ask
[{ question, snippet, title, url }]
relatedSearchesarrayRelated searches
Related query strings.
correctedQuerystring | nullCorrected query
Query Google actually searched when it differs from the input.
countrystring | nullCountry
query_summary: country code (Google gl) used for the query.
languagestring | nullLanguage
query_summary: interface language (Google hl) used for the query.
locationstring | nullLocation
query_summary: free-text location used for the query, or null.
statusstringStatus
ok | not_found | error | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
true on an organic row covered by the google-search-query charge of its results page; the query_summary row is never charged itself (see creditsCharged).
chargedEventstringCharged event
chargedCountintegerEvents charged
Events actually charged when the charge came back short of the requested count (present only then; a warning explains it).
sourcestringSource
fetchedAtstringFetched at
Example record
{
  "input": "apple inc",
  "query": "apple inc",
  "resultType": "organic",
  "rank": 2,
  "position": 2,
  "page": 1,
  "title": "Apple Inc. - Wikipedia",
  "url": "https://en.wikipedia.org/wiki/Apple_Inc.",
  "domain": "en.wikipedia.org",
  "snippet": "Apple Inc. is an American multinational corporation and technology company…",
  "date": "Mar 10, 2022",
  "sitelinks": [],
  "attributes": {
    "Founded": "April 1, 1976"
  },
  "status": "ok",
  "charged": true,
  "chargedEvent": "google-search-query",
  "source": "serper",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents