Skip to content

// docs

Zapimoveis: Search listings

Extracts properties from ZAP by city/UF, neighborhood and property type, with optional keyword, area/price range and coordinates. The filters follow the ZAP's native search; Check the type and address returned when selecting comparables.

zapimoveis.com.br:plp · 1 credit per request

Standard credit cost. Your account pricing is shown in the sandbox.

Try this operation in the sandbox

HTTP request

cURL
curl -X POST https://api.geckoapi.com.br/v1/extract \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "target": "zapimoveis.com.br",
  "type": "plp",
  "city": "Curitiba",
  "state": "PR",
  "businessType": "rent",
  "page": 1
}'

Keep your API key on your server. See the quickstart for authentication and response handling.

MCP request

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

zapimoveis_com_br_plp · tools/call
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "zapimoveis_com_br_plp",
    "arguments": {
      "city": "Curitiba",
      "state": "PR",
      "businessType": "rent",
      "page": 1,
      "executionId": "exec_example_123"
    }
  }
}

Supported inputs

Conditional fields depend on the alternatives and constraints in the rule column. Fields marked unsupported are omitted.

FieldTypeRequirementRuleDefaultExample
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 Optional Optional textual search with the same behavior as the website. You can find words in the description; use propertyTypes to filter the property category. - vista livre
latitude
Latitude of the search area. It must be sent together with longitude. Supported in Airbnb PLP, Zap Imóveis PLP, VivaReal PLP, Chaves na Mão PLP and Webmotors PLP.
number Optional Optional together with longitude. Applies radius filter 2km around the point within the reported city/state. - -23.561399
longitude
Longitude of the search area. It must be sent together with latitude. Supported in Airbnb PLP, Zap Imóveis PLP, VivaReal PLP, Chaves na Mão PLP and Webmotors PLP.
number Optional Optional together with latitude. Applies radius filter 2km around the point within the reported city/state. - -46.65599
city
City used in structured searches for properties and vehicles and optionally in Catho PLP. In VivaReal, it requires state.
string Required Full name of the municipality in the entered UF, with or without accents. Accepts suffix of the same UF (e.g.: Criciúma-SC) and the spellings Sa-o Paulo and Nossa Sra da Glória. Unknown county or divergent UF returns 400. - Curitiba
neighborhood
Neighborhood used in ZAP Properties PLP, Chaves na Mão PLP and VivaReal PLP. Requires city + state when shipped.
string Optional Name of a neighborhood within the informed city/state (e.g.: Mirim or Pinheiros). Up to 120 characters, without commas or |. Uses the native localization of ZAP. The displayed address and enlarged results follow the source; Check the address and coordinates of each advertisement. - Mirim
state
UF used in structured searches for properties and vehicles and optionally in Catho PLP.
string (UF 2 letters) Required UF with 2 letters (ex: PR). - PR
businessType
Business type used in Zapimoveis, VivaReal and Chaves na Mão PLP to choose between sale and rent.
"sale" | "rent" Required Type of business. Supported values: sale or rent (synonyms sale/rent are also accepted in API). - rent
bedrooms
Room filter in real estate searches PLP. Accepts list of integers (ex: [2,3,4]).
integer[] Optional Room filter. Accepts list of integers (ex: [2,3,4]). - [2,3,4]
bathrooms
Bathroom filter in real estate searches PLP. Accepts list of integers (ex: [2,3,4]).
integer[] Optional Bathroom filter. Accepts list of integers (ex: [2,3,4]). - [2,3,4]
parkingSpots
Job filter in real estate searches PLP. Accepts list of integers (ex: [2,3,4]).
integer[] Optional Job filter. Accepts list of integers (ex: [2,3,4]). - [2,3,4]
propertyTypes
Property types for ZAP Properties, Chaves na Mão and VivaReal PLP. Accepted values depend on API; see specific rules below.
array<string | integer> Optional Property types: apartment, house, two_story_house, condominium, penthouse, kitnet, flat, land, farm, warehouse, commercial_point and commercial_room. Accepts array strings or CSV (max. 20 items), including aliases such as land, house, apartment and shed. Various types are combined with OU. Unknown values are rejected. Uses the native category of ZAP, independently of keyword. - ["land"]
priceMin
Minimum price for PLP searches for properties and vehicles.
integer Optional Minimum price. Must be integer >= 0. - 1000
priceMax
Maximum price for PLP searches for properties and vehicles.
integer Optional Maximum price. Must be integer >= 0 and >= priceMin when both are sent. - 2000
areaMin
Minimum area (m²) for real estate searches PLP.
integer Optional Minimum area in m² in the native usable area filter of ZAP. Integer >= 0. It is not a separate total area or land filter. - 750
areaMax
Maximum area (m²) for real estate searches PLP.
integer Optional Maximum area in m² in the ZAP native usable area filter. Integer >= 0 and >= areaMin when both are sent. Check attributes.usableAreas and attributes.totalAreas separately in the answer. - 2250
target
Target source for extraction.
enum Required Always mandatory and must be zapimoveis.com.br. - zapimoveis.com.br
type
Extraction type: pdp, idp, plp, ilp, quote, review or places.
enum Required Always mandatory 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 Paging 1-based (1 to 50). Page 50 is the last accessible page, even when totalResults is larger. Send the same filters when increasing page. nextPageUrl preserves the filters, but the public API continues to receive structured parameters, not url. 1 1

