{
  "openapi": "3.0.1",
  "info": {
    "title": "VivaReal & ZAP Imóveis Scraper - Brazil Property Data",
    "description": "VivaReal and ZAP Imóveis scraper for Brazil. Name a city or neighbourhood and get one row per listing: price or rent, condo fee, IPTU, area, bedrooms, parking, address, amenities, advertiser, photos. $1.40 per 1,000 listings.",
    "version": "0.1",
    "x-build-id": "IrQyofCsUdCXAloUT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~vivareal-zap-imoveis-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-vivareal-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/dami_studio~vivareal-zap-imoveis-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-vivareal-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/dami_studio~vivareal-zap-imoveis-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-vivareal-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": {
          "location": {
            "title": "Where to search",
            "type": "string",
            "description": "A Brazilian city or neighbourhood, written the way it is written there: \"Pinheiros, São Paulo\", \"Copacabana, Rio de Janeiro\", \"Curitiba\", \"Balneário Camboriú\". The portal's own place lookup decides the match, and the run log tells you which one it picked."
          },
          "portal": {
            "title": "Which portal's links do you want",
            "enum": [
              "vivareal",
              "zap"
            ],
            "type": "string",
            "description": "VivaReal and ZAP Imóveis run on one shared listing index, so both return the same properties. This only decides which site the listing URL points at, and the order results come back in."
          },
          "business": {
            "title": "For sale or to rent",
            "enum": [
              "SALE",
              "RENTAL"
            ],
            "type": "string",
            "description": "Sale (venda) or rental (aluguel). Rental rows also carry the monthly total with condo fee and IPTU added."
          },
          "listingType": {
            "title": "Resale or new development",
            "enum": [
              "USED",
              "DEVELOPMENT"
            ],
            "type": "string",
            "description": "USED is the ordinary resale market. DEVELOPMENT is new-build launches (lançamentos), a much smaller pool, a few thousand nationally rather than millions."
          },
          "maxItems": {
            "title": "Maximum listings",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on rows across every search in this run (1–5000). You are charged per listing returned. Sample and diagnostic rows are never charged."
          },
          "includeContacts": {
            "title": "Include advertiser phone numbers and WhatsApp",
            "type": "boolean",
            "description": "Off by default. On: each row also carries the phone numbers and WhatsApp number the advertiser published on the listing. When the advertiser is a person these are personal data under Brazil's LGPD and the GDPR: keep them only if you have a lawful reason.",
            "default": false
          },
          "startUrls": {
            "title": "Portal URLs (optional)",
            "type": "array",
            "description": "Paste search pages or single listing pages from either portal. A search page works best when it still carries its \"?onde=\" parameter, that is where the portal keeps the place id. A single listing page must end in -id-{number}/.",
            "items": {
              "type": "string"
            }
          },
          "unitTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Leave empty for everything. These are the portal's own codes.",
            "items": {
              "type": "string",
              "enum": [
                "APARTMENT",
                "HOME",
                "CONDOMINIUM",
                "PENTHOUSE",
                "FLAT",
                "VILLAGE_HOUSE",
                "BUILDING",
                "OFFICE",
                "BUSINESS",
                "COMMERCIAL_PROPERTY",
                "COMMERCIAL_BUILDING",
                "FARM",
                "ALLOTMENT_LAND",
                "RESIDENTIAL_ALLOTMENT_LAND",
                "COMMERCIAL_ALLOTMENT_LAND",
                "PARKING_SPACE"
              ],
              "enumTitles": [
                "Apartment",
                "House",
                "Condominium house",
                "Penthouse (cobertura)",
                "Flat / apart-hotel",
                "House in a village",
                "Whole building",
                "Office",
                "Shop or business unit",
                "Commercial property",
                "Commercial building",
                "Farm / rural",
                "Land",
                "Residential land",
                "Commercial land",
                "Parking space"
              ]
            }
          },
          "bedroomsMin": {
            "title": "Bedrooms, at least",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum number of bedrooms (quartos)."
          },
          "bathroomsMin": {
            "title": "Bathrooms, at least",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum number of bathrooms (banheiros)."
          },
          "parkingMin": {
            "title": "Parking spaces, at least",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum number of parking spaces (vagas)."
          },
          "priceMin": {
            "title": "Price from (R$)",
            "minimum": 0,
            "type": "integer",
            "description": "Sale price, or monthly rent when you are searching rentals."
          },
          "priceMax": {
            "title": "Price up to (R$)",
            "minimum": 0,
            "type": "integer",
            "description": "Sale price, or monthly rent when you are searching rentals."
          },
          "areaMin": {
            "title": "Usable area from (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum área útil in square metres."
          },
          "areaMax": {
            "title": "Usable area up to (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum área útil in square metres."
          },
          "locationIds": {
            "title": "Portal location ids (optional)",
            "type": "array",
            "description": "For repeat runs where you already know the exact place. These look like BR>Sao Paulo>NULL>Sao Paulo>Zona Oeste>Pinheiros and appear in the run log whenever a location is resolved. Using them skips the place lookup and keeps the same area every time.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Leave it alone unless the run needs to go out through a network of your own."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}