homeStatus and statusText

homeStatus is Zillow's status code for the home, and statusText is a short readable label built from that code and the listing's flags. Read homeStatus before you read price, dates or day counts.

FieldType
data.homeStatusstring or null (enum)
data.statusTextstring or null

What it means

homeStatus is one of FOR_SALE, FOR_RENT, RECENTLY_SOLD, PENDING, COMING_SOON, FORECLOSURE, OFF_MARKET or OTHER. Homes that aren't listed usually come back as OTHER rather than OFF_MARKET, because that is the code Zillow uses for them.

statusText turns the code into one of a small set of labels: For sale, Pending, Coming soon, New construction, For sale by owner, Foreclosure, Auction, For rent, Sold or Off market. A home listed for sale with a pending flag reads Pending even if its code is still FOR_SALE.

Many other fields change meaning with the status: price is a rent for FOR_RENT, a sale price for RECENTLY_SOLD, and absent for OTHER. The calculated fields read homeStatus too, so a rental never gets a price per square foot.

Recorded example

Recorded lookup of a home for sale
{
  "homeStatus": "FOR_SALE",
  "statusText": "New construction"
}
Recorded lookup of a home that isn't listed
{
  "homeStatus": "OTHER",
  "statusText": "Off market"
}
Recorded lookup of a sold home
{
  "homeStatus": "RECENTLY_SOLD",
  "statusText": "Sold"
}

Values are copied from recorded lookups of public Zillow pages, with the other fields of data left out. They show the shape and typical values, not today's data for these homes.

When it is null

  • homeStatus is null only when the source record carries no status at all.
  • statusText is null when the status is unclear, for example an OTHER code that carries neither a not-for-sale marker nor a status label of its own.

Read it in code

Send a Zillow link, a zpid or an address to GET /v1/zillow/property with your key in the x-api-key header, then read the field from data:

curl and jq
curl -sG "https://api.propertiesapi.com/v1/zillow/property" \
  -H "x-api-key: $PROPERTIESAPI_KEY" \
  --data-urlencode "url=https://www.zillow.com/homedetails/1704-Shelbourne-Dr-Austin-TX-78752/29412761_zpid/" \
  | jq '.data | {homeStatus, statusText}'
Python
import os
import requests

r = requests.get(
    "https://api.propertiesapi.com/v1/zillow/property",
    params={"url": "https://www.zillow.com/homedetails/1704-Shelbourne-Dr-Austin-TX-78752/29412761_zpid/"},
    headers={"x-api-key": os.environ["PROPERTIESAPI_KEY"]},
    timeout=120,
)
r.raise_for_status()
home = r.json()["data"]
status, label = home["homeStatus"], home["statusText"]
listed = status in {"FOR_SALE", "PENDING", "COMING_SOON", "FORECLOSURE", "FOR_RENT"}
print(status, "|", label, "| listed" if listed else "| not listed")
JavaScript (Node)
const url = "https://www.zillow.com/homedetails/1704-Shelbourne-Dr-Austin-TX-78752/29412761_zpid/";
const res = await fetch(
  `https://api.propertiesapi.com/v1/zillow/property?url=${encodeURIComponent(url)}`,
  { headers: { "x-api-key": process.env.PROPERTIESAPI_KEY } },
);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { data: home } = await res.json();
const LISTED = new Set(["FOR_SALE", "PENDING", "COMING_SOON", "FORECLOSURE", "FOR_RENT"]);
console.log(home.homeStatus, home.statusText, LISTED.has(home.homeStatus) ? "listed" : "not listed");

Common mistakes

  • Filtering for OFF_MARKET to find homes that aren't listed. Most come back as OTHER; check for both.
  • Using statusText as a key. It is a display label; branch on homeStatus.
  • Treating Pending as sold. A pending home is under contract but the sale hasn't closed, so price is still the asking price.

Zillow is a trademark of Zillow, Inc. PropertiesAPI is an independent service and is not affiliated with, endorsed by or sponsored by Zillow.

homeStatus and statusText questions

What does OTHER mean?+

Zillow's catch-all code. For a home that isn't listed it usually comes with statusText Off market.

How do I spot new construction?+

statusText is New construction for builder listings; homeStatus stays FOR_SALE.

Does the status update by itself?+

Each lookup reads the page at that moment. To follow status changes over time, look the home up again or use a watchlist.