Search Google - first page
Recommended flow; the backend assembles the search URL automatically from the query.
{
"keyword": "Royal Imóveis Rj",
"target": "google.com",
"type": "plp",
"page": 1
} // docs
Extracts organic results from Google Search by keyword, with fixed geolocation in Brazil and pagination per page.
google.com:plp · 1 credit per request
Standard credit cost. Your account pricing is shown in the sandbox.
Try this operation in the sandboxcurl -X POST https://api.geckoapi.com.br/v1/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keyword": "Royal Imóveis Rj",
"target": "google.com",
"type": "plp",
"page": 1
}' Keep your API key on your server. See the quickstart for authentication and response handling.
The hosted MCP tool fixes target and type for this operation. Its remaining arguments use the same input rules as Extract.
POST /v1/mcp · Bearer or X-API-Key authentication
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "google_com_plp",
"arguments": {
"keyword": "Royal Imóveis Rj",
"page": 1,
"executionId": "exec_example_123"
}
}
} Conditional fields depend on the alternatives and constraints in the rule column. Fields marked unsupported are omitted.
| Field | Type | Requirement | Rule | Default | Example |
|---|---|---|---|---|---|
| keyword Keyword for PLP searches. In Google Search it represents the query sent to Google; in Booking PLP is mandatory; in other PLPs it can replace URL. | string | Required | Mandatory. Represents the query sent to Google Search. | - | Royal Imóveis Rj |
| target Target source for extraction. | enum | Required | Always mandatory in the payload and must be google.com. | - | google.com |
| type Extraction type: pdp, idp, plp, ilp, quote, review or places. | enum | Required | Always mandatory in the payload and must be plp. | - | plp |
| page Pagination. In PLP, including Trivago, and in Reclame AQUI ILP starts in 1; in review (MercadoLivre, Booking and Hotels) starts in 0. The Reclame AQUI ILP even accepts the page 100. | integer | Optional | Organic search page (entire >= 1). | 1 | 1 |
Recommended flow; the backend assembles the search URL automatically from the query.
{
"keyword": "Royal Imóveis Rj",
"target": "google.com",
"type": "plp",
"page": 1
} Organic search on the second page, maintaining Brazil geolocation.
{
"keyword": "apartamento curitiba pr",
"target": "google.com",
"type": "plp",
"page": 2
} Leaf paths and expected types. Field names and enum values are part of the API contract.
{
"requestId": "string (uuid)",
"executionId": "string (uuid)",
"notFound": "boolean (optional; true when the upstream entity was not found and data is null)",
"data.source": "string",
"data.type": "string",
"data.url": "string",
"data.requestUrl": "string",
"data.extractedAt": "string (iso datetime)",
"data.query": "string",
"data.displayedQuery": "string | null",
"data.searchedQuery": "string | null",
"data.geolocation": "string",
"data.device": "string",
"data.page": "number",
"data.resultsPerPage": "number",
"data.offset": "number",
"data.primaryResults": "number",
"data.totalResults": "number | null",
"data.nextPage": "number | null",
"data.nextPageUrl": "string | null",
"data.items[].position": "number",
"data.items[].rank": "number | null",
"data.items[].title": "string | null",
"data.items[].description": "string | null",
"data.items[].url": "string",
"data.items[].displayedUrl": "string | null",
"data.items[].domain": "string | null"
} Illustrative response. Product names, reviews and other source content retain their original language. Missing and null values do not imply zero stock, free shipping or zero reviews.
{
"requestId": "99999999-1111-4111-8111-999999999999",
"executionId": "99999999-2222-4222-8222-999999999999",
"data": {
"source": "google.com",
"type": "plp",
"url": "https://www.google.com/search?q=Royal+Im%C3%B3veis+Rj",
"requestUrl": "https://www.google.com/search?q=Royal+Im%C3%B3veis+Rj",
"extractedAt": "2026-03-21T14:44:36Z",
"query": "Royal Imóveis Rj",
"displayedQuery": "Royal Imóveis Rj",
"searchedQuery": "Royal Imóveis Rj",
"geolocation": "BR",
"device": "desktop",
"page": 1,
"resultsPerPage": 6,
"offset": 0,
"primaryResults": 6,
"totalResults": 1090000,
"nextPage": 2,
"nextPageUrl": "https://www.google.com/search?q=Royal+Im%C3%B3veis+Rj&start=10",
"items": [
{
"position": 1,
"rank": 1,
"title": "Royal Imóveis RJ",
"description": "Unidade Freguesia de Jacarepaguá. Estrada dos Três Rios, 1097. - Loja G. Freguesia de Jacarepaguá. Rio de Janeiro/RJ.",
"url": "https://www.royalimoveisrj.com.br/",
"displayedUrl": "https://www.royalimoveisrj.com.br",
"domain": "royalimoveisrj.com.br"
},
{
"position": 2,
"rank": 2,
"title": "Royal Imóveis RJ (@royalimoveisrj)",
"description": "6.1K+ followers · 918 posts · Imobiliária ⭐ A mais avaliada no Google Compra, Venda, Locação e Administração de imóveis Freguesia - JPA Creci J- ...",
"url": "https://www.instagram.com/royalimoveisrj/",
"displayedUrl": "Mais de 6,1 mil seguidores",
"domain": "instagram.com"
},
{
"position": 3,
"rank": 3,
"title": "Royal Imóveis Rj",
"description": "Somos a imobiliária que é a cara de Jacarepaguá. Atuamos de forma única, envolvendo compra, venda e avaliação de imóveis residenciais. A Royal Imóveis RJ ...",
"url": "https://www.zapimoveis.com.br/imobiliaria/655356/",
"displayedUrl": "https://www.zapimoveis.com.br › imobiliaria",
"domain": "zapimoveis.com.br"
}
]
}
} | Path | Type | Description | Example |
|---|---|---|---|
| data.device | string | Field data.device returned in the response payload. | desktop |
| data.displayedQuery | string | null | Field data.displayedQuery returned in the response payload. | Royal Imóveis Rj |
| data.extractedAt | string (iso datetime) | data.extractedAt field returned in the response payload. | 2026-03-21T14:44:36Z |
| data.geolocation | string | data.geolocation field returned in the response payload. | BR |
| data.items[].description | string | null | Field data.items[].description returned in the response payload. | Unidade Freguesia de Jacarepaguá. Estrada dos Três Rios, 1097. - Loja G. Freguesia de Jacarepaguá. Rio de Janeiro/RJ. |
| data.items[].displayedUrl | string | null | data.items[].displayedUrl field returned in the response payload. | https://www.royalimoveisrj.com.br |
| data.items[].domain | string | null | Field data.items[].domain returned in the response payload. | royalimoveisrj.com.br |
| data.items[].position | number | data.items[].position field returned in the response payload. | 1 |
| data.items[].rank | number | null | data.items[].rank field returned in the response payload. | 1 |
| data.items[].title | string | null | Field data.items[].title returned in the response payload. | Royal Imóveis RJ |
| data.items[].url | string | data.items[].url field returned in the response payload. | https://www.royalimoveisrj.com.br/ |
| data.nextPage | number | null | Field data.nextPage returned in the response payload. | 2 |
| data.nextPageUrl | string | null | Field data.nextPageUrl returned in the response payload. | https://www.google.com/search?q=Royal+Im%C3%B3veis+Rj&start=10 |
| data.offset | number | Field data.offset returned in the response payload. | 0 |
| data.page | number | Field data.page returned in the response payload. | 1 |
| data.primaryResults | number | Field data.primaryResults returned in the response payload. | 6 |
| data.query | string | data.query field returned in the response payload. | Royal Imóveis Rj |
| data.requestUrl | string | Same value as `data.url`; never exposes the queried internal endpoint. | https://www.google.com/search?q=Royal+Im%C3%B3veis+Rj |
| data.resultsPerPage | number | Field data.resultsPerPage returned in the response payload. | 6 |
| data.searchedQuery | string | null | data.searchedQuery field returned in the response payload. | Royal Imóveis Rj |
| data.source | string | Field data.source returned in the response payload. | google.com |
| data.totalResults | number | null | Field data.totalResults returned in the response payload. | 1090000 |
| data.type | string | Field data.type returned in the response payload. | plp |
| data.url | string | Field data.url returned in the response payload. | https://www.google.com/search?q=Royal+Im%C3%B3veis+Rj |
| executionId | string (uuid) | Field executionId returned in the response payload. | 99999999-2222-4222-8222-999999999999 |
| notFound | boolean (optional; true when the upstream entity was not found and data is null) | Present and true when the upstream entity was not found. In this case data is null and the request still completes successfully. | N/A |
| requestId | string (uuid) | Field requestId returned in the response payload. | 99999999-1111-4111-8111-999999999999 |
When supported by this operation, an entity not found upstream can return HTTP 200 with data: null and notFound: true. Check the documented response fields before interpreting an empty result. Source-specific behavior and exceptions are described above.
| HTTP status | Error code | Meaning |
|---|---|---|
| 400 | INVALID_PAYLOAD | Invalid JSON or a request that violates the documented validation rules. |
| 401 | UNAUTHORIZED | Missing authorization or an invalid API key or token. |
| 402 | INSUFFICIENT_CREDITS | The account has insufficient credits for this operation. |
| 403 | FORBIDDEN | The account does not have access, or the API is temporarily disabled. |
| 409 | EXECUTION_CONFLICT | The execution identifier conflicts with an incompatible execution state. |
| 429 | RATE_LIMIT_EXCEEDED / TOO_MANY_INFLIGHT_REQUESTS | A rate limit or simultaneous request limit was exceeded. |
| 5xx | UPSTREAM_TIMEOUT / UPSTREAM_HTTP_ERROR / WORKER_FUNCTION_ERROR | An upstream, worker or gateway failure. Failed requests follow the platform refund policy. |