{
  "openapi": "3.0.1",
  "info": {
    "title": "Property Valuation API - AVM, Rent Estimate, Sold Prices",
    "description": "Value any European residential address for sale or rent with a confidence range, search live listings and recorded sold prices around any point, compute market statistics and percentile ranks, and read location scores and demographics.",
    "version": "0.1",
    "x-build-id": "zQdYpAQnOUK7EdTcZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~property-valuation-data-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-property-valuation-data-api",
        "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/nabeelbaghoor~property-valuation-data-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-property-valuation-data-api",
        "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/nabeelbaghoor~property-valuation-data-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-property-valuation-data-api",
        "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": {
          "mode": {
            "title": "What to do",
            "enum": [
              "valuation",
              "offerSearch",
              "offerStatistics",
              "transactionSearch",
              "transactionStatistics",
              "locationScores",
              "socioEconomics"
            ],
            "type": "string",
            "description": "Valuation returns a sale price or a gross and net rent for each address with a confidence grade and a range. Listing search and recorded sale search return what is around a point. The two statistics modes answer the same questions in aggregate. Location scores rates a point across nine neighbourhood measures. Demographics reads one socio-economic series.",
            "default": "valuation"
          },
          "countryCode": {
            "title": "Country code",
            "type": "string",
            "description": "Required in every mode. The two letter country the request is about, for example CH, DE, FR, AT, NL, BE or UK. Coverage is licensed per country, so a country outside your plan is refused rather than returning nothing.",
            "default": "CH"
          },
          "addresses": {
            "title": "Property addresses",
            "type": "array",
            "description": "Valuation and location scores modes, and the centre point for a search. One address per line, written as street and number, then comma, then post code and city, for example Gerechtigkeitsgasse 19, 8001 Zurich. A line that cannot be split is reported rather than guessed at.",
            "items": {
              "type": "string"
            }
          },
          "latitude": {
            "title": "Latitude",
            "type": "string",
            "description": "An alternative to an address in every mode that takes one. Give a longitude with it."
          },
          "longitude": {
            "title": "Longitude",
            "type": "string",
            "description": "An alternative to an address in every mode that takes one. Give a latitude with it."
          },
          "radiusMeters": {
            "title": "Search radius in metres",
            "minimum": 1,
            "type": "integer",
            "description": "Listing and recorded sale search. How far from the point to search, in metres. 5000 is five kilometres.",
            "default": 5000
          },
          "dealType": {
            "title": "Sale or rent",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Valuation, listing search and listing statistics. Sale returns a sale price; rent returns a gross and a net monthly rent, which are different figures and both are kept in the output.",
            "default": "sale"
          },
          "valuationDates": {
            "title": "Valuation dates",
            "type": "array",
            "description": "Valuation mode. One date per line as YYYY-MM-DD, to value the same property at several points in time. Leave empty for today. The provider caps a call at fifty valuations counted as properties multiplied by dates, so three dates means fewer addresses per request.",
            "items": {
              "type": "string"
            }
          },
          "propertyTypeCode": {
            "title": "Property type",
            "enum": [
              "apartment",
              "house",
              "multi_family_house"
            ],
            "type": "string",
            "description": "Describes the property in valuation mode and filters in the search and statistics modes.",
            "default": "apartment"
          },
          "propertyTypeSubcode": {
            "title": "Property subtype",
            "type": "string",
            "description": "An optional refinement of the property type in the provider's own spelling, for example apartment_normal, apartment_penthouse or house_detached."
          },
          "buildingYear": {
            "title": "Year built",
            "minimum": 1000,
            "type": "integer",
            "description": "Valuation mode. The year the building was completed. One of the strongest inputs to a valuation, so supply it when you have it."
          },
          "livingArea": {
            "title": "Living area",
            "minimum": 1,
            "type": "integer",
            "description": "Valuation mode. Interior floor area in square metres."
          },
          "landArea": {
            "title": "Land area",
            "minimum": 0,
            "type": "integer",
            "description": "Valuation mode, for houses. Plot size in square metres."
          },
          "numberOfRooms": {
            "title": "Number of rooms",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Valuation mode. Room count as counted locally, which in several of these markets includes the living room and uses half steps."
          },
          "numberOfBathrooms": {
            "title": "Number of bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Valuation mode."
          },
          "numberOfUnits": {
            "title": "Number of units",
            "minimum": 1,
            "type": "integer",
            "description": "Valuation mode, for a multi family house. How many dwellings the building contains."
          },
          "annualRentIncome": {
            "title": "Annual rent income",
            "minimum": 0,
            "type": "integer",
            "description": "Valuation mode, for a multi family house. The building's current yearly rent roll, which the provider uses when valuing it as an investment."
          },
          "balconyArea": {
            "title": "Balcony area",
            "minimum": 0,
            "type": "integer",
            "description": "Valuation mode. Balcony or terrace area in square metres."
          },
          "gardenArea": {
            "title": "Garden area",
            "minimum": 0,
            "type": "integer",
            "description": "Valuation mode. Private garden area in square metres."
          },
          "numberOfIndoorParkingSpaces": {
            "title": "Indoor parking spaces",
            "minimum": 0,
            "type": "integer",
            "description": "Valuation mode. Garage or underground spaces, which are valued differently from outdoor ones."
          },
          "numberOfOutdoorParkingSpaces": {
            "title": "Outdoor parking spaces",
            "minimum": 0,
            "type": "integer",
            "description": "Valuation mode. Open or surface spaces."
          },
          "floorNumber": {
            "title": "Floor number",
            "type": "integer",
            "description": "Valuation mode, for an apartment. Ground floor is 0."
          },
          "hasLift": {
            "title": "Building has a lift",
            "type": "boolean",
            "description": "Describes the property in valuation mode. In listing search, leave this alone to ignore it: the filter is applied only when you set it either way."
          },
          "energyLabel": {
            "title": "Energy label",
            "type": "string",
            "description": "Valuation mode. The building's energy rating in the local scheme, for example a, b, c or minergie in Switzerland."
          },
          "quality": {
            "title": "Fit-out quality",
            "enum": [
              "simple",
              "normal",
              "high_quality",
              "luxury"
            ],
            "type": "string",
            "description": "Valuation mode. How well appointed the property is. One grade is applied to the bathrooms, kitchen, flooring and windows together, which is the level of precision a list of addresses supports."
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "renovation_needed",
              "well_maintained",
              "new_or_recently_renovated"
            ],
            "type": "string",
            "description": "Valuation mode. How well maintained the property is, applied to the bathrooms, kitchen, flooring and windows together."
          },
          "returnScores": {
            "title": "Include location scores with valuations",
            "type": "boolean",
            "description": "Valuation mode. On by default. Turn off only if you do not need the location score beside each valuation.",
            "default": true
          },
          "activeOnly": {
            "title": "Active listings only",
            "type": "boolean",
            "description": "Listing search. Ticked keeps only what is on the market now. Leave it off to include withdrawn listings, which is how to study recent market history."
          },
          "dateFrom": {
            "title": "From date",
            "type": "string",
            "description": "Keeps only records on or after this date, as YYYY-MM-DD. Applied to the listing start date in listing modes and to the transaction date in recorded sale modes."
          },
          "dateTo": {
            "title": "To date",
            "type": "string",
            "description": "Keeps only records on or before this date, as YYYY-MM-DD."
          },
          "priceMin": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. Applied to the sale price, or to the gross rent when the deal type is rent."
          },
          "priceMax": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. Applied to the sale price, or to the gross rent when the deal type is rent."
          },
          "priceCurrency": {
            "title": "Price filter currency",
            "type": "string",
            "description": "The currency the price filter is expressed in, for example CHF, EUR or GBP. Required by the provider whenever a price filter is set.",
            "default": "EUR"
          },
          "livingAreaMin": {
            "title": "Minimum living area",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. Interior floor area in square metres."
          },
          "livingAreaMax": {
            "title": "Maximum living area",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. Interior floor area in square metres."
          },
          "numberOfRoomsMin": {
            "title": "Minimum rooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes."
          },
          "numberOfRoomsMax": {
            "title": "Maximum rooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes."
          },
          "numberOfBathroomsMin": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes."
          },
          "numberOfBathroomsMax": {
            "title": "Maximum bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes."
          },
          "numberOfBedroomsMin": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. Bedrooms are recorded separately from rooms in the UK and France."
          },
          "numberOfBedroomsMax": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes."
          },
          "buildingYearMin": {
            "title": "Built no earlier than",
            "minimum": 1000,
            "type": "integer",
            "description": "Search modes. A four digit year."
          },
          "buildingYearMax": {
            "title": "Built no later than",
            "minimum": 1000,
            "type": "integer",
            "description": "Search modes. A four digit year."
          },
          "hasParkingSpaces": {
            "title": "Has parking",
            "type": "boolean",
            "description": "Search modes. Leave this alone to ignore it; the filter is applied only when you set it either way."
          },
          "isNew": {
            "title": "New build only",
            "type": "boolean",
            "description": "Search modes. Leave this alone to ignore it; the filter is applied only when you set it either way."
          },
          "orderBy": {
            "title": "Sort by",
            "enum": [
              "distance",
              "startDate",
              "transactionDate",
              "salePrice",
              "salePricePerSqm",
              "rentGross",
              "rentNet",
              "daysOnMarket"
            ],
            "type": "string",
            "description": "Search modes. Distance is measured from the reference address or point. The price and rent options only apply to the search they belong to.",
            "default": "distance"
          },
          "orderDirection": {
            "title": "Sort direction",
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Search modes.",
            "default": "asc"
          },
          "statisticsMetrics": {
            "title": "Statistics metrics",
            "type": "array",
            "description": "Statistics modes. Which measures to compute. Sale price and price per square metre work on both sides; gross and net rent and days on market are listing measures only.",
            "items": {
              "type": "string",
              "enum": [
                "sale_price",
                "sale_price_per_square_meter",
                "rent_gross",
                "rent_net",
                "living_area",
                "number_of_rooms",
                "days_on_market",
                "energy_label"
              ],
              "enumTitles": [
                "Sale price",
                "Sale price per square metre",
                "Gross rent",
                "Net rent",
                "Living area",
                "Number of rooms",
                "Days on market",
                "Energy label"
              ]
            }
          },
          "statisticsTypes": {
            "title": "Statistic types",
            "type": "array",
            "description": "Statistics modes. Mean and count are computed for every metric. Percentile needs a rank and percentile rank needs a value, both set below.",
            "items": {
              "type": "string",
              "enum": [
                "mean",
                "count",
                "percentile",
                "percentile_rank"
              ],
              "enumTitles": [
                "Mean",
                "Count",
                "Percentile",
                "Percentile rank"
              ]
            }
          },
          "percentileRank": {
            "title": "Percentile rank",
            "minimum": 1,
            "maximum": 99,
            "type": "integer",
            "description": "Statistics modes, for the percentile type. Which percentile to return, so 50 is the median.",
            "default": 50
          },
          "percentileValue": {
            "title": "Percentile rank of this value",
            "minimum": 0,
            "type": "integer",
            "description": "Statistics modes, for the percentile rank type. Give a price or rent and the provider answers where it falls in the distribution, which is how to tell whether an asking price is high for its market."
          },
          "divisionId": {
            "title": "Administrative division ID",
            "type": "string",
            "description": "Statistics modes. Narrows the statistics to one division, for example a post code such as 8001. Leave empty for the whole country."
          },
          "groupBy": {
            "title": "Group statistics by",
            "enum": [
              "transaction_date",
              "start_date",
              "sale_price",
              "sale_price_per_square_meter",
              "living_area",
              "number_of_rooms",
              "number_of_bedrooms",
              "number_of_bathrooms",
              "planning_use"
            ],
            "type": "string",
            "description": "Statistics modes. Returns one set of statistics per group instead of one overall, which is how to get a time series or a breakdown by size."
          },
          "groupPeriod": {
            "title": "Grouping period",
            "enum": [
              "month",
              "quarter",
              "year",
              "trailing_90d"
            ],
            "type": "string",
            "description": "Statistics modes, when grouping by a date. Trailing 90 days smooths a thin market better than a calendar month does."
          },
          "socioEconomicType": {
            "title": "Demographic series",
            "type": "string",
            "description": "Demographics mode. Which series to read, in the provider's own spelling, for example education_levels, age_distribution, household_sizes, income or population."
          },
          "divisionIds": {
            "title": "Administrative division IDs",
            "type": "array",
            "description": "Demographics mode. One division ID per line. Which identifiers apply depends on the level chosen below and on the country.",
            "items": {
              "type": "string"
            }
          },
          "divisionLevel": {
            "title": "Division level",
            "enum": [
              "divisionsLevel1",
              "divisionsLevel2",
              "divisionsLevel4",
              "divisionsLevel6",
              "divisionsLevel100"
            ],
            "type": "string",
            "description": "Demographics mode. Which administrative level the IDs above belong to. Level 6 is roughly a municipality and level 100 a post code.",
            "default": "divisionsLevel6"
          },
          "yearMin": {
            "title": "From year",
            "minimum": 1900,
            "type": "integer",
            "description": "Demographics mode. The earliest year to include."
          },
          "yearMax": {
            "title": "To year",
            "minimum": 1900,
            "type": "integer",
            "description": "Demographics mode. The latest year to include."
          },
          "maxResults": {
            "title": "Maximum rows",
            "minimum": 1,
            "type": "integer",
            "description": "The most rows this run will save and charge for. This is the spending control on both sides.",
            "default": 1000
          },
          "pageSize": {
            "title": "Results per request",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Search modes. How many rows to ask for at a time.",
            "default": 100
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "How fast to call the provider. Lower this if your plan is metered tightly.",
            "default": 120
          },
          "baseUrl": {
            "title": "API base URL",
            "type": "string",
            "description": "Only set this if the provider has given you a different host. Leave empty to use the documented one."
          },
          "apiUsername": {
            "title": "API username",
            "type": "string",
            "description": "Your own account username for the property valuation provider. This actor is bring your own credentials: it never uses anyone else's, and both halves are stored as secrets."
          },
          "apiPassword": {
            "title": "API password",
            "type": "string",
            "description": "Your own account password for the property valuation provider. Exchanged once per run for an access token that lasts twelve hours, rather than sent with every request."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}