# Parceled > Real estate data for AI agents. 135M+ US parcels across all 50 states: **parcel boundaries (vector tiles + GraphQL), assessor-sourced property records (owners, addresses, land size, sale history), and a first-class vector tile server you can load directly into your own Mapbox / MapLibre map.** Roof permits and hail-swath history are available as supplementary enrichment datasets. MCP + GraphQL + REST. Field-level billing: you only pay for fields that return data. ## What Parceled is for Parceled is optimized for agents and applications building real-estate experiences. Three core capabilities: 1. **Parcel boundaries**: high-resolution parcel polygons for every property in America, served as Mapbox Vector Tiles (MVT/pbf) so you can plug them into ANY Mapbox GL JS or MapLibre map without writing your own tile server. Also queryable via GraphQL/REST per coordinate. 2. **Property records (assessor data)**: address, APN, owner name + mailing address, land size, sale date/price, county/state/zip. Sourced from county assessor and recorder offices. Queryable per coordinate or parcel ID. 3. **Vector tile server**: call `get_tile_endpoints` to receive ready-to-use tile URL templates you can drop into your own map. 5,000 tile requests/month free; 1 credit per 1,000 thereafter. Supplementary datasets: - **Roof permits**: building and roofing permits from jurisdictional permit offices (contractor info, valuation, status: coverage varies by jurisdiction). - **Hail history**: NWS Storm Prediction Center hail swaths intersecting each parcel. Useful for damage assessment and insurance workflows. ## Getting a key Every request needs a Bearer token. Keys are issued programmatically, not on the web (https://www.parceled.ai/account shows the balance and buys credits). Three paths, pick whichever fits your stack: 1. **OAuth (best for MCP clients)**: connect to https://www.parceled.ai/api/mcp. The server returns 401 with a WWW-Authenticate header pointing at /.well-known/oauth-protected-resource. Any MCP client that follows the RFC 9728 / RFC 8414 discovery chain (Claude, Claude Code, ChatGPT, Codex, Cursor, Zed, Cline) completes Dynamic Client Registration + PKCE automatically; the user signs in with a 6-digit code emailed to them. ChatGPT (developer mode) and OpenAI Codex (`codex mcp add parceled --url https://www.parceled.ai/api/mcp`) connect the same way. 2. **REST (best for scripts, GPT Actions, LangChain, Zapier, or agents with no email at all)**: one unauthenticated POST: # With an email (recoverable): curl -X POST https://www.parceled.ai/api/v1/accounts \ -H 'Content-Type: application/json' \ -d '{"email":"you@example.com"}' # Anonymous (no email: for agents that don't have one): curl -X POST https://www.parceled.ai/api/v1/accounts \ -H 'Content-Type: application/json' \ -d '{}' → `{ "apiKey": "prc_live_...", "accountId": "...", "tier": "free", "anonymous": true | false, "nextSteps": {...} }` Rate-limited to 10 creations per IP per hour. The `apiKey` is returned exactly once: store it. Trade-off: **with email** → recoverable (re-run OAuth with the same email to rotate into a new key, credits preserved). **Anonymous** → the key is the only credential; lose it and the account is stranded. No harm done, just start a new one. 3. **GraphQL**: same bootstrap via the `createParceledAccount` mutation at https://www.parceled.ai/api. Semantically identical to path 2, just wire-level different. Free tier: 100 MCP calls/month, all fields available, no credit card. ## Minimum viable invocation (first free call) Once you have a key, probe availability for a location: this is free and tells you which datasets exist before you pay for anything: POST https://www.parceled.ai/api/mcp Content-Type: application/json Authorization: Bearer prc_live_… { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "check_availability", "arguments": { "lat": 39.7392, "lng": -104.9903 } } } REST equivalent (OpenAPI-speaking agents): GET https://www.parceled.ai/api/v1/check-availability?lat=39.7392&lng=-104.9903 Authorization: Bearer prc_live_… ## Endpoints - MCP server: https://www.parceled.ai/api/mcp (Streamable HTTP, MCP protocol 2025-11-25) - GraphQL API: https://www.parceled.ai/api (same data, for non-MCP clients) - REST API: https://www.parceled.ai/api/v1 (OpenAPI-shaped, see openapi.yaml) - Manifest: https://www.parceled.ai/.well-known/mcp.json - OpenAPI: https://www.parceled.ai/.well-known/openapi.yaml - OAuth discovery (RFC 9728 / RFC 8414): https://www.parceled.ai/.well-known/oauth-protected-resource https://www.parceled.ai/.well-known/oauth-authorization-server - Install guide: https://www.parceled.ai/install - Detailed reference: https://www.parceled.ai/llms-full.txt ## Probe endpoints (no auth needed) Confirm the server is reachable and compatible, and demo the data, before creating any account: - GET https://www.parceled.ai/api/v1/ping (simple liveness, returns version + endpoint map) - GET https://www.parceled.ai/api/mcp (MCP server info + tool list) - GET https://www.parceled.ai/.well-known/mcp.json (MCP discovery manifest) - GET https://www.parceled.ai/api/v1/pricing (current credit costs) - GET https://www.parceled.ai/api/v1/check-availability?lat=39.7392&lng=-104.9903 (**free, public, no account needed**: booleans only, no parcel/permit data. 60 req/min/IP rate limit.) All five work without any Authorization header. Everything else returns 401 + WWW-Authenticate pointing at the OAuth flow. The anonymous check-availability is the right way to demo Parceled to a user before asking them to sign up: confirm there's data for their address, THEN bootstrap an account via /api/v1/accounts or OAuth. ## Embedding Parceled tiles in your own Mapbox / MapLibre map This is the primary integration path for real estate UIs. Parceled hosts its vector tiles: you don't need a separate tile server. 1. Call the free `get_tile_endpoints` tool (or GraphQL query of the same name). You get back one entry per layer (parcels, hail, etc.) with: { "layerId": "", "layerName": "parcels_a", // this is the Mapbox "source-layer" name "urlTemplate": "/api/parceled/tiles//{z}/{x}/{y}?key={api_key}", "minZoom": 0, "maxZoom": 14, "format": "pbf (Mapbox Vector Tiles)" } 2. Substitute `{api_key}` with your Bearer key (keep it on the server; don't ship it into browser-exposed JS). Prepend https://www.parceled.ai. 3. Add it as a source + layer in Mapbox GL JS: map.addSource('parceled-parcels', { type: 'vector', tiles: [ 'https://www.parceled.ai/api/parceled/tiles//{z}/{x}/{y}?key=prc_live_...' ], minzoom: 0, maxzoom: 14 }) map.addLayer({ id: 'parcels-fill', type: 'fill', source: 'parceled-parcels', 'source-layer': 'parcels_a', // match layerName from get_tile_endpoints paint: { 'fill-color': 'hsla(22, 100%, 50%, 0.15)', 'fill-outline-color': 'hsla(22, 100%, 50%, 1)' } }) 4. To filter (e.g., by zip5), first call `get_layer_sources` to see the authoritative list of filterable fields per layer, then use Mapbox GL filter expressions with those field names only. 5. Billing: tile requests are metered separately from API calls. 5,000 tile requests/month are free; beyond that, 1 credit per 1,000 tile requests. If you don't want to build your own map, the `render_map` MCP tool renders an inline Mapbox map in the conversation using the same tile server. Pass it `searchFilters` (the exact search_properties / count_properties filter object) and it highlights precisely the properties that search returns, including filters no tile carries (owner, building size, zone codes, permits, storm windows, historic designation): 1 credit, like count_properties. ## Auth Two supported mechanisms on every billable endpoint (MCP, REST, GraphQL): 1. OAuth 2.1 + PKCE + Dynamic Client Registration (RFC 7591). The MCP client picks this automatically when it follows the WWW-Authenticate header on a 401. 2. Bearer API key: `Authorization: Bearer prc_live_…`. Keys come from either the OAuth flow above, or the `createParceledAccount` mutation described in "Getting a key". Any protected endpoint returns 401 without Authorization → WWW-Authenticate header advertises the resource metadata URL per RFC 9728. ## MCP tools (14 total) Core (free): - check_availability: which datasets exist at a lat/lng or parcel (parcel, tax assessor, zoning, screens, buildings, permits, building code, historic, hail). Zero cost. Call first. - get_tile_endpoints: vector tile URL templates for embedding Parceled layers in your own Mapbox / MapLibre map. Primary integration path for real-estate UIs. - get_layer_sources: layer metadata including the authoritative list of filterable fields per layer. Call before filtering tiles. - get_market_research_hints(hailProIds): Parceled has no listing feed. For a shortlist (up to 25) returns building names, owner entity and mailing address, last sale, recent permit activity and ready-made web search queries, so an agent with web search can check whether each property is on the market. Zero cost. Billable: - search_parcels(lat/lng or parcelId, include?): one property. Fields: parcel, taxAssessor, roofPermits, zoning, parcelScreens, buildings, buildingCode, historic, hailAreas, currentHailAreas. ONLY fields that return data are billed. - search_properties(location + filters, include?, limit<=500, after?): bulk filtered search. Location = state, county (FIPS), zip5, bounds or nearPoint. Filters: taxAssessor (value, year built, size, beds/baths, owner name, last sale, likely renter-occupied, property use), permits (type, issued window, absent=true for "no permit since"), zoning (normalized category, raw codes), screens (vacant, developable, ADU, lot split, coverage), hail (date window, min size inches), historic. Billed per row per field with data. - count_properties(same filters): match count capped at 10,000. 1 credit. Account / billing (free): - get_pricing: current credit cost per field/tool. - get_balance: remaining credits and current tier. - get_usage_history: recent calls with cost breakdown. - update_budget_cap: adjust monthly spend limit. - purchase_credits(creditAmount): Stripe Checkout link for a credit pack; the user pays in the browser. - enable_payg(monthlyBudgetCap?): Stripe Checkout link to add a card for Pay-As-You-Go. The ChatGPT/Codex connection (https://www.parceled.ai/api/mcp/openai) has no billing tools: users buy at https://www.parceled.ai/account (plans: https://www.parceled.ai/pricing). Interactive UI: - render_map: inline Mapbox map in the conversation (same tiles as get_tile_endpoints). searchFilters = the search_properties filter object: highlights exactly the matching properties (1 credit); parcelIds highlights specific results (free). ## Field cost table (search_parcels) Core (always-on): | Field | Credits | Notes | |--------------------|---------|----------------------------------------------------------------------| | parcel | 1 | Core assessor record: address, APN, county/state, lat/lng, owner, sale, land size | Supplementary enrichments: | Field | Credits | Notes | |--------------------|---------|----------------------------------------------------------------------| | roofPermits | 2 | Building/roof permits: date, status, permitUrl, recordType, metadata (coverage varies by jurisdiction) | | hailAreas | 1 | Historical hail swaths intersecting parcel (maxMesh, importDate) | | currentHailAreas | 1 | Hail swaths from the last 14 days | | taxAssessor | 2 | Assessed/market value, year built, building area, beds/baths, stories, use, owner, sales | | zoning | 1 | Zone code, normalized category, jurisdiction, overlap | | parcelScreens | 1 | Vacant, developable, ADU, lot-split potential, coverage, upzone gap | | buildings | 1 | Building footprints with heights | | buildingCode | 2 | Adopted building code edition and roofing requirements | | historic | 1 | National Register and local landmark designations | search_properties bills per row: parcel 1, taxAssessor 2, zoning 1, permits (all types) 2, screens 1, historic 1. Parcel boundary POLYGONS are not in the `parcel` field. Polygons are served as Mapbox Vector Tiles: use `get_tile_endpoints` to consume them in your own map, or `render_map` for an inline map. **Default if `include` is omitted: `["parcel"]` only (1-credit ceiling).** To fetch assessor data, permits, zoning or hail, opt in explicitly: include: ["parcel", "hailAreas"] // 2 credits max include: ["parcel", "roofPermits", "hailAreas"] // 4 credits max Empty results are free. Every billed response includes a `hints` block listing the other fields you could request on the next call: you don't need to memorize this table. Example hints payload: { "requestedFields": ["parcel"], "otherAvailableFields": [ { "field": "roofPermits", "cost": 2, "label": "Roof permits" }, { "field": "hailAreas", "cost": 1, "label": "Hail history" }, { "field": "currentHailAreas", "cost": 1, "label": "Current hail areas" } ], "message": "Other fields available on this query: roofPermits (2 credits), hailAreas (1 credit), currentHailAreas (1 credit). To add one, pass include=[\"parcel\",\"roofPermits\"]. To check which datasets actually exist at this location before paying, call check_availability (free).", "appliedDefault": "No 'include' was passed, so the safe default [\"parcel\"] was used. Pass an explicit 'include' array to fetch additional fields." } On MCP, hints appear as a third text-content block on the tool result AND on the JSON-RPC result as `_hints`. On REST, hints appear as a top-level `hints` key alongside `data` and `billing`. ## Geocoding Parceled takes lat/lng, not addresses. If your user gives you a street address, geocode it first. Parceled does NOT bundle a geocoder. Suggested free options: - Nominatim (OpenStreetMap): https://nominatim.openstreetmap.org/search?q=
&format=json - 1 req/sec rate limit; require a descriptive User-Agent header; fine for low-volume agent use. - US Census Geocoder: https://geocoding.geo.census.gov/geocoder/locations/onelineaddress?address=
&benchmark=Public_AR_Current&format=json - US-only, no auth, no rate limit. Accurate for US addresses. Production paid options: Mapbox Geocoding ($0.75/1k), Google Geocoding, Smarty. End-to-end: address → geocoder → (lat, lng) → check_availability → search_parcels. ## Recommended agent workflow 1. If user gave an address, geocode externally to get lat/lng. 2. Call check_availability(lat, lng): free, tells you which datasets exist. 3. Confirm with the user which datasets they care about. 4. Call search_parcels(lat, lng, include: [only the datasets the user wants]). 5. Inspect the billing summary in the tool result to report spend to the user. ## Pricing - Free tier: 100 MCP calls/month + 5,000 tile requests. No credit card. All fields available. - Credit packs (prepaid, never expire, $0.01/credit): 1,000 credits = $10 5,000 credits = $50 25,000 credits = $250 - Pay-As-You-Go: $0.01/credit, billed monthly via Stripe. Optional monthly budget cap. Credits are account-wide and shared across API keys. ## Rate limits - Free tier: 100 calls / 30d rolling - Paid tiers: no hard cap; Retry-After is returned on burst throttle - Tile requests: 5,000/mo free, then billed at 1 credit per 1,000 tiles ## What we do NOT have (saves you a call) - MLS listings / for-sale data - Zestimate-style automated valuations (AVM), not live yet - Rental / Airbnb data - School ratings - Flood zone / FEMA data, not live yet - Street-level imagery Planned but not shipped: recorder (deed) documents, flood zones, automated valuations, schools, demographics. ## Support - hello@parceled.ai - https://www.parceled.ai ## Docs and datasets - [US property data available through Parceled](https://www.parceled.ai/data): Every dataset Parceled serves for US properties: parcel boundaries, tax assessor records, property owners, building permits, zoning, building data and hail history, with fields, prices and coverage. - [Parceled data coverage by state and county](https://www.parceled.ai/coverage): Which US counties Parceled covers: parcel counts, tax assessor fill rates, building permits, zoning, historic designations and building codes, county by county, from the latest data snapshot. - [Property data guides](https://www.parceled.ai/guides): Practical answers about US property records: parcel numbers, finding owners, assessor data, building permits, zoning, parcel maps and giving AI agents property data. - [About Parceled](https://www.parceled.ai/about): Parceled is a US property data platform for developers and AI agents. Where the data comes from, how it is processed, how it is priced, and how to reach us. - [Parceled API documentation](https://www.parceled.ai/docs): Quickstart, authentication, MCP tools, REST endpoints, GraphQL, vector tiles, bulk property search, pricing and errors for the Parceled US property data API. - [Parceled pricing: free tier, credits and pay as you go](https://www.parceled.ai/pricing): What Parceled costs: 100 free API calls a month, then $0.01 per credit as prepaid packs or pay-as-you-go. You pay only for fields that return data. - [Nationwide parcel boundary data (API and vector tiles)](https://www.parceled.ai/data/parcel-boundaries): Parcel boundaries (property lines) for 126M+ US parcels across 50 states and 2,377 counties, served as hosted Mapbox Vector Tiles and queryable by coordinate through REST, GraphQL and MCP. - [Tax assessor data API for US properties](https://www.parceled.ai/data/tax-assessor-data): Query county tax assessor records through one API: assessed and market value, year built, building area, bedrooms and baths, land use, owner and mailing address, and last sale. Filter in bulk or look up one property. - [Property owner lookup API](https://www.parceled.ai/data/property-owner-data): Find who owns a US property by address or coordinates: owner names and mailing addresses from county records, renter-occupied signals, and bulk owner-name search through MCP, REST and GraphQL. - [Building permit data API](https://www.parceled.ai/data/building-permits): Building permits linked to US parcels: permit type, issue date, status, valuation, contractor and source link, from permit offices in 403 counties. Search properties with or without a permit since a date. - [Zoning data API for US parcels](https://www.parceled.ai/data/zoning): Get the zoning district of a US parcel: raw jurisdiction zone code, normalized category (single-family, multifamily, commercial, industrial...), overlays, and buildable-area screens like vacant, ADU-eligible and split potential. - [Building data API: footprints, heights, year built and codes](https://www.parceled.ai/data/building-data): Building-level data for US parcels: footprint polygons and heights, year built, building area, stories, permits and the adopted building code of the jurisdiction, through one API. - [Property-level hail history API](https://www.parceled.ai/data/hail-history): Hail history for any US property: every storm day radar-estimated hail fell on the parcel, with maximum estimated hail size, from NOAA MRMS MESH data. Search properties by hail size and date. ## Guides - [Property data glossary](https://www.parceled.ai/glossary): Plain-English definitions of the terms used in US parcel, tax assessor, deed, permit and zoning records. - [What is a parcel number (APN)?](https://www.parceled.ai/guides/what-is-a-parcel-number-apn): A parcel number (APN, PIN or parcel ID) is the unique ID a county assigns to each piece of land for taxes and records. What it looks like, where to find it, and why it changes. - [How to find the owner of a property by address](https://www.parceled.ai/guides/how-to-find-property-owner-by-address): Find who owns a house or lot from its address using free county assessor and recorder records, what to do when the owner is an LLC, and how to look owners up in bulk with an API. - [How to get tax assessor data through an API](https://www.parceled.ai/guides/tax-assessor-data-api): Your options for programmatic access to US county tax assessor data: county bulk downloads, scraping, and normalized APIs, with what each costs in time and money, and a working example. - [How to look up building permits for an address](https://www.parceled.ai/guides/how-to-look-up-building-permits-by-address): Find the permit history of a house: which office issues permits for the address, how to search the online permit portal, what to do when records are not online, and how to search permits across many properties. - [How to find the zoning of a property](https://www.parceled.ai/guides/how-to-find-zoning-for-a-property): Find a property's zoning district on the city or county zoning map, read what the district allows in the zoning code, and check it programmatically for many parcels. - [How to add parcel boundaries to a Mapbox or MapLibre map](https://www.parceled.ai/guides/add-parcel-boundaries-to-mapbox): Show US property lines on your own web map with hosted vector tiles: get a tile URL, add a vector source and line/fill layers, filter by field, and keep your key off the client. - [How to give Claude, ChatGPT or Cursor access to property data](https://www.parceled.ai/guides/property-data-for-ai-agents-mcp): Connect a property data MCP server to Claude, ChatGPT, Cursor or Claude Code so your assistant can look up parcels, owners, assessor records, permits and zoning, with examples and cost controls. ## Data pages by state - https://www.parceled.ai/coverage// State slugs: alaska, alabama, arkansas, arizona, california, colorado, connecticut, district-of-columbia, delaware, florida, georgia, hawaii, iowa, idaho, illinois, indiana, kansas, kentucky, louisiana, massachusetts, maryland, maine, michigan, minnesota, missouri, mississippi, montana, north-carolina, north-dakota, nebraska, new-hampshire, new-jersey, new-mexico, nevada, new-york, ohio, oklahoma, oregon, pennsylvania, rhode-island, south-carolina, south-dakota, tennessee, texas, utah, virginia, vermont, washington, wisconsin, west-virginia, wyoming. County slugs are the full county name, e.g. dallas-county. Every page above also has a Markdown version at the same URL plus ".md".