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.
$0.25 / call · Pay as you go · No minimum
POST https://lotapi.com/api/property_lookup { "address": "560 State St, Brooklyn, NY" }
{
"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"
}
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.
# 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"}'
{
"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"
}
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.
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.
| Market | Parcels | Zoning Coverage | Data Sources | Status |
|---|---|---|---|---|
| New York City | ~857k | NYC PLUTO, MapPLUTO | ● Live | |
| San Francisco | ~138k | SF DataSF, Assessor-Recorder | ● Live | |
| Oakland | ~89k | Oakland Open Data, AC Assessor | ● Live | |
| Boston | ~50k | MassGIS, Boston Assessing | ● Live | |
| Washington DC | ~9.6k | DC GIS, OTR Tax Lots | ● Live | |
| Los Angeles | ~444k | LA County Assessor, City ArcGIS layers | ● Live |
DATA_UNAVAILABLE on the zoning field — all other parcel fields resolve normally.Pay per call. No minimums, no setup fees, no annual commitments. Scale from prototype to production on the same key.
Questions? Email noreply@lotapi.com
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.
{
"mcpServers": {
"lotapi": {
"type": "url",
"url": "https://mcp.lotapi.com/mcp/sse",
"headers": {
"X-API-Key": "your-lapi-key"
}
}
}
}
POST https://mcp.lotapi.com/mcp { "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "property_lookup", "arguments": { "address": "1650 Mission St San Francisco CA" } } }