Jitty Scraper - UK Property Listings & AI Search avatar

Jitty Scraper - UK Property Listings & AI Search

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Jitty Scraper - UK Property Listings & AI Search

Jitty Scraper - UK Property Listings & AI Search

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.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

0

Monthly active users

4 days ago

Last modified

Share

Jitty UK Scraper: Property Listings, Prices, Coordinates & EPC Data

Jitty UK Scraper turns jitty.com into structured UK for-sale property data. Search by location and more than 15 filters (property type, price, bedrooms, tenure, condition, exterior style, floor area, interior features, green tech, date added), add an AI vision search term such as "sea views" or "cottage" on top of any filter, or paste jitty.com search-result URLs directly. Every listing carries price, bedrooms, price per square foot and up to 10 photos from the search results, and can add tenure, EPC ratings, floor area, estate agent, coordinates and nearby transport stations from the property's own detail page. Export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • Two ways to search, plus AI vision search. Build a search from more than 15 filters (location, price, bedrooms, tenure, condition, exterior style, floor area, interior features, green tech, date added), or paste jitty.com search-result URLs directly. Add an AI vision search term like "sea views" or "cottage" on top of any other filter.
  • Full-detail enrichment, on demand. Turn on Include full details to add coordinates, floor area, tenure, EPC ratings, council tax band, estate agent, the complete feature list and nearby transport stations from each property's own detail page, or turn it off for card-level fields only.
  • Resume one interrupted crawl. Paste a previous run or dataset ID and the next run skips everything already collected, so a large crawl can continue without paying twice.
  • Recurring monitoring built in. Turn on Incremental mode to get only NEW, UPDATED and REAPPEARED properties on every scheduled run, with unchanged properties suppressed and not billed.
  • A cap that matches what you pay for. Max properties counts rows actually returned, not scanned, so a page of mostly-unchanged listings still backfills from later pages toward your cap.
  • Built for schedules. A run that could not read a single result page fails loudly instead of returning an empty dataset, so "no properties found" is never confused with "the site refused every request".
  • Send results into your apps. Optionally pipe scraped properties into Notion, Linear, Airtable or Apify through MCP connectors, right after the scrape.

Use Cases

  • Property investors and analysts: compare price per square foot, tenure and EPC ratings across a location to find undervalued or high-yield properties.
  • Home buyers and renovators: filter by condition, exterior style and interior features such as fireplaces or high ceilings to shortlist period and character properties.
  • Portfolio and market monitors: schedule Incremental mode against a saved search to receive only new listings and price changes, without re-downloading everything each time.
  • Real estate and comparison sites: build a listings feed with photos, agent details and nearby transport links for a location page.
  • Market researchers and data teams: build a historical dataset of prices, features and availability for a city or region.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
id"SampleSlugID1234567"
title"Mill Lane, Sampleford"
address"12 Mill Lane, Sampleford, Greater London"
price / price_numeric"£450,000" / 450000
currency"GBP"
bedrooms / bathrooms3 / 2
property_type"Terraced"
property_type_detail"End of Terrace"
price_per_sqft"£512 /sqft"
area_sqft880
ownership"Freehold"
living_spaces2
council_tax_band"D"
epc_current_score / epc_current_rating72 / "C"
epc_potential_score / epc_potential_rating88 / "B"
lease_years_remaining999 (leasehold only)
estate_agent"Sample Estates"
latitude / longitude51.5010 / -0.1246
location_source"detail_page"
tags["Fireplace", "Garden"]
features["Fireplace", "Garden", "Patio", "High Ceilings"]
nearby_stations[{"name": "Sampleford Park", "distance_miles": 0.4}]
imagesup to 10 photo URLs
image_count14
url"https://jitty.com/properties/SampleSlugID1234567"

When Incremental mode is on, every returned record also carries changeType (NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED), changedFields (populated only for UPDATED), firstSeenAt and lastSeenAt. See "Resume and recurring updates" below.

How to Use

  1. Pick a mode: search (build a search from filters, or from an AI vision search term) or url (paste jitty.com search-result URLs directly).
  2. In search mode, set location and any filters you need: property type, price, bedrooms, ownership, condition, exterior style, area, interior features, green tech, date added.
  3. Turn Include full details on or off, then set Max properties and Max pages to control run size and cost.
  4. Click Start. Download the dataset as JSON, CSV or Excel, or read it through the API.

Flats for sale in Greenwich, under £500k:

{
"mode": "search",
"location": "greenwich",
"property_type": "flat",
"max_price": 500000,
"max_properties": 20
}

Period properties with fireplaces in Bath:

{
"mode": "search",
"location": "bath",
"exterior_style": "period",
"interior_features": ["fireplace"],
"max_properties": 20
}

AI vision search for coastal-looking properties:

{
"mode": "search",
"look_for": "sea_views",
"property_type": "detached",
"max_properties": 20
}

