{
  "openapi": "3.0.1",
  "info": {
    "title": "VivaReal & ZAP Imóveis Scraper - Brazil Property Data",
    "description": "Brazilian property listings from VivaReal and ZAP Imóveis in one run: asking price, condo fee, IPTU, usable area, bedrooms, bathrooms, parking, full address, coordinates, amenities, advertiser and photos. Sale or rental, by city or neighbourhood. Pay only for listings returned.",
    "version": "0.1",
    "x-build-id": "ETKjEOOAcwTserplF"
  },
  "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."
          },
          "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 guarantees the same area every time.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave this alone. The Actor already routes itself and rotates addresses when the portal refuses one. Set it only if you must exit from a specific 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}