Skip to main content
Walkability Score: How It Is Calculated and How to Use It
Guides

Walkability Score: How It Is Calculated and How to Use It

A walkability score rates how much of daily life sits within a walk of an address. Here is the full method, an index we computed for 20 European cities, and how to publish it.

Brent van der Heiden12 min read
#walkability score#walkability#address to coordinates#poi data#isochrone#property listings

A walkability score answers one question: how much of daily life sits within a walk of this front door? Groceries, a pharmacy, a school, a park, somewhere to eat. It compresses all of that into a single number on a 0 to 100 scale, which is why property portals, relocation sites, and AI assistants have all adopted it.

The number is easy to display and worth getting right, because two addresses in the same city can sit in completely different neighbourhoods. This guide walks through the method, then applies it to real data. We computed a walkability index for 40 addresses across 20 European cities using the MapAtlas POI API, and the results show why the score belongs to an address rather than to a city.

What a walkability score measures

A walkability score is a proximity measure. It counts the everyday destinations reachable on foot from one coordinate, then weights them by how essential they are and how far away they sit.

Three consequences follow from that definition, and all three are worth stating wherever you publish the number.

It is a property of an address, not a city. Two flats three kilometres apart routinely differ by 30 points or more, which we can now show with data rather than assert.

It measures presence, not quality. The score knows that a supermarket sits 300 metres away. It does not know whether that supermarket is well stocked, expensive, or closed on Sundays.

It measures distance, not effort. A flat kilometre and a kilometre uphill both count as a kilometre. Terrain, crossings, and pavement quality sit outside the calculation entirely.

These are the boundaries of what a single number can carry, rather than flaws in the method.

How to calculate a walkability score

Any implementation comes down to the same three steps.

Step 1: Resolve the address to a coordinate

Start by geocoding the address into a latitude and longitude. The precision of that match sets the ceiling on everything downstream. A rooftop level match puts the origin on the building itself, while a postcode level match can land a few hundred metres away, which at walking scale changes the answer.

Use the match precision field if your geocoder returns one, and label any score computed from something coarser than street level as approximate.

Step 2: Collect what is inside the walking catchment

Next, decide what counts as walking distance. There are two options, and the choice matters more than it looks.

A radius takes everything within 1 km of the coordinate. It is fast, cheap, and reproducible, but it ignores the street network completely. A shop 400 metres away across a river with no bridge still counts as if it were next door.

An isochrone takes everything inside the polygon that is genuinely reachable in a 15 minute walk along real paths. It costs more per request, and in exchange it handles rivers, railways, motorways, and dead ends correctly.

The index below uses a 1 km radius, because a published benchmark needs to be reproducible by anyone who wants to check it. For a live listing feature, use the isochrone.

Step 3: Score each category on a curve, then weight

Finally, turn the counts into a score. Raw counts do not work here: a neighbourhood with 40 restaurants is not four times as walkable as one with 10, and the first supermarket matters far more than the twentieth. Each category is therefore scored on a curve with diminishing returns.

// One category, scored 0..1. `target` is the count that earns full marks.
const componentScore = (count, target) =>
  Math.min(1, Math.log(1 + count) / Math.log(1 + target));

// Weighted sum across categories gives the headline 0..100 number.
const score = components.reduce(
  (total, c) => total + componentScore(counts[c.key], c.target) * c.weight,
  0,
);

The logarithm does the work. Going from zero to one supermarket moves the component score a long way, while going from 30 to 31 barely registers, which is roughly how people experience a neighbourhood.

Then the weights are applied. These are ours, with the reasoning behind each one:

ComponentWeightWhy
Groceries25The most frequent walking trip in any household
Food and drink15Cafes, restaurants, and bars, a reasonable proxy for street life
Everyday errands15Pharmacy, bank, post office
Schools and learning15Decisive for families, irrelevant to other buyers
Green space15Parks, playgrounds, gardens
Healthcare15Doctor, dentist, clinic within walking range

Weights are a judgement call rather than a fact, so we publish ours for you to check and adjust. A family portal might raise the weight on schools, and a student rental site might raise transport and food instead. Published weights are what make the number reproducible inside someone else's product.

What counts as a good score

A score is easier to act on when you read it against bands. These bands are calibrated on the European sample below, so a number in the middle of the range describes a real European neighbourhood.

ScoreWhat it means in practice
90 to 100Nearly everything is walkable and a car is optional. Typical of European city centres and dense inner districts.
70 to 89Most weekly errands are walkable, while a big shop or a specialist appointment still needs transport.
50 to 69Groceries are usually reachable, but choice is thin and schools or healthcare may be out of range.
Below 50Most daily needs sit outside walking range.

Keep in mind that the bands describe the supply of amenities around an address, not the experience of walking to them.

The MapAtlas Walk Index: 20 European cities

We ran the method against two addresses in each of 20 European cities: the central square, and an outer residential district roughly 5 to 8 km out. Every count came from the MapAtlas POI API inside a 1 km radius, captured on 28 July 2026.

