Google Search Scraper | Organic, Ads & People Also Ask avatar

Google Search Scraper | Organic, Ads & People Also Ask

Pricing

from $4.62 / 1,000 search results pages

Go to Apify Store
Google Search Scraper | Organic, Ads & People Also Ask

Google Search Scraper | Organic, Ads & People Also Ask

Get Google search results as flat rows: organic rank, title, real URL, domain and snippet, plus text ads with advertiser, People also ask questions and related searches. Many keywords per run, any country, language, city and time range, ads included in the page price, no login.

Pricing

from $4.62 / 1,000 search results pages

Rating

0.0

(0)

Developer

Flowo

Flowo

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Features

Limited permissions

Share

Google Search Scraper | Organic, Ads & People Also Ask

Get Google search results for any keyword and country as flat rows: the rank, title, real target URL, domain, site name and snippet of each organic result, plus text ads with advertiser and landing page, People also ask questions and related searches. Every row says its query, country, location and page, so you can sort and filter it in a spreadsheet straight away. One price per results page with ads, People also ask and related searches included.

What does Google Search Scraper do?

You give it a list of keywords, a country and optionally a language, a city and a time filter. It searches Google for each keyword, reads one or more results pages and saves every result on the page as one row with a type: organic, ad, peopleAlsoAsk or relatedSearch. It is built for SEO rank tracking, PPC competitor research, content ideas and developers or AI agents that need a simple Google search API.

How to scrape Google search results

Google Search Scraper output example: Query, Page, Type, Position, Title

How Google Search Scraper works: Searches google.com for each query in your country, language and city; Reads up to 20 results pages per query, following Google's next page; Retries a blocked page wit

  1. Open the actor in Apify Console.
  2. Enter your keywords in Search queries, one per line. Google operators like site:, intitle:, "exact phrase" and -word work.
  3. Set Country (two-letter code, default US). Optionally set Language, City or region, Time range and Pages per query.
  4. Click Start and wait for the run to finish.
  5. Open the Organic results or Overview view of the dataset, or export it as JSON, CSV or Excel.

How much does it cost to scrape Google search results?

Price per event by Apify plan:

EventFreeBronzeSilverGold and above
Search results page$6.60 per 1,000$5.94 per 1,000$5.28 per 1,000$4.62 per 1,000
Actor start$0.00005$0.00005$0.00005$0.00005

A test run with the API example input below returned 28 rows in 11 s.

You pay for one event per Google results page for one query (search-page). All rows of that page are included: about 10 organic results, any text ads, People also ask questions and related searches. In test runs a page gave about 14–18 rows. There is no add-on for ads.

Not charged:

  • pages with no organic results and no ads (for example with a narrow time range or past the last page);
  • pages that failed after retries;
  • resolving Google redirect links to the real URL.

A small start fee of $0.00005 is charged once per run.

ScenarioEventsCost on the Free plan
3 keywords × 1 page (the prefilled input)3 pagesabout $0.02
100 keywords × 1 page (rank check of the top 10)100 pagesabout $0.66
100 keywords × 3 pages (top 30 positions)300 pagesabout $1.98
1,000 keywords × 1 page1,000 pagesabout $6.60

Input

Google Search Scraper input example: Search queries, Country, Pages per query, Time range, Resolve real organic URLs

FieldWhat it does
queries (required)Keywords, one per line. Operators and any script work. Empty lines and duplicates are skipped.
countryTwo-letter ISO country code, default US (UK is accepted as GB). Sets Google's country, the proxy exit country and pins the search location.
languageGoogle interface language, e.g. en, de, pt-BR. Empty = the main language of the country.
locationA city or region inside the country, as City,Region,Country, e.g. Austin,Texas,United States.
maxPagesPerQueryResults pages per query, 1–20, default 1. Stops earlier when Google has no next page.
timeRangeany, hour, day, week, month or year, default any.
resolveUrlsResolve Google's google.com/goto?url=… organic links to the real target URL, default true.

Example input:

{
"queries": ["pizza delivery"],
"country": "US",
"location": "Austin,Texas,United States",
"maxPagesPerQuery": 2,
"timeRange": "any",
"resolveUrls": true
}

What data can you extract from Google search results?

FieldDescription
query, country, language, location, pageWhat was searched, where and on which results page
typeorganic, ad, peopleAlsoAsk or relatedSearch
positionRank. Organic ranks continue across pages (page 2 continues after the last organic result of page 1); other types are numbered within the page
titleResult title, ad headline, question or related search text
urlOrganic: the target page; ad: the landing page; questions and related searches: a Google search link
urlResolvedOrganic only: true when url is the real target, false when it is still Google's redirect link
domainHost of the target or landing page without www.
displayedUrlBreadcrumb shown under the title
siteNameSite name of an organic result or the advertiser of an ad
descriptionSnippet of an organic result or the ad text
publishedTextDate shown in the snippet, as Google shows it in the search language
adPlacementAds only: top or bottom of the page
scrapedAtWhen the row was extracted

Example rows from a real run (query "car insurance", US):

