{
  "openapi": "3.0.1",
  "info": {
    "title": "UK Property Market Data API - Prices, Rents, Yields, EPC",
    "description": "Read UK property data by postcode, coordinates, what3words or town: asking and sold prices, rents, yields, growth and demand, planning applications, listed buildings, flood risk, EPC ratings, UPRNs, title ownership and leases, sale and rental valuations, and investment sourcing lists.",
    "version": "0.1",
    "x-build-id": "uhylIZE8c3EhwHw1r"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~uk-property-market-data-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-uk-property-market-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~uk-property-market-data-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-uk-property-market-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~uk-property-market-data-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-uk-property-market-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": {
          "service": {
            "title": "What to read",
            "enum": [
              "prices",
              "soldPrices",
              "rents",
              "rentsHmo",
              "rentsCommercial",
              "yields",
              "growth",
              "growthPerSqf",
              "demand",
              "demandRent",
              "pricesPerSqf",
              "soldPricesPerSqf",
              "agents",
              "lhaRate",
              "nationalData",
              "planningApplications",
              "listedBuildings",
              "conservationArea",
              "greenBelt",
              "floodRisk",
              "energyEfficiency",
              "floorAreas",
              "buildCost",
              "rebuildCost",
              "uprns",
              "uprn",
              "uprnTitle",
              "addressMatchUprn",
              "title",
              "freeholds",
              "valuationSale",
              "valuationRent",
              "valuationHmo",
              "valuationHistorical",
              "sourcedProperties",
              "nationalHmoRegister",
              "crime",
              "demographics",
              "householdIncome",
              "population",
              "schools",
              "councilTax",
              "areaType",
              "internetSpeed",
              "propertyTypes",
              "tenureTypes",
              "accountCredits"
            ],
            "type": "string",
            "description": "One service per run. Market services answer with one record for a local area. List services answer with many records for one area, such as planning applications or UPRNs. Property services read one thing by its identifier or its address. The account service reports the credits left on your own plan and costs the provider nothing.",
            "default": "prices"
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "One location per line. The provider accepts a UK postcode (full, district or sector), a \"latitude,longitude\" pair, a what3words address or a town name, and every service names which of those it takes. Exactly one is sent per request, because the provider refuses a call carrying two.",
            "items": {
              "type": "string"
            }
          },
          "locationType": {
            "title": "How to read each location",
            "enum": [
              "auto",
              "postcode",
              "location",
              "w3w",
              "town"
            ],
            "type": "string",
            "description": "Leave on automatic and each line is read by its shape: a postcode pattern, a coordinate pair, three dot separated words, or a town name otherwise. Set it explicitly when a place name could be mistaken for something else, or when a service accepts more than one kind and you want a particular one.",
            "default": "auto"
          },
          "identifiers": {
            "title": "Identifiers",
            "type": "array",
            "description": "One per line, for the services that read a single thing rather than an area: a UPRN for the UPRN and title lookup services, a title number for the title service, and a full address for the address matching service.",
            "items": {
              "type": "string"
            }
          },
          "bedrooms": {
            "title": "Bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Restrict the comparable properties to this bedroom count. Accepted by the asking prices, sold prices, rents and sale valuation services."
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "flat",
              "terraced_house",
              "semi-detached_house",
              "detached_house",
              "house"
            ],
            "type": "string",
            "description": "Restrict the comparable properties to one type. Accepted by the asking prices, sold prices and rents services."
          },
          "comparablePoints": {
            "title": "Comparable properties to analyse",
            "minimum": 15,
            "maximum": 100,
            "type": "integer",
            "description": "How many nearby comparable properties the provider should base the answer on. A larger number widens the area the answer describes, so a tight local reading wants a smaller one."
          },
          "maxAgeMonths": {
            "title": "Oldest sold price, in months",
            "minimum": 1,
            "maximum": 240,
            "type": "integer",
            "description": "Ignore sold prices older than this many months. Accepted by the sold prices service."
          },
          "minSquareFeet": {
            "title": "Smallest floor area, square feet",
            "minimum": 1,
            "type": "integer",
            "description": "Ignore comparables below this internal floor area. Accepted by the two price per square foot services."
          },
          "maxSquareFeet": {
            "title": "Largest floor area, square feet",
            "minimum": 1,
            "type": "integer",
            "description": "Ignore comparables above this internal floor area. Accepted by the two price per square foot services."
          },
          "crimeRadiusKm": {
            "title": "Crime search radius, kilometres",
            "minimum": 0.1,
            "maximum": 3,
            "type": "number",
            "description": "How far around the location the crime statistics should cover. The provider accepts 0.1 to 3 kilometres and uses 0.4 when this is left blank."
          },
          "planningCategory": {
            "title": "Planning application category",
            "type": "string",
            "description": "Restrict planning applications to one or more project types, comma separated. The provider documents home improvement, small residential, medium residential, large residential, mixed and tree."
          },
          "planningApplicationType": {
            "title": "Planning application type",
            "type": "string",
            "description": "Restrict planning applications to one or more application types, comma separated. The provider documents full planning application, householder planning application, change of use, listed building consent, lawful development, advertisement consent, tree preservation order, utilities, environmental impact, non-material amendment and discharge of conditions. Left blank, it returns all but the last four."
          },
          "planningMaxAgeDays": {
            "title": "Oldest planning application, in days",
            "minimum": 14,
            "maximum": 1500,
            "type": "integer",
            "description": "Ignore planning applications older than this. The provider accepts 14 to 1500 days."
          },
          "planningDecision": {
            "title": "Planning outcome",
            "enum": [
              "positive",
              "negative",
              "neutral"
            ],
            "type": "string",
            "description": "Restrict planning applications to one outcome, as the provider rates them."
          },
          "planningRadiusMiles": {
            "title": "Planning search radius, miles",
            "minimum": 0.01,
            "maximum": 3,
            "type": "number",
            "description": "How far around the location to look for planning applications. The provider accepts 0.01 to 3 miles."
          },
          "listedGrade": {
            "title": "Listed building grade",
            "enum": [
              "I",
              "II*",
              "II"
            ],
            "type": "string",
            "description": "Restrict listed buildings to one grade, as Historic England grades them."
          },
          "listedAfterYear": {
            "title": "Listed after year",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Only buildings added to the list after this year. Four digits, for example 1975."
          },
          "sourcingLists": {
            "title": "Sourcing list ids",
            "type": "string",
            "description": "Which investment sourcing lists to search, comma separated, up to five in one call. The provider names unmodernised-properties, repossessed-properties, reduced-properties, high-yield-properties and auction-properties among them. Required by the sourced properties service."
          },
          "sourcingRadiusMiles": {
            "title": "Sourcing search radius, miles",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How far around the location to search the sourcing lists. The provider accepts 1 to 200 miles and uses 40 when this is left blank."
          },
          "sourcingPropertyType": {
            "title": "Sourcing property type",
            "type": "string",
            "description": "Restrict sourced properties to one or more of flat, terraced_house, semi-detached_house and detached_house, comma separated. Prefix a type with an exclamation mark to exclude it instead."
          },
          "sourcingMaxAgeDays": {
            "title": "Newly listed within, in days",
            "minimum": 1,
            "type": "integer",
            "description": "Only sourced properties listed within the last this many days."
          },
          "excludeSoldSubjectToContract": {
            "title": "Exclude sold subject to contract",
            "type": "boolean",
            "description": "Leave out sourced properties that are already sold subject to contract, so the list is what is still available.",
            "default": false
          },
          "resultsPerCall": {
            "title": "Results per call",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many records the provider should return in one call, on the services that take it. The provider charges per ten or per fifty results on those services, so this is what a single call costs you there."
          },
          "page": {
            "title": "Page",
            "minimum": 1,
            "type": "integer",
            "description": "Which page of sourced properties to read, using the results per call value as the page size. The provider caps page times results at 500."
          },
          "strictPostcode": {
            "title": "UPRNs inside this postcode only",
            "enum": [
              "true",
              "false"
            ],
            "type": "string",
            "description": "Set to true to return only UPRNs that sit inside the postcode you gave, rather than the ones nearest to it."
          },
          "internalAreaSqFt": {
            "title": "Internal area, square feet",
            "minimum": 1,
            "type": "integer",
            "description": "The property's internal floor area, for the sale valuation service."
          },
          "valuationPropertyType": {
            "title": "Valuation property type",
            "enum": [
              "flat",
              "terraced_house",
              "semi-detached_house",
              "detached_house",
              "house"
            ],
            "type": "string",
            "description": "The property's type, for the sale valuation service."
          },
          "constructionDate": {
            "title": "Construction date or period",
            "type": "string",
            "description": "When the property was built, for the sale valuation service. The provider takes a date or a period and does not publish a fixed list, so this is free text."
          },
          "bathrooms": {
            "title": "Bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "The property's bathroom count, for the sale valuation service."
          },
          "finishQuality": {
            "title": "Finish quality",
            "type": "string",
            "description": "How well finished the property is, for the sale valuation service. The provider does not publish a fixed list, so this is free text."
          },
          "extraParameters": {
            "title": "Extra query parameters",
            "type": "object",
            "description": "Any other parameter the provider documents for the selected service that this actor does not have its own field for. Given as a JSON object, for example {\"points\": 40}. Nothing here is invented: it is passed to the provider exactly as written, so check the name against the provider's own documentation first."
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop after this many rows. The list services can return hundreds of records for one location, so this is what bounds a run that reads a long list of postcodes.",
            "default": 500
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 144,
            "type": "integer",
            "description": "Pacing ceiling. The provider rate limits per account across every key on it, between 12 and 72 requests per 30 seconds depending on your plan, so the default here is the slow end. Raise it if your plan allows and nothing else is calling the same account.",
            "default": 24
          },
          "apiKey": {
            "title": "API key",
            "type": "string",
            "description": "Your own API key for the UK property data provider. This actor is bring-your-own-key and never ships a key of its own. Leave blank to use the DATA_API_KEY environment secret instead."
          },
          "baseUrl": {
            "title": "API base URL",
            "type": "string",
            "description": "Override the host the actor calls. Only useful for testing against a different environment."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}