API Reference
Parcels
Retrieve parcel records for a county with full data lineage.
GET /parcels
Returns parcel records for the specified county. Each record includes public-records property fields and data-lineage metadata.
Request
curl -G https://api.tracts.ai/parcels \
--data-urlencode 'county=Hillsborough, FL' \
--data-urlencode 'limit=100' \
-H 'x-api-key: YOUR_API_KEY'Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
county | string | Yes | County name in "Name, ST" format — e.g. "Hillsborough, FL". Must match a configured county from the /counties endpoint. |
limit | integer | No | Number of records to return. Range: 1–1000. Default: 100. |
Response
{
"data": [
{
"provenance": {
"countyFips": "12057",
"countyName": "Hillsborough County",
"state": "FL",
"source": "arcgis",
"sourceUrl": "https://services.arcgis.com/.../FeatureServer/0",
"fetchedAt": "2026-06-30T00:00:00.000Z"
},
"apn": "U-01-29-18-ZZZ-000000-00000.0",
"altId": null,
"ownerName": "SMITH JOHN A",
"ownerName2": null,
"mailingAddress": "456 Out-of-State Rd",
"mailingCity": "Atlanta",
"mailingState": "GA",
"mailingZip": "30301",
"situsAddress": "123 Main St",
"situsCity": "Tampa",
"situsState": "FL",
"situsZip": "33602",
"latitude": 27.9506,
"longitude": -82.4572,
"landUse": "SINGLE FAMILY",
"yearBuilt": 1985,
"livingAreaSqft": 1820,
"lotSizeAcres": 0.16,
"bedrooms": null,
"bathrooms": null,
"assessedValue": 485000,
"marketValue": 520000,
"landValue": 120000,
"improvementValue": 365000,
"taxYear": 2025,
"lastSaleDate": "2020-05-14",
"lastSalePrice": 410000,
"absenteeOwner": true,
"raw": {}
}
],
"meta": {
"county": "Hillsborough County",
"state": "FL",
"source": "arcgis",
"sourceUrl": "https://services.arcgis.com/.../FeatureServer/0",
"total": null,
"returned": 1,
"pulledAt": "2026-06-30T00:00:00.000Z"
}
}Parcel fields
| Field | Type | Description |
|---|---|---|
provenance | object | Source lineage for this record |
provenance.countyFips | string | 5-digit county FIPS |
provenance.countyName | string | County name |
provenance.state | string | Two-letter state code |
provenance.source | string | Source adapter, e.g. arcgis, ckan, or socrata |
provenance.sourceUrl | string | URL of the originating public data portal or dataset |
provenance.fetchedAt | string | ISO 8601 UTC timestamp for this record fetch |
apn | string | null | County-assigned parcel identification number |
altId | string | null | Alternate parcel or property identifier |
ownerName | string | null | Assessed owner name as recorded by the county |
ownerName2 | string | null | Secondary owner name when published |
mailingAddress | string | null | Owner mailing street address |
mailingCity | string | null | Owner mailing city |
mailingState | string | null | Owner mailing state |
mailingZip | string | null | Owner mailing ZIP |
situsAddress | string | null | Property street address |
situsCity | string | null | Property city |
situsState | string | null | Property state |
situsZip | string | null | Property ZIP |
latitude | number | null | Latitude when published or derivable |
longitude | number | null | Longitude when published or derivable |
landUse | string | null | Land use classification from the assessor |
yearBuilt | integer | null | Year the primary structure was built |
livingAreaSqft | number | null | Living area in square feet |
lotSizeAcres | number | null | Lot size in acres |
bedrooms | integer | null | Bedroom count when published |
bathrooms | number | null | Bathroom count when published |
assessedValue | number | null | Total assessed value in USD |
marketValue | number | null | Market value in USD when published |
landValue | number | null | Land-only assessed value in USD |
improvementValue | number | null | Improvement assessed value in USD |
taxYear | integer | null | Assessor tax year |
lastSaleDate | string | null | Last sale date as YYYY-MM-DD when published |
lastSalePrice | number | null | Last sale price in USD when published |
absenteeOwner | boolean | null | Derived owner-occupancy signal when enough address data exists |
raw | object | Original source attributes, preserved without normalization |
Meta fields
| Field | Type | Description |
|---|---|---|
county | string | County name |
state | string | Two-letter state code |
source | string | Name of the data source for this county |
sourceUrl | string | URL of the originating portal |
total | integer | null | Total parcel count. null on normal API calls because count queries are skipped for speed. |
returned | integer | Number of records in this response |
pulledAt | string | ISO 8601 UTC timestamp of this API pull |
Notes on null fields
Fields are null when the county assessor does not publish that attribute, or when it could not be parsed from the source. Field availability varies by county. The provenance block is always present.
Error responses
| Status | Code | Meaning |
|---|---|---|
400 | missing_county | The county parameter was not provided |
400 | invalid_county | The county does not match any known county |
400 | invalid_limit | limit is outside the 1–1000 range |
401 | missing_key | No API key provided |
403 | invalid_key | Key is invalid, expired, or revoked |
404 | no_source | No parcel data source is configured for the county |
429 | rate_limit_exceeded | Hourly rate limit exceeded |
429 | monthly_quota_exceeded | Monthly plan quota exceeded |
502 | upstream_error | County source failed or timed out |
{
"error": {
"code": "invalid_county",
"message": "Unknown county: \"Broward, FL\". Use \"Name, ST\" or a 5-digit FIPS."
}
}