Request examples

PLP without keyword

Recommended flow: send city, state, businessType and page. keyword is optional.

PLP without keyword
{
  "target": "zapimoveis.com.br",
  "type": "plp",
  "city": "Curitiba",
  "state": "PR",
  "businessType": "rent",
  "page": 1
}

Land by neighborhood and area range

Use propertyTypes to filter the property category without relying on words in the description. neighborhood refines city/state. To search the entire city, omit neighborhood. Repeat the same filters and increase page to page.

Land by neighborhood and area range
{
  "target": "zapimoveis.com.br",
  "type": "plp",
  "city": "Imbituba",
  "state": "SC",
  "businessType": "sale",
  "propertyTypes": [
    "land"
  ],
  "neighborhood": "Mirim",
  "areaMin": 750,
  "areaMax": 2250,
  "page": 1
}

PLP with property filters

Example with filters for rooms, bathrooms, vacancies, price range and area.

PLP with property filters
{
  "target": "zapimoveis.com.br",
  "type": "plp",
  "city": "Curitiba",
  "state": "PR",
  "businessType": "rent",
  "bedrooms": [
    2,
    3,
    4
  ],
  "bathrooms": [
    2,
    3,
    4
  ],
  "parkingSpots": [
    2,
    3,
    4
  ],
  "priceMin": 1000,
  "priceMax": 2000,
  "areaMin": 80,
  "areaMax": 220,
  "page": 1
}

PLP with coordinate filter

Refines the search for city/state with latitude and longitude. The upstream applies a radius of 2km around the point.

PLP with coordinate filter
{
  "target": "zapimoveis.com.br",
  "type": "plp",
  "city": "Sao Paulo",
  "state": "SP",
  "businessType": "sale",
  "latitude": -23.561399,
  "longitude": -46.65599,
  "page": 1
}

More than one type of property with keyword

Matches apartments or houses with an independent textual search. keyword maintains the website's behavior and does not classify the property.

More than one type of property with keyword
{
  "target": "zapimoveis.com.br",
  "type": "plp",
  "city": "São Paulo",
  "state": "SP",
  "businessType": "sale",
  "propertyTypes": [
    "apartment",
    "house"
  ],
  "neighborhood": "Pinheiros",
  "keyword": "vista livre",
  "page": 1
}

Response schema

Leaf paths and expected types. Field names and enum values are part of the API contract.