Central addressOuter address0255075100Barcelona: 100 at Plaça de Catalunya, 98 at Nou BarrisBarcelona-2Madrid: 100 at Puerta del Sol, 85 at VillaverdeMadrid-15Paris: 100 at Châtelet, 75 at BobignyParis-25Brussels: 99 at Grand Place, 71 at AnderlechtBrussels-28Athens: 98 at Syntagma, 91 at PeristeriAthens-7Prague: 98 at Old Town Square, 78 at ProsekPrague-20Budapest: 98 at Deák Ferenc tér, 64 at KőbányaBudapest-34Lisbon: 97 at Rossio, 83 at BenficaLisbon-14Dublin: 96 at O'Connell Street, 73 at TallaghtDublin-23Vienna: 95 at Stephansplatz, 63 at DonaustadtVienna-32Milan: 94 at Duomo, 68 at BicoccaMilan-26Stockholm: 94 at Sergels torg, 70 at FarstaStockholm-24Amsterdam: 93 at Dam, 73 at OsdorpAmsterdam-20Rome: 93 at Piazza Venezia, 40 at Ponte MammoloRome-53Zurich: 93 at Paradeplatz, 70 at SchwamendingenZurich-23Munich: 93 at Marienplatz, 69 at MoosachMunich-24Copenhagen: 92 at Rådhuspladsen, 65 at BrønshøjCopenhagen-27Berlin: 88 at Alexanderplatz, 69 at MarzahnBerlin-19Hamburg: 85 at Rathausmarkt, 73 at BergedorfHamburg-12Warsaw: 82 at Old Town, 84 at UrsynówWarsaw+2gap
MapAtlas Walk Index, 2026-07-28. Each city sampled twice: its central square and an outer residential district. The right-hand column is the drop from centre to outskirts.

The gap between the two dots matters far more than the ranking. Central addresses averaged 94, while outer residential addresses in the same cities averaged 73. The blue dots cluster against the ceiling because European city centres are dense almost by construction, so it is the green dots that carry the real variation.

CityCentral addressOuter addressGap
Barcelona100982
Madrid1008515
Paris1007525
Brussels997128
Athens98917
Prague987820
Budapest986434
Lisbon978314
Dublin967323
Vienna956332
Milan946826
Stockholm947024
Amsterdam937320
Rome934053
Zurich937023
Munich936924
Copenhagen926527
Berlin886919
Hamburg857312
Warsaw8284-2

Three findings stand out from the table.

Rome has the widest internal spread in the sample, at 53 points. Piazza Venezia scores 93, while Ponte Mammolo, still well inside the city, scores 40. Within 1 km of that outer coordinate the API found 4 supermarkets, 19 food venues, and 6 green spaces, against 85, 1129, and 149 in the centre.

Warsaw is the one city where the outer address wins. Ursynów scores 84 against the Old Town's 82, because Ursynów is a planned residential district with groceries, schools, clinics, and parks designed into it. A historic centre and a good place to run a week are not the same thing.

Barcelona and Athens barely drop off at all, at 2 and 7 points. Continuous mid rise density carries amenity provision well beyond the tourist core in both cities.

Why the city average is the wrong number

Breaking one city apart shows the mechanism clearly.

Piazza VeneziaPonte MammoloGroceries: 93 vs 34 (weight 25)Groceriesweight 259334Food and drink: 96 vs 41 (weight 15)Food and drinkweight 159641Everyday errands: 92 vs 49 (weight 15)Everyday errandsweight 159249Schools and learning: 93 vs 39 (weight 15)Schools and learningweight 159339Green space: 100 vs 41 (weight 15)Green spaceweight 1510041Healthcare: 86 vs 39 (weight 15)Healthcareweight 158639
Rome: component scores at Piazza Venezia (93) against Ponte Mammolo (40). Same city, same method, 53 points apart.

Every component falls at once. Groceries drop from 93 to 34, food from 96 to 41, and schools from 93 to 39. This is not one missing category dragging an otherwise comparable neighbourhood down, it is a different kind of place.

Consider what happens when a portal labels both of those addresses "Rome, walkability 93". The buyer viewing the outer flat arrives expecting the centre, and the viewing corrects the listing. Computing the score from each property's own coordinate avoids that gap, and gives the buyer a reason to trust the rest of the page.

What the score does not tell you

Four limits are worth publishing alongside the number.

Presence is not quality. Six restaurants within 1 km score the same whether they are excellent or dire, because the score measures availability and nothing else.

Flat and steep score identically. Terrain is invisible to a proximity calculation, so in cities like Lisbon or Zurich the score reads optimistically.

Data coverage varies by country. Our dataset reports transit nodes but does not score them, because stop level tagging density differs too much between countries to compare fairly. Zurich shows why: the query returned a single transit node within 1 km of Paradeplatz, which is a tagging artefact rather than a fact about Swiss trams. Scoring it would have produced a confidently wrong number, so we left it out and explained why.

A snapshot is not a trend. These figures are from 28 July 2026, and amenities open and close, so publish the date alongside any score you compute.

How to add a walkability score to a property listing

Buyers ask neighbourhood questions before they ask property questions. A listing that answers those questions on the page keeps the visitor, instead of sending them to a search engine to find the answer somewhere else.

