Skip to main content
Every city record carries an optional type field describing what kind of place it is. The value is inherited from the upstream GeoNames feature classification.
The type field mixes two ideas — what a place is (city, town, village) and what administrative role it fills (adm2, county, parish). The same place can be tagged either way. For example, Dallas is adm2 because it is the seat of Dallas County, and major Australian cities are adm1 because they are seats of state-level governments.

All Type Values

There are 35 distinct values across 153,765 city rows.

Filtering to Genuine Settlements

For use cases like “find the nearest city to a location” or “populate a dropdown”, you want to exclude admin-only and non-place types. Use an exclusion list rather than an inclusion list — any new settlement-style value added in the future is kept by default. Exclude these types:

SQL

type NOT IN (...) evaluates to UNKNOWN for rows where type is NULL, silently dropping them. The explicit type IS NULL OR ... keeps null-type rows. Remove the type IS NULL clause only if you want to exclude them.

JavaScript

Python

Records with No Type

About 1,900 rows have a null type. They are a mix of legitimate places and unclassified entries. For strict settlement queries, the safest signal is the presence of valid coordinates (latitude/longitude not null), and — where available — a non-null population.

Database Schema

Full cities table definition including the type field.

Multi-Level Territories

How overseas territories and dual-modeled entities affect city queries.