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=90

A 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=20

wait=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."      }    ]  }}
  • data holds the rows. Every source uses the same core fields.
  • summary has price maths for the page.
  • field_notes explains every field that is null.
  • Send next_cursor as cursor to get the next page.