{
  "openapi": "3.0.1",
  "info": {
    "title": "UK Land Registry Sold Prices",
    "description": "Sold house prices from HM Land Registry Price Paid Data, every residential sale in England and Wales since 1995. Filter by postcode, street, town, district, county, date window and price window.",
    "version": "0.1",
    "x-build-id": "JJBwuzVvy8JVNg3Hr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/spookyweb~uk-land-registry-sold-prices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-spookyweb-uk-land-registry-sold-prices",
        "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/spookyweb~uk-land-registry-sold-prices/runs": {
      "post": {
        "operationId": "runs-sync-spookyweb-uk-land-registry-sold-prices",
        "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/spookyweb~uk-land-registry-sold-prices/run-sync": {
      "post": {
        "operationId": "run-sync-spookyweb-uk-land-registry-sold-prices",
        "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": {
          "postcode": {
            "title": "Postcode",
            "type": "string",
            "description": "A full UK postcode such as BA1 2XY. Case and spacing are normalised for you. Price Paid Data is indexed on whole postcodes only, so an outward code on its own such as BA1 will not match. Use town, district or county for a wider area."
          },
          "street": {
            "title": "Street",
            "type": "string",
            "description": "A street name on its own, without the house number, for example MILSOM STREET. Pair it with a town to keep a common street name from returning the same road in forty different places."
          },
          "town": {
            "title": "Town or city",
            "type": "string",
            "description": "The posting town on the address, for example BATH, MANCHESTER or NEWCASTLE UPON TYNE. This is the postal town rather than the council, so a Manchester suburb is often filed under MANCHESTER."
          },
          "district": {
            "title": "District or council",
            "type": "string",
            "description": "The local authority district, for example TAMESIDE or BATH AND NORTH EAST SOMERSET. This is the right field for pulling every sale in one council area, which the postal town does not line up with."
          },
          "county": {
            "title": "County",
            "type": "string",
            "description": "The county on the address, for example GREATER MANCHESTER or GLOUCESTERSHIRE. The widest of the address filters, useful for regional analysis when paired with a date window."
          },
          "soldAfter": {
            "title": "Sold on or after",
            "type": "string",
            "description": "Earliest sale date to include, as YYYY-MM-DD. The bound is inclusive. Price Paid Data starts on 1 January 1995, so anything earlier simply widens the window."
          },
          "soldBefore": {
            "title": "Sold on or before",
            "type": "string",
            "description": "Latest sale date to include, as YYYY-MM-DD. The bound is inclusive. Newly registered sales appear roughly two months after completion, so the most recent weeks are always thin."
          },
          "minPrice": {
            "title": "Minimum price paid",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest sale price to include, in whole pounds with no commas or currency symbol. The bound is inclusive, so 250000 keeps a sale at exactly 250,000."
          },
          "maxPrice": {
            "title": "Maximum price paid",
            "minimum": 0,
            "type": "integer",
            "description": "Highest sale price to include, in whole pounds with no commas or currency symbol. The bound is inclusive. Useful for stripping out the bulk portfolio transfers that sit at the top of every area."
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Keep only these kinds of property. Leave it empty to keep all of them. Other covers everything that is not a home in the usual sense, which is where most commercial and land transactions land.",
            "items": {
              "type": "string",
              "enum": [
                "detached",
                "semi-detached",
                "terraced",
                "flat-maisonette",
                "otherpropertytype"
              ],
              "enumTitles": [
                "Detached",
                "Semi-detached",
                "Terraced",
                "Flat or maisonette",
                "Other"
              ]
            }
          },
          "estateType": {
            "title": "Tenure",
            "enum": [
              "any",
              "freehold",
              "leasehold"
            ],
            "type": "string",
            "description": "Keep only freehold or only leasehold sales. Flats are almost always leasehold and houses are usually freehold, so this doubles as a rough filter for flats against houses.",
            "default": "any"
          },
          "newBuildOnly": {
            "title": "New builds only",
            "type": "boolean",
            "description": "Keep only properties that were newly built when they sold. This is the first sale of a plot, so it is how you find which developments completed in an area and what the units went for.",
            "default": false
          },
          "transactionCategory": {
            "title": "Transaction category",
            "enum": [
              "any",
              "standard",
              "additional"
            ],
            "type": "string",
            "description": "Standard covers ordinary sales at market value between private individuals. Additional covers repossessions, buy to let purchases, transfers under a power of sale and other sales that do not meet the standard criteria.",
            "default": "any"
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "newest",
              "oldest",
              "highest-price",
              "lowest-price",
              "fastest"
            ],
            "type": "string",
            "description": "How the Land Registry should order the sales before paging. Sorting is done in the query service and adds several seconds per page, so pick Fastest when the order genuinely does not matter and you want the whole set.",
            "default": "newest"
          },
          "maxResults": {
            "title": "Maximum sales to return",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Hard cap on the rows saved, which is also the cap on what the run can cost. Each sale returned is one billable result. The ceiling is 10000 because that is what fits inside the 300 second default run timeout, and a run that runs out of time stops cleanly and keeps everything it collected.",
            "default": 500
          },
          "maxRecordsScanned": {
            "title": "Maximum records to scan",
            "minimum": 200,
            "maximum": 500000,
            "type": "integer",
            "description": "Safety stop on how many sales the run reads before giving up on filling the result cap. It only matters when the property, tenure, new build or category filters are narrow, because those are applied after the records arrive. Set it below the maximum sales to return and it wins, capping the run there and saying so in the log.",
            "default": 20000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}