← All case studies

Zillow property research
with REL

Start with 14,747 residential address strings from Santa Cruz’s city parcel data. Match them to Zillow through REL, then save property facts, Zestimates, and source pages in SQLite. The Python crawler uses rel-crawlee to resume work in one persistent browser session.

The crawl recipe

REL.app + rel-crawlee + SQLite
  1. 01

    Set up REL

    Install Release REL.app in /Applications. In Settings → Proxies, add your Oxylabs datacenter proxy using the host, port, protocol, and credentials supplied by Oxylabs. In Settings → Profiles, create OxylabsDatacenter and select that proxy.

    Use your own proxy account. Credentials are configured in REL, not in the crawler.

  2. 02

    Get the crawler

    With Python 3.11+ and Git installed, clone the case-studies repository:

    git clone https://github.com/rel-me/rel-case-studies.git
    cd rel-case-studies
  3. 03

    Run. Inspect. Resume.

    ./zillow/run.sh

    The command installs dependencies, imports the city address inventory, and creates a session from your Profile. It verifies up to 50 addresses with one request at a time. Run it again to resume the saved queue and session.

    60-second navigation timeout · One retry after a five-second pause for transient browser errors · Stops on access challenges or exhausted retries

What you get

zillow/output/

Matched properties

zillow.sqlite3 keeps property IDs, addresses, Zestimates, prices with listing status, and property facts with area units.

Source evidence

Saved HTML, structured data, timestamps, and URLs let you check each observation. Missing values and conflicting bathroom counts stay explicit.

Saved progress

crawlee/ holds the request queue; session.json identifies the reusable REL session. Captured data remains local.

Matches require the street and unit, Santa Cruz city/state, and Zillow property ID. Unmatched and ambiguous addresses are counted separately.