Rent-to-price ratio and gross yield
These calculated fields compare a year of rent with the home's value: the rent-to-price ratio, which value it used, and the same ratio as a gross yield percent.
| Field | Type |
|---|---|
data.calculated.rent_to_price_ratio | number or null |
data.calculated.rent_to_price_basis | "price", "zestimate" or null |
data.calculated.gross_yield_pct | number or null |
Fields under data.calculated are calculated by PropertiesAPI from the other fields in the same response. They are not Zillow estimates.
What it means
rent_to_price_ratio is the Rent Zestimate times twelve, divided by the price. When there is no sale or asking price, PropertiesAPI divides by the Zestimate instead, and rent_to_price_basis says which one was used: price or zestimate.
gross_yield_pct is the same ratio times one hundred, rounded to two decimals. It is a gross figure: before vacancy, taxes, insurance, HOA fees, repairs and financing.
Both use Zillow's figures as inputs and plain arithmetic, so they are a quick screen across homes you already looked up, not a forecast of returns. For rentals, price is the asking rent, so the ratio always uses the Zestimate there.
Because the inputs are Zillow's estimates, the ratio shares their gaps. Homes without a Rent Zestimate, such as land, small multi-family buildings and some new builds, get no ratio at all, and a recorded Manhattan condo with neither estimate came back with all three fields null.
Recorded example
{
"price": 400000,
"rentZestimate": 3090,
"calculated": {
"rent_to_price_ratio": 0.0927,
"rent_to_price_basis": "price",
"gross_yield_pct": 9.27
}
}{
"price": null,
"zestimate": 1032400,
"rentZestimate": 8050,
"calculated": {
"rent_to_price_ratio": 0.0936,
"rent_to_price_basis": "zestimate",
"gross_yield_pct": 9.36
}
}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
- There is no Rent Zestimate for the home.
- There is neither a sale or asking price nor a Zestimate to divide by.
- rent_to_price_basis is null exactly when the ratio is null.
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 -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 | {calculated: (.calculated | {rent_to_price_ratio, rent_to_price_basis, gross_yield_pct})}'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"]
c = home["calculated"]
if c["gross_yield_pct"] is not None:
print(f"gross yield {c['gross_yield_pct']}% on {c['rent_to_price_basis']}")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 { gross_yield_pct, rent_to_price_basis } = home.calculated;
if (gross_yield_pct != null) console.log(`gross yield ${gross_yield_pct}% on ${rent_to_price_basis}`);Common mistakes
- Mixing ratios with different bases in one ranking. Group or filter on rent_to_price_basis.
- Reading gross yield as net yield. Subtract costs before comparing with other investments.
- Treating the result as advice. It is arithmetic on Zillow's estimates and the listing price, provided as-is.
Related
- rentZestimate
- zestimate
- Price per square foot
- Every field of the property endpoint
- Guide: Asking Rent vs. Rent Zestimate: Build a Rental Comparison Spreadsheet
- All response fields
Zillow is a trademark of Zillow, Inc. PropertiesAPI is an independent service and is not affiliated with, endorsed by or sponsored by Zillow.
Rent-to-price ratio and gross yield questions
How is gross yield calculated?+
A year of the Rent Zestimate divided by the price, or by the Zestimate when there is no price, times one hundred.
Why does the basis say zestimate?+
The home has no sale or asking price, or it is a rental, so the Zestimate was the denominator.
Is this a cap rate?+
No. A cap rate uses net operating income; gross yield ignores every cost.