Peninsula Entitlement API
Query what can legally be built on a specific Silicon Valley lot: SB 9 status, ADU yield and FAR headroom per parcel, each cited to the municipal code it came from, joined to permits, listings and comparable sales.
What this API is, and what it is not
A national permit feed tells you who might sell. It is a commodity: several vendors sell per-record permit data across all 50 states, and if record volume is what you are buying, buy one of those. This API answers the other half, what can be built there, which is the half that actually prices a deal, and it answers it for the Peninsula and South Bay only.
What you get
- Per-parcel SB 9 status and max units, with the reasons a lot is blocked
- ADU feasibility, unit count and buildable square footage
- FAR headroom: allowable floor area against what is standing today
- The FAR envelope carries its
ruleSource,ruleAsOfandruleConfidence, so you can go read the code section we read - Hazard screens reaching you as
developmentBlockersandsb9.blockReasons: very high fire severity, FEMA flood, fault zone, liquefaction, landslide, coastal zone, prime farmland - Issued permits, active listings and comparable sales for the same cities
What you do not get
- National coverage. The scoring corpus is roughly 490,000 parcels across 16 Peninsula and South Bay cities, with permits from 20-plus jurisdictions on top.
- A permit firehose. The permit record is deep rather than wide: several years of history in the cities we have backfilled, recent filings in the rest, and nothing outside the region.
- Owner names, phones or mailing addresses. We hold no owner identity, so there is no skip trace here.
- Imagery-derived condition. Condition is read out of listing text, never a photo or a satellite pass, so it exists for on-market stock only.
- Commercial entitlement. Commercial parcels are ingested, but every score is a residential lever.
Parcel counts are as of September 2026 and grow as cities are added. The entitlement feeds below return listings joined to that parcel layer; the full off-market parcel corpus is not exposed through the API today.
Authentication
All API requests require an API key passed via the x-api-key header or as a query parameter ?apiKey=.
curl -H "x-api-key: YOUR_KEY" https://addressintel.co/api/v1/market-signalsEntitlement endpoints
Each of these returns active listings joined to the parcel layer and ranked on one development lever, with the blockers attached to the row. A result you disagree with can be argued with, because the reasons travel with the score.
/api/v1/sb9-inventoryFree TierActive listings that screen eligible or likely for an SB 9 lot split or duplex, ranked by maximum units and then teardown score. Lots that are blocked are excluded, and the reasons a lot screens the way it does come back in sb9.blockReasons rather than being collapsed into a number.
Query Parameters
status(Optional)eligible,likelyorany. Defaults to any non-blocked lot.minUnits(Optional) Only lots whose SB 9 maximum reaches this unit count.excludeBlockers(Optional)truedrops anything carrying a known development blocker.
Response
{
"success": true,
"count": 1,
"data": [
{
"id": "abc-123",
"address": "123 Main St",
"city": "Menlo Park",
"zip": "94025",
"price": 2400000,
"status": "Active",
"teardownScore": 95.5,
"sb9": {
"status": "eligible",
"maxUnits": 4,
"blockReasons": []
},
"lotSqft": 14500,
"zoning": "R-1-U",
"developmentBlockers": [],
"unlockPathways": ["sb9_lot_split", "adu_plus_jadu"],
"entitlementRiskScore": 22
}
],
"pagination": {
"limit": 25,
"offset": 0,
"total": 118,
"returned": 1,
"nextOffset": 1
},
"asOf": "2026-09-11T15:30:00.000Z"
}/api/v1/redevelopment-leadsFree TierUnderbuilt lots: small, older houses using a low share of the floor area their zoning allows. The useful field is buildableHeadroomSqft, the gap between what is standing and what the envelope permits, and it arrives with the code section it was derived from, the date that rule was read, and a confidence rating.
Query Parameters
minScore(Optional) Minimum redevelopment score, 0 to 100. Defaults to 60.class(Optional)teardown_candidateorexpansion.excludeBlockers(Optional)truedrops anything carrying a known development blocker.
Response
{
"success": true,
"count": 1,
"data": [
{
"id": "abc-123",
"address": "123 Main St",
"city": "Menlo Park",
"zip": "94025",
"price": 2400000,
"status": "Active",
"livingSqft": 1100,
"yearBuilt": 1948,
"redevelopment": {
"score": 88,
"class": "teardown_candidate",
"farUtilizationPct": 24.4,
"buildableHeadroomSqft": 3410,
"allowableFloorAreaSqft": 4510,
"ruleSource": "Menlo Park Municipal Code 16.20.040",
"ruleAsOf": "2026-06-01",
"ruleConfidence": "high"
},
"lotSqft": 14500,
"zoning": "R-1-U",
"sb9Status": "eligible",
"developmentBlockers": [],
"unlockPathways": ["sb9_lot_split"]
}
],
"pagination": {
"limit": 25,
"offset": 0,
"total": 264,
"returned": 1,
"nextOffset": 1
},
"asOf": "2026-09-11T15:30:00.000Z"
}/api/v1/adu-leadsFree TierLots ranked by ADU feasibility, with the estimated unit count and buildable square footage, plus the lot geometry the estimate rests on: frontage, depth, shape, corner status and existing coverage.
Query Parameters
minScore(Optional) Minimum ADU feasibility score, 0 to 100. Defaults to 60.excludeBlockers(Optional)truedrops anything carrying a known development blocker.
Response
{
"success": true,
"count": 1,
"data": [
{
"id": "abc-123",
"address": "123 Main St",
"city": "Menlo Park",
"zip": "94025",
"price": 2400000,
"status": "Active",
"adu": {
"feasibilityScore": 84,
"maxUnits": 2,
"estSqft": 1200,
"existingCoveragePct": 18.6
},
"lot": {
"shape": "rectangular",
"frontageFt": 100,
"depthFt": 145,
"aspectRatio": 1.45,
"cornerLot": false,
"streetFrontages": 1
},
"lotSqft": 14500,
"zoning": "R-1-U",
"developmentBlockers": [],
"unlockPathways": ["adu_plus_jadu"],
"entitlementRiskScore": 22
}
],
"pagination": {
"limit": 25,
"offset": 0,
"total": 91,
"returned": 1,
"nextOffset": 1
},
"asOf": "2026-09-11T15:30:00.000Z"
}Supporting endpoints
The market, property and permit feeds are the inputs the entitlement math runs on. They are useful on their own, and they are not the part that is hard to buy elsewhere.
/api/v1/market-signalsRetrieves top investment opportunities scored by our proprietary engine on teardown potential, across the Silicon Valley cities AddressIntel ingests. Nantucket listings are served with permit, sales and market data but carry no proprietary score today.
Query Parameters
market(Optional) Filter by market ("peninsula" or "nantucket"). Defaults to peninsula.city(Optional) Filter by city name (e.g., "Atherton")address(Optional) Search for a specific address
Response
{
"success": true,
"count": 25,
"data": [
{
"id": "abc-123",
"address": "123 Main St",
"city": "Menlo Park",
"price": 2400000,
"status": "Active",
"teardownScore": 95.5,
"flippabilityScore": 0,
"conditionScore": 3.5,
"visionAnalysis": "...",
"proformaROI": -11.3,
"proforma": {
"roiPct": -11.3,
"buildSqft": 3000,
"arvPerSqft": 1325,
"capital": 3775000,
"resaleNet": 3776250,
"compCount": 9,
"compsCityMatched": true,
"compsTypeMatched": true,
"unmodellableReason": null,
"assumptions": {
"costPerSqft": 550,
"softCosts": 150000,
"demoCost": 25000,
"sellingCostPct": 5,
"carryRatePct": 7,
"holdMonths": 33,
"carryBasis": "simple interest on the purchase price plus half the build budget",
"newBuildPremium": 1.05,
"buildSizeBasis": "zoning envelope (allowableFloorAreaSqft), capped at 4x existing"
}
},
"metadata": {
"sqft": 1100,
"lotSize": 14500,
"daysOnMarket": 4
}
}
],
"pagination": {
"limit": 25,
"offset": 0,
"total": 480,
"returned": 25,
"nextOffset": 25
},
"asOf": "2026-06-20T15:30:00.000Z"
}Interactive Playground
Test the API directly from your browser. Click the button below to fetch live data using a demo API key.
/api/v1/market-signals?apiKey=demoClick "Run Request" to see a live demo of the API response.
Using the demo API key restricts results to 2 items.
/api/v1/properties/:idFree TierRetrieves detailed intelligence for a single property, including aggregated comp data and proprietary scores.
Path Parameters
idThe unique identifier of the property
Response
{
"success": true,
"data": {
"id": "abc-123",
"address": "123 Main St",
"city": "Menlo Park",
"price": 2400000,
"intelligence": {
"teardownScore": 95.5,
"flippabilityScore": 0,
"marketHeatIndex": 82,
"biddingWarPredictor": 65
},
"comparables": {
"recentSalesCount": 5,
"avgPricePerSqft": 1250
}
}
}/api/v1/permitsFree TierSearches issued building permits across our Peninsula and South Bay coverage. This is a deep local record, not a national one: if you need per-record permit volume across many states, a national permit vendor is the cheaper answer. What it does carry that a national feed usually does not is the scope description alongside the project type, which matters because several cities file nearly every job under one generic type label and only the description says what the work actually is, and a permit number that resolves to a page on this site.
Query Parameters
city(Optional) Filter by city name (e.g., "Menlo Park"). Partial matches allowed.q(Optional) Keyword matched against address, project type, scope description, contractor, architect and permit number.minValuation(Optional) Only permits valued at or above this dollar amount. Permits filed without a valuation are excluded when this is set.
Response
{
"success": true,
"count": 1,
"data": [
{
"permitId": "B26-0499",
"city": "Menlo Park",
"address": "123 Main St",
"projectType": "Demolition",
"description": "Demolish existing SFR",
"valuation": 150000,
"sqft": 2100,
"psf": 71.4,
"contractor": "Acme Builders",
"architect": null,
"issuedDate": "2026-07-14",
"status": "Issued",
"permitUrl": "https://addressintel.co/permit/menlo-park/B26-0499"
}
],
"pagination": {
"limit": 25,
"offset": 0,
"total": 312,
"returned": 1,
"nextOffset": 1,
"truncated": false
},
"asOf": "2026-08-05T15:30:00.000Z"
}Every endpoint above is also exposed as a read-only Model Context Protocol server, so Claude, ChatGPT or your own agent can answer entitlement and parcel questions directly instead of you writing glue code. Ask "which Menlo Park listings could be split under SB 9, and what is blocking the rest?" and the agent calls the API itself.
Tools
list_sb9_inventoryListings eligible for an SB 9 lot split or duplex, with block reasons for those that are not.list_redevelopment_leadsUnderbuilt parcels scored against their allowable building envelope.list_adu_leadsParcels ranked by ADU feasibility, with estimated units and buildable square footage.list_market_signalsListings ranked by teardown or flip potential.get_property_intelligenceFull scores and comparable sales for a single property id.search_permitsIssued building permits by city, keyword, or minimum valuation.
Setup
No install step: npx fetches the server on demand. It runs locally over stdio and calls this API with your key, so your plan's rate limits and row ceilings apply unchanged. Without a key it falls back to the demo tier, so you can try it before you have one.
claude mcp add addressintel \
-e ADDRESSINTEL_API_KEY=YOUR_KEY \
-- npx -y addressintel-mcpSource and tool reference: addressintel-mcp on npm. Need a key? Grab a free one and it will be emailed to you.
Usage & Limits
Limits are enforced per API key based on your plan. Exceeding your rate limit returns a 429.
Demo
- Up to 5 results per request
- 10 requests / minute
- Full history
- No webhooks
Free
Self-serve- Up to 25 results per request
- 30 requests / minute
- Last 30 days of permits and sales
- No webhooks
Pro
- Up to 500 results per request
- 120 requests / minute
- Full history
- Real-time webhooks
Pagination
Use the limit and offset query parameters to page through results. Every list response includes a pagination object with total and a nextOffset (null on the last page), plus an asOf timestamp indicating data freshness.
History Window
Free keys read a rolling 30 day window of dated records: permits by issue date, and sold properties by sale date. Active listings are never windowed, so the inventory feeds return in full on every plan. Pro reads the complete corpus.
When a window applies, the response carries a historyWindow object with the days and the oldest date included, so a quiet 30 days is distinguishable from an empty result. It is null when no window was applied. Free keys issued before 4 September 2026 keep full history and continue to see null.
Rate Limit Headers
Every response carries X-RateLimit-Limit and X-RateLimit-Remaining headers. When you exceed your plan's per-minute limit the API responds with 429.
Error Handling
Errors use standard HTTP status codes and a consistent JSON envelope: success: false, a human-readable error message, and a stable machine-readable code.
{
"success": false,
"error": "Unauthorized. Missing API Key.",
"code": "unauthorized"
}Real-time Webhooks
ProPush real estate intelligence directly into your CRM or internal systems. Subscribe to webhook events to receive real-time notifications when major construction or demolition permits are filed. Webhook registration requires a Pro API key.
Subscribing to Webhooks
You can register your webhook endpoint via the API or using the form below.
Register via UI
Register via API
curl -X POST https://addressintel.co/api/v1/webhooks/register \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://your-domain.com/webhook"}'Supported Events
permit.created- Fired when a new high-value permit is recordedproperty.score_updated- Fired when a property's teardown or flippability score changes
Example Payloads
{
"event": "permit.created",
"market": "sf-peninsula",
"data": {
"permitId": "B24-1052",
"type": "Demolition",
"address": "123 Main St, Menlo Park",
"estimatedValue": 150000,
"status": "Issued"
},
"timestamp": "2026-06-12T15:30:00Z"
}Verifying Signatures
Every delivery is signed. Compute an HMAC-SHA256 of the raw request body using the signingSecret returned at registration, and compare it (constant-time) against the X-AddressIntel-Signature header. Reject any request that doesn't match.
import crypto from "crypto";
// `secret` is the signingSecret returned when you registered the webhook.
function verify(rawBody, signatureHeader, secret) {
const expected = "sha256=" + crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signatureHeader),
Buffer.from(expected)
);
}
// In your handler:
const ok = verify(rawBody, req.headers["x-addressintel-signature"], secret);
if (!ok) return res.status(401).end();Plans & Pricing
Start with a free key and the last 30 days of permits and sales. Go Pro for the full history, real-time webhooks and the limits a production integration needs.
Free
- 25 results per request
- 30 requests / minute
- Last 30 days of permits and sales
- Community support
- Key delivered to your inbox
Pro API
- 500 results per request
- 120 requests / minute
- Real-time webhooks
- Full permit and sales history
- Full screener and parcel scores on the site
- Priority support
Enter your email for a Free or Pro key. The free key is emailed to you; Pro checks out through Stripe.
Build on Peninsula entitlement math
The AddressIntel API exposes the same parcel layer that powers our real estate investment screener and building permit tracker: SB 9 status, ADU yield, FAR headroom, teardown scores and a deterministic ROI proforma, each tied to a specific lot in a specific Peninsula city rather than to a national average. Use it to screen deals, enrich your CRM, or answer the question a listing page cannot, which is what the zoning would let you build on that lot.
New to how we score properties? The developer guides walk through teardown ROI, Floor Area Ratio, SB 9 and the demolition permit process that underpin every value in these endpoints.
Explore the platform
See the parcel layer in action across the AddressIntel product before you integrate.
Investment Screener
The market-signals endpoint, visualized: filter properties by teardown score and developer ROI.
SB 9, Mansionization and the Envelope
How the SB 9 and FAR screens behind sb9-inventory and redevelopment-leads are computed, and what blocks a lot.
Building Permit Tracker
The live feed behind the permit.created webhook, demolition and renovation permits as they post.
How to Calculate Teardown ROI
How to underwrite a lot by hand. The API's proformaROI field runs exactly this arithmetic, on the same comps and the same assumptions the per-property page shows, so the two cannot disagree.
Peninsula Locations Directory
See the geographic coverage available through the city and market query parameters.