Texas Property Tax Data ServiceAdmin

Parcels

The main event: one parcel's full tax picture — entities, per-entity values, collectors, rates, exemptions.

GET /v1/parcels/{county_fips}/{account_number}

GET/v1/parcels/{county_fips}/{account_number}

One parcel by county + CAD account number, with boolean expansions. Parcels are account-centric: the natural key is (county_fips, account_number) — there is no statewide parcel ID, and account numbers are unique only within a district.

ParameterInTypeDescription
county_fips*pathstring5-digit county FIPS, e.g. 48201 = Harris.
account_number*pathstringThe CAD's account number for the parcel.
yearqueryintegerTax year. Defaults to the newest available.
taxing_unitsquerybooleanInclude the tax-bill lines (entities + per-entity values).
collectorsquerybooleanInclude each unit's collector contact (implies taxing_units).
ratesquerybooleanInclude each unit's latest adopted rates (implies taxing_units).
exemptionsquerybooleanInclude the parcel's exemption lines.

Only requested sections appear in the response; the rest are omitted entirely.

Request
curl "https://graywinston.modavi.me/v1/parcels/48201/0123450000004?taxing_units=true&collectors=true" \
  -H "X-API-Key: $GW_API_KEY"
Response (abridged)
{
  "data": {
    "id": 123456,
    "county_fips": "48201",
    "account_number": "0123450000004",
    "tax_year": 2026,
    "geo_id": "…",
    "situs": "1001 MAIN ST",
    "situs_city": "HOUSTON",
    "situs_zip": "77002",
    "owner_name": "SMITH JOHN",
    "owner_mailing": "PO BOX …",
    "state_category": "A1",
    "land_value": 85000,
    "improvement_value": 165000,
    "total_market_value": 250000,
    "appraised_value": 250000,
    "assessed_value": 250000,
    "value_status": "certified",
    "under_appeal": false,
    "provenance": { "source_code": "hcad_bulk", "status": "success", "…": "…" },
    "taxing_units": [
      {
        "tax_district": "011",
        "unit_code": "482-011-01",
        "unit_name": "HOUSTON ISD",
        "taxable_value": 235000,
        "appraised_value": 250000,
        "collector": {
          "id": "…",
          "name": "…",
          "collector_type": "county",
          "email": "…",
          "phone": "…",
          "website": "…"
        },
        "tax_rates": [
          { "tax_year": 2025, "total_rate": 1.0967, "no_new_revenue_rate": 1.0512, "…": "…" }
        ]
      }
    ]
  }
}

One parcel, many taxable values

Texas runs a cascade: market → appraised (after the homestead cap) → assessed → taxable, which differs per taxing unit because exemptions vary by entity. The parcel row carries the county-wide values; each taxing_units[] line carries that unit's taxable/appraised figures.

GET /v1/parcels

GET/v1/parcels

Filter list. At least one filter is required — account is not a filter (an account identifies exactly one parcel; use the lookup above).

ParameterInTypeDescription
countyquerystringCounty FIPS, e.g. 48201 for Harris.
yearqueryintegerTax year.
situsquerystringSitus address prefix match.
owner_namequerystringOwner name prefix match (exploration filter).
state_categoryquerystringExact state category code (A/B/C/D/E/F/G/J/L).
limitqueryintegerPage size, 1–200. Default 50.
offsetqueryintegerPage offset. Default 0.
Response (abridged)
{
  "data": [
    { "id": 123456, "county_fips": "48201", "account_number": "0123450000004", "…": "…" }
  ],
  "meta": { "total": 1834, "limit": 50, "offset": 0 }
}

Field reference

FieldMeaning
geo_idThe CAD's property/geo identifier (the client's "PID" filter)
situs / owner_mailingProperty location vs notice mailing address — they diverge constantly on commercial property
state_categoryStatewide property category code (A single-family, B multifamily, C vacant, D acreage, E farm/ranch, F commercial, G industrial, J pipelines, L other)
value_statusRoll state: preliminary / certified / supplemented — "final" values still change year-round
certified_atWhen the roll was certified (typically ~Jul 25)
under_appealParcel has an active ARB appeal