PLP by URL
Informs the public URL of the search for Magalu and pages explicitly.
{
"url": "https://www.magazineluiza.com.br/busca/iphone-15-pro-max/",
"target": "magazineluiza.com.br",
"type": "plp",
"page": 2
} // docs
Extracts structured product listing (PLP) from Magalu, with pagination.
magazineluiza.com.br: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 '{
"url": "https://www.magazineluiza.com.br/busca/iphone-15-pro-max/",
"target": "magazineluiza.com.br",
"type": "plp",
"page": 2
}' 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": "magazineluiza_com_br_plp",
"arguments": {
"url": "https://www.magazineluiza.com.br/busca/iphone-15-pro-max/",
"page": 2,
"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 |
|---|---|---|---|---|---|
| url URL extraction target. For some PLPs it can be omitted when API assembles URL from other fields. | string (URL) | Conditional | Mandatory only when keyword is not sent. | - | https://www.magazineluiza.com.br/busca/iphone-15-pro-max/ |
| 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 | Conditional | Mandatory when url is not sent. | - | iphone 15 pro max |
| priceMin Minimum price for PLP searches for properties and vehicles. | integer | Optional | Minimum price in whole reais; internally converted to cents and reflected in the public URL (filters=price---min:max). | - | 400 |
| priceMax Maximum price for PLP searches for properties and vehicles. | integer | Optional | Maximum price in whole reais; internally converted to cents; when absent, API uses 9000000 cents. | - | 600 |
| target Target source for extraction. | enum | Required | Always mandatory in the payload and must match the operation. | - | magazineluiza.com.br |
| type Extraction type: pdp, idp, plp, ilp, quote, review or places. | enum | Required | Always mandatory in the payload and must match the operation. | - | 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 | Supported for PLP; must be integer >= 1. | - | 2 |
Informs the public URL of the search for Magalu and pages explicitly.
{
"url": "https://www.magazineluiza.com.br/busca/iphone-15-pro-max/",
"target": "magazineluiza.com.br",
"type": "plp",
"page": 2
} Gateway assembles the URL automatically from the keyword.
{
"keyword": "iphone 15 pro max",
"target": "magazineluiza.com.br",
"type": "plp",
"page": 1
} Search for keyword with minimum and maximum price.
{
"keyword": "iphone",
"target": "magazineluiza.com.br",
"type": "plp",
"page": 1,
"priceMin": 400,
"priceMax": 600
} 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.page": "number",
"data.totalPages": "number",
"data.resultsPerPage": "number",
"data.offset": "number",
"data.nextPage": "number",
"data.nextPageUrl": "string",
"data.items[].url": "string",
"data.items[].sku": "string",
"data.items[].name": "string",
"data.items[].brand": "string",
"data.items[].currency": "string",
"data.items[].currencyRaw": "string",
"data.items[].price": "number",
"data.items[].cashPrice": "number",
"data.items[].regularPrice": "number",
"data.items[].aggregateRating.rating": "number",
"data.items[].aggregateRating.reviewCount": "number",
"data.items[].sellerId": "string",
"data.items[].sellerName": "string",
"data.items[].thumbnail": "string"
} 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": "33333333-1111-4111-8111-333333333333",
"executionId": "33333333-2222-4222-8222-333333333333",
"data": {
"source": "magazineluiza.com.br",
"type": "plp",
"url": "https://www.magazineluiza.com.br/busca/iphone-15-pro-max/",
"requestUrl": "https://www.magazineluiza.com.br/busca/iphone-15-pro-max/",
"extractedAt": "2026-04-08T19:45:00.000Z",
"query": "iphone 15 pro max",
"page": 2,
"totalPages": 5,
"resultsPerPage": 10,
"offset": 10,
"nextPage": 3,
"nextPageUrl": "https://www.magazineluiza.com.br/busca/iphone-15-pro-max/?page=3",
"items": [
{
"url": "https://www.magazineluiza.com.br/apple-iphone-15-128gb-azul-61-48mp-ios-5g/p/238034800/te/ip15/?seller_id=magazineluiza",
"sku": "238034800",
"name": "Apple iPhone 15 128GB Azul 6,1\" 48MP iOS 5G",
"brand": "Apple",
"currency": "BRL",
"currencyRaw": "R$",
"price": 4776.67,
"cashPrice": 4299,
"regularPrice": 7299,
"aggregateRating": {
"rating": 4.9,
"reviewCount": 3951
},
"sellerId": "magazineluiza",
"sellerName": "Magalu",
"thumbnail": "https://a-static.mlcdn.com.br/1000x1000/sample.jpg"
}
]
}
} | Path | Type | Description | Example |
|---|---|---|---|
| data.extractedAt | string (iso datetime) | data.extractedAt field returned in the response payload. | 2026-04-08T19:45:00.000Z |
| data.items[].aggregateRating.rating | number | Field data.items[].aggregateRating.rating returned in the response payload. | 4.9 |
| data.items[].aggregateRating.reviewCount | number | Field data.items[].aggregateRating.reviewCount returned in the response payload. | 3951 |
| data.items[].brand | string | Field data.items[].brand returned in the response payload. | Apple |
| data.items[].cashPrice | number | Field data.items[].cashPrice returned in the response payload. | 4299 |
| data.items[].currency | string | data.items[].currency field returned in the response payload. | BRL |
| data.items[].currencyRaw | string | Field data.items[].currencyRaw returned in the response payload. | R$ |
| data.items[].name | string | data.items[].name field returned in the response payload. | Apple iPhone 15 128GB Azul 6,1" 48MP iOS 5G |
| data.items[].price | number | Field data.items[].price returned in the response payload. | 4776.67 |
| data.items[].regularPrice | number | Field data.items[].regularPrice returned in the response payload. | 7299 |
| data.items[].sellerId | string | Field data.items[].sellerId returned in the response payload. | magazineluiza |
| data.items[].sellerName | string | Field data.items[].sellerName returned in the response payload. | Magalu |
| data.items[].sku | string | Field data.items[].sku returned in the response payload. | 238034800 |
| data.items[].thumbnail | string | Field data.items[].thumbnail returned in the response payload. | https://a-static.mlcdn.com.br/1000x1000/sample.jpg |
| data.items[].url | string | data.items[].url field returned in the response payload. | https://www.magazineluiza.com.br/apple-iphone-15-128gb-azul-61-48mp-ios-5g/p/238034800/te/ip15/?seller_id=magazineluiza |
| data.nextPage | number | Field data.nextPage returned in the response payload. | 3 |
| data.nextPageUrl | string | Field data.nextPageUrl returned in the response payload. | https://www.magazineluiza.com.br/busca/iphone-15-pro-max/?page=3 |
| data.offset | number | Field data.offset returned in the response payload. | 10 |
| data.page | number | Field data.page returned in the response payload. | 2 |
| data.query | string | data.query field returned in the response payload. | iphone 15 pro max |
| data.requestUrl | string | Same value as `data.url`; never exposes the queried internal endpoint. | https://www.magazineluiza.com.br/busca/iphone-15-pro-max/ |
| data.resultsPerPage | number | Field data.resultsPerPage returned in the response payload. | 10 |
| data.source | string | Field data.source returned in the response payload. | magazineluiza.com.br |
| data.totalPages | number | Field data.totalPages returned in the response payload. | 5 |
| 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.magazineluiza.com.br/busca/iphone-15-pro-max/ |
| executionId | string (uuid) | ID execution code for tracing and deduplication. | 33333333-2222-4222-8222-333333333333 |
| 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) | ID unique to the request at the gateway. | 33333333-1111-4111-8111-333333333333 |
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. |