Google Search Results via Serper API — Organic, PAA & Related avatar

Google Search Results via Serper API — Organic, PAA & Related

Pricing

from $10.00 / 1,000 query executeds

Go to Apify Store
Google Search Results via Serper API — Organic, PAA & Related

Google Search Results via Serper API — Organic, PAA & Related

Structured Google search results as clean JSON. Returns organic results, People Also Ask questions with answers, and related searches — not just a flat link list. Batch multiple queries per run. Country, language, device and pagination supported. Fast, no browser, no proxies needed.

Pricing

from $10.00 / 1,000 query executeds

Rating

0.0

(0)

Developer

morrbiz llc

morrbiz llc

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

25 days ago

Last modified

Categories

Security

Limited permissions

Share

Give it a query. Get back organic results, People Also Ask, and related searches — confirmed live, every time, not a maybe.

How it works: this Actor does not scrape Google. It calls the Serper Google Search API (a paid third-party API) with your query and maps the JSON it returns into the dataset format below. No browser, no proxies, no HTML parsing.

What this actually delivers (and how we know)

Before writing this README we ran 13 distinct queries against two separate Serper accounts, including the textbook trigger queries every SERP tool demos with — "eiffel tower," "how tall is the eiffel tower," "elon musk," "barack obama," commercial buy-intent terms like "buy dyson v15 vacuum" and "nike air max." We inspected the raw, unmapped upstream response for several of them, not just our own output.

Result: organic, people_also_ask, and related_searches populated on every query. ads, shopping, knowledge_graph, answer_box, and ai_overview populated on zero of the 13 — including the ones that should be unmissable, like a direct factual question ("what year was the eiffel tower built") or an unambiguous public figure ("barack obama"). That's not a bug in this actor; it's what the upstream API actually returns for these accounts. So that's not what this actor is sold on.

  • Organic results — title, url, description, position, and (when Google includes them) sitelinks, per-result attributes, and a date
  • People Also Ask — the expandable question list
  • Related searches — the query-refinement suggestions at the bottom of the page

What you get back, per query — real, captured output

This is the shape of an actual run against "elon musk", trimmed to save space (the real run returned 9 organic results). Result titles, URLs and snippets are replaced with placeholders here; a real run returns the actual values:

{
"query": "elon musk",
"results": [
{ "title": "<result 1 title>", "url": "<result 1 URL>", "description": "<result 1 snippet>", "score": 1 },
{ "title": "<result 2 title>", "url": "<result 2 URL>", "description": "<result 2 snippet>", "score": 0.889 },
{ "title": "<result 3 title>", "url": "<result 3 URL>", "description": "<result 3 snippet>", "score": 0.778 }
],
"organic": [
{ "title": "<result 1 title>", "url": "<result 1 URL>", "description": "<result 1 snippet>", "position": 1 }
],
"ads": [],
"people_also_ask": [
{ "question": "What is Musk diagnosed with?" },
{ "question": "Does Musk believe in God?" },
{ "question": "Is Elon Musk a trillionaire?" },
{ "question": "Does Elon have 14 children?" }
],
"related_searches": ["Elon Musk net worth", "Elon Musk children", "Elon Musk book", "Elon Musk wife", "Elon Musk car", "Elon Musk Twitter", "Elon Musk age", "Elon Musk money"],
"knowledge_graph": null,
"answer_box": null,
"shopping": [],
"ai_overview": null,
"latency_ms": 1978,
"checked_at": "2026-09-18T07:48:45.997Z"
}

Note knowledge_graph, answer_box, and shopping are null/[] here — for "elon musk," a query that triggers a knowledge panel when searched on Google directly. That's the honest, representative case, not the exception.

The optional fields — one honest mention

ads, shopping, knowledge_graph, answer_box, and ai_overview are present in every response's schema and populate when the upstream response includes them — they're not stripped out or faked empty. We just don't sell them, because across 13 test queries on two accounts, none of them ever did. If you find a query where one of these reliably populates, that's useful data — the code already handles it correctly, it just hasn't been observed happening.

Input

FieldTypeRequiredNotes
queriesarray of stringsyesUp to 1,000 per run. One charge event per query executed.
numintegerno (default 10)Organic results requested per query, 1-100.
countrystringno2-letter country code (Google gl). Confirmed working — verified geo-targeted results (Spain, Japan, France) in live testing.
languagestringno2+ letter language code (Google hl). Confirmed working — verified Spanish-language results for a Spanish query.
pageintegerno (default 1)1-based result page. Confirmed working — page 2 returns genuinely different results than page 1.
devicestringnoForwarded to Serper as-is. Accepted without error but no observed effect in testing — not confirmed to do anything.

Every field is pre-filled in the Console form (queries: ["web scraping tools"], num: 3, country: us, language: en, page: 1, device: desktop), so pressing Start runs a small, fast, cheap search.

Errors never fail the run

The Actor always finishes SUCCEEDED and always writes at least one dataset item. Anything that goes wrong is reported as a record with an error code, a human-readable message, and usually a hint (and the upstream HTTP status when there is one), instead of a failed run:

errorMeaning
missing_api_keySERPER_API_KEY is not set on the Actor — no search was run.
no_queriesInput had no non-empty queries.
too_many_queriesMore than 1,000 queries; the first 1,000 ran.
upstream_auth_errorSerper rejected the key (401/403). The run stops after this one record.
upstream_credits_exhaustedThe Serper account is out of credits. The run stops after this one record.
upstream_rate_limitedSerper returned 429 twice (one automatic retry is made).
upstream_unavailableSerper returned a 5xx twice.
upstream_errorAny other non-2xx from Serper; message carries its reply.
request_timeout / request_failedThe request timed out (30 s) or the network failed.
invalid_upstream_responseSerper's reply could not be read.
charge_limit_reachedThe run's maximum charge was reached; remaining queries were skipped.
no_outputSafety net: the run produced nothing else.

Only a genuine crash (a bug, out-of-memory) exits FAILED. Error records are not billed as query-executed events; under pay-per-event, Apify's standard per-dataset-item event (apify-default-dataset-item) still applies to every item pushed, error records included.

Pricing

$0.01 per query — $10.00 per 1,000 queries. Pay-per-event: one query-executed event per query, whatever num is, so at the default num: 10 that works out to $1.00 per 1,000 results. Queries that return nothing aren't charged.

What this is not

Not a multi-engine tool — it calls Google, through Serper, and nothing else. Not a relevance engine — score is rank-derived, same as the rest of the category. Not a source of ads, shopping listings, knowledge-graph data, answer boxes, or AI Overviews — those fields exist in the schema and will populate if the upstream ever returns them for your query, but treat that as a bonus, never an expectation.