Site selection and expansion

Will a new branch take customers from your own stores?

Cannibalisation explained: how to measure the overlap between a new branch's reach and your existing ones, and when sharing customers is worth it.

xMap Flows team · · 4 min read

A new branch takes customers from your own stores when its reach overlaps theirs and customers pick whichever branch is most convenient. To estimate how much, draw the area each branch can reach, measure how many people live in the shared part, and compare that with the people the new branch reaches that no existing branch does. A large overlap with little new reach means you are mostly moving customers; a small overlap means you are mostly gaining them.

This article is for chains with more than a handful of locations: cafes, pharmacies, banks, gyms, convenience and grocery. It covers when overlap is a mistake and when it is a strategy, how to measure it, a worked example, and how to keep an eye on stores that already compete with each other.

Overlap is not always a mistake

Some chains place branches close together on purpose. A crowded branch with queues at lunch loses customers who give up; a second one nearby can win them back. A cluster can also keep a rival out of a street. And different formats serve different trips: a drive-through and a sit-down cafe 500 m apart may share few customers.

Dense chains show this in the data. xMap's places database lists 1,367 bakeries within 10 km of the centre of London, November 2026. Of the 380 nearest the centre, 121 belong to chains, and the largest chain alone has 38 of those 380. Branches that close together share catchments by design.

1,367Bakeries listed
380Nearest counted
121Chains among them
38Largest chain's branches
Bakeries within 10 km of the centre of London, xMap's places database, November 2026. Chains and the largest chain's branches are among the 380 nearest the centre.

The question is not whether branches overlap, but whether the new one adds enough customers to pay for itself after what it takes from its neighbours.

How to measure overlap

  1. Pick the reach that matches how customers come: a 10-minute walk for a cafe, a 10 or 15-minute drive for a supermarket. Draw it around each existing branch and the candidate with Travel area.
  2. Count the people inside each area with Demographics, where the country has population figures.
  3. Find which existing areas the candidate's area overlaps, and estimate the people in the shared part.
  4. Work out the new reach: people inside the candidate's area who are in no existing branch's area.

A quicker first screen is distance alone. The Find nearest block gives each store the distance to its nearest sister store; any pair closer than your walking or driving reach is worth a closer look.

A worked example

A made-up example: a cafe chain in Bangkok has two branches, A and B, and is considering a third site, C. Using 10-minute walking areas:

Made-up figuresResidents
Inside C's walking area18,000
Also inside A's area8,000
Also inside B's area3,000
Inside no existing area (new reach)7,000

Illustrative figures only.

Of C's 18,000 residents, 11,000 are already within a walk of A or B, about 61% overlap. Only 7,000 are new reach. If branch A already turns customers away at peak hours, C could relieve it and recover those customers. If A is quiet, C mostly splits A's trade. The geography gives the overlap; your own sales figures decide which story is true.

Signals beyond the map

  • How full the existing branch is. Queues, waiting times and lost sales say whether shared customers are a problem or a relief.
  • Times of day. A branch by offices and one by homes may share a postcode but not the hours customers come.
  • Format. Takeaway, sit-down and drive-through serve different trips.
  • Barriers. A motorway or river between two branches can make a small distance a large separation, which travel areas capture and circles do not.

Mistakes to avoid

  • Circles instead of reach. Two circles may overlap across a river nobody crosses.
  • Counting overlap as loss. Some of it is relief for a crowded branch.
  • Ignoring rivals. If a competitor would take the site, a branch that overlaps your own can still be the right defensive move.

Watching branches that compete with each other

An AI employee can review the network every month and flag pairs of stores that may be splitting customers.

  1. Your stores in My data.
  2. Find nearest against the same table, so each store gets its nearest sister store and the distance.
  3. A Filter for another store within 1 km.
  4. Demographics around each of those stores.
  5. A Calculated field for people per store, then an xMap LLM block to rate the overlap and explain it.
  6. An email to the network planning team.

The team gets a short monthly list of branches that sit close together, how many people they share, and a plain reason why each pair is or is not a concern.

Questions

What is cannibalisation in retail?

When a new branch takes customers from your own existing branches rather than from rivals or new demand, because their catchments overlap.

Is some overlap acceptable?

Often yes. It can relieve a crowded branch, keep a rival out or serve a different kind of trip. What matters is how much new reach the branch adds.

How close is too close between two branches?

It depends on how customers travel. Compare walking or driving areas rather than a fixed distance, and look at how busy each branch already is.

Can I measure overlap without population data?

Yes, by counting homes, offices or schools inside each area, or by the distance between sister stores as a first screen.

Should I close a branch that overlaps heavily with another?

Not on overlap alone. Look first at each branch's own sales and how busy it is at peak hours; two full branches close together may both be earning their place, while a quiet one that shares most of its reach with a busy neighbour is the one to question.

Templates that do this

Read next

More on site selection and expansion · Every article · Templates

Put it to work

An AI employee in xMap Flows does this on live data, on its own timetable. Start from a template or describe it in plain words.