PDP by URL
Direct flow for extracting accommodation details.
{
"url": "https://www.airbnb.com.br/rooms/1501379416546185177?adults=2&check_in=2026-02-20&check_out=2026-02-22",
"target": "airbnb.com.br",
"type": "pdp"
} // docs
Extracts detailed data from an accommodation page in Airbnb.
airbnb.com.br:pdp · 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.airbnb.com.br/rooms/1501379416546185177?adults=2&check_in=2026-02-20&check_out=2026-02-22",
"target": "airbnb.com.br",
"type": "pdp"
}' 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": "airbnb_com_br_pdp",
"arguments": {
"url": "https://www.airbnb.com.br/rooms/1501379416546185177?adults=2&check_in=2026-02-20&check_out=2026-02-22",
"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) | Required | URL of accommodation Airbnb (ex: /rooms/{listingId}). | - | https://www.airbnb.com.br/rooms/1501379416546185177?adults=2&check_in=2026-02-20&check_out=2026-02-22 |
| target Target source for extraction. | enum | Required | Always mandatory in the payload and must be airbnb.com.br. | - | airbnb.com.br |
| type Extraction type: pdp, idp, plp, ilp, quote, review or places. | enum | Required | Always mandatory in the payload and must be pdp. | - | pdp |
| startDate Start date of stay for Airbnb (alias of checkinDate in backend). | string (YYYY-MM-DD) | Optional | Optional to define check-in in the page context. | - | 2026-03-01 |
| endDate End of stay date for Airbnb (alias of checkoutDate in backend). | string (YYYY-MM-DD) | Optional | Optional to define checkout in the page context. | - | 2026-03-02 |
| checkinDate Check-in date for Booking PDP/PLP, Hoteis.com PDP/PLP and Trivago PDP/PLP. | string (YYYY-MM-DD) | Conditional | Alias of startDate; use one or the other. | - | 2026-03-01 |
| checkoutDate Checkout date for Booking PDP/PLP, Hoteis.com PDP/PLP and Trivago PDP/PLP. Must be greater than checkinDate. | string (YYYY-MM-DD) | Conditional | Alias of endDate; use one or the other. | - | 2026-03-02 |
| numAdults Quantity of adults for Booking, Airbnb, Hoteis.com, Trivago, Decolar, GOL, Azul, LATAM and Trip.com. | integer (1-30) | Optional | Optional for occupation context. | 2 | 2 |
Direct flow for extracting accommodation details.
{
"url": "https://www.airbnb.com.br/rooms/1501379416546185177?adults=2&check_in=2026-02-20&check_out=2026-02-22",
"target": "airbnb.com.br",
"type": "pdp"
} 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.requestUrl": "string",
"data.extractedAt": "string (iso datetime)",
"data.data.url": "string",
"data.data.listingId": "string",
"data.data.startDate": "string (YYYY-MM-DD)",
"data.data.endDate": "string (YYYY-MM-DD)",
"data.data.numAdults": "number",
"data.data.name": "string",
"data.data.title": "string",
"data.data.propertyType": "string",
"data.data.city": "string",
"data.data.latitude": "number",
"data.data.longitude": "number",
"data.data.personCapacity": "number",
"data.data.roomType": "string",
"data.data.isSuperhost": "boolean",
"data.data.aggregateRating.rating": "number",
"data.data.aggregateRating.reviewCount": "number",
"data.data.mainImage.url": "string",
"data.data.image[].url": "string",
"data.data.description": "string",
"data.data.badges[]": "string",
"data.data.highlights[]": "string",
"data.data.amenities[]": "string",
"data.data.host.name": "string",
"data.data.host.isSuperhost": "boolean",
"data.data.host.avatarUrl": "string",
"data.data.host.highlights[]": "string",
"data.data.cancellationPolicy": "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": "aaaa1111-1111-4111-8111-aaaaaaaaaaaa",
"executionId": "aaaa2222-2222-4222-8222-aaaaaaaaaaaa",
"data": {
"source": "airbnb.com.br",
"type": "pdp",
"requestUrl": "https://www.airbnb.com.br/rooms/1501379416546185177",
"extractedAt": "2026-02-17T20:30:00.000Z",
"data": {
"url": "https://www.airbnb.com.br/rooms/1501379416546185177",
"listingId": "1501379416546185177",
"startDate": "2026-02-20",
"endDate": "2026-02-22",
"numAdults": 2,
"name": "Loft elegante no centro de Curitiba",
"title": "Loft elegante no centro de Curitiba",
"propertyType": "Apartamento inteiro",
"city": "Curitiba",
"latitude": -25.4294,
"longitude": -49.2719,
"personCapacity": 2,
"roomType": "Entire home/apt",
"isSuperhost": true,
"aggregateRating": {
"rating": 4.95,
"reviewCount": 87
},
"mainImage": {
"url": "https://a0.muscache.com/im/pictures/sample/main.jpg"
},
"image": [
{
"url": "https://a0.muscache.com/im/pictures/sample/main.jpg"
},
{
"url": "https://a0.muscache.com/im/pictures/sample/room.jpg"
}
],
"description": "Loft moderno com cozinha equipada, wifi rapido e localizacao central.",
"badges": [
"Superhost",
"Preferido dos hospedes"
],
"highlights": [
"2 hospedes",
"1 quarto",
"1 cama",
"1 banheiro"
],
"amenities": [
"Wi-Fi",
"Cozinha",
"Ar-condicionado",
"Smart TV"
],
"host": {
"name": "Camila",
"isSuperhost": true,
"avatarUrl": "https://a0.muscache.com/im/pictures/user/avatar.jpg",
"highlights": [
"10 anos hospedando",
"Resposta rapida"
]
},
"cancellationPolicy": "Cancelamento gratuito ate 48 horas antes do check-in"
}
}
} | Path | Type | Description | Example |
|---|---|---|---|
| data.data.aggregateRating.rating | number | Field data.data.aggregateRating.rating returned in the response payload. | 4.95 |
| data.data.aggregateRating.reviewCount | number | Field data.data.aggregateRating.reviewCount returned in the response payload. | 87 |
| data.data.amenities[] | string | Field data.data.amenities[] returned in the response payload. | Wi-Fi |
| data.data.badges[] | string | data.data.badges[] field returned in the response payload. | Superhost |
| data.data.cancellationPolicy | string | Field data.data.cancellationPolicy returned in the response payload. | Cancelamento gratuito ate 48 horas antes do check-in |
| data.data.city | string | Field data.data.city returned in the response payload. | Curitiba |
| data.data.description | string | Field data.data.description returned in the response payload. | Loft moderno com cozinha equipada, wifi rapido e localizacao central. |
| data.data.endDate | string (YYYY-MM-DD) | Field data.data.endDate returned in the response payload. | 2026-02-22 |
| data.data.highlights[] | string | data.data.highlights[] field returned in the response payload. | 2 hospedes |
| data.data.host.avatarUrl | string | Field data.data.host.avatarUrl returned in the response payload. | https://a0.muscache.com/im/pictures/user/avatar.jpg |
| data.data.host.highlights[] | string | Field data.data.host.highlights[] returned in the response payload. | 10 anos hospedando |
| data.data.host.isSuperhost | boolean | data.data.host.isSuperhost field returned in the response payload. | true |
| data.data.host.name | string | Field data.data.host.name returned in the response payload. | Camila |
| data.data.image[].url | string | Field data.data.image[].url returned in the response payload. | https://a0.muscache.com/im/pictures/sample/main.jpg |
| data.data.isSuperhost | boolean | Field data.data.isSuperhost returned in the response payload. | true |
| data.data.latitude | number | Field data.data.latitude returned in the response payload. | -25.4294 |
| data.data.listingId | string | Field data.data.listingId returned in the response payload. | 1501379416546185177 |
| data.data.longitude | number | data.data.longitude field returned in the response payload. | -49.2719 |
| data.data.mainImage.url | string | Field data.data.mainImage.url returned in the response payload. | https://a0.muscache.com/im/pictures/sample/main.jpg |
| data.data.name | string | Field data.data.name returned in the response payload. | Loft elegante no centro de Curitiba |
| data.data.numAdults | number | Field data.data.numAdults returned in the response payload. | 2 |
| data.data.personCapacity | number | Field data.data.personCapacity returned in the response payload. | 2 |
| data.data.propertyType | string | data.data.propertyType field returned in the response payload. | Apartamento inteiro |
| data.data.roomType | string | Field data.data.roomType returned in the response payload. | Entire home/apt |
| data.data.startDate | string (YYYY-MM-DD) | Field data.data.startDate returned in the response payload. | 2026-02-20 |
| data.data.title | string | data.data.title field returned in the response payload. | Loft elegante no centro de Curitiba |
| data.data.url | string | Field data.data.url returned in the response payload. | https://www.airbnb.com.br/rooms/1501379416546185177 |
| data.extractedAt | string (iso datetime) | data.extractedAt field returned in the response payload. | 2026-02-17T20:30:00.000Z |
| data.requestUrl | string | Same value as `data.data.url`; never exposes the queried internal endpoint. | https://www.airbnb.com.br/rooms/1501379416546185177 |
| data.source | string | Field data.source returned in the response payload. | airbnb.com.br |
| data.type | string | Field data.type returned in the response payload. | pdp |
| executionId | string (uuid) | Field executionId returned in the response payload. | aaaa2222-2222-4222-8222-aaaaaaaaaaaa |
| 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. | aaaa1111-1111-4111-8111-aaaaaaaaaaaa |
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. |