Paste a search-result URL directly:

{
"mode": "url",
"urls": ["https://jitty.com/for-sale/manchester/terraced-property-type"]
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/jitty-uk-scraper").call(run_input={"mode": "search", "location": "bath", "property_type": "terraced"})
for prop in client.dataset(run["defaultDatasetId"]).iterate_items():
print(prop["title"], prop["price"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/jitty-uk-scraper').call({ mode: 'search', location: 'bath', property_type: 'terraced' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

How Max properties and Max pages shape a run

Search results page through automatically, about 23 listings per page. Max pages stops the walk after that many pages (leave it empty or 0 to go as deep as needed, bounded by Max properties instead). 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 rather than stopping early just because a page was mostly unchanged.

With Incremental mode and a non-zero Max properties, each page is only checked up to the quota still open when that page is read; when unchanged properties free up quota, the run moves on to the next page instead of going back for the rest of the current one, so some properties on that page are not checked in this run. For scheduled monitoring that should see every property in the search, set Max properties to 0 and limit run size with Max pages or a narrower search instead.

Resume and recurring updates

There are two different things here; pick the one that matches what you are doing:

SituationUse
A crawl stopped and should continueresumeFromRunId
Run the same search on a schedule and receive only changesincrementalMode
Keep separate recurring campaigns for similar searchesdistinct stateKey values
Run a normal full snapshotleave 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 (daily or weekly, for example): the actor remembers the previous run of the same search by itself, so no run ID needs pasting. 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). emitExpired only fires once a run has fully scanned the search (not capped, not a resume, no blocked page); otherwise the previous state is kept as-is and a log line explains why. Use it with Max properties set to 0: with a cap, a property left unchecked on a partly read page (see above) can be reported EXPIRED even though it is still listed, and then REAPPEARED on a later run. State is isolated automatically per location or URL and every filter (including the detail toggle), but not by max_properties or max_pages, which are scan-depth and output caps rather than part of the tracked search; set stateKey to name or deliberately share a monitoring campaign. The two mechanisms combine only to bootstrap a first Incremental mode run from an earlier plain crawl: once Incremental mode already has saved state for a search, adding resumeFromRunId on top of it is rejected, so the same properties are never double-counted.

The small "tags" pill list shown on each search card is resampled by jitty.com on every render, unlike the full features list from the detail page, which stays stable. tags is excluded from Incremental mode's change detection for this reason: a property is never reported UPDATED just because its tags sample looks different between two runs. price, features, images and every other field are real signals and are always compared, including a price reduction, which 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.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to 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.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (build a URL from filters) or url (use provided URLs).
locationstringlondonLocation to search (for example "london", "bath", "greenwich", "manchester"). Leave empty for all UK.
radius_milesinteger(none)Expand the search to include nearby areas within this many miles of the location.
look_forstring(none)AI vision search by visual features (for example "cottage", "sea_views", "warehouse_conversion"). Can be combined with location and other filters.
property_typestring(none)flat, detached, semi-detached, terraced, bungalow, maisonette, land, boat, mobile-home, parking.
bedroomsinteger(none)Minimum number of bedrooms (0 = Studio+).
max_bedroomsinteger(none)Maximum number of bedrooms.
min_bathroomsinteger(none)Minimum number of bathrooms.
min_priceinteger(none)Minimum price in GBP (use with max_price for a range).
max_priceinteger(none)Maximum price in GBP.
ownershipstring(none)freehold, leasehold, shared-ownership, share-of-freehold.
conditionstring(none)good, renovation-potential, renovation-needed, derelict.
exterior_stylestring(none)period, contemporary, early-modern, late-modern.
date_addedstring(none)24h, 3d, 1w, 1m.
min_area_sqftinteger(none)Minimum floor area in square feet.
max_area_sqftinteger(none)Maximum floor area in square feet.
outside_spacestring(none)garden, large-garden, balcony, roof-terrace, communal-garden, patio.
interior_featuresarray(none)fireplace, exposed-brickwork, high-ceilings, sash-windows, wooden-beams, vaulted-ceilings, open-plan-kitchen, kitchen-island, breakfast-bar. Multiple values combine.
green_techstring(none)solar-panels, ev-charger, heat-pump, underfloor-heating.
urlsarray(none)jitty.com search-result URLs to scrape (url mode only).
include_detailsbooleantrueAdd coordinates, floor area, tenure, EPC, council tax, estate agent, features and full address from each property's detail page. Turn off for a lighter run with card-level fields only.
max_propertiesinteger10Maximum number of properties to return (0 = unlimited).
max_pagesinteger(none)Maximum search result pages to fetch. Leave empty (or 0) to go as deep as needed, bounded by Max properties.
resumeFromRunIdstring(none)Continue one interrupted crawl: paste a previous run or dataset ID and this run skips properties already collected. For recurring monitoring of the same search instead, use Incremental mode.
incrementalModebooleanfalseRemembers the previous run of this same search itself and classifies every property as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED. Intended for scheduled, recurring runs against an unchanged search.
stateKeystring(none)Manual label for the Incremental mode baseline. Leave empty to auto-derive one from the mode, location or URLs and every filter. Set this to deliberately share one baseline across otherwise-different filter setups.
emitUnchangedbooleanfalseIncremental mode only. Also return (and bill for) properties unchanged since the last run, marked UNCHANGED.
emitExpiredbooleanfalseIncremental 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.
proxyobjectApify residential, GBProxy configuration.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"id": "SampleSlugID1234567",
"title": "Mill Lane, Sampleford",
"address": "12 Mill Lane, Sampleford, Greater London",
"price": "£450,000",
"price_numeric": 450000,
"currency": "GBP",
"bedrooms": 3,
"bathrooms": 2,
"property_type": "Terraced",
"property_type_detail": "End of Terrace",
"price_per_sqft": "£512 /sqft",
"area_sqft": 880,
"ownership": "Freehold",
"living_spaces": 2,
"council_tax_band": "D",
"epc_current_score": 72,
"epc_current_rating": "C",
"epc_potential_score": 88,
"epc_potential_rating": "B",
"estate_agent": "Sample Estates",
"latitude": 51.501,
"longitude": -0.1246,
"location_source": "detail_page",
"tags": ["Fireplace", "Garden"],
"features": ["Fireplace", "Garden", "Patio", "High Ceilings"],
"nearby_stations": [{ "name": "Sampleford Park", "distance_miles": 0.4 }],
"images": ["https://jitty-cdn.com/blobs/sample-image-01"],
"image_count": 14,
"url": "https://jitty.com/properties/SampleSlugID1234567"
}

Plan Requirement

The default connection setting (Apify residential proxy, United Kingdom) works out of the box, and the actor works through further connection options automatically when one is refused. Keep the residential group selected for large or frequent runs; it gives more headroom than a plain datacenter route under Connection.

FAQ

How much does it cost?

You pay per property returned to the dataset, plus a separate charge for properties where the detail page was actually fetched (coordinates, EPC, tenure, agent and the rest of Include full details). The Pricing tab shows the current rates for both. Use Max properties to cap the cost of any run.

This actor collects only publicly available property listing data. You are responsible for how you use it: follow jitty.com's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing photos and estate agent details may be subject to third-party rights.

Can I get only new or changed properties on a schedule?

Yes. Schedule the actor from the Schedules tab with the same search input and turn on Incremental mode. Each run then returns only NEW, UPDATED and REAPPEARED properties, and unchanged ones are not billed unless Emit unchanged properties is on. Set Max properties to 0 so every scheduled run checks the whole search (see "How Max properties and Max pages shape a run" above).

What is the difference between Resume and Incremental mode?

Resume (resumeFromRunId) continues ONE specific interrupted crawl: paste a previous run or dataset ID and this run skips everything it already collected. Incremental mode is for a recurring schedule over the SAME search: the actor remembers the previous run itself, so no ID needs pasting. The two combine only to bootstrap a first Incremental mode run from an earlier plain crawl; once Incremental mode has saved state for a search, adding Resume on top of it is rejected, so the two mechanisms never double-count the same properties.

Why did my run fail instead of returning an empty dataset?

If the site refused every request for every result page, the run stops with a clear message so "no properties found" is never confused with "nothing could be read". Run it again in a few minutes. If the run's time limit was reached before any page could be read, the message says so instead. A run that read at least one page returns whatever it found, even if a later page could not be read.

Why do AI-labeled tags sometimes look unrelated to what actually changed?

The short "tags" pill list shown on each search card is resampled by jitty.com on every render, unlike the full feature list on the detail page, which stays stable. Because of that, tags is excluded from Incremental mode's change detection: a property whose tags sample looks different between two runs is not reported as UPDATED unless a real field, such as price or the full feature list, also changed.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

🔗 Want more real estate data?

Pair this actor with these related scrapers from the same team:

🧩 Zoopla Scraper
Scrape UK property from Zoopla: for sale, to rent and Land Registry sold prices. Search...
🏠 Rightmove
From $1/1K. Fast, reliable Rightmove.co.uk scraper for sale, rent, and sold-price...
🏠 iProperty MY Scraper
Scrape property listings from iProperty.com.my for sale or rent: price, PSF, bedrooms...
🏠 OnTheMarket Scraper
Scrape onthemarket.com for-sale, to-rent and new-homes listings with 85+ fields: price...
👗 Next.co.uk Scraper
Scrape Next.co.uk: keyword search, category and product-listing walks, full product...
🏠 PropertyGuru SG Scraper
From $0.80/1K. Scrape PropertyGuru.com.sg sale and rental listings with 30+ structured...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.