[
{
"query": "car insurance", "country": "US", "language": "en", "location": "United States",
"page": 1, "type": "organic", "position": 1,
"title": "Car Insurance | Get An Auto Insurance Quote",
"url": "https://www.allstate.com/auto-insurance", "urlResolved": true,
"domain": "allstate.com", "displayedUrl": "https://www.allstate.com › auto-insurance",
"siteName": "Allstate",
"description": "We offer a range of flexible auto coverage, including liability, collision and comprehensive. Get a quote in minutes. …",
"publishedText": null, "scrapedAt": "2026-11-05T15:38:37.532Z"
},
{
"query": "car insurance", "country": "US", "language": "en", "location": "United States",
"page": 1, "type": "peopleAlsoAsk", "position": 1,
"title": "Who currently has the cheapest car insurance?",
"url": "https://www.google.com/search?q=Who%20currently%20has%20the%20cheapest%20car%20insurance%3F",
"urlResolved": null, "domain": null, "displayedUrl": null, "siteName": null,
"description": null, "publishedText": null, "scrapedAt": "2026-11-05T15:38:37.532Z"
},
{
"query": "car insurance", "country": "US", "language": "en", "location": "United States",
"page": 1, "type": "relatedSearch", "position": 1,
"title": "Car insurance quotes",
"url": "https://www.google.com/search?q=Car%20insurance%20quotes",
"urlResolved": null, "domain": null, "displayedUrl": null, "siteName": null,
"description": null, "publishedText": null, "scrapedAt": "2026-11-05T15:38:37.532Z"
}
]

Use cases

  • Rank tracking for SEO: run your keyword list for a country, filter the organic rows by your domain and read your position next to your competitors'.
  • Competitor ads monitoring for PPC: see who advertises on a keyword, with which headline, text and landing page, and whether the ad is at the top or bottom.
  • Local search: set a city such as Austin,Texas,United States to see the results a searcher there gets.
  • Content ideas in other markets: search kaffee in DE and collect People also ask questions and related searches in German.
  • Fresh results and research for AI: combine site: and other operators with a time range such as month, and fetch several pages per query.

Limitations

  • People also ask rows contain the question only, not the answer. AI Overviews, sitelinks, the total result count and other SERP widgets are not returned.
  • Google shows text ads on only some commercial searches (in tests about 1 in 5 commercial pages), so many pages have no ad rows.
  • publishedText is filled only when Google shows a date in the snippet, and is kept as shown ("Jun 29, 2026", "vor 3 Stunden"), not converted to a date.
  • Some organic rows (e.g. videos) have no snippet, so description can be empty.
  • If a Google redirect link cannot be resolved, the row keeps the Google link with urlResolved: false.
  • Up to 20 pages per query. Google may have fewer pages; the actor then stops early.
  • Speed: with link resolution about 10 pages per minute, without it about 25 pages per minute.

Tips and troubleshooting

  • More positions: raise Pages per query; each page adds about 10 organic results and is one event.
  • Faster runs: turn off Resolve real organic URLs if Google's redirect links are fine for you. Then some organic url values are google.com/goto?url=… links with urlResolved: false, and domain comes from the displayed URL.
  • City searches: write the location as City,Region,Country in English, and it must be in the selected country. A city in another country fails the run before any search; an unknown or non-canonical name (like Austin, TX) is sent with a warning, and Google may ignore it.
  • Few or no rows with a time range: narrow ranges such as hour or day can return pages without organic results. Those pages are not saved and not charged; the log names the query and page.
  • Multilingual countries: set Language yourself (e.g. fr for Switzerland), because an empty language uses the country's main one.
  • Run failed at once: check the log for an input error: an unknown country or language code, an empty query list, or a location outside the country.

API, MCP and integrations

Run the actor from your code with the same JSON input as in Console. Your API token is in Console → Settings → API & Integrations.

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("genial_candlestand/google-search-results-scraper").call(run_input={"queries": ["coffee", "car insurance"], "country": "US"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Node.js (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('genial_candlestand/google-search-results-scraper').call({"queries": ["coffee", "car insurance"], "country": "US"});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

HTTP — one request runs the actor and returns the results (runs up to 5 minutes; longer ones: run asynchronously):

curl -X POST "https://api.apify.com/v2/acts/genial_candlestand~google-search-results-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries":["coffee","car insurance"],"country":"US"}'

AI agents (MCP). Add the actor as a tool of the Apify MCP server. Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=genial_candlestand/google-search-results-scraper"

Claude Desktop, Cursor or VS Code: {"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=genial_candlestand/google-search-results-scraper"}}}. Then ask, for example:

  • "Find the Google rank of nike.com for best running shoes and trail running shoes in the US"
  • "Who advertises on Google for car insurance in the UK? List headlines and landing pages"
  • "Get People also ask questions and related searches for kaffee on Google Germany"

Integrations. Run it on a schedule with Apify Schedules and send the results to Google Sheets, Slack, Zapier, Make, n8n or your webhook — see Apify integrations.

FAQ

Is it legal to scrape Google search results?
The actor collects only what Google shows publicly on its results pages, with no login. You are responsible for how you use the data and for following the laws and terms that apply to you.

Do I need a Google account, API key or my own proxy?
No. The actor uses Apify's Google SERP proxy in the country you choose. There is no proxy setting to configure.

Are ads charged extra?
No. Text ads, People also ask questions and related searches are part of the page price, and a page without ads costs the same as one with ads.

Why is a page not charged?
A page with no organic results and no ads, or a page that failed after retries, is not saved and not charged. The log says which query and page.

How is it different from other Google search scrapers?
Each result is a flat row with a type, instead of one item per page with nested arrays. Ads, People also ask and related searches are included in one page price, and Google's redirect links are resolved to real URLs. Other actors offer more SERP widgets, such as AI Overviews and People also ask answers, which this actor does not return.

Also useful