Zillow ZPID Lookup: Find the Property ID for Any Address

August 19, 2026 · 5 min read

Every property on Zillow has exactly one stable identifier: the ZPID, or Zillow Property ID. If you're building anything on top of Zillow data — a watchlist, a comps tool, a portfolio tracker — the ZPID is the primary key you'll join everything on. This short guide covers what it is, the two manual ways to find one, and how to resolve addresses to ZPIDs programmatically at any scale.

What is a ZPID?

A ZPID is the unique numeric ID Zillow assigns to each property in its database. It's hiding in plain sight in every property page URL:

https://www.zillow.com/homedetails/1874-Bromton-Dr-Lyndhurst-OH-44124/33012456_zpid/ # the digits right before "_zpid" are the ZPID → 33012456

Three properties of the ZPID make it the right key for developers:

Finding a ZPID manually

For one property, you don't need any tooling:

  1. From the URL: search the address on Zillow, open the property page, and read the digits before _zpid at the end of the URL.
  2. From the page source: view source and search for zpid — it appears in the page's embedded data, useful when a URL got shortened or mangled in a spreadsheet.

This stops scaling at about the tenth property. For lists, resolve programmatically.

Address → ZPID, programmatically

Send addresses; get full property records back, ZPID included. Up to 1,000 per request:

curl -X POST https://api.apillow.co/v1/properties \ -H "x-api-key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"addresses": ["1874 Bromton Dr, Lyndhurst, OH 44124"]}' # response (excerpt): { "zpid": 33012456, "address": "1874 Bromton Dr, Lyndhurst, OH 44124", "home_status": "SOLD", "price": ..., "zestimate": ..., "price_history": [...] }

Because the resolver returns the whole record, "look up the ZPID" and "get the property data" are the same call — you're not paying twice. Address matching is strict by design: if an input address can't be confidently resolved to the right property, you get an explicit error for that entry rather than a silently wrong house. With messy CRM exports, that guarantee matters more than it sounds.

ZPID → property, the other direction

Already have ZPIDs — from URLs you collected, a previous export, or another dataset? Send them as integers:

curl -X POST https://api.apillow.co/v1/properties \ -H "x-api-key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"zpids": [33012456, 20794780]}'

Zillow URLs work as inputs too ({"urls": [...]}) — the ZPID is parsed out for you. All three input types can be mixed across a batch, which is convenient when your list is half addresses, half pasted URLs.

What developers build on ZPIDs

Pattern How the ZPID is used
Watchlists & alerts Store ZPIDs, re-poll on a schedule, diff price and home_status against the last pull
Dataset joins Use the ZPID as the join key between Zillow fields and county records, rent rolls, or CRM rows — more reliable than address-string matching
Comps & analysis Dedupe candidate lists by ZPID before pulling sold data and price history
Condo/unit data Resolve the unit-level ZPID to get unit-scoped photos and details in multi-family buildings

Resolve your first address now

Free tier, no credit card. Address in, ZPID and 50+ fields out.

Get API Key

Related reading

Final takeaway

The ZPID is Zillow's primary key, and it should be yours too: stable across listings, universal across on- and off-market homes, and precise down to the unit. Read it from a URL when you need one; resolve addresses through the API when you need a thousand.