A catchment area is the area a store draws its customers from. The quickest way to draw one is a circle: pick the store, set 5 km, count the people inside. It is also the least accurate, because customers drive on roads, and roads are not circles.
We measured how much that matters. For 60 supermarkets in Lyon, Munich and Milan, we asked our Isochrone API for the area reachable by car in 5, 10 and 15 minutes, then counted the residents inside each shape on a 100 metre population grid. A 5 km circle held a median of 1.7 times as many people as a 10-minute drive actually reaches. Worse for site selection, the circle ranked the stores in a different order.
This article explains what a catchment area is, shows the three cities side by side, gives the numbers, and ends with the two API requests you need to draw a drive-time catchment yourself.
What a catchment area is
A catchment area, or trade area, is the geographic area from which a location draws most of its customers. Retailers, banks, clinics, gyms and restaurant chains all use it for the same questions: how many potential customers a site has, how many competitors share them, and whether a new site would take customers from an existing one.
There are three common ways to draw one:
- Radius. A circle of fixed straight-line distance around the site. Quick, and blind to roads, rivers and railway lines.
- Travel time. An isochrone: every point reachable within a set time by car, on foot or by bike, computed on the road network. This is the method this article tests.
- Observed. The area where real customers live, from loyalty cards, delivery addresses or phone location panels. The most accurate, and only available once the site is open.
Travel-time catchments are usually split into bands. A primary zone close to the store supplies most customers, a secondary zone supplies fewer, and a tertiary zone at the edge supplies occasional visits. We used 5, 10 and 15 minutes by car.
Catchments also overlap. A household inside the 10-minute zone of three supermarkets splits its spending between them. The classic way to model that split is the gravity model David Huff published in 1964, Defining and Estimating a Trading Area, in which the probability of choosing a store rises with its size and falls with the travel time to it. Every version of that model needs travel times, which is one more reason to start from drive times.
What we measured
We took every supermarket tagged in OpenStreetMap within 15 km of the centre of Lyon, Munich and Milan, and drew 20 per city at random from those within 8 km of the centre. For each store:
- Drive-time polygons for 5, 10 and 15 minutes by car from the MapAtlas Isochrone API, requested on 30 September 2026 without a departure time, so without live traffic.
- Two circles around the same point: a fixed 5 km circle, and a circle with exactly the same area as the store's 10-minute polygon.
- Residents inside each shape, from the GHS-POP R2023A population grid of the European Commission's Joint Research Centre, 100 metre cells, 2025 estimate.
- Competitors inside each shape: the other supermarkets in the OpenStreetMap list.
The map below shows one store per city: the one whose 10-minute population is closest to that city's median.
The 10-minute polygons are ragged, with long spikes along fast roads and dents where the network is slow or interrupted. None of the three looks like the dashed circle, and in all three the circle takes in dense districts that the 10-minute polygon does not reach.
A 5 km circle counts 1.7 times too many people
| City | Stores | Median 10-min area | Residents within 5 min | Within 10 min | Within 15 min | Within 5 km circle | 10 min as share of circle |
|---|---|---|---|---|---|---|---|
| Lyon | 20 | 33 km² | 46,000 | 261,000 | 617,000 | 566,000 | 45% |
| Munich | 20 | 50 km² | 71,000 | 372,000 | 920,000 | 586,000 | 65% |
| Milan | 20 | 44 km² | 97,000 | 428,000 | 941,000 | 672,000 | 63% |
| All 60 | 60 | 44 km² | 67,000 | 348,000 | 807,000 | 628,000 | 60% |
All values are medians over the stores in each row. The last column is the median of the per-store ratio.
A 10-minute drive in these cities covers about 44 km², the area of a circle with a radius of 3.7 km. A 5 km circle covers 79 km², so it counts more people, and at the median it counts 1.7 times as many. The ratio also varies a lot from store to store: from 21 percent to 87 percent of the circle's population is reachable in 10 minutes.
That variation is the real problem. Two supermarkets about 6 km from the centre of Lyon illustrate it. The first is in Villeurbanne, in the dense eastern suburbs. The second is in Limonest, north-west of the city at the foot of the Monts d'Or hills. By circle, the first has 431,000 residents and the second 168,000, a ratio of 2.6. By 10-minute drive, the first reaches 347,000 and the second 36,000, a ratio of 9.6. The circle around Limonest still reaches into Lyon's dense districts; the 10-minute drive mostly does not.
Even a circle of the right size has the wrong shape
A fair objection: a 5 km circle is simply too big. So we also drew, for every store, a circle with exactly the same area as its 10-minute polygon.
The shape still matters. At the median, the equal-area circle missed 14 percent of the people the store can reach in 10 minutes, and 15 percent of the people inside the circle could not reach the store in 10 minutes. The two shapes shared 64 percent of their combined area. In Lyon, where rivers and hills break up the road network, the circle missed 20 percent of the reachable population; in Munich and Milan, with flatter and more regular street grids, 13 and 12 percent.
For a single store, a 15 percent error might be acceptable. For comparing candidate sites, it is not, because the error is different at every site.
The circle ranks sites in a different order
Site selection is a ranking problem: which of these locations has the most potential customers? We ranked the 20 stores in each city twice, once by 5 km circle population and once by 10-minute drive population.
- Rank correlation (Spearman) between the two rankings was 0.70 in Lyon, 0.70 in Munich and 0.85 in Milan, and 0.64 across all 60 stores.
- Top 5 per city: the circle and the drive time agreed on only 2 of the top 5 stores in Lyon, 2 in Munich and 3 in Milan.
- Best site: the store with the largest drive-time population ranked 4th by circle in Lyon and 6th in Munich. Only in Milan did both methods pick the same store.
If you shortlist sites by circle population, you will drop some of the best ones.
Competitors inside the catchment
The same shapes answer the second site-selection question: how crowded is the market? Inside the 10-minute drive of the median store were about 108 other supermarkets from the OpenStreetMap list; inside the 5 km circle, 167. The circle overstates competition as much as it overstates demand, and the two errors do not cancel, because they fall on different stores.
These counts include every shop tagged as a supermarket, from small city-centre formats to large stores, so treat them as a measure of density. For a real market-share estimate, weight each competitor by its size and its travel time to every household, which is what the Huff model does.
How to draw a drive-time catchment
Two steps: request the polygons, then count what is inside them.
1. Request the isochrone. One POST request per site returns all bands at once:
curl -X POST "https://gateway.mapmetrics-atlas.net/isochrone/?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"locations": [{"lat": 45.7640, "lon": 4.8357}],
"costing": "auto",
"contours": [{"time": 5}, {"time": 10}, {"time": 15}],
"polygons": true
}'
The response is a GeoJSON FeatureCollection with one polygon per contour. Use "costing": "pedestrian" for a walk-in store in a dense centre, where most customers arrive on foot.
2. Count what is inside. Intersect each polygon with a population source: a population grid such as GHS-POP, census output areas, or your own customer addresses. With a grid, sum the cells whose centre falls inside the polygon. With census areas, split each area's population by the share of its surface inside the polygon. Do the same with your list of competitors.
Three choices change the result more than the method does:
- Time bands by store type. A convenience store and a furniture store in the same street have very different catchments. Use a short band for daily shopping and a long one for occasional trips.
- Traffic. Our polygons use typical road speeds without live traffic. For a store whose peak is the evening rush, a drive-time area at that hour is smaller.
- Mode. In city centres many customers walk or cycle. Compare a walking isochrone with a driving one before you decide which to trust.
To try the idea on a single address, the travel time map draws the same isochrones in the browser, and the radius map draws the circle for comparison.
Method and limits
- Stores: every OpenStreetMap node or way tagged
shop=supermarketwithin 15 km of each city centre (287 in Lyon), 20 drawn at random with a fixed seed from those within 8 km. OpenStreetMap coverage of small shops varies, so the competitor counts are a lower bound in some districts. - Drive-time areas: MapAtlas Isochrone API, costing
auto, contours 5, 10 and 15 minutes, requested on 30 September 2026 without a departure time. They reflect typical road speeds, not rush-hour traffic, and do not include parking time. - Population: GHS-POP R2023A, epoch 2025, 100 metre cells in the World Mollweide equal-area projection. The 2025 values are modelled from census data and built-up area, and count residents by place of home, so daytime population such as office workers is not included. A cell counts when its centre falls inside the shape.
- Circles: geodesic circles around the store coordinate. The equal-area circle has the same area as the store's 10-minute polygon.
- Sample: 60 stores in three cities is enough to show the size and direction of the error, and too small to give a correction factor for other cities. The same method runs in minutes on any list of sites.
Download the data: catchment-area-analysis-2026-09-30.csv (60 stores, one row each, with drive-time areas, population per band and circle, and competitor counts; store locations © OpenStreetMap contributors, ODbL; population GHS-POP R2023A, CC BY 4.0; derived figures CC BY 4.0 MapAtlas).
The script and raw results are in our research archive: scripts/seo/blog-keyword-research/catchment-area-analysis.py and docs/blog-keyword-research/catchment-area-analysis-2026-09-30.json.
Related
The method behind the polygons is explained in what is an isochrone. For many origins and destinations at once, such as every household to every store in a Huff model, use a distance matrix. The store locator guide shows the same data from the customer's side.
The Isochrone API returns the drive-time and walk-time polygons used here, and the GeoEnrich API adds points of interest and neighbourhood context around any address.
Frequently Asked Questions
What is a catchment area in retail?
A catchment area, also called a trade area, is the geographic area from which a store, branch or service draws most of its customers. It is usually drawn around the location as a travel time, for example everyone within a 10-minute drive, and often split into a primary, secondary and tertiary zone. Businesses use it to estimate how many potential customers a site has and how many competitors share them.
How do you calculate a catchment area?
Draw the area around the site, then count what is inside it. The simplest area is a circle of fixed radius. A better one is a drive-time or walk-time polygon (an isochrone) from a routing engine, because it follows the road network. Then add up the resident population inside the polygon from a population grid or census areas, and count the competitors inside it. In our test of 60 supermarkets, one isochrone request and a sum over a 100 metre population grid did the whole job per store.
Is a radius or a drive time better for a catchment area?
A drive time is better whenever customers arrive by road. In our measurement of 60 supermarkets in Lyon, Munich and Milan, a 5 km circle held a median of 1.7 times as many residents as a 10-minute drive reached, and ranking the stores by circle population picked only 2 or 3 of the same top 5 stores per city as ranking them by drive-time population. A radius is fine for a first look or when the rule itself is a straight-line distance.
What drive time should I use for a store catchment?
Match the time to how far customers travel for that kind of store: a short band for daily shopping such as a convenience store, a longer one for occasional trips such as furniture or DIY. Request several contours at once, such as 5, 10 and 15 minutes as in our test, and check them against real customer addresses or loyalty-card postcodes when you have them. For a store in a dense centre, compare a walking catchment with the driving one.

