Registry
The GERS registry is the catalog of identifiers that carry a stability commitment. The registry can tell you if the ID is part of GERS at all, in the current release, and when the feature associated with that ID last changed.
There is only ever one registry. It is not versioned. Each release rebuilds it by comparing the published registry with the new release data and overwriting it in place, so what you read is always current.
| Provider | Location |
|---|---|
| Amazon S3 | s3://overturemaps-us-west-2/registry/ |
| Microsoft Azure Blob Storage | https://overturemapswestus2.blob.core.windows.net/registry/ |
The files are Parquet, sorted by id across roughly 50 files, so a lookup by ID is fast and efficient.
What the registry is for
Overture publishes identifiers for every feature in every theme. Only some of them are GERS IDs. Features in the base theme and features of type building_part carry deterministic UUIDs that are structurally identical to GERS IDs and carry no stability commitment at all.
You cannot tell the difference by looking at the identifier. Presence in the registry is the only discriminator, and that is the registry's main job.
Schema
| Column | Type | Description |
|---|---|---|
id | string | The GERS ID, a 128-bit random UUID. See what a GERS ID is. |
version | integer | The feature's version at last_seen. |
first_seen | string | The release in which this identifier first appeared. Identifiers predating the 2025-06-25.0 switchover all show that release, so this is not the feature's age. |
last_seen | string | The most recent release containing the ID. |
last_changed | string | The most recent release in which the feature changed, taken from the changelog. |
path | string | Path to the Parquet file holding the feature, relative to the release root. Null when the ID is not in the current release. |
bbox | struct of float | Bounding box of the feature. Null when the ID is not in the current release. |
first_seen is not the age of the feature
Every identifier in Overture was replaced in the 2025-06-25.0 release, and the registry begins there. Roughly 3.3 billion identifiers carry that release as their first_seen, against 7 to 27 million added in each release since. For most of the registry, first_seen records when the current identifier was minted, not when Overture first carried the feature. Use it to reason about identifiers, not about how long the thing they point at has existed.
A null path is meaningful. It means the ID is part of GERS and is not in the current release. bbox is null on those rows for the same reason. Use path IS NOT NULL as your test for "still live", and last_seen to find the release that last carried it.
path is relative to the release root. It starts at theme= and has no leading slash, so prepend the release root to get a full path:
s3://overturemaps-us-west-2/release/<RELEASE>/theme=buildings/type=building/part-00403-e684fe1e-d4f5-5b6a-8315-f17bb5d8394c-c000.zstd.parquet
Or have the query do it:
LOAD httpfs; -- noqa
SET s3_region='us-west-2';
-- The registry's path column is relative to the release root and starts at
-- theme=, so prepend the release root to get a path you can read directly.
SELECT
id,
's3://overturemaps-us-west-2/release/2026-09-23.1/' || path AS file
FROM read_parquet('s3://overturemaps-us-west-2/registry/*.parquet')
WHERE id = 'fea28f69-7afa-460c-b270-61ef74cd340c';
What is in the registry
building, division, division_area, division_boundary, place, segment, and connector.
Inclusion signifies Overture's long-term commitment to matching and stability for that type. The three exclusions are the base theme, the building_part type, and the addresses theme. Base and building_part come from a single source and need no matching to conflate, so they cannot offer stability through matching, which is the thing GERS provides. Addresses are excluded pending general availability of that theme rather than as a permanent decision.
The filter is written as a deny-list, so a new feature type added to a theme that is not excluded joins the registry automatically.
Addresses
Address features carry identifiers, and between the July and December 2025 releases those identifiers were in the registry. They were withdrawn pending general availability of the addresses theme, and the identifiers published during that window were withdrawn with them.
So an address ID from a 2025 release will not be found in the registry today. That is a statement about the commitment, not about the identifier: it means Overture is not yet promising stability for addresses, because the addresses matcher is still being built. Addresses are expected to return to the registry at GA.
Guarantees
Every release candidate validates the registry before it can be published, and any failure blocks the release. Four of those checks are guarantees you can build assertions against:
idis unique in the registry.first_seen,last_seen, andlast_changedare never null, andfirst_seen <= last_changed <= last_seenalways holds.- Any row with a populated
pathhaslast_seenequal to the current release. - Registry contents and release contents never disagree in either direction. No row claims to be in the release when it is not, and no row claims absence when the ID is present.
Example: is this ID part of GERS?
LOAD httpfs; -- noqa
SET s3_region='us-west-2';
-- Is this identifier part of GERS, and is it in the current release?
-- The registry is not versioned, so there is no release in this path.
SELECT id, version, first_seen, last_seen, last_changed, path, bbox
FROM read_parquet('s3://overturemaps-us-west-2/registry/*.parquet')
WHERE id = 'fea28f69-7afa-460c-b270-61ef74cd340c';
One row comes back, so this identifier is part of GERS rather than a bare UUID:
| Column | Value |
|---|---|
id | fea28f69-7afa-460c-b270-61ef74cd340c |
version | 1 |
first_seen | 2025-06-25.0 |
last_seen | 2026-09-23.1 |
last_changed | 2025-06-25.0 |
path | theme=buildings/type=building/part-00403-….zstd.parquet |
bbox | xmin 80.67177, xmax 80.67182, ymin 26.61979, ymax 26.61984 |
Reading it: this is a building, last_seen is the current release so the identifier is still live, and last_changed is the switchover release, meaning nothing about this building has changed in any release since. path names the one file that holds it, so you can read the feature without scanning the theme. Part file names change with every release, which is why the query below takes the path from the registry rather than hardcoding one.
LOAD httpfs; -- noqa
SET s3_region='us-west-2';
-- The registry gives the path to the exact Parquet file holding a feature, so
-- you can read that one file instead of scanning the theme. Part file names
-- change with every release, so take the path from the registry rather than
-- pasting one in.
SET VARIABLE feature_path = ( -- noqa
SELECT 's3://overturemaps-us-west-2/release/2026-09-23.1/' || path
FROM read_parquet('s3://overturemaps-us-west-2/registry/*.parquet')
WHERE id = 'fea28f69-7afa-460c-b270-61ef74cd340c'
);
SELECT *
FROM read_parquet(getvariable('feature_path'))
WHERE id = 'fea28f69-7afa-460c-b270-61ef74cd340c';
Looking up an ID without SQL
The Overture Explorer finds features by GERS ID. Paste an identifier into the search box and Explorer switches to GERS mode on its own, goes straight to the feature, and selects it. The result can be shared as a link.
Explorer only shows features that are in the current release. The registry also covers identifiers that have dropped out of one, so if you need to tell a removed feature from an identifier that was never in GERS, use the registry.
Example: which of my IDs are still live?
Registry lookups are cheap enough to run over a whole table of held identifiers:
LOAD httpfs; -- noqa
SET s3_region='us-west-2';
-- Check a whole table of held identifiers against the registry in one pass.
-- Swap the my_matched_records CTE for your own crosswalk table. It needs one
-- column of your record identifiers and one column of GERS IDs.
-- last_seen IS NULL the identifier is not in GERS at all
-- in_current_release false the feature is gone, so re-match those records
WITH my_matched_records AS (
SELECT *
FROM (VALUES
('inspection-4471', 'fea28f69-7afa-460c-b270-61ef74cd340c'),
('inspection-8823', '00000000-0000-0000-0000-000000000000')
) AS t (my_record_id, gers_id)
)
SELECT
m.my_record_id,
m.gers_id,
r.last_seen,
r.last_changed,
r.path IS NOT NULL AS in_current_release
FROM my_matched_records AS m
LEFT JOIN read_parquet('s3://overturemaps-us-west-2/registry/*.parquet') AS r
ON m.gers_id = r.id;
A null r.last_seen means the ID is not in GERS at all: either it was never a GERS ID, or you are holding an identifier from before the June 2025 switchover. in_current_release = false means the feature has gone and those records need re-matching. See GERS ID stability.