Skip to content
ListingrailGet an API key

Listingrail API

Search live sale and rental listings on 17 portals and get every listing back in the same shape. Base address https://listingrail.com. The interactive reference with every request and response model is at /reference.

Quick start

Get a free key on the home page, then:

import requests

r = requests.post(
    "https://listingrail.com/v1/listings/search",
    headers={"Authorization": "Bearer " + KEY},
    json={"source": "idealista", "location": "madrid", "type": "rent", "limit": 50},
    timeout=180,
)
r.raise_for_status()
for home in r.json()["listings"]:
    print(home["price"], home["currency"], home["address"])

A search answers with the listings and your credit balance:

{
  "source": "rightmove",
  "location": "SW11",
  "count": 1,
  "credits_used": 1,
  "credits_remaining": 99,
  "listings": [
    {
      "id": "94216239",
      "url": "https://www.rightmove.co.uk/properties/94216239",
      "source": "rightmove",
      "title": "1 bedroom apartment",
      "address": "Battersea Power Station, London, SW11",
      "city": null,
      "region": null,
      "postal_code": null,
      "country": "GB",
      "lat": 51.483057,
      "lng": -0.14647,
      "price": 3683,
      "currency": "GBP",
      "price_period": "month",
      "beds": 1,
      "rooms": null,
      "baths": 1,
      "area": null,
      "area_unit": null,
      "property_type": "Apartment",
      "listed_at": "2026-10-12T16:45:35Z",
      "photos": [
        "https://media.rightmove.co.uk/property-photo/8d2f9326b/94216239/8d2f9326b00af02e053ec063a0693474.jpeg",
        "https://media.rightmove.co.uk/property-photo/490c2b8ae/94216239/490c2b8aef60695a379d4aba312b248e.jpeg"
      ],
      "agent": {
        "name": "JOHNS&CO, Nine Elms",
        "phone": "020 3907 3782",
        "company": "JOHNS&CO"
      }
    }
  ]
}

The raw object is left out above; every listing carries one.

Keys and credits

Send your key as Authorization: Bearer <key> or X-API-Key: <key>. One credit is one listing returned. A request for more listings than you have credits returns as many as your credits cover; at zero credits the API answers 402. A search that fails at the portal is not charged. Paid plans renew their credits at the start of each billing month; the free 100 credits are given once.

Endpoints

Method and pathWhat it does
POST /v1/listings/search{source, location, type?, minPrice?, maxPrice?, minBeds?, limit}, limit 1 to 500 (default 20).
POST /v1/listings/details{source, url}: one listing by link (Craigslist, Redfin rentals).
GET /v1/sourcesPortals, countries, sale or rent, accepted filters.
POST /v1/monitorsSave a search to be checked for changes.
GET /v1/monitorsYour monitors with their last report, and how many your plan holds.
GET /v1/monitors/{id}/changesNew, removed and price-changed listings from the last check.
DELETE /v1/monitors/{id}Delete a monitor and free its slot.
GET /v1/account, GET /v1/usagePlan, balance and recent requests.

Portals

