{
  "openapi": "3.0.1",
  "info": {
    "title": "SiteVerdict — Land Registry Sold Price Alerts (UK)",
    "description": "Get alerted to new house sales in your postcodes, streets or towns from HM Land Registry Price Paid Data (OGL). Reads each monthly update, alerts only new sales, adds sector comparables (price vs median) and 12-month area stats. Slack/webhook alerts, CSV. England and Wales.",
    "version": "1.1",
    "x-build-id": "bIIvGajdct0BSAyNu"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/siteverdict~siteverdict-land-registry-price-alerts/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-siteverdict-siteverdict-land-registry-price-alerts",
        "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/siteverdict~siteverdict-land-registry-price-alerts/runs": {
      "post": {
        "operationId": "runs-sync-siteverdict-siteverdict-land-registry-price-alerts",
        "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/siteverdict~siteverdict-land-registry-price-alerts/run-sync": {
      "post": {
        "operationId": "run-sync-siteverdict-siteverdict-land-registry-price-alerts",
        "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": {
          "watches": {
            "title": "Areas to watch",
            "type": "array",
            "description": "One per line: full postcode <code>PL4 7LG</code>, sector <code>PL4 7</code>, outcode <code>PL4</code>, street <code>Mutley Plain, Plymouth</code>, or <code>town:Bath</code> / <code>district:Cornwall</code> / <code>county:Devon</code> / <code>locality:NAME</code>. Max 200.",
            "items": {
              "type": "string"
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "D",
                "S",
                "T",
                "F",
                "O"
              ],
              "enumTitles": [
                "Detached",
                "Semi-detached",
                "Terraced",
                "Flat / maisonette",
                "Other"
              ]
            }
          },
          "tenure": {
            "title": "Tenure",
            "type": "array",
            "description": "Empty = both.",
            "items": {
              "type": "string",
              "enum": [
                "F",
                "L"
              ],
              "enumTitles": [
                "Freehold",
                "Leasehold"
              ]
            }
          },
          "newBuild": {
            "title": "New build",
            "enum": [
              "any",
              "new",
              "established"
            ],
            "type": "string",
            "description": "Filter on the HM Land Registry new-build flag.",
            "default": "any"
          },
          "minPrice": {
            "title": "Minimum price (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional minimum price."
          },
          "maxPrice": {
            "title": "Maximum price (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional maximum price."
          },
          "includeCategoryB": {
            "title": "Include category B sales",
            "type": "boolean",
            "description": "Repossessions, buy-to-lets identified by mortgage, sales to companies, other property types.",
            "default": false
          },
          "alertOnFirstRun": {
            "title": "Alert on first run",
            "type": "boolean",
            "description": "Off: the first run saves the current monthly file as a baseline and alerts start next month. On: everything in the current monthly file is alerted now.",
            "default": false
          },
          "backfillMonths": {
            "title": "Backfill months on first run",
            "minimum": 0,
            "maximum": 24,
            "type": "integer",
            "description": "Also pull the last N months from the official report builder when a watch is new (0-24).",
            "default": 0
          },
          "alertOnChanges": {
            "title": "Alert on amended records",
            "type": "boolean",
            "description": "HM Land Registry sometimes corrects a published sale (record status C). Alert again when that happens.",
            "default": false
          },
          "includeComparables": {
            "title": "Comparables for each new sale",
            "type": "boolean",
            "description": "Same property type in the same postcode sector over 24 months: median, quartiles, price vs median and 5 recent sales.",
            "default": true
          },
          "includeAreaStats": {
            "title": "12-month area stats per watch (free)",
            "type": "boolean",
            "description": "12-month area stats per watch (free)",
            "default": true
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store that remembers which sales were already alerted.",
            "default": "siteverdict-lr-alerts"
          },
          "webhookUrl": {
            "title": "Webhook URL (https)",
            "type": "string",
            "description": "JSON digest of new sales. Stored encrypted, never logged."
          },
          "slackWebhookUrl": {
            "title": "Slack incoming webhook URL",
            "type": "string",
            "description": "https://hooks.slack.com/services/... Stored encrypted, never logged."
          },
          "exportCsv": {
            "title": "Save new-sales.csv",
            "type": "boolean",
            "description": "Save a CSV export to the run key-value store.",
            "default": true
          },
          "aiProvider": {
            "title": "AI brief (optional, your own key)",
            "enum": [
              "none",
              "anthropic",
              "openai"
            ],
            "type": "string",
            "description": "Optional AI brief written by your own Anthropic or OpenAI account. Off by default.",
            "default": "none"
          },
          "aiApiKey": {
            "title": "AI API key",
            "type": "string",
            "description": "Your own key. Stored encrypted, never logged or output."
          },
          "aiModel": {
            "title": "AI model (optional)",
            "type": "string",
            "description": "Default: claude-sonnet-5-5 (Anthropic) or gpt-4.1-mini (OpenAI)."
          },
          "sampleMode": {
            "title": "Sample mode (no network, free)",
            "type": "boolean",
            "description": "Replays official responses recorded on 11 Oct 2026 for PL4 / PL6 5 / Mutley Plain. Nothing is charged.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}