Skip to main content

Properties

The /api/v1/properties endpoint is the workhorse of the Prop AI Deals API. It serves 2.1M+ on-market UK property listings aggregated from every major UK property portal and refreshed continuously, with deep filtering, BMV scoring, rental yield estimates, and agent details. For off-market leads (distressed sales, motivated sellers, repossessions, probate stock) see the off-market lead generators. Required scope: properties:read Cost: 1 request per call

Search properties

GET /api/v1/properties
Returns a paginated list of properties matching the filter criteria.

Request

curl "https://api.propaideals.co.uk/api/v1/properties?area=London&min_price=300000&max_price=500000&min_bedrooms=2&listing_type=sale&limit=20" \
  -H "Authorization: Bearer $PROPAIDEALS_API_KEY"
const params = new URLSearchParams({
  area: 'London',
  min_price: '300000',
  max_price: '500000',
  min_bedrooms: '2',
  listing_type: 'sale',
  limit: '20',
})

const res = await fetch(
  `https://api.propaideals.co.uk/api/v1/properties?${params}`,
  { headers: { Authorization: `Bearer ${process.env.PROPAIDEALS_API_KEY}` } }
)
const { data } = await res.json()
import requests

res = requests.get(
    "https://api.propaideals.co.uk/api/v1/properties",
    params={
        "area": "London",
        "min_price": 300_000,
        "max_price": 500_000,
        "min_bedrooms": 2,
        "listing_type": "sale",
        "limit": 20,
    },
    headers={"Authorization": f"Bearer {API_KEY}"},
)
properties = res.json()["data"]["properties"]

Query parameters

Location

ParamTypeDescription
areastringCity, town, or area name (e.g. London, Manchester, Edinburgh)
postcodestringFull postcode or outcode (e.g. M1 1AA or M1)
outcodestringPostcode prefix only (e.g. SW1)
regionstringUK region (e.g. North West, Greater London)
radius_milesnumberSearch radius around lat + lon (default 5, max 50)
latnumberLatitude for radius search
lonnumberLongitude for radius search

Price

ParamTypeDescription
min_priceintegerMinimum price (GBP)
max_priceintegerMaximum price (GBP)
price_qualifierstringasking, oiro (offers in region of), oieo, guide, from, auction

Property attributes

ParamTypeDescription
min_bedroomsintegerMinimum bedrooms
max_bedroomsintegerMaximum bedrooms
bedroomsintegerExact bedroom count
min_bathroomsintegerMinimum bathrooms
property_typestring|arrayhouse, flat, bungalow, detached, semi-detached, terraced, studio, maisonette, land, commercial
tenurestringfreehold, leasehold, share-of-freehold, commonhold
min_floor_area_sqftintegerMinimum internal area
max_floor_area_sqftintegerMaximum internal area
epc_rating_minstringMinimum EPC rating: A, B, C, D, E, F, G
council_tax_bandstringAH (England, Scotland) or AI (Wales)

Listing type & source

ParamTypeDescription
listing_typestringsale (default) or rent
sourcestring|arrayrightmove, zoopla, onthemarket (default: all)
statusstringactive (default), under_offer, sold_stc, let_agreed

Features (boolean filters)

ParamTypeDescription
has_gardenbooleanProperty has a garden
has_parkingbooleanOff-street parking available
has_garagebooleanGarage included
chain_freebooleanChain-free transaction
new_buildbooleanNew build property
auctionbooleanProperty going to auction
retirementbooleanRetirement property
shared_ownershipbooleanShared ownership scheme

Investment filters

ParamTypeDescription
min_yieldnumberMinimum gross rental yield (%)
max_yieldnumberMaximum gross rental yield (%)
min_bmv_discountnumberMinimum below-market-value discount (%)
is_btlbooleanSuitable for buy-to-let
is_hmobooleanHMO licensable
is_serviced_accommodationbooleanSuitable for short-term let

Listing age

ParamTypeDescription
max_days_on_marketintegerListed within the last N days
min_days_on_marketintegerStale listings older than N days
first_seen_afterISO dateOnly properties first scraped after this date

Agent

ParamTypeDescription
agent_namestringFilter by estate agent name (substring match)

Pagination & sorting

ParamTypeDefaultDescription
pageinteger1Page number (1-indexed)
limitinteger20Results per page (max 100)
sort_bystringnewestnewest, price_asc, price_desc, highest_yield, best_bmv, best_investment

Response

