Real Google and Google Maps SERPs for AI assistants: pixel positions, AI Overviews and sources.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer followed by your Semscraper API key (API keys menu of app.semscraper.com)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Computes, on the server, which domains Google cites in the AI Overviews of searches already created (google_search IDs): for each domain, the number of keywords where it is cited, the number of mentions, the keywords and its best position on the page. Also returns how many searches have an AI Overview. Free. Best tool to answer "which sites does Google cite in its AI Overviews on these keywords": one small answer instead of every SERP. Based on source URLs, not on brand names.
IDs of google_search searches (serp_...).
Number of domains returned, most cited first.
How long to wait for searches still running, in seconds (default 45, max 55).
Computes, on the server, which domains Google cites in the AI Overviews of searches already created (google_search IDs): for each domain, the number of keywords where it is cited, the number of mentions, the keywords and its best position on the page. Also returns how many searches have an AI Overview. Free. Best tool to answer "which sites does Google cite in its AI Overviews on these keywords": one small answer instead of every SERP. Based on source URLs, not on brand names.
| Argument | Type | Description |
|---|---|---|
| ids* | array | IDs of google_search searches (serp_...). |
| top | integer | Number of domains returned, most cited first. |
| wait_seconds | integer | How long to wait for searches still running, in seconds (default 45, max 55). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^serp_[A-Za-z0-9]+$"
},
"maxItems": 500,
"minItems": 1,
"description": "IDs of google_search searches (serp_...)."
},
"top": {
"type": "integer",
"default": 50,
"maximum": 500,
"minimum": 1,
"description": "Number of domains returned, most cited first."
},
"wait_seconds": {
"type": "integer",
"default": 45,
"maximum": 55,
"minimum": 0,
"description": "How long to wait for searches still running, in seconds (default 45, max 55)."
}
}
}Returns the balance of the Semscraper account, in euros. Free.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Returns how many searches of the account are pending, processing or done. Free. The account has its own queue: the robots serve accounts in turn, so a large batch flows through gradually.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Returns searches already created (google_search or google_maps), by their IDs (serp_...), e.g. the pending_ids of a previous call. Free: the searches were paid when created.
| Argument | Type | Description |
|---|---|---|
| ids* | array | IDs returned by a previous search (serp_...). |
| blocks | array | Only return these result blocks, e.g. ["organic"] or ["ai_overview*"] (a trailing * matches a prefix). Block types: organic, paid_top, paid_bottom, local_pack, people_also_ask, featured_snippet, knowledge_graph, top_stories, videos, images, shopping, sitelinks, ai_overview_citation, ai_overview_citation_source, ai_overview_panel, related_searches... |
| domain | string | Only return the positions of this domain (e.g. "example.com", subdomains included) in every block, with its best organic rank and whether it appears in the AI Overview, instead of the whole SERP. Much shorter: use it to answer "where does this site rank". |
| wait_seconds | integer | How long this call waits for searches still running, in seconds (default 45, max 55). Call again while pending_ids remain. |
| max_items_per_block | integer | Maximum number of items returned per block, to keep the answer short. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^serp_[A-Za-z0-9]+$"
},
"maxItems": 500,
"minItems": 1,
"description": "IDs returned by a previous search (serp_...)."
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only return these result blocks, e.g. [\"organic\"] or [\"ai_overview*\"] (a trailing * matches a prefix). Block types: organic, paid_top, paid_bottom, local_pack, people_also_ask, featured_snippet, knowledge_graph, top_stories, videos, images, shopping, sitelinks, ai_overview_citation, ai_overview_citation_source, ai_overview_panel, related_searches..."
},
"domain": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Only return the positions of this domain (e.g. \"example.com\", subdomains included) in every block, with its best organic rank and whether it appears in the AI Overview, instead of the whole SERP. Much shorter: use it to answer \"where does this site rank\"."
},
"wait_seconds": {
"type": "integer",
"default": 45,
"maximum": 55,
"minimum": 0,
"description": "How long this call waits for searches still running, in seconds (default 45, max 55). Call again while pending_ids remain."
},
"max_items_per_block": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of items returned per block, to keep the answer short."
}
}
}Collects the listings of a Google Maps search for one or more keywords, in the order Google Maps shows them, from a given place. Each listing comes with its rank, name (title), CID, category (type), address, website, rating, review count, opening status and the snippet shown. Use it for local SEO, local competition and market research. Paid from the account balance, same price as google_search. Returns rating and review count, not the full text of reviews.
| Argument | Type | Description |
|---|---|---|
| depth | integer | Number of Google result pages to collect, 1 (about 10 results) to 10 (about 100). Each extra page costs more and takes longer. |
| domain | string | Only return the positions of this domain (e.g. "example.com", subdomains included) in every block, with its best organic rank and whether it appears in the AI Overview, instead of the whole SERP. Much shorter: use it to answer "where does this site rank". |
| keywords* | array | Keywords to search, one search per keyword (max 100). Google operators work (site:, inurl:, intitle:, quotes, -term). No comma inside a keyword. |
| language | string | Interface language code, e.g. fr, en, de, es, it, pt, ja. Must form a valid pair with location (see list_google_versions). |
| location | string | Google version as a country code: fr for google.fr, de for google.de, br for google.com.br, jp for google.co.jp, us for google.com. Must form a valid pair with language (see list_google_versions). |
| priority |
Collects the real Google results page (SERP) for one or more keywords, rendered in a real browser, and returns every block (organic results, ads, local pack, People Also Ask, AI Overview with its citations and sources...) with, for each item, its rank in its block (rank_type), its rank on the page (rank_serp), its Google page and its pixel position. Use it to know what Google actually shows for a query, in a given country, language, city and device. Paid from the account balance: about EUR 0.0003 per keyword for the first page, EUR 0.0002 per extra page. Takes about 30 seconds per keyword (about a minute for 10 pages); the tool waits for the results. Returns titles, snippets and URLs, not the full content of the pages.
| Argument | Type | Description |
|---|---|---|
| depth | integer | Number of Google result pages to collect, 1 (about 10 results) to 10 (about 100). Each extra page costs more and takes longer. |
| blocks | array | Only return these result blocks, e.g. ["organic"] or ["ai_overview*"] (a trailing * matches a prefix). Block types: organic, paid_top, paid_bottom, local_pack, people_also_ask, featured_snippet, knowledge_graph, top_stories, videos, images, shopping, sitelinks, ai_overview_citation, ai_overview_citation_source, ai_overview_panel, related_searches... |
| device | string | Device to emulate. |
| domain | string | Only return the positions of this domain (e.g. "example.com", subdomains included) in every block, with its best organic rank and whether it appears in the AI Overview, instead of the whole SERP. Much shorter: use it to answer "where does this site rank". |
| keywords* | array |
Lists the supported Google versions as location / language pairs (186 Google domains, 117 languages), to pick valid location and language values. Free. Filter with a country domain, a code or a language name to keep the answer short.
| Argument | Type | Description |
|---|---|---|
| filter | string | Text to look for in the domain, codes or language name, e.g. "google.de", "br", "Deutsch". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"filter": {
"type": "string",
"maxLength": 50,
"description": "Text to look for in the domain, codes or language name, e.g. \"google.de\", \"br\", \"Deutsch\"."
}
}
}Lists the searches of the account, most recent first (ID, engine, keyword, device, location, language, depth, geolocation, status, whether the results were already fetched, cost, creation date), without their results. Free. Covers every search made with the account, through this server or the API. Use it to find IDs (e.g. "the last 10 searches", "today's searches"), and whenever a google_search or google_maps call failed, timed out or lost its answer: the searches were probably created and paid already, so fetch them with get_serp_results instead of searching again.
| Argument | Type | Description |
|---|---|---|
| date | string | Only the searches created that day, format YYYY-MM-DD (server time, Europe/Paris). |
| limit | integer | Number of searches returned (default 20). |
| cursor | string | next_cursor from a previous call, to get the following page. |
| status | string | Only the searches with this status. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only the searches created that day, format YYYY-MM-DD (server time, Europe/Paris)."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 500,
"minimum": 1,
"description": "Number of searches returned (default 20)."
},
"cursor": {
"type": "string",
"maxLength": 100,
"description": "next_cursor from a previous call, to get the following page."
},
"status": {
"enum": [
"pending",
"processing",
"done"
],
"type": "string",
"description": "Only the searches with this status."
}
}
}| integer |
| Priority in the account queue, 1 to 10 (10 first). Use a high value for a few urgent searches when a large batch is already running. |
| geolocation | string | Place the search is made from: "City, Region, Country" or "latitude,longitude", with an optional zoom suffix ("43.7102,7.2620,16z"). Strongly recommended: Maps results depend on the location. |
| wait_seconds | integer | How long this call waits for the results, in seconds (default 45, max 55). Searches still running are returned in pending_ids: fetch them with get_serp_results. Use 0 to start a large batch and return right away. |
| max_items_per_block | integer | Maximum number of items returned per block, to keep the answer short. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keywords"
],
"properties": {
"depth": {
"type": "integer",
"default": 1,
"maximum": 10,
"minimum": 1,
"description": "Number of Google result pages to collect, 1 (about 10 results) to 10 (about 100). Each extra page costs more and takes longer."
},
"domain": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Only return the positions of this domain (e.g. \"example.com\", subdomains included) in every block, with its best organic rank and whether it appears in the AI Overview, instead of the whole SERP. Much shorter: use it to answer \"where does this site rank\"."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"maxItems": 100,
"minItems": 1,
"description": "Keywords to search, one search per keyword (max 100). Google operators work (site:, inurl:, intitle:, quotes, -term). No comma inside a keyword."
},
"language": {
"type": "string",
"maxLength": 3,
"minLength": 2,
"description": "Interface language code, e.g. fr, en, de, es, it, pt, ja. Must form a valid pair with location (see list_google_versions)."
},
"location": {
"type": "string",
"maxLength": 3,
"minLength": 2,
"description": "Google version as a country code: fr for google.fr, de for google.de, br for google.com.br, jp for google.co.jp, us for google.com. Must form a valid pair with language (see list_google_versions)."
},
"priority": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Priority in the account queue, 1 to 10 (10 first). Use a high value for a few urgent searches when a large batch is already running."
},
"geolocation": {
"type": "string",
"maxLength": 200,
"description": "Place the search is made from: \"City, Region, Country\" or \"latitude,longitude\", with an optional zoom suffix (\"43.7102,7.2620,16z\"). Strongly recommended: Maps results depend on the location."
},
"wait_seconds": {
"type": "integer",
"default": 45,
"maximum": 55,
"minimum": 0,
"description": "How long this call waits for the results, in seconds (default 45, max 55). Searches still running are returned in pending_ids: fetch them with get_serp_results. Use 0 to start a large batch and return right away."
},
"max_items_per_block": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of items returned per block, to keep the answer short."
}
}
}| Keywords to search, one search per keyword (max 100). Google operators work (site:, inurl:, intitle:, quotes, -term). No comma inside a keyword. |
| language* | string | Interface language code, e.g. fr, en, de, es, it, pt, ja. Must form a valid pair with location (see list_google_versions). |
| location* | string | Google version as a country code: fr for google.fr, de for google.de, br for google.com.br, jp for google.co.jp, us for google.com. Must form a valid pair with language (see list_google_versions). |
| priority | integer | Priority in the account queue, 1 to 10 (10 first). Use a high value for a few urgent searches when a large batch is already running. |
| geolocation | string | Optional city-level geolocation: "City, Region, Country" (e.g. "Lyon, Rhone, France") or a GPS position "latitude,longitude" (e.g. "43.7102,7.2620"). |
| wait_seconds | integer | How long this call waits for the results, in seconds (default 45, max 55). Searches still running are returned in pending_ids: fetch them with get_serp_results. Use 0 to start a large batch and return right away. |
| max_items_per_block | integer | Maximum number of items returned per block, to keep the answer short. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keywords",
"location",
"language"
],
"properties": {
"depth": {
"type": "integer",
"default": 1,
"maximum": 10,
"minimum": 1,
"description": "Number of Google result pages to collect, 1 (about 10 results) to 10 (about 100). Each extra page costs more and takes longer."
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only return these result blocks, e.g. [\"organic\"] or [\"ai_overview*\"] (a trailing * matches a prefix). Block types: organic, paid_top, paid_bottom, local_pack, people_also_ask, featured_snippet, knowledge_graph, top_stories, videos, images, shopping, sitelinks, ai_overview_citation, ai_overview_citation_source, ai_overview_panel, related_searches..."
},
"device": {
"enum": [
"desktop",
"mobile"
],
"type": "string",
"default": "desktop",
"description": "Device to emulate."
},
"domain": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Only return the positions of this domain (e.g. \"example.com\", subdomains included) in every block, with its best organic rank and whether it appears in the AI Overview, instead of the whole SERP. Much shorter: use it to answer \"where does this site rank\"."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"maxItems": 100,
"minItems": 1,
"description": "Keywords to search, one search per keyword (max 100). Google operators work (site:, inurl:, intitle:, quotes, -term). No comma inside a keyword."
},
"language": {
"type": "string",
"maxLength": 3,
"minLength": 2,
"description": "Interface language code, e.g. fr, en, de, es, it, pt, ja. Must form a valid pair with location (see list_google_versions)."
},
"location": {
"type": "string",
"maxLength": 3,
"minLength": 2,
"description": "Google version as a country code: fr for google.fr, de for google.de, br for google.com.br, jp for google.co.jp, us for google.com. Must form a valid pair with language (see list_google_versions)."
},
"priority": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Priority in the account queue, 1 to 10 (10 first). Use a high value for a few urgent searches when a large batch is already running."
},
"geolocation": {
"type": "string",
"maxLength": 200,
"description": "Optional city-level geolocation: \"City, Region, Country\" (e.g. \"Lyon, Rhone, France\") or a GPS position \"latitude,longitude\" (e.g. \"43.7102,7.2620\")."
},
"wait_seconds": {
"type": "integer",
"default": 45,
"maximum": 55,
"minimum": 0,
"description": "How long this call waits for the results, in seconds (default 45, max 55). Searches still running are returned in pending_ids: fetch them with get_serp_results. Use 0 to start a large batch and return right away."
},
"max_items_per_block": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of items returned per block, to keep the answer short."
}
}
}