sourceCountryListingslocation takes
zillowUSsaleCity and state, ZIP code or Zillow search link, e.g. 'Austin, TX'
zillow-rentalsUSrentCity and state or ZIP code, e.g. 'Austin, TX'
redfinUSsaleCity and state, e.g. 'Miami, FL'
redfin-rentalsUSrentCity and state, e.g. 'San Francisco, CA'
zumperUSrentCity and state, e.g. 'San Francisco, CA' (sent as the slug san-francisco-ca)
padmapperUS, CArentCity and state or province, e.g. 'Toronto, ON'
apartments-comUSrentCity and state, e.g. 'Austin, TX'
craigslistUSrent, saleCraigslist site code, e.g. 'sfbay', 'newyork', 'losangeles'
rightmoveGBsale, rentUK town, area, outcode or postcode, or a Rightmove search link (for price and bedroom filters)
idealistaES, IT, PTsale, rentPlace name ('madrid', 'roma, it', 'lisboa, pt') or an Idealista search link (for price filters)
immobilienscout24DErent, saleGerman city or district, e.g. 'Berlin' or 'München' (apartments)
kleinanzeigenDErent, saleGerman city as written in Kleinanzeigen links, e.g. 'berlin', 'hamburg' (apartments)
fotocasaESsale, rentSpanish city, e.g. 'madrid', or a Fotocasa search link (for price filters)
daftIErent, saleIrish place as written in Daft links, e.g. 'dublin-city', 'cork', or 'ireland'
otodomPLrent, salePolish city ('Warszawa', 'Kraków', 'Wrocław' and other large cities), a region path from an Otodom link ('mazowieckie/warszawa'), or 'cala-polska' (apartments)
imovirtualPTsale, rentPortuguese place as written in Imovirtual links, e.g. 'lisboa', 'porto' (apartments)
hemnetSEsaleA hemnet.se search link, or a Hemnet location id (Stockholm is 17744)
bayutAErent, saleUAE city, e.g. 'dubai', 'abu-dhabi', or a Bayut search link (for areas and filters)
propertyfinderAEsale, rentUAE area or community, e.g. 'Dubai Marina', or a Property Finder search link

Rightmove and Idealista take no price or bedroom filters here; set them on the portal and pass the search link as location.

Listing fields

FieldTypeMeaning
idstringThe portal's own listing id.
urlstringLink to the listing on the portal.
sourcestringPortal key, as in /v1/sources.
titlestring | nullBuilding name or listing headline.
addressstring | nullStreet address as the portal shows it.
city, region, postal_codestring | nullWhere the portal gives them separately.
countrystringISO 3166 code.
lat, lngnumber | nullCoordinates.
pricenumber | nullAsking price, or the lowest rent of a building.
currencystringISO 4217 code.
price_period"month" | nullSet for rentals.
beds, bathsnumber | null0 beds means a studio.
roomsnumber | nullTotal rooms where the portal counts rooms, not bedrooms (Germany, Poland, Sweden, Portugal).
area, area_unitnumber | null, "sqft" | "sqm"Living area.
property_typestring | nullAs the portal names it.
listed_atstring | nullISO date the listing appeared, where shown.
photosstring[]Image links, where the portal gives full links.
agent{name, phone, company}Agent, agency or property manager as shown.
rawobjectEvery field the portal returned, unchanged.

A field a portal does not show is null. Which portal fills which field is shown on the home page.

Monitors

A monitor stores a search and checks it once a day. The first check records what is listed; each later check compares by listing id and reports new listings, listings that are gone, and price changes. Each check costs one credit per listing it reads. A free key or Starter holds 1 monitor, Pro 3, Scale 10; the monitor plans hold 3 and 20 and come with a dashboard to read and export the changes.

{
  "source": "zumper",
  "location": "Austin, TX",
  "filters": {
    "type": "rent",
    "maxPrice": 2000,
    "limit": 50
  },
  "webhook_url": "https://you.example/hooks/listings"
}

When something changed, the report is also POSTed to webhook_url (public https addresses only). A check that returns fewer listings than the last one reports the missing ones as removed, so keep limit above the number of listings the search usually has.

Errors

StatusMeaning and what to do
401Missing or unknown key. Send it as a Bearer token.
402No credits left. Wait for the renewal or move to a larger plan.
422The body is invalid; the answer names the field.
429More than 5 requests a second on one key. Retry after a second.
502The portal could not be read just now. Nothing was charged; retry in a minute.

Limits

  • Up to 500 listings per request. Larger pulls: page by price range or area, or ask about a delivered dataset.
  • Requests can take up to two minutes on large searches; set your client timeout to 180 seconds.
  • Listings are what each portal shows a visitor at request time. Results and order can differ between two requests.