responseSchema
{
  "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.parser": "\"1.0.0\"",
  "data.url": "string",
  "data.requestUrl": "string",
  "data.extractedAt": "string (iso datetime)",
  "data.keyword": "string",
  "data.query": "string",
  "data.city": "string",
  "data.citySlug": "string",
  "data.state": "string",
  "data.businessType": "string",
  "data.neighborhood": "string | null",
  "data.propertyTypes[]": "string",
  "data.latitude": "number | null",
  "data.longitude": "number | null",
  "data.searchId": "string",
  "data.totalResults": "number",
  "data.primaryResults": "number",
  "data.page": "number",
  "data.resultsPerPage": "number",
  "data.offset": "number",
  "data.nextPage": "number | null",
  "data.nextPageUrl": "string | null",
  "data.items[].position": "number",
  "data.items[].id": "string",
  "data.items[].url": "string",
  "data.items[].business": "string",
  "data.items[].listingType": "string",
  "data.items[].unitTypes[]": "string",
  "data.items[].attributes": "object | null",
  "data.items[].attributes.usableAreas": "number[]",
  "data.items[].attributes.totalAreas": "number[]",
  "data.items[].attributes.bedrooms": "number[]",
  "data.items[].attributes.bathrooms": "number[]",
  "data.items[].attributes.suites": "number[]",
  "data.items[].attributes.parkingSpaces": "number[]",
  "data.items[].attributes.floors": "number[]",
  "data.items[].attributes.unitFloor": "number | null",
  "data.items[].description": "string",
  "data.items[].address.city": "string",
  "data.items[].address.state": "string",
  "data.items[].address.neighborhood": "string",
  "data.items[].address.latitude": "number | null",
  "data.items[].address.longitude": "number | null",
  "data.items[].prices.mainValue": "number",
  "data.items[].prices.period": "string",
  "data.items[].stamps[]": "string",
  "data.items[].amenities[]": "string",
  "data.items[].advertiser.id": "string",
  "data.items[].advertiser.name": "string",
  "data.items[].images[].url": "string",
  "data.items[].childrenCount": "number"
}

Example response

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.

responseExample
{
  "requestId": "a1f9c6b6-56da-4be1-b2f2-4ed0f3b2f001",
  "executionId": "a1f9c6b6-56da-4be1-b2f2-4ed0f3b2f002",
  "data": {
    "source": "zapimoveis.com.br",
    "type": "plp",
    "parser": "1.0.0",
    "url": "https://www.zapimoveis.com.br/venda/imoveis/pr+curitiba/?q=apartamento+2+quartos&transacao=venda&pagina=1&addressPointLat=-25.4296&addressPointLon=-49.2719&tipos=apartamento_residencial&onde=%2CParan%C3%A1%2CCuritiba%2C%2CCentro%2C%2C%2Cneighborhood%2C%2C%2C&pointRadius=2km",
    "requestUrl": "https://www.zapimoveis.com.br/venda/imoveis/pr+curitiba/?q=apartamento+2+quartos&transacao=venda&pagina=1&addressPointLat=-25.4296&addressPointLon=-49.2719&tipos=apartamento_residencial&onde=%2CParan%C3%A1%2CCuritiba%2C%2CCentro%2C%2C%2Cneighborhood%2C%2C%2C&pointRadius=2km",
    "extractedAt": "2026-02-19T13:00:00.000Z",
    "keyword": "apartamento 2 quartos",
    "query": "apartamento 2 quartos",
    "city": "Curitiba",
    "citySlug": "curitiba",
    "state": "PR",
    "businessType": "sale",
    "latitude": -25.4296,
    "longitude": -49.2719,
    "searchId": "search-9fd22f2f",
    "totalResults": 824,
    "primaryResults": 24,
    "page": 1,
    "resultsPerPage": 24,
    "offset": 0,
    "nextPage": 2,
    "nextPageUrl": "https://www.zapimoveis.com.br/venda/imoveis/pr+curitiba/?q=apartamento+2+quartos&transacao=venda&pagina=2&addressPointLat=-25.4296&addressPointLon=-49.2719&tipos=apartamento_residencial&onde=%2CParan%C3%A1%2CCuritiba%2C%2CCentro%2C%2C%2Cneighborhood%2C%2C%2C&pointRadius=2km",
    "items": [
      {
        "position": 1,
        "id": "2670123456",
        "url": "https://www.zapimoveis.com.br/imovel/venda-apartamento-2-quartos-centro-curitiba-pr-70m2-id-2670123456/",
        "business": "SALE",
        "listingType": "USED",
        "description": "Apartamento com 2 quartos, 1 suite e vaga coberta no Centro de Curitiba.",
        "address": {
          "city": "Curitiba",
          "state": "PR",
          "neighborhood": "Centro",
          "latitude": -25.4296,
          "longitude": -49.2719
        },
        "prices": {
          "mainValue": 549000,
          "period": "MONTHLY"
        },
        "stamps": [
          "Super Destaque"
        ],
        "amenities": [
          "Elevador"
        ],
        "advertiser": {
          "id": "55123",
          "name": "Imobiliaria Exemplo"
        },
        "images": [
          {
            "url": "https://resizedimgs.vivareal.com/{action}/{width}x{height}/vr.images.sp/e7d3cb8f500f42f4b95f316643e2b235.webp"
          }
        ],
        "childrenCount": 0,
        "unitTypes": [
          "APARTMENT"
        ],
        "attributes": {
          "usableAreas": [
            70
          ],
          "totalAreas": [],
          "bedrooms": [
            2
          ],
          "bathrooms": [],
          "suites": [],
          "parkingSpaces": [],
          "floors": [],
          "unitFloor": null
        }
      }
    ],
    "neighborhood": "Centro",
    "propertyTypes": [
      "apartment"
    ]
  }
}

