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.

MarketParcelsZoning CoverageData SourcesStatus
New York City~857k100%NYC PLUTO, MapPLUTO● Live
San Francisco~138k100%SF DataSF, Assessor-Recorder● Live
Oakland~89k100%Oakland Open Data, AC Assessor● Live
Boston~50k100%MassGIS, Boston Assessing● Live
Washington DC~9.6k99%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

NotebookLM Web Importer

Import web pages and YouTube videos to NotebookLM with one click. Trusted by 200,000+ users.

Install Chrome Extension