ScavioScavio
ToolsPricing
Sign InsGet Startedg
Blog
google-serp-apigoogle-maps-apipaginationlead-generationai-agents

How to Get More Than 10 Results From a Google Search API

Page the SERP with start=0,10,20; new domains dry up at start=70. For a full business list, partition Scavio's /api/v2/google/maps/search by map center.

August 27, 2026
9 min read
Try Scavio FreePricing

50 free credits · no credit card

Page the SERP with start=0,10,20… and you get roughly seven productive pages. After that Google recycles: our eighth, ninth and tenth calls added one new domain each. If the job is "every business in this market" rather than "every page of this query", stop paging and partition the map instead. Ten paged calls to Scavio's /api/v2/google returned 69 unique domains and no phone numbers. Eight calls to /api/v2/google/maps/search, one per map center, returned 106 businesses with a phone number on 97% of them.

The question that gets asked in a hundred different phrasings — "how do I get more than 10 results", "why does my agent stop at 20", "how do I get num=100 back" — is almost always the wrong question, because the thing behind it is a list of companies and the SERP is not a list of companies. Below is what we measured this morning, on one query, with everything captured live.

Cumulative unique results per API call. The paged SERP flattens at 69 domains after seven calls; Google Maps partitioned by map center reaches 106 businesses in eight and is still climbing.

The paging ceiling, measured

The query was industrial real estate brokerage austin tx. Ten calls, start=0 through start=90, no_cache on so nothing came back off our own cache:

Bash
curl -s -X POST https://api.scavio.dev/api/v2/google \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"industrial real estate brokerage austin tx",
       "gl":"us","hl":"en","start":30,"no_cache":true}'
startorganic resultsnew domainscumulative
0999
1010918
20101028
30101038
40101048
5010957
6010966
709167
808168
907169

Two things happen at once at start=70. The pages get shorter — 9, then 8, then 7 organic results instead of 10 — and almost everything on them is a domain you already had. Ninety-three organic results across ten calls collapsed to 69 unique domains, and the last three calls contributed three of them.

search_information.total_results on that first call read 69,300,000. The gap between what Google claims and what Google will hand over is about six orders of magnitude, and no amount of prompting closes it.

Paging itself is not the hard part. Every response carries the cursor:

JSON
"pagination": {
  "current": 0,
  "next": "https://google.com/search?q=industrial+real+estate+brokerage+austin+tx&gl=us&hl=en&start=10&sa=N&...",
  "other_pages": { "2": "https://google.com/search?...", "3": "..." }
}

You can walk pagination.next until it stops. It just stops sooner than you want.

num=100 is gone, and we do not fake it

The most common workaround people reach for is num=100. We accept the field and then quietly ignore it — pass "num": 100 to /api/v2/google and the echoed search_parameters comes back as {"q": …, "hl": "en", "gl": "us", "device": "desktop", "start": 0, "google_domain": "google.com"} with no num in it, and you get nine organic results like every other first page.

That is worth stating plainly as a limitation on our side: the parameter is silently dropped rather than rejected, which is the wrong behaviour and is on our list to fix. But nobody else can give you the old num=100 either. Google removed the results-per-page control from web search in 2025, and every SERP API that used to lean on it now pages in tens like the rest of us. If a vendor advertises 100 results in one call today, they are making ten calls and billing you for one, or they are serving you something cached.

Sixty-nine domains is not sixty-nine firms

Here is the part that matters if you are building a contact list. Of the 69 unique domains, 20 are not brokerages at all — they are directories, listicles and portals: yelp.com, loopnet.com, zillow.com, realtor.com, clutch.co, themanifest.com, bizjournals.com, yellowpages.net, har.com, reddit.com, facebook.com, and friends. That leaves 49 firm domains from ten calls.

And an organic result has these fields, in full:

position, title, link, displayed_link, snippet, snippet_highlighted_words, source

No phone number. No address. No category. To get a phone number from a SERP result you have to fetch each of those 49 sites, find the contact page, and parse it — which is a second pipeline, one that breaks per-site and keeps breaking.

Partition the map, not the result list

The same job, run against Maps. Eight calls, each one a different map center across the Austin metro, 13z zoom:

Bash
curl -s -X POST https://api.scavio.dev/api/v2/google/maps/search \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"industrial real estate brokerage",
       "ll":"@30.2672,-97.7431,13z","hl":"en"}'

Each call returns 20 local_results, and a record looks like this — captured, not illustrative:

JSON
{
  "position": 1,
  "title": "ECR | Equitable Commercial Realty",
  "place_id": "ChIJOVF69wm1RIYR-kDf-id3DAQ",
  "gps_coordinates": { "latitude": 30.2696169, "longitude": -97.7433271 },
  "rating": 4.9,
  "reviews": 56,
  "type": "Commercial real estate agency",
  "type_id": "commercial_real_estate_agency",
  "address": "114 W 7th St #1000, Austin, TX 78701",
  "phone": "(512) 505-0000",
  "website": "https://www.ecrtx.com/",
  "open_state": "Closed · Opens 8 AM Thu"
}

Eight centers, deduplicated on place_id: 106 unique businesses. 103 with a phone number (97%), 103 with a website, 105 with a street address. The eighth call still added five businesses nobody had seen yet, so the curve had not finished climbing when we stopped.

There is no pagination object on a Maps search — it comes back empty. Geography is the only axis you get, which is exactly why partitioning works here and prompting does not. Twenty results is a hard per-call cap; the number of calls is yours to choose.

