A SERP API turns a search engine result page into JSON. You send a query, you get back a structured list of results — position, title, URL, domain, snippet — plus whatever modules the page happened to show.
That is the whole product. Everything else is details about coverage, price, and how faithfully the response mirrors the page.
I have been using these APIs since 2022, first for a rank tracker, later for price monitoring and a RAG pipeline. The code below runs against SerpBase, the one I currently pay for; the concepts apply to any provider.
The definition, without the marketing
A SERP API is not a search engine. It does not crawl or index anything. It fetches a live result page from Google (or Bing, or DuckDuckGo) and parses it into fields you can store.
Two consequences follow from that, and both matter more than feature lists:
The data is one-shot. Yesterday's page cannot be fetched again. If you only store the parsed rows, you have thrown away the raw material.
The structure moves. Google adds and removes modules without notice. Any parser you write is a snapshot of one week's layout.
A good API abstracts both: it keeps the envelope stable and adds modules as optional fields.
What the response actually contains
Every call returns an envelope, and then the modules.
{ "status": 0, "request_id": "6f3a1c...", "elapsed_ms": 842, "credits_charged": 1, "product_id": "google_web_search", "query": "espresso machine maintenance", "organic": [ ... ], "people_also_ask": [ ... ], "ai_overview": { "summary": "...", "sources": [ ... ], "truncated": false } } status is the business status, and it matters because HTTP 200 does not mean success — a parse-level problem comes back as 200 with a non-zero status. request_id is the reconciliation key. credits_charged is what the call actually cost (number, 0, or null while settling).
The modules worth knowing in 2026: organic, featured_snippet, people_also_ask, related_searches, knowledge_graph, local_results, top_stories, inline_videos, inline_images, discussions, and ai_overview. Each is optional — it appears when the page had it.
If you only read organic, you are using maybe half of what you are paying for.
What it costs in 2026
Prices below come from SerpBase's public comparison table (checked 2026-10-30) and each vendor's site. Always re-check before you buy; list prices move.
| Plan tier | SerpBase | Serper | SerpApi |
|---|---|---|---|
| Lowest listed, per 1k | $0.25 | $0.30 | $1.96 |
| At $50/mo, per 1k | $0.40 | $1.00 | $25.00 |
| At $200/mo, per 1k | $0.35 | $1.00 | $10.00 |
| Free tier | 500 credits, no card | 2,500 one-time | 250/month |
The "lowest listed" column is where a lot of confusion comes from: it is the high-volume case, not the price most teams pay.
Same workload, three invoices
Take a $200 monthly budget, which is a common starting point for a small team.
At the $200 tier in that table, SerpBase is $0.35 per 1k, Serper $1.00, and SerpApi $10.00. The same $200 buys roughly 570k, 200k, and 20k searches respectively.
That is a 28x spread on the same query volume. The practical effect is on what you can afford to monitor: at 20k searches a month you pick 200 keywords and check them three times a day. At 570k you check 2,000 keywords hourly and still have room for a batch job.
Two caveats I would insist on before anyone plans around this:
Search APIs are not identical in coverage. Different providers return different module sets and different regional reliability. Test your own queries.
Cheap is not the same as sufficient. If your pipeline needs a field only one provider returns, the price difference is irrelevant.
When a SERP API is the wrong tool
Three cases where I would not use one:
You need to search your own content. That is an internal index — Postgres full-text, Elasticsearch, or SQLite FTS5. A SERP API cannot see your unpublished pages.
You need one page's full text, not a result list. A single fetch or a reader service is simpler and cheaper than a search call with format=markdown.
You need the official Google Custom Search JSON API for policy reasons. It exists, it is cheap at low volume, and it returns a deliberately limited result set. Fine for a prototype; I would not build a monitoring product on it.
A 20-line example
The one query I keep coming back to: does a page still rank for the term it was written for.
import os import requests def find_page(query: str, target: str, gl: str = "us") -> dict: data = requests.post( "https://api.serpbase.dev/google/search", headers={ "Content-Type": "application/json", "X-API-Key": os.getenv("SERPBASE_API_KEY", ""), }, json={"q": query, "gl": gl, "hl": "en", "device": "pc"}, timeout=(5, 30), ).json() if data.get("status") != 0: raise RuntimeError(f"status={data.get('status')} req={data.get('request_id')}") for item in data.get("organic", []): if target in (item.get("link") or ""): return {"rank": item.get("rank"), "title": item.get("title")} return {"rank": None, "title": None} print(find_page("serp api pricing", "serpbase.dev")) One call, one credit at the web-search rate, and you get the exact position plus the title as Google shows it — which is often not the title tag you wrote.
The first version of my tracker cost me a week because I built a scraper before checking whether an API existed. It parsed for three days, then Google changed the result page and every selector broke. I have not written a SERP parser since.
Picking one in practice
Start with your monthly search volume and your required modules. Then run the same 20 queries through two providers and diff the fields you actually use. Price comes third, after coverage and field fidelity.
For a small team doing rank tracking or price checks, the budget math above usually decides it. For a team building a product on top of search data, run the diff first — an API missing a field you need is the expensive one, whatever its price.
If you want to test the code above, new SerpBase accounts come with 500 free credits and no card. Parameters and field semantics are documented at serpbase.dev/docs.

