Skip to main content

Real Estate

Real-estate listings and public property records: Zillow listing lookups, location searches (Zillow SRP with Redfin GIS fallback), and county assessor property records from free public ArcGIS REST FeatureServers.

What it scrapes

SourceData
Zillow (listing + SRP pages)Address, price, Zestimate, beds/baths, sqft, listing history, search results by location/status
Redfin GIS API (fallback)Location search fallback when Zillow SRP fails
County assessor ArcGIS RESTOwner, assessed value, tax, sale history by county + parcel id

Endpoints

Router: routers/real_estate.py · tag: Real Estate

MethodPathSummary
GET/v1/realestate/listing/{zillow_id}Single listing by Zillow id (zpid)
GET/v1/realestate/searchListings by location + status (for_sale | for_rent | sold)
GET/v1/realestate/property/{county}/{parcel_id}County property record

GET /v1/realestate/listing/{zillow_id}

curl -X GET "http://localhost:8005/v1/realestate/listing/123456789" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"data": {
"zpid": "123456789",
"address": "123 Main St, Austin, TX 78701",
"price": 650000,
"zestimate": 648500,
"beds": 3,
"baths": 2.5,
"sqft": 1850,
"status": "for_sale",
"history": [
{"date": "2024-05-01", "price": 620000, "event": "listed"}
],
"url": "https://www.zillow.com/homedetails/123456789_zpid/"
}
}

GET /v1/realestate/search

Query params: location (required, e.g. Austin, TX), status (for_sale | for_rent | sold, default for_sale), limit (1–50, default 20).

curl -X GET "http://localhost:8005/v1/realestate/search?location=Austin%2C%20TX&status=for_sale&limit=5" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"location": "Austin, TX",
"status": "for_sale",
"count": 5,
"data": [
{
"zpid": "123456789",
"address": "123 Main St, Austin, TX 78701",
"price": 650000,
"beds": 3,
"baths": 2.5,
"sqft": 1850,
"url": "https://www.zillow.com/homedetails/123456789_zpid/"
}
]
}

GET /v1/realestate/property/{county}/{parcel_id}

County slug is a lowercased, hyphenated county name; parcel id is the county assessor's parcel identifier.

curl -X GET "http://localhost:8005/v1/realestate/property/travis-county/0102030405" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"data": {
"county": "travis-county",
"parcel_id": "0102030405",
"owner": "Example Trust",
"assessed_value": 612000,
"tax": 8900.5,
"sale_history": [
{"date": "2019-03-15", "price": 480000, "type": "warranty deed"}
],
"address": "123 Main St, Austin, TX 78701",
"land_sqft": 7500,
"building_sqft": 1850
}
}

MCP tools

No dedicated MCP tool for real-estate endpoints yet — call the REST endpoints directly, or pair pry_scrape + pry_extract for custom listing pages.

Who uses this

  • PropTech / investment analysis — pull Zillow + county records for comparable sales and assessed-value signals.
  • Real-estate agents — build neighborhood digests (recent sales, Zestimates, tax records).
  • Tax / title researchers — county assessor lookups for due diligence.
  • Rental-market researchersstatus=for_rent searches across markets.

Next steps