{
  "openapi": "3.0.1",
  "info": {
    "title": "ZAP Imóveis & VivaReal Scraper — Brazil Property Listings",
    "description": "Scrape ZAP Imóveis and VivaReal listings for sale or rent from search URLs or city/neighbourhood + filters: price, condo fee, IPTU, area, rooms, address, coordinates, photos, agency.",
    "version": "0.1",
    "x-build-id": "loofjqGckD1uNztB6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tortuga~zap-imoveis-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tortuga-zap-imoveis-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/tortuga~zap-imoveis-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tortuga-zap-imoveis-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/tortuga~zap-imoveis-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tortuga-zap-imoveis-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "ZAP Imóveis or VivaReal search URLs with any filters set in the browser (open the search on zapimoveis.com.br or vivareal.com.br and copy the address bar, e.g. https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo+zona-oeste+pinheiros/), or single listing URLs (.../imovel/...-id-2916766574/), which return that listing with full details. Leave empty if you use Locations below.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, neighbourhoods (bairros), zones or streets, one per line, e.g. 'Pinheiros, São Paulo', 'Copacabana, Rio de Janeiro', 'Curitiba - PR', 'Zona Sul, Rio de Janeiro'. Each is looked up with the portal's own autocomplete and searched separately.",
            "items": {
              "type": "string"
            }
          },
          "portal": {
            "title": "Portal",
            "enum": [
              "zap",
              "vivareal"
            ],
            "type": "string",
            "description": "Which site the Locations searches run on (start URLs always use their own site). Both portals list the same properties under the same listing IDs; the choice decides which site's links you get.",
            "default": "zap"
          },
          "businessType": {
            "title": "For sale or for rent",
            "enum": [
              "SALE",
              "RENTAL"
            ],
            "type": "string",
            "description": "Listings for sale (venda) or for rent (aluguel). Applies to Locations searches; start URLs keep their own.",
            "default": "SALE"
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only these property types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "APARTMENT",
                "HOME",
                "CONDOMINIUM",
                "TWO_STORY_HOUSE",
                "PENTHOUSE",
                "STUDIO",
                "KITNET",
                "FLAT",
                "LOFT",
                "VILLAGE_HOUSE",
                "RESIDENTIAL_ALLOTMENT_LAND",
                "FARM",
                "BUSINESS",
                "OFFICE",
                "COMMERCIAL_PROPERTY",
                "COMMERCIAL_BUILDING",
                "COMMERCIAL_ALLOTMENT_LAND",
                "SHED_DEPOSIT_WAREHOUSE",
                "HOTEL",
                "PARKING_SPACE"
              ],
              "enumTitles": [
                "Apartamento",
                "Casa",
                "Casa de condomínio",
                "Sobrado",
                "Cobertura (penthouse)",
                "Studio",
                "Kitnet",
                "Flat",
                "Loft",
                "Casa de vila",
                "Terreno / lote residencial",
                "Fazenda / sítio / chácara",
                "Loja / ponto comercial",
                "Sala / conjunto comercial",
                "Casa comercial",
                "Prédio inteiro",
                "Terreno / lote comercial",
                "Galpão / depósito",
                "Hotel / pousada",
                "Garagem"
              ]
            }
          },
          "minPrice": {
            "title": "Min price (R$)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum sale price, or minimum monthly rent for rentals, in reais."
          },
          "maxPrice": {
            "title": "Max price (R$)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum sale price, or maximum monthly rent for rentals, in reais."
          },
          "minArea": {
            "title": "Min area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum usable area (área útil) in square metres."
          },
          "maxArea": {
            "title": "Max area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum usable area (área útil) in square metres."
          },
          "bedrooms": {
            "title": "Bedrooms (quartos)",
            "type": "array",
            "description": "Number of bedrooms, as on the portals: pick one or more; '4+' means 4 or more. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4"
              ],
              "enumTitles": [
                "1",
                "2",
                "3",
                "4+"
              ]
            }
          },
          "bathrooms": {
            "title": "Bathrooms (banheiros)",
            "type": "array",
            "description": "Number of bathrooms; '4+' means 4 or more. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4"
              ],
              "enumTitles": [
                "1",
                "2",
                "3",
                "4+"
              ]
            }
          },
          "parkingSpaces": {
            "title": "Parking spaces (vagas)",
            "type": "array",
            "description": "Number of parking spaces; '4+' means 4 or more. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4"
              ],
              "enumTitles": [
                "1",
                "2",
                "3",
                "4+"
              ]
            }
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "newest",
              "relevance",
              "price_asc",
              "price_desc",
              "area_desc"
            ],
            "type": "string",
            "description": "Order of the results. Applies to Locations searches and to start URLs that have no sort of their own. 'Newest first' is stable between pages and best for monitoring; 'Relevance' is the portals' default order and reshuffles between requests.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many listings in total (across all searches). Keeps cost predictable. The portals serve at most 1,500 listings per search; larger searches are split into price bands automatically (see below).",
            "default": 100
          },
          "includeDetails": {
            "title": "Include description and last update",
            "type": "boolean",
            "description": "Also load each listing's own record: the advertiser's title and full description text, last update date, and the portals it is published on (ZAP, VivaReal, OLX). One extra request per listing; charged as an extra 'detail' event (see pricing).",
            "default": false
          },
          "splitLargeSearches": {
            "title": "Split searches over 1,500 results",
            "type": "boolean",
            "description": "The portals serve at most 1,500 listings per search. When a search has more and Max items asks for more, cut it into price bands of up to 1,500 listings each (a few tiny count requests) so you can get every listing. Results then come band by band, cheapest band first.",
            "default": true
          },
          "onlyNewOrChanged": {
            "title": "Only new or changed items",
            "type": "boolean",
            "description": "Remember what earlier runs of this search returned and output only new listings or listings whose price or condo fee changed. Use with a Schedule; unchanged items are not charged. With this on, Max items is the number of listings checked per run (e.g. the newest 200).",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring key",
            "type": "string",
            "description": "Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "ZAP Imóveis and VivaReal sit behind Cloudflare, which refuses many datacenter IPs (about half of the requests in tests; they are retried, so runs are slower). Apify RESIDENTIAL proxy (Brazil) is the default and worked on every request in tests; residential traffic is billed by Apify per GB, and this actor uses about 1 MB per 1,000 listings (about 8 MB with descriptions) plus about 0.15 MB per start URL.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "BR"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}