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
İlgili Sunucular
CData Jira Assets
A read-only MCP server for Jira Assets, powered by the CData JDBC Driver.
dbt-docs
MCP server for dbt-core (OSS) users as the official dbt MCP only supports dbt Cloud. Supports project metadata, model and column-level lineage and dbt documentation.
Keboola MCP Server
An MCP server for interacting with the Keboola Connection data platform.
MCP Data Pipeline Connector
Universal data connector for CSV, Postgres, and REST APIs via DuckDB
MCP Microsoft SQL Server
An MCP server for integrating with Microsoft SQL Server databases.
Pinecone
Read and write to a Pinecone vector database using the Model Context Protocol.
MongoDB That Works
A MongoDB MCP server with schema discovery and field validation. Requires a MONGODB_URI environment variable.
Google BigQuery by CData
Connect to Google BigQuery databases using CData's MCP Server. Requires a separate CData JDBC Driver license.
Weaviate MCP Client
An MCP client for connecting to and interacting with a Weaviate vector database.
MCP Yahoo Finance
Access real-time stock prices, company information, and financial data from Yahoo Finance.