API access
Your AI client reaches Texas Appraisal History through one ParcelOps MCP endpoint, so there is no separate key to hold for it and no per-source client to write. Reaching it takes no credentials of your own.
Where it came from
Freshness and coverage
What this source cannot tell you
- ⚠ Anything outside Texas — all 252 counties present in the Exempt.Land parcel corpus (~13.2 million parcels). A request past that edge comes back empty rather than approximated.
- ⚠ Anything from before 2019.
- ⚠ Anything Exempt.Land Texas appraisal corpus does not publish. ParcelOps returns this source as it stands and never fills a blank field from a different one.
- ⚠ This is county appraisal history, not verified sale history, title evidence, or a legal-boundary source.
- ⚠ City fields are blank in portions of the corpus, so address search requires county plus street address.
- ⚠ Appraisal districts use different land-use codes. Raw labels remain visible beside a convenience residential/commercial classification.
- ⚠ Agricultural and wildlife classification is collected for every appraisal year present, so false means "not agricultural". Homestead and over-65 are null on roughly 97% of rows because most county-years were never collected for exemption status: null means unknown, never "no exemption". Confirm exemption status with the appraisal district.
- ⚠ Owner entity type (individual, LLC, trust, corporation, and so on) is classified from the district owner-name string, not looked up in a corporate registry. About 31% classify as unknown, so filtering by type silently excludes them.
- ⚠ Owner names are district-published and are frequently abbreviated, misspelled, or stale after a sale. They find candidates rather than prove ownership.
- ⚠ Parcel geometry is appraisal district data, simplified for display. It is not survey grade and does not establish a legal boundary.
- ⚠ District acreage and geometry-derived acreage disagree frequently. Both are returned and neither is silently preferred.
- ⚠ Owner and legal-description search require a county, because a statewide fuzzy scan costs roughly ten times a county-scoped one. Broad or very common terms additionally require an acreage floor of at least 10 acres, or the request is refused rather than run past its three-second limit.
- ⚠ Land screening is supported at 10 acres and above. Below that the query is not index-backed against a 13.2-million-row table and is refused rather than served slowly.
- ⚠ Assessed and capped values are populated for no parcel in this corpus and are not returned at all, rather than returned as nulls that would read as "no cap applies".
Methods (12)
A method is one call your agent can make against this source.
searchProperties
readFind address candidates by street address in any of the 252 Texas counties in the corpus.
What you must providecountystreetAddressFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "county": { "type": "string", "maxLength": 64, "description": "Any Texas county name, such as Harris, Travis, or Gillespie." }, "streetAddress": { "type": "string", "minLength": 3, "maxLength": 200, "description": "Number and street only, such as 1200 Main St." }, "limit": { "type": "integer", "minimum": 1, "maximum": 25, "default": 25 } }, "required": [ "county", "streetAddress" ], "additionalProperties": false }getPropertyHistory
readReturn up to three requested county appraisal years for one search result.
What you must provideparcelIdFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "parcelId": { "type": "string", "pattern": "^[1-9]\\d{0,19}$", "description": "ParcelOps parcel ID returned by the address search." }, "years": { "type": "array", "minItems": 1, "maxItems": 3, "uniqueItems": true, "items": { "type": "integer", "minimum": 2019, "maximum": 2100 }, "description": "Up to three tax years. Defaults to the previous three completed years." } }, "required": [ "parcelId" ], "additionalProperties": false }getHomeownerSummary
readSummarize value changes, county contacts, deadline guidance, and homeowner next steps.
What you must provideparcelIdFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "parcelId": { "type": "string", "pattern": "^[1-9]\\d{0,19}$", "description": "ParcelOps parcel ID returned by the address search." }, "years": { "type": "array", "minItems": 1, "maxItems": 3, "uniqueItems": true, "items": { "type": "integer", "minimum": 2019, "maximum": 2100 }, "description": "Up to three tax years. Defaults to the previous three completed years." } }, "required": [ "parcelId" ], "additionalProperties": false }lookupParcel
readReturn the full county record for one parcel: owner and owner classification, legal description, mailing address, district acquisition date, centroid, bounding box, and both district and geometry-derived acreage.
What you must provideparcelIdFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "parcelId": { "type": "string", "pattern": "^[1-9]\\d{0,19}$", "description": "ParcelOps parcel ID returned by any search on this connector." } }, "required": [ "parcelId" ], "additionalProperties": false }getParcelTimeline
readReturn every collected appraisal year for one parcel, including agricultural, wildlife, homestead, over-65, and exemption-code fields. Null exemption flags mean not collected, never "no exemption".
What you must provideparcelIdFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "parcelId": { "type": "string", "pattern": "^[1-9]\\d{0,19}$", "description": "ParcelOps parcel ID returned by any search on this connector." }, "years": { "type": "array", "minItems": 1, "maxItems": 12, "uniqueItems": true, "items": { "type": "integer", "minimum": 2019, "maximum": 2100 }, "description": "Optional tax years. Omit to return every collected year from 2019 onward." } }, "required": [ "parcelId" ], "additionalProperties": false }searchByOwner
readFind parcels in one Texas county whose appraisal district owner name contains the given text, largest parcels first.
What you must providecountyownerNameFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "county": { "type": "string", "maxLength": 64, "description": "Texas county name. Required: a statewide fuzzy scan costs about ten times a county-scoped one." }, "ownerName": { "type": "string", "minLength": 3, "maxLength": 80, "description": "Owner name or fragment, such as King Ranch." }, "minAcres": { "type": "number", "minimum": 10, "description": "Optional acreage floor, minimum 10. Required in practice for short or very common terms, which otherwise exceed the three-second limit." }, "limit": { "type": "integer", "minimum": 1, "maximum": 50, "default": 25 } }, "required": [ "county", "ownerName" ], "additionalProperties": false }screenLand
readScreen rural land in one Texas county by acreage range and owner entity type, largest parcels first. Supported at 10 acres and above.
What you must providecountyminAcresFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "county": { "type": "string", "maxLength": 64, "description": "Texas county name, such as Gillespie." }, "minAcres": { "type": "number", "minimum": 10, "description": "Acreage floor, minimum 10. Smaller floors are not index-backed and are refused rather than run slowly." }, "maxAcres": { "type": "number", "minimum": 10, "description": "Optional acreage ceiling; must exceed minAcres." }, "ownerEntityTypes": { "type": "array", "minItems": 1, "maxItems": 8, "uniqueItems": true, "items": { "type": "string", "enum": [ "individual", "llc", "corporation", "trust", "partnership", "government", "exempt_org", "unknown" ] }, "description": "Optional owner classification filter. About 31% of parcels classify as unknown, so filtering excludes them." }, "limit": { "type": "integer", "minimum": 1, "maximum": 100, "default": 50 } }, "required": [ "county", "minAcres" ], "additionalProperties": false }identifyParcelAtPoint
readReturn the parcel whose appraisal district boundary contains one WGS84 coordinate inside Texas.
What you must providelatitudelongitudeFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "latitude": { "type": "number", "minimum": 25.5, "maximum": 36.7, "description": "WGS84 latitude inside Texas." }, "longitude": { "type": "number", "minimum": -107, "maximum": -93.4, "description": "WGS84 longitude inside Texas." }, "limit": { "type": "integer", "minimum": 1, "maximum": 10, "default": 5 } }, "required": [ "latitude", "longitude" ], "additionalProperties": false }getParcelsInArea
readReturn parcels intersecting a WGS84 bounding box inside Texas, for map windows up to 0.25 square degrees.
What you must providebboxFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "bbox": { "type": "string", "maxLength": 120, "description": "Bounding box as minLon,minLat,maxLon,maxLat. Must fall inside Texas and cover at most 0.25 square degrees, roughly a 50 km window." }, "limit": { "type": "integer", "minimum": 1, "maximum": 200, "default": 50 } }, "required": [ "bbox" ], "additionalProperties": false }searchByLegalDescription
readFind parcels in one Texas county whose legal description contains the given subdivision, block, lot, abstract, or survey text.
What you must providecountyqueryFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "county": { "type": "string", "maxLength": 64, "description": "Texas county name." }, "query": { "type": "string", "minLength": 3, "maxLength": 120, "description": "Legal description text, such as BLOCK 5 LOT 12." }, "minAcres": { "type": "number", "minimum": 10, "description": "Optional acreage floor, minimum 10. Required in practice for very common terms such as lot or blk." }, "limit": { "type": "integer", "minimum": 1, "maximum": 50, "default": 25 } }, "required": [ "county", "query" ], "additionalProperties": false }getParcelBoundary
readReturn one parcel boundary as GeoJSON, simplified for display. Not survey grade and not a legal boundary.
What you must provideparcelIdFreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": { "parcelId": { "type": "string", "pattern": "^[1-9]\\d{0,19}$", "description": "ParcelOps parcel ID returned by any search on this connector." } }, "required": [ "parcelId" ], "additionalProperties": false }getServiceInfo
readReturn county and field coverage, data gaps, and storage and compute safeguards.
FreshnessScheduled (source-level)Input schema
{ "type": "object", "properties": {}, "required": [], "additionalProperties": false }
Where this source is used
- Land research
Parcel records, ground conditions, and what reaches the property line, for raw and rural land.
- Commercial real estate
Parcel and assessment records, building programs, and the entity on the other side of the deal.
- Residential real estate
The parcel record, the housing programs that touch an address, and the conditions a buyer asks about.
- Real estate law
Federal rule text, rulemaking dockets, party records, and the property facts a filing has to state.
- Realtors and brokerages
The facts behind a listing, the programs a buyer may qualify for, and your own files in the same place.
- What has this property been assessed at over time?