The two methods barely overlap

This is the result we did not expect. Comparing the 49 SERP firm domains against the 103 Maps websites:

  • 19 firms appear in both
  • 30 appear only in the paged SERP
  • 84 appear only in Maps
  • 133 in the union

Neither method is a superset of the other. Maps found 84 businesses that ten pages of Google web results never surfaced, and the SERP still held 30 firms — the ones with content marketing, mostly — that have no map presence worth ranking. If you genuinely want the market, you run both and merge on domain. Total cost for everything above: 18 credits, $0.18.

What this does not prove

  • One query, one metro, one morning. The start=70 cliff is what this query did today. Treat it as the shape to expect, not a constant to hard-code.
  • Maps trades precision for recall. Only 53 of the 106 came back typed commercial_real_estate_agency; 43 are generic real_estate_agency and a handful are plainly wrong — a real estate school, a business park, an industry association. Filtering on type_id is a one-line fix, but it means the honest comparison is 53 filtered businesses against 49 SERP firm domains, and Maps still wins on contact data.
  • The map centers were hand-picked, not gridded. Eight points chosen by eye around a metro. A systematic lattice would find more and would also spend more.
  • We did not dial the phone numbers. 97% coverage is a field-presence number, not a connect rate.
  • "Unique domain" flatters the SERP. Several of the 49 are the same national brokerage on a regional subdomain.

What you now own

Follow the paging route and this is your Saturday: a loop that walks pagination.next and knows when to stop; a classifier that separates the 49 firms from the 20 directories; a per-site crawler for contact pages that breaks whenever one of 49 sites changes layout; and a dedupe pass to merge colliers.com against the Colliers entry in Maps.

Scavio absorbs the layer under all of that. /api/v2/google gives you the paged SERP with the cursor already parsed, and /api/v2/google/maps/search gives you the business record with phone, address, website and type_id already extracted — so the contact-page crawler never gets written, and when Google reshuffles the Maps panel it is our on-call and not your weekend.

Both endpoints are 1 credit per call, $0.01 per credit, no monthly commitment. The whole experiment in this post — ten paged SERP calls plus eight map centers — cost 18 credits. Running the same eight-center sweep across 50 metros is 400 calls, $4.00.

Start with 50 free credits, no card → dashboard.scavio.dev/sign-up — enough to repeat every number above and check them yourself, with 32 calls left over for your own market.

Endpoint reference: Google Search API and Google Maps API.

Common questions

How do I get more than 10 results per page in Google search?

You do not get more per page — you get more pages. Google removed the results-per-page control from web search, so every result set arrives in tens. Increment start by 10 on each call and deduplicate as you go. In our run that stayed productive through start=60 and then delivered one new domain per call.

Why does Google only show 10 results per page?

Because the 100-results-per-page option was retired in 2025, and the SERP was never designed as an export format in the first place. Ten is now the page size for both the interface and everything that reads it. Any tool that appears to hand you 100 rows at once is paging behind the scenes.

How do I get 100 search results on Google?

Ten calls at start=0 through start=90. Expect fewer than 100 usable rows out the far end: ours produced 93 organic results and 69 distinct domains, because the tail pages shrink and repeat. Scavio's /api/v2/google returns pagination.next on every response so the loop is a while and not a guess.

Does num=100 still work on the Google Search API?

No. We accept the field and drop it silently — which is our bug, and it is on the fix list — but the underlying capability is gone regardless of vendor. Treat any product page promising 100 results in a single request as ten billed requests wearing a trench coat.

How do I increase the Google API limit?

If "limit" means results, there is no dial; page and partition. If it means throughput, that is a plan question — Scavio's concurrency runs from 5 in-flight requests on the entry plan up to 50 on Growth, and paging ten SERP pages is ten sequential credits either way.

Why is Google not showing all search results?

Google shows what it considers a useful slice, not an index dump. Our query reported 69,300,000 total results and surrendered 69 domains. That is normal behaviour, not throttling, and it is the reason a completeness requirement should be met with a different data source rather than a longer loop.

What is the best way to build a complete list of local businesses?

Partition by geography against Maps rather than paging the web SERP. Pick map centers across the target area, call /api/v2/google/maps/search once per center at a fixed zoom, deduplicate on place_id, and filter on type_id. Eight centers over one metro gave us 106 businesses with 97% phone coverage for 8 credits.

Why does my AI agent stop after 20 or 30 results?

Two reasons stack. The search tool underneath it returns one page, and a single context window cannot hold hundreds of rows anyway, so the model starts summarizing as it fills. Neither is fixable by prompting. Move the loop out of the model: partition the space in code, call the API once per partition, and write rows to a file rather than back into the conversation.

Continue reading

ai-overviewaeo

How Reliable Is AI Overview Citation Tracking? 30 Identical Requests

9 min read
googlelocal-seo

Google Local Pack Scraping: Why the location Parameter Returns the Wrong City

8 min read
ScavioScavio

One scraper API for every social, search and ecommerce platform. Built for AI agents.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative
  • Serper Alternative
  • Tavily vs Scavio
  • SerpAPI vs Scavio
  • All alternatives
  • Compare Scavio vs alternatives

Search APIs

  • Google Search API
  • Amazon Product API
  • YouTube API
  • Reddit API
  • Walmart Product API
  • TikTok API
  • Instagram API

Tools

  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy