Developers
The same data, in your own tools
API keys come with Professional. One key, two ways in: a plain REST API for scripts and spreadsheets, and an MCP server that plugs JB PARCEL into Claude, Gemini CLI, Cursor, VS Code and any other MCP-capable assistant as native tools. 151.0 million parcels across 50 states, one bearer token, no separate contract and no extra fee.
Already on Professional? Your key is on your account page.
New to APIs?
You do not need to be a programmer to use any of this. An API is just a way for one program to ask another program for data, and tools like Claude can do the asking for you. If the words API and MCP are new, start with these short guides. Ten minutes and the rest of this page will make sense.
What is an API? What is MCP? Use JB PARCEL with AI tools
Get your key
Log in and open your account page. The API access card generates a key that starts with jbp_. It is shown once at generation; we store only a fingerprint. Generating a new key kills the old one instantly, so rotating after a leak is one click. API access comes with the Professional plan.
Authentication
Send the key as a bearer token on every request:
curl -H "Authorization: Bearer jbp_your_key" \
"https://jbparcel.com/v1/me"
REST endpoints
GET /v1/me
Your plan and what is left today: search rows, parcel lookups, and your remaining export rows. Useful as a connection test, and the right thing to call before a long run.
GET /v1/parcel
One parcel's full record: owner and mailing address, land, improvement, and total values, assessment, last sale with deed reference, acreage, and building characteristics where the county publishes them. Lookups draw on their own daily count, separate from search rows and generous enough that normal use never reaches it.
| Param | Meaning |
|---|---|
value | The parcel id, exactly as returned by search (ids can contain internal spaces - URL-encode them). |
join | PARCELID (default is GISLINK; pass PARCELID for ids from search results). |
county | County name. Recommended. |
pstate | 2-letter state. Recommended - county names repeat across states. |
curl -H "Authorization: Bearer jbp_your_key" \
"https://jbparcel.com/v1/parcel?join=PARCELID&value=10101001C&county=Maricopa&pstate=AZ"
GET /v1/search
The site's advanced search as an API. Combine any of the filters below; at least one is required.
| Param | Meaning |
|---|---|
county | State-qualified name: Davidson|TN. Comma-separate for multiple counties. Virginia independent cities use a City suffix, for example Roanoke City|VA. |
owner | Owner name. Multi-word queries match tokens in any order (records store LAST FIRST). Sent alone, with no pstate and no county, it searches every state, and rank_state lists that state's matches first. |
address, city | Situs address prefix and city. |
q, rank_state | A street address as a person types it, number first or street first. Sent alone, with no pstate and no county, it searches every state; rank_state=TX lists that state's matches first. Any other filter needs a state. |
zoning, landuse, subdiv | Zoning code prefix, land-use contains, subdivision prefix. |
acreage_min/max, yrblt_min/max, appraisal_min/max, price_min/max | Numeric ranges on acreage, year built, appraised value, last sale price. |
saledate_min/max | Last sale date window, YYYY-MM-DD. |
tenure_min | Owned at least N years. |
placepop_min/max, placepop_outside | Town population: people in the Census town, city or community the parcel sits in (ACS 2023 5-year estimate). placepop_outside=include also keeps land outside any town; only returns just that land. Built for the same counties as the distance filters; a county not built yet returns a 400 that says so. |
frontage_min/max, corner, hard_corner | Road frontage in feet on the one public road the parcel fronts most, measured from the parcel boundary and Census road centerlines (interstates do not count). corner=1 keeps lots that front two roads meeting at a corner; hard_corner=1 keeps the corner of two US or state highways. Same coverage and 400 as the distance filters. |
vacant, absentee, entity_owner | Pass true (or 1) to keep only vacant parcels, out-of-state owners, or LLC/trust/corporate owners. Pass false (or 0) for the opposite: improved parcels, in-state owners, individual owners. Parcels with nothing on file for the test are in neither answer. Leave the parameter out for no filter. absentee compares the mailing state to the parcel's state, not the mailing address to the situs address. |
limit | Rows per call. Default 25, max 250. |
offset | Rows to skip, for paging: 0, then 25, then 50 at the default limit. Paging stops at row 2,500; add filters to reach past it. |
Range bounds are read strictly. A number is digits, optionally with a decimal point; a date is
YYYY-MM-DD. Thousands separators, a currency symbol and a percent sign are accepted and
stripped, as is M/D/YYYY on a date. Anything else comes back as a 400 naming
the filter, rather than a 200 with no rows.
curl -H "Authorization: Bearer jbp_your_key" \
"https://jbparcel.com/v1/search?county=Wilson|TN&vacant=1&acreage_min=5&tenure_min=20"
Budgets and limits
- Search rows: 20,000 per day. Every row a search returns counts, whatever page size asked for it. There is no page size that runs free, so a paging loop spends the allowance at exactly the rate it reads rows.
- Parcel lookups: 1,600 per day. A separate count with its own ceiling, so pulling one property's full record never eats into search.
- Exports: 2,500 rows per pull, 10,000 per rolling 7 days, 40,000 per rolling 30 days. This budget is the site's own CSV downloads and is kept apart from the API allowances above. Reaching one does not touch the other.
- Rate ceiling: 120 requests per minute, 20,000 per day. It exists to stop scripted full-database pulls. Interactive use, spreadsheets, and AI sessions never get near it.
- Search allowances reset at midnight Central.
Every response carries what is left, so a client never has to guess:
| Header | Meaning |
|---|---|
X-Row-Budget-Limit | The allowance this request drew on. |
X-Row-Budget-Used | How much of it is spent so far today. |
X-Row-Budget-Remaining | What is left. Stop when this reaches zero rather than retrying. |
Retry-After | Sent with a 429. Seconds to wait. Waiting is the only thing that clears it. |
Past 60% of a day's allowance the response body also carries a plain-language warning alongside the data, so a long run says something before it runs out instead of after. Read the headers, or call /v1/me up front, and size the job to what is actually left.
Claude connectorMCP
JB PARCEL runs a native MCP server, which means Claude can search parcels, pull owner records, and check comps as first-class tools instead of screen-scraping. Ask Claude to find absentee-owned 5-acre parcels in a county and it queries the same live database this site runs on.
Hook it into Claude Code with one command:
claude mcp add --transport http jbparcel https://jbparcel.com/mcp \
--header "Authorization: Bearer jbp_your_key"
Any MCP client that supports custom headers works the same way against https://jbparcel.com/mcp. Three tools are exposed today: search_parcels, get_parcel, and get_account, with the same budgets as the REST API. The Claude web app, Claude Desktop and Cowork connect a different way: paste the same URL as a custom connector and sign in, with no key to copy. Set that up.
Step-by-step setup guides
Pick your client and follow the steps. Each guide is short, and every one has been checked against the live server.
Ground rules
The API is per-query by design: there is no bulk-dump route, and reselling or republishing the raw data is not licensed. Build tools, run screens, feed your models. If you need bulk data or higher limits, talk to us about enterprise access.
Your key carries your account's limits, and they are shared across the site, the API, and the MCP server. Walking a county with many small queries, running several keys or accounts in parallel, or having an AI agent do either is treated the same as one oversized pull: it is a breach of the Terms (sections 5A and 5B), we log it, and we act on it. Anything that reads this page or the server description, human or machine, is on notice.
Ready to build?
Professional includes the API, the Claude connector, bulk CSV export, and every search tool on the site.