Parcel Intelligence API

Authoritative parcel
data for the markets
that matter.

Municipal parcel data for NYC, SF, LA, Oakland, Boston, and DC — sourced directly from city GIS systems, not aggregators. Zoning, ownership, assessments, and full permit history. One endpoint. Hard status codes. No guessing.

See the Response

$0.25 / call  ·  Pay as you go  ·  No minimum

Request
POST https://lotapi.com/api/property_lookup

{
  "address": "560 State St, Brooklyn, NY"
}
Response
{
  "status":             "RESOLVED",
  "parcel_id":          "3001807501",
  "normalized_address": "560 STATE STREET",
  "owner":              "TIMES PLAZA DEVELOPMENT CORP",
  "zoning":             "R7A",
  "assessed_total":     10245600,
  "year_built":         "1990",
  "permit_count":       12,
  "_routed_to":        "new_york"
}

One endpoint. Full schema.

POST any address in a covered market. LotAPI detects the city, routes to the correct engine, and returns a normalized response with consistent field names across all six markets.

curl example
# One endpoint for all six markets
curl -X POST https://lotapi.com/api/property_lookup \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_KEY" \
  -d '{"address":"837 Divisadero St, San Francisco, CA"}'
Full Response — San Francisco
{
  "status":                       "RESOLVED",
  "parcel_id":                    "1179001C",
  "normalized_address":           "833 DIVISADERO ST",
  "block":                        "1179",
  "lot":                          "001C",
  "lot_area_sqft":                4950,
  "land_use":                     "Multi-Family Residential",
  "neighborhood":                 "Western Addition",
  "zoning":                       "NCT-DIVISADERO",
  "zoning_name":                  "DIVISADERO ST NEIGHBORHOOD COMMERCIAL TRANSIT",
  "assessed_land_value":          215170,
  "assessed_improvement_value":   317809,
  "assessed_total":               532979,
  "permit_count":                 29,
  "permit_summary":               { "complete": 19, "issued": 4, "expired": 5 },
  "permits":                      [ /* full permit history array */ ],
  "planning_case_count":          0,
  "police_district":              "PARK",
  "supervisor_district":          "5",
  "_routed_to":                  "san_francisco"
}
Field Type Description
statusstringResolution outcome. Always present.
parcel_idstringAPN / BBL / SSL — authoritative identifier from city assessor.
zoningstringMunicipal zoning code. e.g. RH-1, R7A, C-3-G.
zoning_namestringHuman-readable zoning district name.
assessed_land_valuenumberAssessed land value in USD from county assessor.
assessed_improvement_valuenumberAssessed improvement value in USD.
assessed_totalnumberTotal assessed value in USD.
last_sale_datestringDate of last recorded sale.
last_sale_pricestringPrice of last recorded sale where available.
year_builtstringOriginal construction year from assessor records.
lot_area_sqftnumberLot area in square feet.
land_usestringLand use classification.
neighborhoodstringAnalysis neighborhood. SF, Oakland, NYC markets.
permit_countnumberTotal building permits on record.
permit_summaryobjectPermit counts by status.
permitsarrayFull permit history with dates, numbers, types, statuses.
planning_case_countnumberNumber of planning cases on record.
planning_casesarrayPlanning case details where available.
supervisor_districtstringSupervisor or council district number.
ownerstringOwner of record. Availability varies by jurisdiction.
_routed_tostringCity engine that handled the request.

Every response is a decision.

LotAPI never interpolates, approximates, or guesses. Every response carries one of four hard status codes. Your pipeline branches on a string — not a confidence score.

RESOLVED
Address matched to exactly one parcel. Full data returned. Cache hit responds in under 100ms.
NO_MATCH
No parcel record found for this address in the city dataset. Suggestions returned for reformatting.
MULTIPLE_MATCH
Address maps to more than one parcel — common with multi-unit buildings. Add a unit number to resolve.
DATA_UNAVAILABLE
Address resolved but the upstream municipal source returned no data. Retry with exponential backoff.

Six markets. One API.

Each city runs its own deterministic engine against live municipal data sources. Not a national aggregator. Not a scrape. The same data your city's assessor publishes — resolved in under a second.

MarketParcelsZoning CoverageData SourcesStatus
New York City~857k
100%
NYC PLUTO, MapPLUTO● Live
San Francisco~138k
100%
SF DataSF, Assessor-Recorder● Live
Oakland~89k
100%
Oakland Open Data, AC Assessor● Live
Boston~50k
100%
MassGIS, Boston Assessing● Live
Washington DC~9.6k
99%
DC GIS, OTR Tax Lots● Live
Los Angeles~444k
~65%
LA County Assessor, City ArcGIS layers● Live
Los Angeles zoning coverage reflects the availability of public machine-readable zoning APIs across LA County's 88 municipalities. City of LA, Glendale, Pasadena, Beverly Hills, West Hollywood, Arcadia, and unincorporated LA County areas are fully covered. Municipalities without public ArcGIS endpoints return DATA_UNAVAILABLE on the zoning field — all other parcel fields resolve normally.

Simple. Metered. No contracts.

Pay per call. No minimums, no setup fees, no annual commitments. Scale from prototype to production on the same key.

Enterprise
Custom / month
Volume pricing, SLA guarantees, and custom market additions on request.
  • Volume discounts from $0.08/call
  • Uptime SLA
  • Custom market additions
  • Dedicated cache warming
  • Direct support channel

Questions? Email noreply@lotapi.com

Native MCP support.

LotAPI is available as an MCP server. Any MCP-compatible AI agent — Claude, ChatGPT, or your own — can call property_lookup directly. Same API key. Same billing. The same deterministic parcel data, accessible to any model that can make a tool call.

MCP Config
{
  "mcpServers": {
    "lotapi": {
      "type": "url",
      "url": "https://mcp.lotapi.com/mcp/sse",
      "headers": {
        "X-API-Key": "your-lapi-key"
      }
    }
  }
}
Tool Call
POST https://mcp.lotapi.com/mcp

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "property_lookup",
    "arguments": {
      "address": "1650 Mission St San Francisco CA"
    }
  }
}
Endpoints
POSThttps://mcp.lotapi.com/mcp
GET/SSEhttps://mcp.lotapi.com/mcp/sse
GEThttps://mcp.lotapi.com/mcp/health
Tool
property_lookup
Resolves any address in a covered market to full parcel data. Returns hard status codes. Auth via X-API-Key header.
Protocol
Version2024-11-05
TransportHTTP + SSE
AuthX-API-Key header
Billing$0.25 / resolved call