Complete field reference

PathTypeDescriptionExample
data.businessType string Standard business type (sale or rent). sale
data.city string Normalized search city. Curitiba
data.citySlug string City slug used on URL. curitiba
data.extractedAt string (iso datetime) Extraction Timestamp UTC. 2026-02-19T13:00:00.000Z
data.items[].address.city string City of advertisement. Curitiba
data.items[].address.latitude number | null Ad latitude when displayed on the PLP card. -25.4296
data.items[].address.longitude number | null Ad length when displayed on the PLP card. -49.2719
data.items[].address.neighborhood string Ad neighborhood. Centro
data.items[].address.state string UF. PR
data.items[].advertiser.id string Advertiser identifier. 55123
data.items[].advertiser.name string Advertiser name. Imobiliaria Exemplo
data.items[].amenities[] string Amenities summarized on card. Elevador
data.items[].attributes object | null Numerical characteristics published by the source; null when missing. List fields with no value are returned as []. {"usableAreas":[70],"totalAreas":[],"bedrooms":[2],"bathrooms":[],"suites":[],"parkingSpaces":[],"floors":[],"unitFloor":null}
data.items[].attributes.bathrooms number[] Number of bathrooms. []
data.items[].attributes.bedrooms number[] Number of rooms. [2]
data.items[].attributes.floors number[] Number of floors. []
data.items[].attributes.parkingSpaces number[] Number of vacancies. []
data.items[].attributes.suites number[] Number of suites. []
data.items[].attributes.totalAreas number[] Total areas in m², only when explicitly published by the source. [] when absent; never copied from usableAreas or inferred from the description. []
data.items[].attributes.unitFloor number | null Floor of the unit when informed; null when missing. null
data.items[].attributes.usableAreas number[] Useful areas in m² reported by ZAP. For land, the source can publish the footage in this field. [70]
data.items[].business string Business type in the ad (SALE/RENTAL). SALE
data.items[].childrenCount number Number of child/aggregate ads on the card. 0
data.items[].description string Short description of the property. Apartamento com 2 quartos, 1 suite e vaga coberta no Centro de Curitiba.
data.items[].id string Internal identifier for the ad. 2670123456
data.items[].images[].url string URL of the card image. https://resizedimgs.vivareal.com/{action}/{width}x{height}/vr.images.sp/e7d3cb8f500f42f4b95f316643e2b235.webp
data.items[].listingType string Source publication category (e.g.: USED); the physical classification of the property is unitTypes. USED
data.items[].position number Absolute position of the item in the result. 1
data.items[].prices.mainValue number Main listing price. 549000
data.items[].prices.period string Price billing period. MONTHLY
data.items[].stamps[] string Stamps/promos displayed on the card. Super Destaque
data.items[].unitTypes[] string Native classification of the property, such as APARTMENT, HOME, ALLOTMENT_LAND or RESIDENTIAL_ALLOTMENT_LAND. Preserves the source values, without inferring from keyword, title or description. Empty list when unavailable. APARTMENT
data.items[].url string URL ad public. https://www.zapimoveis.com.br/imovel/venda-apartamento-2-quartos-centro-curitiba-pr-70m2-id-2670123456/
data.keyword string Keyword sent in the payload. apartamento 2 quartos
data.latitude number | null Latitude used as point filter when sent; null for city/state search without coordinates. -25.4296
data.longitude number | null Longitude used as point filter when sent; null for city/state search without coordinates. -49.2719
data.neighborhood string | null Requested neighborhood; null when omitted. It does not replace the address of each advertisement. Centro
data.nextPage number | null Next page accessible; null when reaching page 50 or the end of the results. 2
data.nextPageUrl string | null URL native to the next page with the same filters when available. To query by API, repeat the search parameters and use nextPage as page. https://www.zapimoveis.com.br/venda/imoveis/pr+curitiba/?q=apartamento+2+quartos&transacao=venda&pagina=2&addressPointLat=-25.4296&addressPointLon=-49.2719&tipos=apartamento_residencial&onde=%2CParan%C3%A1%2CCuritiba%2C%2CCentro%2C%2C%2Cneighborhood%2C%2C%2C&pointRadius=2km
data.offset number Calculated paging offset. 0
data.page number Page returned. 1
data.parser "1.0.0" Stable version of the API response format. 1.0.0
data.primaryResults number Number of items returned on the current page. 24
data.propertyTypes[] string Requested types standardized for API aliases (e.g.: land). Empty list when there is no category filter. apartment
data.query string Search term applied in the query. apartamento 2 quartos
data.requestUrl string Same value as `data.url`; never exposes the queried internal endpoint. https://www.zapimoveis.com.br/venda/imoveis/pr+curitiba/?q=apartamento+2+quartos&transacao=venda&pagina=1&addressPointLat=-25.4296&addressPointLon=-49.2719&tipos=apartamento_residencial&onde=%2CParan%C3%A1%2CCuritiba%2C%2CCentro%2C%2C%2Cneighborhood%2C%2C%2C&pointRadius=2km
data.resultsPerPage number Number of results per page. 24
data.searchId string Search identifier returned by the page. search-9fd22f2f
data.source string Extraction source. zapimoveis.com.br
data.state string UF used in the search. PR
data.totalResults number Total results available for the query. 824
data.type string Extraction type. plp
data.url string URL assembled for query. https://www.zapimoveis.com.br/venda/imoveis/pr+curitiba/?q=apartamento+2+quartos&transacao=venda&pagina=1&addressPointLat=-25.4296&addressPointLon=-49.2719&tipos=apartamento_residencial&onde=%2CParan%C3%A1%2CCuritiba%2C%2CCentro%2C%2C%2Cneighborhood%2C%2C%2C&pointRadius=2km
executionId string (uuid) Field executionId returned in the response payload. a1f9c6b6-56da-4be1-b2f2-4ed0f3b2f002
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. a1f9c6b6-56da-4be1-b2f2-4ed0f3b2f001

Errors and missing data

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 statusError codeMeaning
400INVALID_PAYLOADInvalid JSON or a request that violates the documented validation rules.
401UNAUTHORIZEDMissing authorization or an invalid API key or token.
402INSUFFICIENT_CREDITSThe account has insufficient credits for this operation.
403FORBIDDENThe account does not have access, or the API is temporarily disabled.
409EXECUTION_CONFLICTThe execution identifier conflicts with an incompatible execution state.
429RATE_LIMIT_EXCEEDED / TOO_MANY_INFLIGHT_REQUESTSA rate limit or simultaneous request limit was exceeded.
5xxUPSTREAM_TIMEOUT / UPSTREAM_HTTP_ERROR / WORKER_FUNCTION_ERRORAn upstream, worker or gateway failure. Failed requests follow the platform refund policy.

Other Zapimoveis operations