LotAPI
Deterministic parcel intelligence for SF, Oakland, Boston, DC, LA, and NYC. Resolves addresses to zoning, permits, assessed values, and planning cases. Hard status codes. Sub-200ms.
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.
Get API Key → 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" }
Documentation
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.
Status Codes
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.
Market Coverage
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.
| Market | Parcels | Zoning Coverage | Data Sources | Status |
|---|---|---|---|---|
| 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.
Pricing
Simple. Metered. No contracts.
Pay per call. No minimums, no setup fees, no annual commitments. Scale from prototype to production on the same key.
Pay As You Go
$0.25 / call
Stripe metered billing. Pay only for RESOLVED calls, billed monthly.
- Unlimited calls
- All 6 markets
- Sub-100ms on cache hits
- Hard status codes
- OpenAPI spec included
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
Get API Key →
Questions? Email [email protected]
Model Context Protocol
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
Related Servers
CData Avalara AvaTax
A read-only MCP server for querying live Avalara AvaTax data. Powered by the CData JDBC Driver.
Snow Leopard BigQuery MCP
Interact with Google BigQuery databases using natural language queries and schema exploration.
Redshift Utils MCP Server
Perform database actions on Amazon Redshift via its Data API.
Membase MCP
A decentralized memory layer for AI agents providing secure, persistent storage for conversation history and knowledge.
AWS Athena
Run SQL queries on data in Amazon S3 using AWS Athena.
RootData MCP Server
Query cryptocurrency and blockchain project data from the RootData API.
Highrise by CData
A read-only MCP server for Highrise, enabling LLMs to query live data using the CData JDBC Driver.
MySQL MCP
A secure MCP service for accessing and managing MySQL databases, featuring multi-layer security and high-performance connection pooling.
Certinia MCP Server by CData
A read-only MCP server that allows LLMs to query live Certinia data. Powered by CData.
Supabase MCP Server
A server for querying and managing data in a Supabase database.