Parcels
Query parcels
POST
/
parcels
/
query
Query Parcels Post
curl --request POST \
--url https://api.buyparceldata.com/parcels/query \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": [
{
"field": "<string>",
"op": "<string>",
"value": "<string>"
}
],
"order": {
"field": "<string>",
"direction": "asc"
},
"limit": 20,
"offset": 0,
"include_buildings": false
}
'import requests
url = "https://api.buyparceldata.com/parcels/query"
payload = {
"filters": [
{
"field": "<string>",
"op": "<string>",
"value": "<string>"
}
],
"order": {
"field": "<string>",
"direction": "asc"
},
"limit": 20,
"offset": 0,
"include_buildings": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
filters: [{field: '<string>', op: '<string>', value: '<string>'}],
order: {field: '<string>', direction: 'asc'},
limit: 20,
offset: 0,
include_buildings: false
})
};
fetch('https://api.buyparceldata.com/parcels/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.buyparceldata.com/parcels/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'filters' => [
[
'field' => '<string>',
'op' => '<string>',
'value' => '<string>'
]
],
'order' => [
'field' => '<string>',
'direction' => 'asc'
],
'limit' => 20,
'offset' => 0,
'include_buildings' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.buyparceldata.com/parcels/query"
payload := strings.NewReader("{\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"op\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"order\": {\n \"field\": \"<string>\",\n \"direction\": \"asc\"\n },\n \"limit\": 20,\n \"offset\": 0,\n \"include_buildings\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.buyparceldata.com/parcels/query")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"op\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"order\": {\n \"field\": \"<string>\",\n \"direction\": \"asc\"\n },\n \"limit\": 20,\n \"offset\": 0,\n \"include_buildings\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.buyparceldata.com/parcels/query")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"op\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"order\": {\n \"field\": \"<string>\",\n \"direction\": \"asc\"\n },\n \"limit\": 20,\n \"offset\": 0,\n \"include_buildings\": false\n}"
response = http.request(request)
puts response.read_body{
"results": [
{}
],
"count": 123,
"limit": 123,
"offset": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Request format
Pass afilters array where each item specifies a field, an op (operator), and a value. All filters are AND’d together.
{
"filters": [
{ "field": "owner", "op": "ilike", "value": "SMITH" },
{ "field": "state", "op": "eq", "value": "CA" }
],
"limit": 20,
"offset": 0
}
in, nin, and between:
{
"filters": [
{ "field": "state", "op": "in", "value": ["CA", "OR", "WA"] },
{ "field": "acres", "op": "between", "value": [500, 10000] }
]
}
Queryable fields
Text search fields: ilike, eq, ne, in, nin, isnull
ilike performs a case-insensitive substring match.
| Field | Description |
|---|---|
owner | Owner name |
parcel_id | County assessor parcel ID (APN) |
situs | Property address |
mail_addr | Owner mailing address |
city | City |
land_use | Land use classification |
land_use_code | Land use code |
legal | Legal description |
cdl_majority_category | USDA crop/land cover type (e.g. Corn, Soybeans) |
Queries on
owner, parcel_id, situs, or mail_addr require a geographic scope. Include a state_fp, state, or county_fp filter.Numeric fields: eq, ne, gt, gte, lt, lte, between, in, nin, isnull
| Field | Description |
|---|---|
acres | Parcel area (county-reported) |
acres_calc | Parcel area (calculated from geometry) |
parcel_value | Total assessed value (USD) |
land_value | Land assessed value (USD) |
improvements_value | Improvements assessed value (USD) |
agricultural_value | Agricultural assessed value (USD) |
building_value | Building assessed value (USD) |
sale_price | Most recent sale price (USD) |
tax_amount | Annual property tax (USD) |
elevation | Centroid elevation (meters) |
adjacent_acreage_sameowner | Contiguous acreage under same ownership |
cdl_majority_value | Numeric CDL category code |
cdl_majority_percent | % of parcel covered by majority CDL category |
sq_feet | Parcel area in square feet |
ID and categorical fields: eq, ne, in, nin, isnull
| Field | Description |
|---|---|
state_fp | State FIPS code (e.g. "19" for Iowa) |
state | Two-letter state abbreviation (e.g. "IA") |
county_fp | County FIPS code |
county | County name |
postal | ZIP code |
zoning | Zoning code |
owner_type | Owner type |
sale_date | Sale date string |
bpd_uuid | BPD UUID; use in to batch-fetch records from an area search |
bpd_stack_uuid | Stack UUID for grouped same-location parcels |
Operators
| Operator | Description | Value type |
|---|---|---|
eq | Equals | string or number |
ne | Not equals | string or number |
gt / gte | Greater than (or equal) | number |
lt / lte | Less than (or equal) | number |
between | Inclusive range | 2-element array: [min, max] |
in | In set | array of strings or numbers |
nin | Not in set | array of strings or numbers |
ilike | Case-insensitive substring match | string |
isnull | Is null / is not null | true (null) or false (not null) |
Sorting
Pass an optionalorder object with a field and direction:
{
"filters": [{ "field": "state_fp", "op": "eq", "value": "19" }],
"order": { "field": "acres", "direction": "desc" }
}
Pagination
Uselimit (max 100, default 20) and offset to page through results.
{
"filters": [
{ "field": "state_fp", "op": "eq", "value": "19" },
{ "field": "acres", "op": "gte", "value": 100 }
],
"limit": 100,
"offset": 200
}
Building footprints
Setinclude_buildings: true to include ORNL building footprint data for each parcel. When enabled, each parcel in the response will contain a buildings array with the physical structures on that parcel.
{
"filters": [{ "field": "state_fp", "op": "eq", "value": "06" }],
"include_buildings": true
}
geom), dimensions (sq_feet, sq_meters, height), occupancy classification, and address fields. The buildings key is omitted entirely when include_buildings is false (the default).Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
⌘I
Query Parcels Post
curl --request POST \
--url https://api.buyparceldata.com/parcels/query \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": [
{
"field": "<string>",
"op": "<string>",
"value": "<string>"
}
],
"order": {
"field": "<string>",
"direction": "asc"
},
"limit": 20,
"offset": 0,
"include_buildings": false
}
'import requests
url = "https://api.buyparceldata.com/parcels/query"
payload = {
"filters": [
{
"field": "<string>",
"op": "<string>",
"value": "<string>"
}
],
"order": {
"field": "<string>",
"direction": "asc"
},
"limit": 20,
"offset": 0,
"include_buildings": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
filters: [{field: '<string>', op: '<string>', value: '<string>'}],
order: {field: '<string>', direction: 'asc'},
limit: 20,
offset: 0,
include_buildings: false
})
};
fetch('https://api.buyparceldata.com/parcels/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.buyparceldata.com/parcels/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'filters' => [
[
'field' => '<string>',
'op' => '<string>',
'value' => '<string>'
]
],
'order' => [
'field' => '<string>',
'direction' => 'asc'
],
'limit' => 20,
'offset' => 0,
'include_buildings' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.buyparceldata.com/parcels/query"
payload := strings.NewReader("{\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"op\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"order\": {\n \"field\": \"<string>\",\n \"direction\": \"asc\"\n },\n \"limit\": 20,\n \"offset\": 0,\n \"include_buildings\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.buyparceldata.com/parcels/query")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"op\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"order\": {\n \"field\": \"<string>\",\n \"direction\": \"asc\"\n },\n \"limit\": 20,\n \"offset\": 0,\n \"include_buildings\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.buyparceldata.com/parcels/query")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"op\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"order\": {\n \"field\": \"<string>\",\n \"direction\": \"asc\"\n },\n \"limit\": 20,\n \"offset\": 0,\n \"include_buildings\": false\n}"
response = http.request(request)
puts response.read_body{
"results": [
{}
],
"count": 123,
"limit": 123,
"offset": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}