Quickstart
Make your first RealtyCrawl call, poll a pending job, and read the rows.
#1. Get a key
Sign up and copy your API key from the dashboard. Keys start with rc_. Keep it on your server.
#2. Search sold homes
curl -G https://api.realtycrawl.com/v1/zillow/sold \ -H "Authorization: Bearer $REALTYCRAWL_KEY" \ -d zip=80221 \ -d sold_within_days=90A cache hit answers 200 with the rows. Otherwise you get 202 with a poll_url.
#3. Poll until it's done
curl -G https://api.realtycrawl.com/v1/jobs/REQUEST_ID \ -H "Authorization: Bearer $REALTYCRAWL_KEY" \ -d wait=20wait=20 holds the call open until the result is ready, for up to 20 seconds. Check status: pending, complete or failed.
#4. Read the result
Response
{ "request_id": "req_01JA4X9EXAMPLE", "status": "complete", "credits": 1, "cached": false, "poll_url": null, "error": null, "result": { "source": "zillow", "query": { "zip": "80221", "sold_within_days": 90 }, "count": 1, "reported_total": null, "next_cursor": "c1.eyJ2IjoxfQ.example", "collected_at": "2026-10-12T20:31:05Z", "schema_version": 1, "completeness": "complete", "summary": { "priced_count": 1, "disclosed_count": 0, "median_sale_price": 450000, "p25": 450000, "p75": 450000, "median_price_per_sqft": 265, "earliest_sold_date": "2026-10-09", "latest_sold_date": "2026-10-09" }, "data": [ { "source": "zillow", "source_id": "12998656", "source_url": "https://www.zillow.com/homedetails/2041-Samuel-Dr-Denver-CO-80221/12998656_zpid/", "sold_date": "2026-10-09", "sale_price": { "amount": 450000, "currency": "USD" }, "sale_price_disclosure": "unknown", "list_price": null, "list_date": null, "sale_to_list_ratio": null, "days_on_market": null, "price_per_sqft": 265, "beds": 3, "baths": 2, "living_area_sqft": 1700, "property_type": "single_family", "address": { "line1": "2041 Samuel Drive", "unit": null, "city": "Denver", "state": "CO", "zip": "80221", "county": null, "county_fips": null }, "location": { "lat": 39.831684, "lng": -105.01129 }, "broker_name": "LPT Realty", "extras": { "home_type_raw": "SINGLE_FAMILY", "days_on_zillow": 3, "zestimate": { "amount": 446500, "currency": "USD" }, "rent_zestimate": { "amount": 2567, "currency": "USD" }, "tax_assessed_value": { "amount": 421000, "currency": "USD" } } } ], "field_notes": [ { "field": "list_price", "reason": "not_on_search_page", "detail": "Zillow's sold search does not show the last asking price. Call `property` for the full price history." }, { "field": "days_on_market", "reason": "not_on_search_page", "detail": "Zillow's sold search shows days since the sale, not days on market. That number is in `extras.days_on_zillow`. Call `property` for listing and sale dates." } ] }}dataholds the rows. Every source uses the same core fields.summaryhas price maths for the page.field_notesexplains every field that isnull.- Send
next_cursorascursorto get the next page.