Public US property parcel records, by API
Privacy-first: ParcelAPI returns property and permit facts only. No owner names, mailing addresses or personal contact data, so there's less personal data for your app to store, secure or answer for.
ParcelAPI is a machine-to-machine HTTP API that returns public US property parcel records (parcel ID, site address, city, county, assessed values and other attributes) and building permit records. It is built for AI agents, software developers and data applications. There is no website login: you get an API key, buy prepaid credits or start a monthly plan, and call the API.
Billing is simple: 1 credit = 1 record returned. Pay as you go with prepaid credit packs, or choose a monthly plan. Cancel a plan anytime.
Data and coverage
Records come from public government sources: county and state assessor and GIS parcel datasets and city/county open-data building permit feeds, used under their published licenses. The database holds over 100 million parcel records.
Parcel data is currently available for parts or all of: AL, AR, CA, CT, FL, IL, IN, MA, MD, ME, MI, MN, MO, MS, MT, NC, ND, NJ, NV, NY, OH, OR, PA, SC, TX, UT, WA, WI and WV. Coverage varies by county. When you query an area that is not loaded yet, the API answers 202 fetch_queued at no charge and loads it from an approved public source where one exists.
We do not store or return owner names, owner mailing addresses or any personal contact data. Some states and counties are excluded because of their public-records resale rules. Permit records include source attribution, which you must keep when redistributing CC-BY data.
Pricing
Every new key starts with a one-time free trial of 1,000 credits. After that, buy a prepaid credit pack:
| Pack | Credits (records) | Price (USD) | Per 1,000 records |
|---|---|---|---|
| Starter | 10,000 | $5 | $0.50 |
| Growth | 100,000 | $40 | $0.40 |
| Scale | 1,000,000 | $300 | $0.30 |
| Enterprise | 10,000,000 | $2,000 | $0.20 |
One-time payments processed by Stripe. Pack credits do not expire. A search that returns no records costs 1 credit; a search that times out costs nothing. Current packs are also listed at api.parcelapi.net/v1/credits/packs. See the refund policy.
Monthly plans
Prefer a fixed monthly bill? Subscribe to a plan and get a fresh allowance of credits every billing cycle:
| Plan | Credits per month | Price (USD) | Per 1,000 records |
|---|---|---|---|
| Starter | 60,000 | $19/mo | $0.32 |
| Pro | 175,000 | $49/mo | $0.28 |
| Business | 600,000 | $149/mo | $0.25 |
Billed monthly by Stripe. Monthly credits reset to your plan amount at each renewal and do not roll over. Pack credits are kept separately and never expire; searches use your monthly credits first. Cancel anytime with POST /v1/subscriptions/cancel: there are no further charges, and your monthly credits stay usable until the end of the period you paid for. Plans are listed at api.parcelapi.net/v1/subscriptions/plans.
Quickstart
1. Get a free trial key (1,000 credits, shown once, so save it):
curl -X POST https://api.parcelapi.net/v1/keys/trial
2. Query parcels (state required; county, city, address optional; limit 1–1000):
curl -X POST https://api.parcelapi.net/v1/parcels/query \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"state":"FL","county":"Orange","address":"100 MAIN","limit":10}'
3. Check your balance, then buy more credits when needed (returns a Stripe Checkout link):
curl https://api.parcelapi.net/v1/credits -H "X-API-Key: YOUR_KEY"
curl -X POST https://api.parcelapi.net/v1/credits/topup \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" -d '{"pack":"starter"}'
No key yet and want to buy directly? POST /v1/credits/purchase with {"pack":"starter"} returns a checkout link; after payment, collect your new key once with POST /v1/keys/claim?session_id=cs_....
4. Or start a monthly plan (returns a Stripe Checkout link; without a key, a new key is created and claimed the same way):
curl -X POST https://api.parcelapi.net/v1/subscriptions/subscribe \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" -d '{"plan":"pro"}'
curl https://api.parcelapi.net/v1/subscriptions/status -H "X-API-Key: YOUR_KEY"
curl -X POST https://api.parcelapi.net/v1/subscriptions/cancel -H "X-API-Key: YOUR_KEY"
Endpoints
| Endpoint | Purpose |
|---|---|
POST /v1/keys/trial | Free trial key (1,000 credits; one per IP per 30 days) |
POST /v1/parcels/query | Search parcel records |
POST /v1/permits/query | Search building permit records |
GET /v1/credits | Your credit balance |
GET /v1/credits/packs | Credit packs and prices |
POST /v1/credits/topup | Buy credits for an existing key |
POST /v1/credits/purchase | Buy credits and get a new key |
GET /v1/subscriptions/plans | Monthly plans and prices |
POST /v1/subscriptions/subscribe | Start a monthly plan (Checkout link) |
GET /v1/subscriptions/status | Your plan, renewal date and balances |
POST /v1/subscriptions/cancel | Cancel at the end of the paid period |
POST /v1/keys/claim | Collect a purchased key once |
GET /v1/fetch/{job_id} | Status of an area being loaded |
GET /health | Service status |
Authentication is the X-API-Key header. Errors: 401 invalid key, 402 out of credits, 403 restricted area, 422 bad input, 429 rate limit, 503 query timeout (not charged). A machine-readable summary is at /llms.txt.
Docs: interactive API docs · OpenAPI spec · MCP server for AI agents