{
  "data": {
    "properties": [
      {
        "id": "5fa1b2c3-d4e5-6f78-9012-3456789abcde",
        "external_id": "rm_148273629",
        "source": "rightmove",
        "title": "3 bedroom terraced house for sale",
        "description": "A beautifully presented Victorian terraced house...",
        "url": "https://www.rightmove.co.uk/properties/148273629",

        "price": "£395,000",
        "price_numeric": 395000,
        "price_qualifier": "asking",
        "currency": "GBP",

        "address": "12 Example Road, Manchester",
        "postcode": "M1 1AA",
        "outcode": "M1",
        "area": "Manchester",
        "region": "North West",
        "country": "England",
        "latitude": 53.4808,
        "longitude": -2.2426,

        "bedrooms": 3,
        "bathrooms": 1,
        "reception_rooms": 2,
        "property_type": "terraced",
        "tenure": "freehold",
        "floor_area_sqft": 1240,
        "epc_rating": "C",
        "council_tax_band": "C",

        "has_garden": true,
        "has_parking": false,
        "chain_free": false,
        "new_build": false,

        "estimated_rental_pcm": 1850,
        "estimated_rental_yield": 5.62,
        "bmv_discount_percentage": 8.5,
        "deal_score": 78,
        "investment_score": 82,

        "agent_id": "ag_98273",
        "agent_name": "Example Estates",
        "agent_phone": "0161 123 4567",
        "agent_logo": "https://media.propaideals.co.uk/agents/example-estates.png",

        "listing_type": "sale",
        "status": "active",
        "first_seen": "2026-04-01T09:30:00Z",
        "last_updated": "2026-04-13T14:22:00Z",
        "days_on_market": 13,

        "main_image_url": "https://media.rightmove.co.uk/dir/propertyimg/.../IMG_00.jpg",
        "image_count": 24
      }
    ],
    "total": 4823,
    "page": 1,
    "limit": 20,
    "pages": 242
  },
  "meta": { /* request metadata */ }
}

Get property by ID

GET /api/v1/properties/{property_id}
Returns full details for a single property, including all images, the full description, agent details, transport links, nearby schools, price history, and enrichment data.

Request

curl "https://api.propaideals.co.uk/api/v1/properties/5fa1b2c3-d4e5-6f78-9012-3456789abcde" \
  -H "Authorization: Bearer $PROPAIDEALS_API_KEY"
property_id = "5fa1b2c3-d4e5-6f78-9012-3456789abcde"
res = requests.get(
    f"https://api.propaideals.co.uk/api/v1/properties/{property_id}",
    headers={"Authorization": f"Bearer {API_KEY}"},
)
property = res.json()["data"]

Response

Returns the same property object as the search endpoint, plus these additional fields:
{
  "data": {
    /* ... all search fields ... */

    "images": [
      { "url": "https://...", "caption": "Living room", "order": 1 },
      { "url": "https://...", "caption": "Kitchen", "order": 2 }
    ],
    "floor_plans": [
      { "url": "https://...", "floor_level": "ground", "sequence_order": 1 }
    ],

    "transport_data": {
      "nearest_station": "Manchester Piccadilly",
      "station_distance_miles": 0.4,
      "all_stations": [
        { "name": "Manchester Piccadilly", "distance_miles": 0.4, "type": "national_rail" },
        { "name": "Piccadilly Gardens", "distance_miles": 0.6, "type": "tram" }
      ]
    },

    "nearest_schools": [
      { "name": "Example Primary", "distance_miles": 0.2, "ofsted_rating": "Good", "type": "primary" },
      { "name": "Example High School", "distance_miles": 0.8, "ofsted_rating": "Outstanding", "type": "secondary" }
    ],

    "price_history": [
      { "date": "2026-04-01", "price": 395000, "change_type": "listed" },
      { "date": "2026-04-13", "price": 379000, "change_type": "reduced" }
    ],

    "key_features": [
      "Victorian terraced house",
      "South-facing garden",
      "Recently refurbished",
      "Walk to city centre"
    ]
  }
}

Common patterns

Find high-yield BTL properties under £200k in the Midlands

curl "https://api.propaideals.co.uk/api/v1/properties?\
region=West%20Midlands&\
max_price=200000&\
min_yield=8&\
is_btl=true&\
sort_by=highest_yield&\
limit=50" \
  -H "Authorization: Bearer $PROPAIDEALS_API_KEY"

Find chain-free flats in Manchester listed in the last week

curl "https://api.propaideals.co.uk/api/v1/properties?\
area=Manchester&\
property_type=flat&\
chain_free=true&\
max_days_on_market=7&\
sort_by=newest" \
  -H "Authorization: Bearer $PROPAIDEALS_API_KEY"

Find BMV opportunities in London (>10% discount)

curl "https://api.propaideals.co.uk/api/v1/properties?\
area=London&\
min_bmv_discount=10&\
sort_by=best_bmv&\
limit=100" \
  -H "Authorization: Bearer $PROPAIDEALS_API_KEY"

Page through all properties in a postcode

properties = []
page = 1
while True:
    res = requests.get(
        "https://api.propaideals.co.uk/api/v1/properties",
        params={"postcode": "SW1", "limit": 100, "page": page},
        headers={"Authorization": f"Bearer {API_KEY}"},
    )
    body = res.json()["data"]
    properties.extend(body["properties"])
    if page >= body["pages"]:
        break
    page += 1
  • Spatial search — Viewport, polygon, and radius queries
  • Market data — Sold history and comparables for a property
  • AI chat — Natural language property search