The implementation comes down to four steps.

  1. Geocode the listing address once, at ingest, and store the coordinate along with its match precision. Do not geocode on every page view.
  2. Request the walking catchment for that coordinate: a 15 minute pedestrian isochrone, then the amenity counts inside it.
  3. Apply your weights and cache the result. Neighbourhoods change over months rather than days, so a monthly or quarterly refresh is enough.
  4. Render the number and the evidence. Show the score, the component breakdown, and the named places behind it.

That last step has a second payoff. AI search engines can quote a block that lists real, named places when someone asks what is around an address, and a bare number gives them nothing to quote. Marking the block up with structured data makes it machine readable as well:

{
  "@context": "https://schema.org",
  "@type": "Residence",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Via dei Fori Imperiali 1",
    "addressLocality": "Rome",
    "addressCountry": "IT"
  },
  "additionalProperty": {
    "@type": "PropertyValue",
    "name": "Walkability score",
    "value": 93,
    "maxValue": 100,
    "measurementTechnique": "Weighted amenity density within a 15 minute walking isochrone",
    "valueReference": "Computed 2026-07-28"
  },
  "amenityFeature": [
    { "@type": "LocationFeatureSpecification", "name": "Supermarkets within a 15 minute walk", "value": 12 },
    { "@type": "LocationFeatureSpecification", "name": "Primary schools within a 15 minute walk", "value": 4 }
  ]
}

Two fields carry the provenance there. measurementTechnique states how the number was produced, and the computation date travels with the value, so an answer engine can repeat both without hedging.

Where these scores get used

There are three surfaces, in rough order of commercial value. Property listings, where the score answers the neighbourhood question directly on the page. Relocation and rental search, where users filter by lifestyle before they filter by building. And AI assistants, which increasingly answer "is this a walkable area?" without sending anyone to a listing at all.

The third surface is changing fastest. A dated score, published with its method and the named places behind it, gives an answer engine something concrete to cite.

For the underlying data, the GeoEnrich API returns amenity counts and named places around a coordinate in a single call, and the Isochrone API produces the walking catchment those counts are measured inside. Keep the scoring weights in your own product, where they can reflect what your particular audience cares about.

Summary

A walkability score is a weighted, distance decayed count of everyday destinations near one coordinate. Geocode the address, collect what is inside its walking catchment, then score each category on a curve and apply your weights.

Compute it per address rather than per city. Our 20 city sample averaged 94 in the centre against 73 on the outskirts, with a 53 point spread inside Rome alone.

Then publish the method with the number: the weights, the catchment, the capture date, and the things the score deliberately does not measure.

Frequently Asked Questions

What is a walkability score?

A walkability score is a number, usually on a 0 to 100 scale, that summarises how much of daily life sits within walking distance of a specific address. It is calculated by counting the everyday destinations near that address, groceries, schools, healthcare, parks, cafes, shops, then weighting them by how essential they are and how far away they sit. A high score means most weekly errands can be done on foot. It is a property of an address, not of a city.

How is a walkability score calculated?

Three steps. First, geocode the address to a coordinate. Second, collect the points of interest within a walking catchment, typically a 1 km radius or a 15 minute walking isochrone. Third, score each amenity category on a curve with diminishing returns, so the first supermarket counts far more than the twentieth, then combine the category scores using fixed weights. The MapAtlas Walk Index used in this article scores six components with a logarithmic curve and publishes the weights so the result is reproducible.

What is a good walkability score?

As a rough guide on a 0 to 100 scale: above 90 means nearly everything is walkable and a car is optional, 70 to 90 means most errands are walkable but some trips need transport, 50 to 70 means a car or transit is needed regularly, and below 50 means most daily needs are out of walking range. In our 20 city European sample, central addresses averaged 94 and outer residential addresses in the same cities averaged 73.

Can you get a walkability score by address rather than by city?

Yes, and the address level number is the only one worth publishing. City averages hide enormous internal variation. In our sample, Rome scored 93 at Piazza Venezia and 40 at Ponte Mammolo, a 53 point gap inside one city. Any score attached to a property listing should be computed from that property's own coordinate, not inherited from its city.

What does a walkability score not tell you?

It measures what is nearby, not what the walk is like. Terrain, pavement quality, crossing safety, lighting, noise, weather, and whether the amenities are actually any good all sit outside the number. A steep hill and a flat street with identical shops score the same. Treat the score as a shortlist filter and the map underneath it as the real evidence.

How do you add a walkability score to a property listing?

Geocode the listing address, request the amenity counts inside its walking catchment, apply your scoring weights, then render both the number and the underlying places so a visitor can verify it. Publishing the component breakdown, and marking it up with structured data, also makes the block quotable by AI search engines, which increasingly answer neighbourhood questions directly rather than sending the user to the listing.

Found this useful? Share it.

About the author

Brent van der Heiden

Written by

Brent van der Heiden

Co-Founder & CEO at MapAtlas

Brent built MapAtlas out of a conviction that developers deserve location APIs with fair pricing and genuine end-user privacy. He writes about geospatial infrastructure, AI search visibility, and how location data powers the products people rely on every day.

View all articles
Back to Blog