Skip to main content

Parcel API

Illinois assessment evidence, as JSON.

Send an address. Parcel returns the county record, adjusted comparable sales, a verdict on whether the property is over-assessed, and the estimated yearly saving at the local tax rate. The same engine runs the homeowner check.

Get a key

Buy an API plan on the firms page. Your key is shown in your Lattice client hub as soon as payment clears. Keep it on your server; anyone with the key can spend your allowance.

Analyze a property

POST https://teamlattice.ai/parcel/api/v1/analyze

curl -X POST https://teamlattice.ai/parcel/api/v1/analyze \
  -H "Authorization: Bearer $PARCEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address": "1234 Elm St, Evanston, IL 60201"}'
addressstring, required
Full street address with city, state and 5-digit ZIP. Illinois only.
propertyType"residential" | "commercial"
Defaults to "residential".
currentAssessedValuenumber
Assessed value to test, if you know it. Otherwise Parcel uses the county record.

Response

A full analysis object. The fields most integrations read are assessmentStatus (over_assessed, fairly_assessed or under_assessed), calculation.estimatedSavings (dollars per year) and comparables. Example, shortened:

{
  "id": "cm2…",
  "address": "1234 Elm St, Evanston, IL 60201",
  "county": { "name": "Cook", "equalizationFactor": 3.0163, … },
  "assessmentStatus": "over_assessed",
  "calculation": {
    "currentAssessedValue": 41250,
    "estimatedMarketValue": 368000,
    "estimatedFairAssessedValue": 36800,
    "estimatedSavings": 1184,
    "estimatedSavings5Year": 5920,
    "percentOverassessed": 12.1,
    …
  },
  "comparables": [ { "address": "…", "price": 355000, "saleDate": "2026-03-02", … } ],
  "confidence": { "score": 78, "factors": [ … ] },
  "appealStrategy": { … }
}

Check quality.canShowSavings before reading financial results. When false,calculation, assessmentStatus, appealStrategy,equityAnalysis, compAdjustments, and modeled AVM values are null. Show quality.appealBlockReason or quality.savingsBlockReason instead. A user-entered assessment alone does not verify parcel identity or comparable transactions. Each comparable includes evidenceGrade: recorded_sale,listing, or unknown. Listing and unknown records are context only.

Figures are estimates from public records and recorded sales, not an appraisal or legal advice. Show them to homeowners as estimates.

Allowance

Each plan includes a monthly number of analyses, counted per key and reset on the 1st (UTC). Every response carries X-Quota-Limit and X-Quota-Remaining. Repeating the same request within a few minutes returns the saved result with X-Cache: HIT and is not counted, and neither is a failed analysis.

Errors

Errors return JSON with an error message.

400
Bad body, an address with no 5-digit ZIP, or a county Parcel does not cover yet. errorType says which.
401
No key, or the key is not recognised.
403
The key is real but its plan is not active, or it is not a Parcel API key.
422
Parcel identity, supported property class, assessment, or market value could not be verified. errorType identifies the reason; a supplied assessed value cannot override an unsupported or ambiguous property.
429
Monthly allowance used, or more than 60 requests in a minute.
503
The key could not be checked just now. Retry after a short wait.