{
  "openapi": "3.0.1",
  "info": {
    "title": "VivaReal Scraper — Brazil Real Estate Listings",
    "description": "🔥 Up to 30% OFF! Scrape VivaReal real-estate listings — no login. By city+filters, search URL or property URL: price, condo fee, IPTU, area, bedrooms/baths/suites/parking, amenities, full address+CEP, GPS, images, realtor (CRECI). Great for real-estate research. ⚡",
    "version": "0.0",
    "x-build-id": "GXXQrR6CCQ5hvddeG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/bgfc97~vivareal-imoveis-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-bgfc97-vivareal-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/bgfc97~vivareal-imoveis-scraper/runs": {
      "post": {
        "operationId": "runs-sync-bgfc97-vivareal-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/bgfc97~vivareal-imoveis-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-bgfc97-vivareal-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": {
          "searchUrls": {
            "title": "VivaReal URLs (search results or a single property)",
            "type": "array",
            "description": "Paste one or more VivaReal URLs. A search-results URL (e.g. https://www.vivareal.com.br/venda/sp/sao-paulo/apartamento_residencial/ ) is paginated for all matching listings. A property URL (…/imovel/…-id-123456/ ) returns that single property. Filters (business, property type, location) are read straight from the URL. Leave empty to use the City/State fields below.",
            "items": {
              "type": "string"
            }
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City to search, e.g. \"São Paulo\", \"Rio de Janeiro\", \"Belo Horizonte\". Used when no search URL is given. The actor resolves it to VivaReal's exact location automatically. You can also type a neighborhood (e.g. \"Jardins, São Paulo\")."
          },
          "state": {
            "title": "State (optional)",
            "type": "string",
            "description": "Optional state to disambiguate the city, e.g. \"SP\", \"RJ\", \"Minas Gerais\"."
          },
          "transactionType": {
            "title": "Transaction",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Sale (venda) or Rent (aluguel). Applies to City/State searches.",
            "default": "sale"
          },
          "propertyType": {
            "title": "Property type(s)",
            "type": "array",
            "description": "Restrict to one or more property types. Leave empty for all types. (Applies to City/State searches; a search URL carries its own type.)",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "house",
                "condo",
                "land",
                "commercial",
                "farm"
              ],
              "enumTitles": [
                "Apartment (apartamento)",
                "House (casa)",
                "Condo (casa de condomínio)",
                "Land (terreno/lote)",
                "Commercial (comercial)",
                "Farm/Rural (fazenda/chácara)"
              ]
            },
            "default": []
          },
          "listingType": {
            "title": "Listing type",
            "enum": [
              "used",
              "development"
            ],
            "type": "string",
            "description": "Used/resale properties or new developments (lançamentos).",
            "default": "used"
          },
          "priceMin": {
            "title": "Minimum price (R$)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in BRL (sale price, or monthly rent for rentals). Leave empty for no minimum."
          },
          "priceMax": {
            "title": "Maximum price (R$)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in BRL. Leave empty for no maximum."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Only listings with at least this many bedrooms. Leave empty for any."
          },
          "maxItems": {
            "title": "Max properties",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of property records to return across all searches (1–100000). VivaReal exposes up to ~10,000 results per individual search; narrow with filters to reach the rest.",
            "default": 100
          },
          "imageWidth": {
            "title": "Image width (px)",
            "minimum": 100,
            "maximum": 1920,
            "type": "integer",
            "description": "Width of the resolved image URLs returned per listing. Default 870.",
            "default": 870
          },
          "imageHeight": {
            "title": "Image height (px)",
            "minimum": 100,
            "maximum": 1920,
            "type": "integer",
            "description": "Height of the resolved image URLs. Default 653.",
            "default": 653
          },
          "timeoutSecs": {
            "title": "Per-request timeout (seconds)",
            "minimum": 15,
            "maximum": 180,
            "type": "integer",
            "description": "How long to wait for each request to VivaReal, in seconds (15–180). The anti-blocking proxy solves the Cloudflare challenge server-side, so requests can take a few seconds.",
            "default": 60
          },
          "proxyConfiguration": {
            "title": "Proxy configuration (advanced)",
            "type": "object",
            "description": "Advanced. By default the actor uses Apify Proxy's UNBLOCKER group, which clears VivaReal's Cloudflare anti-bot challenge server-side over plain HTTP (no browser, no captcha key) — this is what makes the scrape reliable. Override only if you know what you are doing; the actor still falls back to UNBLOCKER if your proxy gets challenged.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}