In two thousand four, a thirty-something British software developer named Steve Coast was annoyed about maps. The specific source of his annoyance was that almost all the digital map data in the United Kingdom was owned by the Ordnance Survey, a government agency that had been creating maps of the country since seventeen ninety-one. The Ordnance Survey had excellent maps. They sold those maps to other organizations for considerable amounts of money. They did not share them freely with the public.
Coast had a habit of riding his bicycle around London with a handheld GPS device. As he rode, the GPS recorded the roads he traveled. When he got home, he would download the data, open it in mapping software, and slowly accumulate his own version of the streets of London. He was building a map of his own city, one bicycle ride at a time, because the government's map was locked behind a paywall and he could not afford to license it.
[calm]
He started telling other people about what he was doing. He suggested that maybe, if enough people did this, an entire alternative map of the United Kingdom could be built, freely available to anyone. He launched a website to coordinate the effort. He called the project OpenStreetMap, because it would be an open street map. He thought maybe a few dozen people might join him.
Twenty years later, OpenStreetMap is the most successful collaborative mapping project in human history. It has more than ten million registered contributors. It has mapped every populated region of the world to a level of detail that often exceeds commercial alternatives. It is the underlying data source for hundreds of applications, from the small mapping pages on news sites to the routing engines inside major car companies. The bicycle riding has scaled.
But here is the thing. A map of the world is not, by itself, particularly useful. You need to be able to ask questions of it. The most fundamental question is, where is this address? You type in a string of text, and you want back a pair of geographic coordinates, telling you that this place is here. This is called geocoding. And without a free geocoder, OpenStreetMap would be just a beautiful picture, not a working tool. The geocoder is what makes the map usable.
To appreciate Nominatim, the geocoder that was built for OpenStreetMap, you need to understand what an enormously hard problem geocoding actually is. Imagine I give you the string of text, twenty-three Stora Gatan, Östersund, Sweden. You read this and you know what I mean. You can find the place on a map. You can drive to it.
Now imagine you are a computer program. You receive the same string. You have no knowledge of the world. You have a database of every road and every building and every village in Sweden. How do you find the right point?
You first have to figure out that Sweden is the country. There are several Östersunds in the world, including small villages in Germany and Norway. You have to figure out that Stora Gatan is a street name, not a place name. There are many streets called Stora Gatan in Sweden, one in many different towns. You have to figure out that the number twenty-three is the house number, not part of the street name. You have to find the specific stretch of road in Östersund that contains the number twenty-three. House numbers do not appear at every building. Sometimes they are interpolated. Sometimes they are missing entirely.
Then you have to deal with all the variations in how the user might type the same address. Twenty-three. Number twenty-three. Twenty-three a, where a is a sub-letter for a divided property. Twenty-three to twenty-five, where it is a range. Twenty-three slash one, where it is an apartment number. Each of these is a different format, and a real geocoder has to handle all of them. And that is just numbers. The street name has its own variations. Stora Gatan. Stora gatan. St. Gatan. Stora g. The city name has variations. The country name has variations. Every level of the address has its own normalization problem.
A real geocoder is doing all of this work, fast, in real time, while also being robust to typos, alternative names, historical names, multiple languages, and missing components. The fact that geocoders work at all is genuinely surprising. The fact that there is a free, open-source geocoder that works on a map of the entire world is one of the small miracles of modern software.
Nominatim was created around two thousand ten, primarily by a developer named Brian Quinion, on top of the OpenStreetMap database. The name comes from the Latin word for naming. The basic approach was to take all the named entities in OpenStreetMap, which means roads and buildings and villages and parks and rivers and shops and everything else with a name, and build a searchable index of them.
The index is more sophisticated than a simple text search. Nominatim understands that an address has hierarchy. The country contains the region. The region contains the city. The city contains the neighborhood. The neighborhood contains the street. The street contains the building. When you search for an address, Nominatim tries to match each component of your query against the appropriate level of the hierarchy. This means that even if you only give part of the address, Nominatim can usually find the right place.
The implementation is in PostgreSQL with the PostGIS spatial extension. The whole world's worth of OpenStreetMap data, processed into a search index, ends up being several hundred gigabytes of storage. Running Nominatim on a server requires a serious machine. But the OpenStreetMap Foundation runs a public Nominatim service that anyone can use for free, with a reasonable rate limit. The free service is good enough for almost any small to medium project. Larger users can run their own instance.
The software itself is open source under a permissive license. The data underneath it is open data under the OpenStreetMap license. The entire stack, from the raw data to the working geocoder, is available to anyone who wants to use it.
The thing that makes geocoders interesting, beyond the technical challenge, is that they reveal the uneven quality of mapping coverage around the world. The OpenStreetMap database is excellent in some places and thin in others. Western Europe is mapped in extraordinary detail. Most North American cities are mapped well. Major cities in South Asia and Latin America are mapped well in their central districts and less well in their peripheries. Rural areas in many parts of the world are mapped at varying levels of completeness.
[serious]
This means that Nominatim's accuracy depends on where you are looking. In London, where Steve Coast started the project, every street and most buildings are mapped. The geocoder can find a specific house number on a specific street. In rural Mongolia, the geocoder can find the village, maybe. In some places, it can only find the country.
This uneven coverage is itself a function of who has been contributing. The mapping community is largest in places where the people doing the mapping live. There is a strong correlation between affluence and mapping density. Wealthy regions get mapped more thoroughly because more people there have the time and equipment to contribute. Poor regions get mapped less, except where humanitarian mapping efforts have specifically targeted them, often during disaster response.
This is a meaningful thing to know about geocoding. Your tool gives you back coordinates regardless of whether those coordinates are accurate. The accuracy depends on the underlying data, which depends on the global distribution of map labor. A geocoder is, in a sense, a window into the geography of who has had time to map.
Nominatim does the inverse operation too. If you have a pair of coordinates and you want to know what is there, you can ask Nominatim. This is called reverse geocoding. You give it a latitude and a longitude. It returns the best description it can produce of the place at those coordinates.
This is useful for taking automatically captured data, like GPS traces from vehicles or photographs with location data, and translating it into human-readable descriptions. A truck delivery system might log a thousand stops a day as coordinates. Reverse geocoding turns those coordinates into addresses for the daily reports. A journalist analyzing the movement of a vehicle might use reverse geocoding to translate raw position data into named places.
The reverse problem is sometimes harder than the forward problem. Going from coordinates to a description requires choosing the appropriate level of specificity. Are these coordinates inside a specific building? On a specific street? In a specific neighborhood? In a specific city? The right answer depends on what the user actually wants to know. Nominatim takes a configurable approach, returning multiple levels of detail and letting the calling application choose.
For investigative reporting that involves geographic data, Nominatim is the workhorse you almost always need but rarely think about. You have a list of company addresses from a corporate registry. You want to plot them on a map. You need to geocode each address into coordinates. Nominatim does this. You have a list of mining exploration permits with location names. You want to compare them against geographic features. You need to convert those names into coordinates. Nominatim does this.
The free public service has rate limits, but for typical investigative work, the limits are not a problem. A few hundred addresses geocoded once is well within the polite usage range. For ongoing work where you might be geocoding tens of thousands of addresses, the practical move is to run your own instance, which requires some server setup but is otherwise straightforward.
The integration with the rest of the open geographic stack is unusually clean. Nominatim returns coordinates in the standard format that every other tool expects. The coordinates can be loaded into a SQLite database with the spatial extension. They can be passed to QGIS. They can be plotted on a MapLibre web map. They can be joined against other geographic data using DuckDB's spatial extension. The whole pipeline works because the formats are standard.
The thing worth thinking about, when you use Nominatim, is what it represents about the modern open ecosystem. The geocoder works because there is a free map of the world. The free map exists because millions of volunteers have spent years adding to it. The volunteers had no financial incentive. They had a sense that maps should be free, that knowledge of places should not be locked behind paywalls, that the geography of the world is a kind of common heritage that everyone should be able to access.
[calm]
This is one of the great quiet success stories of open collaboration. The Ordnance Survey, the agency Steve Coast was annoyed at in two thousand four, still exists and still sells maps. The OpenStreetMap project has not destroyed it. But OpenStreetMap has provided a free alternative for every use case where the commercial maps were unaffordable. The result is that mapping has gone from a private good to something closer to a public good, available to anyone with an internet connection.
Nominatim is one specific piece of the resulting infrastructure. It takes the volunteer-made map and turns it into a working geocoder. Without it, the map would be a beautiful picture. With it, the map becomes a tool that other tools can rely on. The whole investigative pipeline of geographic journalism depends, somewhere in its lower layers, on the free geocoder built on top of the volunteer-made map. The labor was distributed. The result is centralized in the sense that anyone can use it.
For a working reporter, Nominatim is mostly invisible. You use it without thinking about it. You geocode an address and you get coordinates. The mechanism is hidden. The point is not that you understand the internals. The point is that you understand that the internals are made of volunteer labor and free software, and that the existence of this infrastructure is unusual and precious and worth supporting.
If you ever have free time and a portable GPS device, you could spend an afternoon mapping the streets of your local area into OpenStreetMap. The contributions feed back into Nominatim. The geocoder gets better in your region. The thousands of small contributions that built the project still get added to, every day, by people doing exactly what Steve Coast did two decades ago. The bicycle is still rolling. The map is still growing. The free alternative continues to exist because individual people continue to contribute.
The journalism that uses Nominatim is, in a way, downstream of all of that volunteer work. The article that plots company addresses on a map of Åre kommun is using a geocoder that exists because someone in Östersund or in Trondheim or in Tromsø decided to map their street into OpenStreetMap fifteen years ago. The infrastructure of journalism rests on the infrastructure of voluntary mapping. The thread connects in unexpected ways. The map of the world is, at its foundation, a gift, and the geocoder is the way of receiving it.