taxHistory

taxHistory lists the home's property tax record year by year: the tax paid, the assessed value and how each changed from the year before.

FieldType
data.taxHistoryarray of { year, taxPaid, value, taxIncreaseRate, valueIncreaseRate }

What it means

Each entry has year, taxPaid (US dollars, with cents), value (the assessed value), taxIncreaseRate and valueIncreaseRate. The list is newest year first.

The rates are fractions of the previous year, not percents. A taxIncreaseRate of a little under two means the tax almost tripled, which happens when an exemption ends or a home is reassessed after a sale.

Assessed value is the county's taxable value. It often differs from market value, and the gap varies by state. Use the history to see how the tax bill moved, not to price the home.

Recorded example

Recorded lookup of a home for sale
{
  "taxHistory": [
    {
      "year": 2025,
      "taxPaid": 12241.65,
      "value": 598179,
      "taxIncreaseRate": 0.0026521536,
      "valueIncreaseRate": -0.029032651
    },
    {
      "year": 2024,
      "taxPaid": 12209.27,
      "value": 616065,
      "taxIncreaseRate": 0.15513833,
      "valueIncreaseRate": 0.054555506
    },
    {
      "year": 2023,
      "taxPaid": 10569.53,
      "value": 584194,
      "taxIncreaseRate": 1.9024493,
      "valueIncreaseRate": 0.5634415
    }
  ]
}

Values are copied from recorded lookups of public Zillow pages, with the other fields of data left out; long lists are cut to their first entries and long text to its opening words. They show the shape and typical values, not today's data for these homes.

When it is null

  • The array is empty when the page shows no tax record, which happened for some condos, new construction and rentals in our recorded lookups.
  • Inside a year, taxPaid can be null while value is present. A recorded Austin home had assessed values for every year but no tax paid for several of them.

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 | {taxHistory}'
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"]
years = [t for t in home["taxHistory"] if t["taxPaid"] is not None]
latest = years[0] if years else None
print("latest tax on record:", latest and (latest["year"], latest["taxPaid"]))
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 paid = home.taxHistory.filter((t) => t.taxPaid != null);
console.log("latest tax on record:", paid[0] ? [paid[0].year, paid[0].taxPaid] : null);

Common mistakes

  • Assuming one entry per calendar year. Years can be missing.
  • Summing taxPaid with nulls as zero. Skip the null years or mark the total as partial.
  • Ignoring taxHistory when taxAnnualAmount is null. Sold and off-market homes often have no taxAnnualAmount but a full tax history; the newest taxPaid is the latest bill on record.

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

taxHistory questions

Is taxHistory the same as taxAnnualAmount?+

No. taxAnnualAmount is a single figure from the listing; taxHistory is the year-by-year record. In a recorded Austin listing the newest taxPaid matched taxAnnualAmount to the dollar.

Are increase rates percentages?+

No, fractions. Multiply by one hundred for a percent.

Does tax history include exemptions?+

No. The API returns the tax paid and assessed value per year only.