
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

Scrape Google Search results by query and country in fast search mode: organic results, People Also Ask, and related searches with positions, plus ads in browser mode. Track rankings and feed SERP data to your tools or LLMs.
Turn a list of Google queries into dataset pages of organic results, People Also Ask, and related searches, with ads and AI overviews when you ask for them.
For SEO, brand monitoring, and research jobs that need the public results page; a page that fails is reported in the run's status and OUTPUT record instead of ending the run.
/goto result links are followed one hop so the dataset stores the destination when that hop succeeds.OUTPUT record (failedInputs) while the other queries keep going.organicResults is an empty list when the page was not a results page, so a failure is visible.hasNextPage is false.Runs use fast search mode unless an option needs the full results page. These options use browser mode for the whole run:
includeAds)liveAiOverview)webTabRankingCheck)saveHtml)saveHtmlToKeyValueStore)locationUule)includeUnfilteredResults)A query line that is a full Google Search URL also uses browser mode. Everything else, including the query operators, date filters, country, interface language, search language, results per page, and pages per query, works in fast search mode.
Google results pages hold 10 results. In fast search mode, a Results per page other than 10 is filled from as many consecutive Google pages as it needs and trimmed to size, so 20 results per page takes 2 Google pages. Browser mode loads one Google page per item and sends the page size as num.
If fast search mode fails for a page (an error, a timeout, or no results on a first page), that page is loaded in browser mode instead and the log says Switching to browser mode for this query page. The next page tries fast search mode again.
Fast search mode fills the same fields as browser mode, except for these, which only browser mode fills: paidResults, aiOverview, resultsTotal, html, htmlSnapshotUrl, and on organic rows websiteTitle and emphasizedKeywords. Fields a mode can't fill are left off the item, as with any empty field.
Pay per event: SERP page, $3.00 per 1,000 pages ($0.003 each). One event is charged for each Google results page retrieved, in either mode. With the default 10 results per page that's one event per dataset item. In fast search mode a larger page size retrieves more Google pages (20 results per page is 2 events per item); a Google page past the last result isn't charged. Failed pages are not saved and not charged; they are listed under failedInputs in the OUTPUT record. The run checks its remaining budget before each page and stops cleanly when the next page would go over its maximum total charge.
{
"countryCode": "us",
"maxPagesPerQuery": 1,
"queries": "web scraping",
"resultsPerPage": 10
}
One item from a real run of the example input in fast search mode, shortened. Long text is cut and lists show their first entries. With Include ads on, the run uses browser mode and the item also has paidResults.
{
"searchQuery": {
"term": "web scraping",
"url": "https://www.google.com/search?q=web+scraping&hl=en&num=10&gl=us",
"device": "DESKTOP",
"page": 1,
"type": "SEARCH",
"domain": "google.com",
"countryCode": "US",
"languageCode": "en",
"resultsPerPage": 10
},
"url": "https://www.google.com/search?q=web+scraping&hl=en&num=10&gl=us",
"organicResults": [
{
"title": "Web scraping",
"url": "https://en.wikipedia.org/wiki/Web_scraping",
"type": "organic",
"displayedUrl": "https://en.wikipedia.org › wiki › Web_scraping",
"description": "Web scraping, web harvesting, or web data extraction is data scraping used for extracting data from websites.",
"position": 1
},
{
"title": "What is Web Scraping and How to Use It?",
"url": "https://www.geeksforgeeks.org/blogs/what-is-web-scraping-and-how-to-use-it/",
"type": "organic",
"displayedUrl": "https://www.geeksforgeeks.org › blogs › what-is-web-scraping-and-how-to-use-it",
"description": "Web scraping is an automated method to extract large amounts of data from websites. This data, usually in HTML format, is converted into ...",
"date": "2025-11-12T12:00:00.000Z",
"position": 2
}
],
"peopleAlsoAsk": [
{
"question": "Can ChatGPT do web scraping?",
"title": "Can ChatGPT do web scraping?"
},
{
"question": "What actually is web scraping?",
"title": "What actually is web scraping?"
}
],
"relatedQueries": [
{
"title": "Web scraping tools",
"url": "https://www.google.com/search?q=Web+scraping+tools&hl=en&gl=us"
},
{
"title": "Web scraping python",
"url": "https://www.google.com/search?q=Web+scraping+python&hl=en&gl=us"
}
],
"hasNextPage": true
}
queries is one query or URL per line. maxPagesPerQuery and resultsPerPage set the page size. countryCode is gl. languageCode is hl. searchLanguage is lr. locationUule is passed through as uule.
Operators: forceExactMatch, site, relatedToSite, wordsInTitle, wordsInText, wordsInUrl, fileTypes, quickDateRange, beforeDate, afterDate, and includeUnfilteredResults.
includeAds stores ads. liveAiOverview stores the AI overview and waits briefly when the page is still generating one. webTabRankingCheck compares the web-tab organic list. saveHtml puts the HTML on the item. saveHtmlToKeyValueStore stores a snapshot. All of these are off by default and use browser mode. maxConcurrency caps parallel pages.
No proxy or browser settings are needed. In browser mode, pages load in a real browser on a residential exit in countryCode, and the run's own residential proxy resolves Google's redirect links.
Each item has searchQuery (term, url, device, page, type, domain, countryCode, languageCode, locationUule, resultsPerPage) and the page url.
When the results page contains them: organicResults, paidResults (with Include ads), peopleAlsoAsk, relatedQueries, aiOverview, resultsTotal, and hasNextPage. An organic or paid row can include title, url, displayedUrl, description, type, position or adPosition, websiteTitle, date, averageRating, numberOfReviews, emphasizedKeywords, siteLinks, and on ads directUrl. Organic position counts on across a query's pages: page 2 starts after page 1's last result. A People Also Ask row can include question, title, url, answer, and date. A related query has title and url.
html is present only when saveHtml is on. htmlSnapshotUrl is present only when a snapshot was stored. A page that was not a results page is not saved; it is listed in the status message and in the OUTPUT record as failedInputs: [{input, reason}].
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
queriesstringRequiredSearch queries
One Google search per line. Each line is requested from google.com/search.
maxPagesPerQueryintegerOptionaldefault 1Pages per query
How many result pages to fetch for each query. A query stops early when Google has no more results.
Operators and filters added to every query.
forceExactMatchbooleanOptionaldefault falseForce exact match
Wraps the query in quotes so Google searches for the exact phrase.
sitestringOptionalSite
Limits the search with the site: operator. This takes precedence over related to site.
relatedToSitestringOptionalRelated to site
Filters with the related: operator when site is empty.
wordsInTitlearrayOptionalWords in title
Adds an intitle: operator for each word or phrase.
wordsInTextarrayOptionalWords in text
Adds an intext: operator for each word or phrase.
wordsInUrlarrayOptionalWords in URL
Adds an inurl: operator for each word or phrase.
quickDateRangestringOptionalQuick date range
Past date window sent as tbs=qdr:. Use d, w, m, y, or a count such as d10 or h5.
beforeDatestringOptionalBefore date
Results before this date. Use YYYY-MM-DD or a relative value such as 8 days or 3 months.
afterDatestringOptionalAfter date
Results after this date. Use YYYY-MM-DD or a relative value such as 8 days or 3 months.
fileTypesarrayOptionalFile types
Limits results with the filetype: operator. Multiple types are combined with OR.
includeUnfilteredResultsbooleanOptionaldefault falseUnfiltered results
Sends filter=0 so Google includes results it would normally omit. Uses browser mode.
countryCodestringOptionaldefault "us"Country code
Two-letter country code sent to Google as the gl parameter.
languageCodestringOptionaldefault "en"Interface language
Language of the Google Search interface, sent as the hl parameter.
searchLanguagestringOptionalSearch language
Restricts results to pages in this language. Sent as the lr parameter, for example en or lang_en.
locationUulestringOptionalExact location
Google UULE location code, sent as the uule parameter. Uses browser mode.
resultsPerPageintegerOptionaldefault 10Results per page
How many results each dataset item holds. Google pages hold 10 results, so in fast search mode other sizes are filled from consecutive Google pages, each charged as a SERP page.
includeAdsbooleanOptionaldefault falseInclude ads
Stores Google's paid results under paidResults. Fast search mode doesn't return ads, so this option uses browser mode.
liveAiOverviewbooleanOptionaldefault falseWait for live AI overviews
Stores Google's AI overview, including overviews that stream in after the page loads (about 5 seconds more on those pages). Fast search mode doesn't return AI overviews, so this option uses browser mode. Pages loaded in browser mode for another reason still store overviews that ship inside the page.
webTabRankingCheckbooleanOptionaldefault falseRanking check
Also fetch the same search on Google's Web tab. When Google serves the session a lower-quality ranking on the main page, the organic results come from the Web tab instead. Adds one light request per page. Uses browser mode.
saveHtmlbooleanOptionaldefault falseSave HTML to dataset
Stores the fetched page HTML on the dataset item under html. Uses browser mode.
saveHtmlToKeyValueStorebooleanOptionaldefault falseSave HTML snapshots
Stores each fetched page in the run's key-value store and links it on the item as htmlSnapshotUrl. Uses browser mode.
maxConcurrencyintegerOptionaldefault 8Parallel pages
How many result pages are fetched at the same time. In browser mode, pages share browser sessions, four pages per session, up to five sessions.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| searchQuery | object | |
| organicResults | array | |
| paidResults | array | |
| peopleAlsoAsk | array | |
| relatedQueries | array | |
| resultsTotal | integer | |
| hasNextPage | boolean | |
| aiOverview | object | |
| url | string | |
| htmlSnapshotUrl | string |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| SERP page | One page of Google search results | $0.003 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/google-search-scraper').call({
"queries": "best project management software",
"countryCode": "us",
"resultsPerPage": 10,
"maxPagesPerQuery": 1
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/google-search-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/google-search-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Google results with the AI Overview and a ranking check.
Organic results and ads across two result pages.
Results limited to one site and title words.
Results for several queries in one run.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.