Jitty UK AI Property Scraper
Pricing
from $1.00 / 1,000 results
Jitty UK AI Property Scraper
Scrape residential property listings from jitty.com, extract properties across the UK with 20+ filters, including AI vision search.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Jitty UK Property Scraper
Scrape residential property listings from jitty.com, a UK property search platform with AI-powered features, price-per-sqft analysis, and detailed property insights. Sale listings only. Extract properties across the UK with 20+ filters including AI vision search.
Features
- UK-wide coverage - search any location (London, Manchester, Bath, etc.)
- 20+ filters - property type, price, bedrooms, ownership, condition, style, area, date added, AI vision tags, and more
- AI vision search - find properties by visual features (cottage, sea views, warehouse conversion, etc.)
- Rich data - coordinates, area, tenure, EPC, council tax, agent, features, nearby stations from detail pages
- ~23 listings per page with automatic pagination
- Resume & recurring updates — turn on Incremental mode to get only NEW,
UPDATED, and REAPPEARED properties on every scheduled run, or resume one
specific interrupted crawl with
resumeFromRunId.
Quick Start
Properties for sale in London
{"mode": "search","location": "london","max_pages": 5}
Flats under 500k in Greenwich
{"mode": "search","location": "greenwich","property_type": "flat","max_price": 500000}
Period properties with fireplaces
{"mode": "search","location": "bath","exterior_style": "period","interior_features": ["fireplace"]}
AI vision search - cottages with sea views
{"mode": "search","look_for": "sea_views","property_type": "detached","max_properties": 50}
New listings in the last 24 hours
{"mode": "search","location": "london","date_added": "24h","max_pages": 3}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build URL from filters) or url (use provided URLs) |
urls | array | - | URLs to scrape (url mode only) |
location | string | - | Location (e.g. "london", "bath", "greenwich", "manchester") |
look_for | string | - | AI vision search (e.g. "cottage", "sea_views", "warehouse_conversion") |
property_type | string | - | flat, detached, semi-detached, terraced, bungalow, maisonette, land, boat, mobile-home, parking |
bedrooms | integer | - | Minimum bedrooms (0=Studio+) |
min_price | integer | - | Minimum price in GBP |
max_price | integer | - | Maximum price in GBP |
ownership | string | - | freehold, leasehold, shared-ownership, share-of-freehold |
condition | string | - | good, renovation-potential, renovation-needed, derelict |
exterior_style | string | - | period, contemporary, early-modern, late-modern |
date_added | string | - | 24h, 3d, 1w, 1m |
min_area_sqft | integer | - | Minimum floor area in sqft |
max_area_sqft | integer | - | Maximum floor area in sqft |
outside_space | string | - | garden, large-garden, balcony, roof-terrace, communal-garden, patio |
interior_features | array | - | fireplace, exposed-brickwork, high-ceilings, sash-windows, wooden-beams, vaulted-ceilings, open-plan-kitchen, kitchen-island, breakfast-bar |
green_tech | string | - | solar-panels, ev-charger, heat-pump, underfloor-heating |
max_properties | integer | 10 | Max properties to scrape (0=unlimited) |
max_pages | integer | 5 | Max search result pages (~23 listings/page) |
resumeFromRunId | string | - | Continue one specific interrupted crawl (a run or dataset ID). For recurring monitoring of the same search instead, use Incremental mode below. |
incrementalMode | boolean | false | Recurring monitoring of this same search: the actor remembers the previous run itself and returns only NEW/UPDATED/REAPPEARED properties by default. See "Resume & recurring updates" below. |
stateKey | string | - | Optional name for a monitoring campaign, so its incremental state stays stable or is deliberately shared. Auto-derived from your search/filter settings when left empty. |
emitUnchanged | boolean | false | Incremental mode only. Also return (and bill for) properties unchanged since the last run, marked UNCHANGED. |
emitExpired | boolean | false | Incremental mode only. Also return (and bill for) properties from a previous run no longer found, marked EXPIRED, once a run has fully scanned the search (not capped, not a resume, no blocked page). |
proxy | object | Apify residential GB | Proxy configuration |
Resume & recurring updates
There are two different things here — pick the one that matches what you're doing:
| Situation | Use |
|---|---|
| A crawl stopped and should continue | resumeFromRunId |
| Run the same search on a schedule and receive only changes | incrementalMode |
| Keep separate recurring campaigns for similar searches | distinct stateKey values |
| Run a normal full snapshot | leave both off |
Resume (resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run ID or dataset ID and this run skips properties already collected there, returning only the remaining new ones.
Incremental mode (incrementalMode) is for a schedule (for example, daily or weekly): the actor remembers the previous run of the same search by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED properties by default — duplicates and unchanged properties are suppressed (and not charged). Turn on emitUnchanged or emitExpired only when you also want those rows returned (and billed for). State is isolated automatically per location/URL and every filter (including the detail toggle) — but not by max_properties/max_pages, which are scan-depth/output caps, not part of the tracked search; set stateKey to name or deliberately share a monitoring campaign.
Scheduled-run example — same search, run daily:
{ "mode": "search", "location": "bath", "property_type": "terraced", "incrementalMode": true }
→ every property comes back with "changeType": "NEW".
Day 2 (the schedule fires again, identical input):
→ properties whose price/EPC/tenure/etc. changed come back as "changeType": "UPDATED" with changedFields listing what changed, brand-new listings come back as "changeType": "NEW", properties that vanished and came back come back as "changeType": "REAPPEARED" — and properties that are still there, unchanged, are not returned at all (suppressed, not charged) unless emitUnchanged is on.
Cap semantics: max_properties counts properties actually returned this run, not scanned. If incremental mode suppresses some (unchanged) properties from a page, the run backfills from later pages up to your cap — it does not stop early just because a page was mostly unchanged.
Fields excluded from change detection: tags (the small set of AI-labeled feature pills shown on the search card) is excluded from the incremental fingerprint. Measured directly (two live fetches of the same pinned search 171s apart): jitty re-randomizes which subset of a property's features surfaces as tags on every render — the same 3 properties returned a completely different tags selection each time while every other field, including the full features list, was byte-identical. Treating it as a real change would make every property look UPDATED on every run. price, features, images, and every other field are real signals and are always compared, including a price reduction — that is exactly what a recurring monitoring run is for.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape — the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record — not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Output Fields
| Field | Description |
|---|---|
id | Property slug/ID |
title | Property street and area |
address | Full address from detail page |
price | Formatted price (e.g. "£2,000,000") |
price_numeric | Price as integer |
currency | Always "GBP" |
bedrooms | Number of bedrooms |
bathrooms | Number of bathrooms |
property_type | Flat, Terraced, Detached, etc. |
property_type_detail | More specific type (e.g. "End of Terrace") |
price_per_sqft | Price per square foot |
area_sqft | Floor area in square feet |
ownership | Freehold, Leasehold, etc. |
living_spaces | Number of living spaces |
council_tax_band | Council tax band (A-H) |
epc_current_score | Current EPC score |
epc_current_rating | Current EPC rating (A-G) |
epc_potential_score | Potential EPC score |
epc_potential_rating | Potential EPC rating (A-G) |
lease_years_remaining | Lease years remaining (leasehold only) |
estate_agent | Estate agent name |
latitude | Property latitude |
longitude | Property longitude |
tags | AI feature tags from search card |
features | Complete feature list from detail page |
nearby_stations | Transport stations with distances |
images | Property image URLs (up to 10) |
image_count | Total images available |
url | Full property URL |
Incremental mode only. When incrementalMode is on, every returned record also carries:
| Field | Description |
|---|---|
changeType | NEW | UPDATED | UNCHANGED | REAPPEARED | EXPIRED |
changedFields | Top-level fields that changed since last seen; non-empty only for UPDATED |
firstSeenAt | When this property was first observed by this monitoring campaign |
lastSeenAt | When this property was last observed |