Real estate data API
These records come from Zillow, Realtor.com, Rightmove, Zoopla, and LoopNet. Each item comes back as one JSON record, with the field names its source uses. Together they return property, listing, and agent records. The records are listings as each portal shows them. They are not county public records.
- Sources
- 5
- Record types
- 3
- From
- $0.90 per 1,000 records

On every source here: price address photoCount photos status
Which source returns which field: 10 field names across 5 sources
| Field | Zillow | Realtor.com | Rightmove | Zoopla | LoopNet |
|---|---|---|---|---|---|
| price | price | price | price | price | price |
| beds | beds | beds | bedrooms | bedrooms | not on these records |
| baths | baths | baths | bathrooms | bathrooms | not on these records |
| address | address | address | address | address | address |
| photoCount | photoCount | photoCount | photoCount | photoCount | photoCount |
| photos | photos | photos | photos | photos | photos |
| status | status | status | status | status | status |
| coordinates | not on these records | coordinates | coordinates | coordinates | coordinates |
| description | description | not on these records | description | description | description |
| priceText | priceText | not on these records | priceText | priceText | priceText |
Sources
Zillow
Listings, property facts, agent directories and agent profiles, as JSON records.
- property
- agent
163 documented fields. From $2.40 per 1,000 records.
Dataset pages: Agents
Realtor.com
Home listings, property detail and agent directories, as JSON records.
- property
57 documented fields. From $0.90 per 1,000 records.
Rightmove
UK property listings and property detail from Rightmove, as JSON records.
- property
58 documented fields. From $1.40 per 1,000 records.
Zoopla
UK property listings and property detail from Zoopla, as JSON records.
- property
46 documented fields. From $1.40 per 1,000 records.
LoopNet
Commercial property listings from LoopNet and Crexi, as JSON records.
- listing
45 documented fields. From $2.00 per 1,000 records.
Record types by source
Each cell links to the field table for that record type on that source.
Shared field names
Five field names are returned by all five sources. Field names that at least two sources return are below. The table shows the 12 most shared of 51. A shared name does not mean the same content: each source page says what its field holds. Every other field belongs to one source only.
| Field | Zillow | Realtor.com | Rightmove | Zoopla | LoopNet |
|---|---|---|---|---|---|
address | Yes | Yes | Yes | Yes | Yes |
photoCount | Yes | Yes | Yes | Yes | Yes |
photos | Yes | Yes | Yes | Yes | Yes |
price | Yes | Yes | Yes | Yes | Yes |
status | Yes | Yes | Yes | Yes | Yes |
coordinates | No | Yes | Yes | Yes | Yes |
description | Yes | No | Yes | Yes | Yes |
priceText | Yes | No | Yes | Yes | Yes |
agent | No | Yes | Yes | Yes | No |
currency | Yes | No | Yes | Yes | No |
isAuction | Yes | No | Yes | Yes | No |
isPremium | Yes | No | Yes | Yes | No |
Prices by record type
The lowest and highest price per 1,000 records for each record type across these sources. Each source page lists every billed event.
Example request
A request to Zillow. The Zillow page shows the record it returns.
curl
curl -X POST https://api.urakimon.com/records/zillow \
-H "x-api-key: $URAKIMON_API_KEY" \
-H "content-type: application/json" \
-d '{
"mode": "fullProperty",
"propertyUrls": ["19947712", "19935286", "20779037"]
}'Python
import os
import requests
res = requests.post(
"https://api.urakimon.com/records/zillow",
headers={"x-api-key": os.environ["URAKIMON_API_KEY"]},
json={
"mode": "fullProperty",
"propertyUrls": [
"19947712",
"19935286",
"20779037"
]
},
)
res.raise_for_status()
records = res.json()["records"]Node
const res = await fetch("https://api.urakimon.com/records/zillow", {
method: "POST",
headers: {
"x-api-key": process.env.URAKIMON_API_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"mode": "fullProperty",
"propertyUrls": ["19947712", "19935286", "20779037"]
}),
});
const { records } = await res.json();