cloro · Schema
GoogleMonitorResponse
CompanySearchAIWeb ScrapingSERPGenerative Engine OptimizationSEOBrand MonitoringMarket ResearchData ExtractionMCP
Properties
| Name | Type | Description |
|---|---|---|
| success | boolean | |
| result | object | Google search results data |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/cloro-dev/main/json-schema/cloro-dev-google-monitor-response-schema.json",
"title": "GoogleMonitorResponse",
"x-generated": "2026-10-07",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/cloro-dev-openapi.yml#/components/schemas/GoogleMonitorResponse",
"required": [
"success",
"result"
],
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"result": {
"description": "Google search results data",
"type": "object",
"properties": {
"organicResults": {
"type": "array",
"description": "Organic search results from Google",
"items": {
"type": "object",
"properties": {
"position": {
"type": "number",
"description": "Position in search results (1-indexed)"
},
"title": {
"type": "string",
"description": "Title of the search result"
},
"link": {
"type": "string",
"description": "URL of the search result"
},
"displayedLink": {
"type": "string",
"description": "Formatted URL as displayed in search results"
},
"snippet": {
"type": "string",
"description": "Text snippet describing the page content"
},
"date": {
"type": "string",
"description": "Publication date if available"
},
"page": {
"type": "number",
"description": "Page number this result appeared on (1-indexed)"
},
"sitelinks": {
"type": "object",
"description": "Sitelinks displayed under the main result",
"properties": {
"inline": {
"type": "array",
"description": "Inline sitelinks",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"link": {
"type": "string"
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
}
}
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
},
"peopleAlsoAsk": {
"type": "array",
"description": "People Also Ask questions from Google",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The question text"
},
"type": {
"type": "string",
"enum": [
"AIOVERVIEW",
"LINK",
"UNKNOWN"
],
"description": "Type of question result"
},
"snippet": {
"type": "string",
"description": "Answer snippet (for LINK type)"
},
"title": {
"type": "string",
"description": "Result title (for LINK type)"
},
"link": {
"type": "string",
"description": "Result URL (for LINK type)"
},
"markdown": {
"type": "string",
"description": "AI Overview markdown content (for AIOVERVIEW type, when include.paaAioverview is true)"
},
"sources": {
"type": "array",
"description": "Cited sources (for AIOVERVIEW type, when include.paaAioverview is true)",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Title of the source"
},
"url": {
"type": "string",
"description": "URL of the source"
},
"description": {
"type": "string",
"description": "Description of the source"
},
"position": {
"type": "number",
"description": "Position of source (1-indexed)"
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
},
"peopleAreSaying": {
"type": "array",
"description": "Cards from Google's \"What people are saying\" / \"Trending posts and discussions\" SERP module. The field is omitted from `result` when no such module appears on the SERP, so clients should treat it as optional rather than expecting an empty array.",
"items": {
"type": "object",
"required": [
"position",
"title",
"link",
"date"
],
"properties": {
"position": {
"type": "number",
"description": "Position within the module (1-indexed)"
},
"title": {
"type": "string",
"description": "Card title as displayed on the SERP"
},
"link": {
"type": "string",
"description": "Destination URL the card points to (often a Reddit, Quora, or community forum thread)"
},
"date": {
"type": "string",
"description": "Google's raw relative-time text (e.g., \"5 days ago\", \"2 weeks ago\"). Free-form string — not normalized to a timestamp."
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
},
"localResults": {
"type": "array",
"description": "Places from Google's local pack (the map-backed \"3-pack\" of local businesses on local-intent queries, e.g. \"best pizza in new york city\"). The field is omitted from `result` when no local pack appears on the SERP, so clients should treat it as optional rather than expecting an empty array. Desktop only; mobile and the separate hotels/travel pack are not surfaced.",
"items": {
"type": "object",
"required": [
"position",
"title"
],
"properties": {
"position": {
"type": "number",
"description": "Position within the pack (1-indexed)"
},
"title": {
"type": "string",
"description": "Business name as displayed on the SERP"
},
"placeId": {
"type": "string",
"description": "Google entity id for the place"
},
"rating": {
"type": "number",
"description": "Average star rating (0–5)"
},
"reviews": {
"type": "string",
"description": "Review count as displayed by Google (e.g. \"26K\"). Free-form string — not normalized to a number."
},
"price": {
"type": "string",
"description": "Price band as displayed by Google (e.g. \"$10–20\"). Currency symbol matches the locale."
},
"type": {
"type": "string",
"description": "Business category (e.g. \"Pizza\", \"Plumber\")"
},
"yearsInBusiness": {
"type": "string",
"description": "Years-in-business badge, when shown (typical on service-style packs)"
},
"address": {
"type": "string",
"description": "Street address or locality as displayed on the SERP"
},
"phone": {
"type": "string",
"description": "Phone number, when shown (locale-formatted)"
},
"hours": {
"type": "string",
"description": "Opening-hours text as displayed (e.g. \"Open · Closes 11 PM\", \"Open 24 hours\")"
},
"description": {
"type": "string",
"description": "Trailing snippet — a review quote or a service-options line"
},
"links": {
"type": "object",
"description": "Action links rendered on the place, typically on business/service-style packs (plumbers, salons, …) and absent on restaurant packs whose places are plain buttons. Each key is present only when Google rendered that button.",
"properties": {
"website": {
"type": "string",
"description": "The business's own website URL"
},
"directions": {
"type": "string",
"description": "Absolute Google Maps directions URL"
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
}
}
},
"localResultsMoreLink": {
"type": "string",
"description": "Absolute URL of the local pack's \"More places\" / \"More businesses\" control — Google's expanded Local Finder for the query. Returned only alongside `localResults` when the SERP renders the control."
},
"relatedSearches": {
"type": "array",
"description": "Related search suggestions",
"items": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Related search query"
},
"link": {
"type": "string",
"description": "Google search URL for the related query"
}
}
}
},
"ads": {
"type": "array",
"description": "Sponsored ad results from Google search, including text ads (`type: RESULT`) and shopping-style sponsored cards (`type: SHOPPING_CARD`) from the right-hand-side and top-of-page carousels.",
"items": {
"type": "object",
"properties": {
"position": {
"type": "number",
"description": "Position within the ad block (1-indexed)"
},
"blockPosition": {
"type": "string",
"enum": [
"top",
"bottom",
"middle",
"rhs"
],
"description": "Where the ad appeared on the SERP. `top`/`bottom` are text-ad blocks, `middle` covers direct/in-content ads, `rhs` is the right-hand-side sponsored-products carousel."
},
"type": {
"type": "string",
"enum": [
"RESULT",
"SHOPPING_CARD"
],
"description": "Discriminates plain text ads (`RESULT`) from shopping-style sponsored cards (`SHOPPING_CARD`). Shopping cards appear in the right-hand-side PLA carousel, the top-of-page PLA carousel, and the top-of-page sponsored shopping-card carousels (vehicles, products, hotels, …)."
},
"title": {
"type": "string",
"description": "Ad title"
},
"url": {
"type": "string",
"format": "uri",
"description": "Destination URL of the ad. For `type: SHOPPING_CARD` items this is a Google `aclk?`-redirected URL."
},
"page": {
"type": "number",
"description": "Page number where the ad was found"
},
"displayedUrl": {
"type": "string",
"description": "Formatted URL as displayed in the ad"
},
"domain": {
"type": "string",
"description": "Domain name of the advertiser"
},
"description": {
"type": "string",
"description": "Ad description text. For `type: RESULT` items this is classic ad copy. For `type: SHOPPING_CARD` items it carries category-specific subtitle fragments joined with `·` (e.g. vehicle condition + city: `Used - 94k miles · Greeley`)."
},
"category": {
"type": "string",
"description": "Carousel header label for shopping-card ads. Examples observed today include `Sponsored products`, `Sponsored vehicles`, and `Sponsored hotels`. Omitted for `type: RESULT` text ads."
},
"price": {
"type": "object",
"description": "Product price for `type: SHOPPING_CARD` ads. `currency` and `raw` are always present; `value` is omitted when the number doesn't parse, and the whole object is omitted when no currency appears beside a number. `raw` carries the visible text verbatim (e.g. `\"$0 down with 24 monthly payments\"` on installment offers) so consumers can disambiguate genuine zero prices from down-payment labels.",
"properties": {
"value": {
"type": "number",
"description": "Numeric price value"
},
"currency": {
"type": "string",
"description": "Currency symbol"
},
"raw": {
"type": "string",
"description": "Visible price text verbatim"
}
}
},
"oldPrice": {
"type": "object",
"description": "Original price before discount on `type: SHOPPING_CARD` ads that surface MSRP / sale messaging. Same shape as `price`.",
"properties": {
"value": {
"type": "number",
"description": "Numeric price value"
},
"currency": {
"type": "string",
"description": "Currency symbol"
},
"raw": {
"type": "string",
"description": "Visible price text verbatim"
}
}
},
"store": {
"type": "string",
"description": "Merchant/dealer name attached to a `type: SHOPPING_CARD` ad."
},
"imageUrl": {
"type": "string",
"format": "uri",
"description": "Hero image URL served by Google's `encrypted-tbn` CDN for `type: SHOPPING_CARD` ads. Omitted when the lazy-image chain cannot resolve a non-placeholder source."
},
"sitelinks": {
"type": "array",
"description": "Sitelinks displayed under the ad",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Sitelink URL"
},
"title": {
"type": "string",
"description": "Sitelink title"
},
"description": {
"type": "string",
"description": "Sitelink description"
}
}
}
}
}
}
},
"aioverview": {
"oneOf": [
{
"type": "object"
},
{
"type": "null"
}
],
"description": "Google AI Overview data (if requested). Omitted when Google shows no AI Overview for the query.",
"properties": {
"sources": {
"type": "array",
"description": "Sources referenced in the AI Overview",
"items": {
"type": "object",
"properties": {
"position": {
"type": "number",
"description": "1-based position index of the source"
},
"url": {
"type": "string",
"description": "Source URL"
},
"label": {
"type": "string",
"description": "Source title (the display label Google renders on the source rail)"
},
"description": {
"type": "string",
"description": "Source description / snippet"
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
},
"citationPills": {
"type": "array",
"description": "Inline citation pills extracted from the AI Overview answer. Each entry is one (pill, source) pair: when a pill cites N sources (Google's `[Label +N]` chips), the array contains N entries sharing the same `citationPillId` but carrying per-source `label`, `url`, and `domain`. Group by `citationPillId` to recover the pill-level structure. Omitted from `result.aioverview` when the answer carries no pills.",
"items": {
"type": "object",
"required": [
"label",
"citationPillId",
"url",
"domain",
"position"
],
"properties": {
"label": {
"type": "string",
"description": "Per-source title from the sources rail (for example `\"Chase Personal Credit Cards\"`). Empty string when the rail has no title for this source — consumers should read `domain` / `url` for source identity in that case. Entries grouped under the same `citationPillId` carry different per-source labels."
},
"citationPillId": {
"type": "integer",
"description": "1-based ordinal shared by all entries from the same chip. Group by `citationPillId` to reconstruct the visible chip; the per-source `label` differs across entries within a chip."
},
"url": {
"type": "string",
"description": "Direct URL of the cited source."
},
"domain": {
"type": "string",
"description": "Host extracted from `url`, for grouping and display."
},
"description": {
"type": "string",
"description": "Source description from the sources rail when Google ships one. Omitted when the source carries no snippet."
},
"position": {
"type": "integer",
"description": "1-based position of this source in the sibling `result.aioverview.sources` array."
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
},
"relatedLinks": {
"type": "array",
"description": "A citation chip's \"View related links\" flyout items — URLs Google groups under the chip that are NOT in the `sources` rail (for example a Google Shopping comparison link). Each entry shares the `citationPillId` of its chip so it can be grouped with that chip's `citationPills`, but carries no `position` (a related link is absent from `sources`). Related links also render inline in `markdown`, so `markdown` may contain more URLs than `sources` / `citationPills` — the extras are accounted for here. Omitted from `result.aioverview` when no chip carries related links.",
"items": {
"type": "object",
"required": [
"label",
"citationPillId",
"url",
"domain"
],
"properties": {
"label": {
"type": "string",
"description": "The related page's own title. Empty string when Google ships none — read `domain` / `url` for identity in that case."
},
"citationPillId": {
"type": "integer",
"description": "Matches the `citationPillId` of the chip's `citationPills` entries, so a related link can be grouped with its pill."
},
"url": {
"type": "string",
"description": "Direct URL of the related link."
},
"domain": {
"type": "string",
"description": "Host extracted from `url`, for grouping and display."
},
"description": {
"type": "string",
"description": "Snippet Google ships for the related link. Omitted when absent."
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
},
"text": {
"type": "string",
"description": "AI Overview text content"
},
"markdown": {
"type": "string",
"description": "AI Overview content formatted as markdown (if requested)"
},
"videos": {
"type": "array",
"description": "Video content included in the AI Overview",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Direct URL to the video"
},
"title": {
"type": "string",
"description": "Video title"
},
"thumbnail": {
"type": "string",
"format": "uri",
"description": "Thumbnail image URL"
},
"source": {
"type": "string",
"description": "Channel or source name"
},
"platform": {
"type": "string",
"description": "Video platform"
},
"date": {
"type": "string",
"description": "Upload date"
},
"duration": {
"type": "string",
"description": "Video duration"
},
"redirectLink": {
"type": "string",
"description": "Google's `/goto` redirect for this link, in the absolute form `POST /v1/monitor/google/goto` accepts. Present only when Google served the link as a redirect — the sibling link field holds the destination cloro resolved it to."
}
}
}
},
"places": {
"type": "array",
"description": "Place cards in the AI Overview answer. Omitted when the answer has none.",
"items": {
"$ref": "#/$defs/GooglePlace"
}
},
"map": {
"type": "array",
"description": "The place cards that Google geo-tagged, with coordinates. Omitted when the answer has none.",
"items": {
"$ref": "#/$defs/GoogleMapPlace"
}
},
"ads": {
"type": "array",
"description": "Sponsored ads injected by Google inside the AI Overview",
"items": {
"type": "object",
"required": [
"position",
"title",
"url",
"type"
],
"properties": {
"position": {
"type": "number",
"description": "Position of the ad (1-indexed)"
},
"title": {
"type": "string",
"description": "Ad title"
},
"url": {
"type": "string",
"description": "Ad destination URL"
},
"type": {
"type": "string",
"enum": [
"TEXT",
"SHOPPING"
],
"description": "Sub-type discriminator. TEXT ads carry `domain` + `description`; SHOPPING ads carry `price` + `store` (+ optional `old_price`). Always present."
},
"domain": {
"type": "string",
"description": "Domain name of the advertiser (present when `type` is `TEXT`)"
},
"description": {
"type": "string",
"description": "Ad description text (present when `type` is `TEXT`)"
},
"price": {
"type": "object",
"description": "Product price (present when `type` is `SHOPPING`). `currency` and `raw` are always present; `value` is omitted when the number doesn't parse, and the whole object is omitted when no currency appears beside a number. `raw` carries the visible text verbatim.",
"properties": {
"value": {
"type": "number",
"description": "Numeric price value"
},
"currency": {
"type": "string",
"description": "Currency symbol"
},
"raw": {
"type": "string",
"description": "Visible price text verbatim"
}
}
},
"old_price": {
"type": "object",
"description": "Original price before discount (present when `type` is `SHOPPING` and the ad has sale pricing). Same shape as `price`.",
"properties": {
"value": {
"type": "number",
"description": "Numeric price value"
},
"currency": {
"type": "string",
"description": "Currency symbol"
},
"raw": {
"type": "string",
"description": "Visible price text verbatim"
}
}
},
"store": {
"type": "string",
"description": "Retailer name (present when `type` is `SHOPPING`)"
},
"image": {
"type": "string",
"description": "Ad image URL (product photo for shopping ads, hero image for text ads)"
}
}
}
}
}
},
"shoppingCards": {
"type": "array",
"description": "Shopping product cards extracted from the SERP's organic shopping grids (\"Popular products\" / \"More products\"). The field is omitted from `result` when no shopping section is present, so clients should treat it as optional rather than expecting an empty array. Cards carry no product URL: they open a Google-side overlay rather than an external page.",
"items": {
"type": "object",
"required": [
"title",
"position"
],
"properties": {
"title": {
"type": "string",
"description": "Product title"
},
"position": {
"type": "integer",
"description": "1-indexed rank across the whole `shoppingCards` array in DOM order (flat, does not reset per `category` section)."
},
"promoLabel": {
"type": "string",
"description": "Discount badge as displayed by Google, in the SERP language (for example \"LOW PRICE\", \"OFERTA\", \"PROMOÇÃO\", \"20% OFF\"). Google renders it above the product name on a discounted card. Present only on a card that carries the badge, and Google-only — AI Mode does not render it."
},
"category": {
"type": "string",
"description": "Parent section header text. Lets callers distinguish
# --- truncated at 32 KB (64 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cloro-dev/refs/heads/main/json-schema/cloro-dev-google-monitor-response-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/cloro-dev-google-monitor-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.