placedb

The dataset

1,674,947 settlements.
No attribution required.

Countries, administrative divisions and settlements, every one with coordinates. Built only from public-domain sources and released into the public domain, so nothing you build on it carries an obligation back.

Counted

Countries and territories 255

one sign = 10 countries

Administrative divisions 4,328

one sign = 200 divisions

Settlements 1,674,947

one sign = 10,000 settlements

Type, and the aggregate comes apart

Ready.

    On the units

    One sign in the settlements row stands for ten thousand of them, and the field below it resolves into the places it stood for, fetched live. Each row keeps its own unit, so the three fields are not to a shared scale — four orders of magnitude will not sit on one key honestly. Every figure is read from the publisher's release pointer when this page is built, never typed in.

    What it costs you

    The comparison this chart was invented for.

    Neurath built pictorial statistics to make obligations comparable at a glance. Every general-purpose place dataset carries terms that follow your work downstream. Here is what each one attaches.

    Licence obligations attached by comparable place datasets
    Source Licence Attaches
    placedb Nothing travels with it. Ship it in a product, a paper, or a competitor. CC0-1.0 Nothing
    GeoNames Credit must appear wherever the data does, including inside your app. CC BY 4.0
    Anything OpenStreetMap-derived Credit, and a derived database you distribute has to carry the same terms. ODbL 1.0

    A courtesy link is welcome and is not a condition. Nothing in CC0 requires it.

    How it is served

    Most of a location API is not a query.

    The dataset changes about once a month, so the answers are files. They sit in object storage behind a CDN with nothing computing in front of them — which is why there is no key to ask for and no bill to send.

    1. /v1/countries.json Every country, with codes, currency, calling code and counts.
    2. /v1/regions/<CC>.json The administrative divisions of one country.
    3. /v1/cities/<CC>/<admin1>.json Every settlement inside one division. The complete list, always.
    4. /v1/ac/<CC>/<prefix>.json An autocomplete bucket. Ask for the prefix you have, go one character deeper while the answer says it is incomplete.

    A whole division, in one request

    $ curl -s https://api.placedb.org/v1/regions/IS.json
    
    {"country":"IS","regions":[{"id":203304,"iso_3166_2":"IS-1",
    "lat":64.2,"lon":-21.7,"name":"Capital Region","population":233034,
    "settlements":16,"slug":"capital-region"},{"id":220663,
    "iso_3166_2":"IS-7","lat":65.283333,"lon":-14.3833…

    Checkable

    Every response names the release it came from.

    Each file carries release and s_version, and the index (3.9 MB) holds a sha256 for every one of them. The build is deterministic: the same release and the same code produce identical bytes, so you can rebuild what you were served and check it matches — or take the dataset and stop depending on this service entirely.

    What it does not do

    The parts worth knowing before you commit.

    • Names are ASCII. Reykjavík is served as Reykjavik. The transliteration comes from the dataset, and this service does not correct it. If you need local spellings, this is the wrong dataset today.
    • No search across countries. Autocomplete works within one country. A cross-border search endpoint needs compute, and compute is the thing keeping this free.
    • A place can appear twice. Berlin is a state and a city, so the API returns both, under the same id. That is two different answers, not a duplicate — disambiguate on type.
    • No key, no quota, no meter. Fair use, on trust. Please do not mirror the whole tree through the CDN; the dataset is right there and it is yours.

    Start

    Nothing to sign up for.

    There is no account, no key and no trial. The endpoint is public right now — the fastest way to evaluate it is to call it.

    Try it against live data Read the endpoints