# Fieldgeist IDs (/concepts/fieldgeist-ids)

Every parcel Verify can match has a **Fieldgeist ID**. Store it with your own record of the property: it's the key for fetching the parcel again and for joining your data to later answers.

| | `fieldgeist_id` | `building_id` |
| --- | --- | --- |
| Identifies | One parcel: a lot, a building on its own parcel, or one unit that is its own parcel | A building whose units are separate parcels |
| Prefix | `adr_` | `bld_` |
| Example | `adr_01JA2Z3Y4X5W6V7T8S9R0QPNMA` | `bld_01JA2Z3Y4X5W6V7T8S9R0QPNMC` |
| Returned by | Lookup (top level and candidates), Lookup by ID | Lookup (top level and candidates), Lookup by ID |
| Fetch directly | [`GET /v1/verify/lookup/{fieldgeist_id}`](/api-reference/lookup-by-id) | Not yet (`422 unsupported_id_type`) |

## Format [#format]

A prefix followed by a 26-character [ULID](https://github.com/ulid/spec) in Crockford base32 (digits and uppercase letters without I, L, O and U). Treat IDs as opaque strings: compare them whole and don't parse the characters after the prefix.

## fieldgeist_id vs building_id [#fieldgeist_id-vs-building_id]

- A **single-family home** or any parcel without units has a `fieldgeist_id` and `building_id: null`.
- In a **condo building**, each unit is its own parcel with its own `fieldgeist_id`, and all of them share one `building_id`.
- When the building also has a parcel of its own, a lookup without a unit returns that parcel's `fieldgeist_id` and the units' shared `building_id`, with `unit_required: true`.
- When the building has only unit parcels, a lookup without a unit returns `fieldgeist_id: null`, the `building_id`, and the units as candidates.

`building_id` lets you group units of one building without matching each unit. See [Condos and units](/concepts/condos-and-units).

## Fieldgeist IDs vs APNs [#fieldgeist-ids-vs-apns]

The `apn` is the county assessor's parcel number. It's useful for reading county records, but it's only unique within a county and its format varies by county. A Fieldgeist ID is unique across the whole index, has one format, and is the identifier the API takes back.

## When parcels change [#when-parcels-change]

When a parcel is split or merged, its old ID is kept and marked superseded: [Lookup by ID](/api-reference/lookup-by-id) returns `"status": "superseded"` and the replacing IDs in `superseded_by`.
