{
  "openapi": "3.0.1",
  "info": {
    "title": "Jitty Scraper - UK Property Listings & AI Search",
    "description": "Scrape residential property listings from Jitty.com across the UK. Search with 20+ property filters, including AI vision search, and extract clean structured data for homes, prices, locations, features and more.",
    "version": "0.1",
    "x-build-id": "DUBr3mncWSk6aaWSU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~jitty-uk-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-jitty-uk-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/abotapi~jitty-uk-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-jitty-uk-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/abotapi~jitty-uk-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-jitty-uk-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Scraping mode: 'search' builds URL from filters, 'url' uses provided URLs directly",
            "default": "search"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Location to search (e.g. 'london', 'bath', 'greenwich', 'manchester'). Leave empty for all UK.",
            "default": "london"
          },
          "radius_miles": {
            "title": "Search Radius (miles)",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Expand the search to include nearby areas within this many miles of the location."
          },
          "area_type": {
            "title": "Area Type",
            "enum": [
              "rural"
            ],
            "type": "string",
            "description": "Restrict to rural properties in the location. Only rural narrows results on the site."
          },
          "commute_station": {
            "title": "Commute Destination (station or place)",
            "type": "string",
            "description": "Find homes within a travel time of this station or place (for example paddington-station). Used together with Travel Minutes; replaces Location and Search Radius."
          },
          "travel_mode": {
            "title": "Travel Mode",
            "enum": [
              "public-transport",
              "walking",
              "cycling"
            ],
            "type": "string",
            "description": "How you travel to the commute destination. Default public-transport."
          },
          "travel_minutes": {
            "title": "Travel Minutes",
            "minimum": 15,
            "maximum": 60,
            "type": "integer",
            "description": "Maximum travel time in minutes to the commute destination: 15, 30, 45 or 60. Required when Commute Destination is set; any other value stops the run with an error instead of searching the default location."
          },
          "look_for": {
            "title": "AI Search",
            "type": "string",
            "description": "Search by visual features (e.g. 'cottage', 'sea_views', 'warehouse_conversion', 'barn_conversion', 'character_property'). Can be combined with location and other filters."
          },
          "property_type": {
            "title": "Property Type",
            "enum": [
              "flat",
              "detached",
              "semi-detached",
              "terraced",
              "bungalow",
              "maisonette",
              "land",
              "boat",
              "mobile-home",
              "parking"
            ],
            "type": "string",
            "description": "Filter by property type"
          },
          "bedrooms": {
            "title": "Min Bedrooms",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Minimum number of bedrooms (0=Studio+)"
          },
          "max_bedrooms": {
            "title": "Max Bedrooms",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of bedrooms"
          },
          "min_bathrooms": {
            "title": "Min Bathrooms",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Minimum number of bathrooms"
          },
          "min_price": {
            "title": "Min Price (GBP)",
            "type": "integer",
            "description": "Minimum price in British Pounds (use with max_price for range)"
          },
          "max_price": {
            "title": "Max Price (GBP)",
            "type": "integer",
            "description": "Maximum price in British Pounds"
          },
          "ownership": {
            "title": "Ownership",
            "enum": [
              "freehold",
              "leasehold",
              "shared-ownership",
              "share-of-freehold"
            ],
            "type": "string",
            "description": "Filter by ownership type"
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "good",
              "renovation-potential",
              "renovation-needed",
              "derelict"
            ],
            "type": "string",
            "description": "Filter by property condition"
          },
          "exterior_style": {
            "title": "Exterior Style",
            "enum": [
              "period",
              "contemporary",
              "early-modern",
              "late-modern"
            ],
            "type": "string",
            "description": "Filter by exterior style"
          },
          "date_added": {
            "title": "Date Added",
            "enum": [
              "24h",
              "3d",
              "1w",
              "1m"
            ],
            "type": "string",
            "description": "Filter by when listing was added"
          },
          "min_area_sqft": {
            "title": "Min Area (sqft)",
            "type": "integer",
            "description": "Minimum floor area in square feet"
          },
          "max_area_sqft": {
            "title": "Max Area (sqft)",
            "type": "integer",
            "description": "Maximum floor area in square feet"
          },
          "outside_space": {
            "title": "Outside Space",
            "enum": [
              "garden",
              "large-garden",
              "balcony",
              "roof-terrace",
              "communal-garden",
              "patio"
            ],
            "type": "string",
            "description": "Filter by outdoor area type"
          },
          "interior_features": {
            "title": "Interior Features",
            "type": "array",
            "description": "Filter by interior features. Multiple features are combined.",
            "items": {
              "type": "string",
              "enum": [
                "fireplace",
                "exposed-brickwork",
                "high-ceilings",
                "sash-windows",
                "wooden-beams",
                "vaulted-ceilings",
                "open-plan-kitchen",
                "kitchen-island",
                "breakfast-bar"
              ]
            }
          },
          "green_tech": {
            "title": "Green Tech",
            "enum": [
              "solar-panels",
              "ev-charger",
              "heat-pump",
              "underfloor-heating"
            ],
            "type": "string",
            "description": "Filter by green technology"
          },
          "urls": {
            "title": "Search URLs",
            "type": "array",
            "description": "jitty.com URLs to scrape (url mode only). Accepted shapes: all-UK listing, a location, location with filters (property type, bedrooms, price, area type), ?page=N and ?sort=, commute search with look-for, map views (read as the list page) and single property pages. http://, www. and trailing slashes are normalised. Leave the field untouched to scrape the built-in example of each shape.",
            "items": {
              "type": "string"
            },
            "default": [
              "https://jitty.com/for-sale",
              "https://jitty.com/for-sale/bath",
              "https://jitty.com/for-sale/london",
              "https://jitty.com/for-sale/east-london/flat-property-type",
              "https://jitty.com/for-sale/london/at-least-2-bedrooms/flat-property-type",
              "https://jitty.com/for-sale/london/price-up-to-200000-gbp",
              "https://jitty.com/for-sale/london/rural-area-type",
              "https://jitty.com/for-sale/london/flat-property-type?page=2",
              "https://jitty.com/for-sale/london/flat-property-type?sort=price_asc",
              "https://jitty.com/for-sale/paddington-station/travel-by-public-transport/travel-for-60-minutes/look-for-sauna",
              "https://jitty.com/for-sale/map/london/flat-property-type",
              "https://jitty.com/properties/lrlS0BMHI5MEzJRYM9n9"
            ]
          },
          "include_details": {
            "title": "Include Full Details",
            "type": "boolean",
            "description": "Add coordinates, floor area, tenure, EPC, council tax, estate agent, features, and full address to each property. Turn off for a faster, lighter run with card-level fields only.",
            "default": true
          },
          "max_properties": {
            "title": "Max Properties",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of properties to scrape (0=unlimited)",
            "default": 10
          },
          "max_pages": {
            "title": "Max Pages",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum search result pages to fetch. Leave empty (or 0) to go as deep as needed, bounded by Max Properties."
          },
          "proxy": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy configuration. GB residential proxy recommended."
          },
          "resumeFromRunId": {
            "title": "Resume from run/dataset ID",
            "type": "string",
            "description": "Continue ONE interrupted crawl: paste a previous run or dataset ID and this run will skip properties it already collected. For recurring monitoring of the same search instead, use Incremental mode below (the two are mutually exclusive when Incremental mode has no saved state yet)."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "Remembers the previous run of this SAME search itself (no need to paste a run ID) and classifies every property as NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED. Intended for scheduled/recurring runs against an unchanged search. See 'Resume from run/dataset ID' above for continuing one interrupted crawl instead.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Manual label for the Incremental mode baseline. Leave empty to auto-derive one from the mode, location/URLs and every filter (so two different searches never share state). Set this to deliberately share one baseline across otherwise-different filter setups."
          },
          "emitUnchanged": {
            "title": "Emit unchanged properties",
            "type": "boolean",
            "description": "Incremental mode only. When off (default), a property with no detected change since the last run is not returned or billed. Turn on to also return (and bill for) UNCHANGED rows.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired properties",
            "type": "boolean",
            "description": "Incremental mode only. When on, a property tracked in a previous run that no longer appears after a complete scan of this search is returned once with changeType EXPIRED (and billed like any other row). Skipped whenever this run did not reach a genuine end of results (a page cap, a blocked page, or Resume from run/dataset ID).",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Incremental mode only. Extra output field names to exclude from change detection, on top of the built-in exclusion of the rotating AI tag pills (tags). A field you list is still returned in every row but never makes a property UPDATED or appears in changedFields. A dotted name such as nearby_stations.distance ignores that key inside every list entry while the rest stays compared. Changing this list does not reset your baseline.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}