Documentation menu

← Parcels

API reference

Search parcels

GET/v1/parcel

A page of parcels, each with its identifiers, jurisdiction, area, addresses, owners, accounts, latest assessment, building, sale and legal description.

A locator (address, apn, or lat and lon) returns what it names, each parcel with a match saying how it was reached. An address that names one parcel returns one; an ambiguous one returns each reading, best first; a point on a stacked lot returns every parcel on it. An area (bbox, or lat, lon and radius) and the filters return a page in a stable order, and combine with jurisdiction or fips to narrow it.

One credit per parcel returned, and free to fetch again for a day. A page with nothing on it costs nothing.

Parameters

query

addressstring | null
A street address, with its city or postal code where one is known: 4516 Printer Ln, Raleigh NC 27613. The parcels it names, best match first, each with a match.
apnstring | null
A parcel number as its issuer writes it. Needs jurisdiction or fips to say which county issued it. Case and spaces do not matter.
latnumber | null
Latitude of a point, in WGS 84. With lon, the parcel whose shape holds the point; with radius as well, the parcels around it, nearest first.
lonnumber | null
Longitude of the point, in WGS 84.
radiusnumber | null
Metres around the point, at most 25,000. The parcels whose centroid lies within it, nearest first.
bboxstring | null
A bounding box as west,south,east,north in WGS 84. The parcels whose shape touches it.
jurisdictionstring[] | null
A jurisdiction id. The parcels of that government, or within it. Repeatable.
fipsstring[] | null
A US Census GEOID, 2 digits for a state or 5 for a county: 48, 48453. The parcels within it. Repeatable.
ownerstring | null
An owner's name, or words from it. The parcels held under a name containing every word, best match first.
acres[gte]number | null
Measured area of at least this many acres.
acres[lte]number | null
Measured area of at most this many acres.
usestring[] | null
The assessor's use code, as published. Repeatable.
classstring[] | null
The assessor's property class code, as published. Repeatable.
market_value[gte]number | null
Latest total market value of at least this much.
market_value[lte]number | null
Latest total market value of at most this much.
includestring | null
Comma-separated sections to add. geometry adds each parcel's boundary as GeoJSON.
format"json" | "geojson"
json for the list envelope, geojson for a FeatureCollection with every boundary. Accept: application/geo+json does the same.
cursorstring | null
The previous page's next_cursor.
sizeinteger | null
Default 25.
totalboolean
True adds total, the count of every match, to the first page.

Responses

200
parcel object
A page of parcels.
401
ProblemDetail
credential_missing, credential_invalid or credential_expired: send a live API key as Authorization: Bearer <key>.
402
ProblemDetail
quota_exhausted: the balance can't cover the call. Nothing was charged and nothing was returned.
403
ProblemDetail
scope_missing, person_required or entitlement_missing: this credential or plan can't do this. detail says which.
404
ProblemDetail
no_such_resource: nothing has that id.
409
ProblemDetail
version_conflict: the record changed since you read it. Read it again and resend.
422
ProblemDetail
parameter_invalid, id_malformed or a cursor code: a parameter's value isn't one this operation takes.
429
ProblemDetail
rate_limited: wait for Retry-After, then send it again. Not charged.
501
empty
not_available: no parcels are published yet.

Example request

curl -G 'https://api.placestack.com/v1/parcel' \
  --data-urlencode 'address=100 Main St' \
  --data-urlencode 'jurisdiction=value' \
  --data-urlencode 'use=townhome' \
  -H "Authorization: Bearer $PLACESTACK_API_KEY"

Example response

{
  "object": "list",
  "data": [
    {
      "object": "parcel",
      "id": "prc_01h455vb4pex5vsknk084sn02q",
      "number": "<Number>",
      "identifier": [
        "<parcel__Identifier>"
      ],
      "jurisdiction": "<JurisdictionRef>",
      "within": [
        "<parcel__Within>"
      ],
      "status": "<Status>",
      "type": "string",
      "area": "<Area>",
      "centroid": "<parcel__Point>",
      "address": [
        "<Address>"
      ],
      "owner": [
        "<Owner>"
      ],
      "account": [
        "<Account>"
      ],
      "assessment": "<Assessment>",
      "building": "<Building>",
      "sale": "<Sale>",
      "legal": "<Legal>",
      "geometry": "<Geometry>",
      "match": "<Match>",
      "as_of": "2026-09-13",
      "href": "<Href>"
    }
  ],
  "has_more": true,
  "next_cursor": "string",
  "suppressed": 0,
  "total": {
    "value": 1,
    "relation": "eq"
  }
}

The rest of parcel.

Next

POST /parcel/batch

Resolve a batch of parcels