Cross-shopping

Find the places whose modeled visitor base overlaps most with a given place, and how overlap and affinity are calculated.

Cross-shopping answers “which other places share this place’s customers?” It is used for co-tenancy decisions (which anchors to sit next to), partnership and co-marketing (which non-competing brands reach the same audience), and competitive analysis (which same-category stores fight for the same households).

In the app it appears on every place page. Via the API: GET /api/v1/places/:id/cross-shopping?limit=10 (limit up to 50; see Places endpoints).

What is compared

Cross-shopping compares visitor-origin footprints. For every place in the city — across all 14 categories — MapDove computes its modeled share of visitors from each hex cell, using the same Huff gravity model as trade areas:

s_p(h) = flow_p(h) / Σ_h' flow_p(h')
  • flow_p(h) — modeled visits to place p from hex h (Huff probability × hex demand), with competition computed within p’s own category.
  • s_p(h) — share of p’s visitors coming from hex h; the shares of a place sum to 1.

Each place is then a distribution over hexes. Two places with similar distributions draw from the same neighborhoods.

Overlap

Overlap between the focal place A and another place B is the histogram intersection of their distributions:

overlap(A, B) = Σ_h min(s_A(h), s_B(h))

It ranges from 0 (no hex in common) to 1 (identical footprints). An overlap of 0.62 means 62% of A’s modeled visitor base comes from hexes that supply B in at least the same proportion. Overlap is symmetric: overlap(A, B) = overlap(B, A).

Affinity

Raw overlap favors places that are simply close together. To make the list more useful for co-tenancy and partnerships, MapDove adjusts it by the category relationship:

affinity(A, B) = overlap(A, B) · m(A, B)

m = 1.35   if B's category is a complement of A's category
m = 0.60   if B is in the same category as A (a competitor)
m = 1.00   otherwise

Complements are the same lists used in site suitability — for example coffee → fitness, apparel, shopping centers, pharmacy; grocery → pharmacy, fuel, coffee, quick service; dining → entertainment, hotels, shopping centers, apparel.

Results are ranked by affinity, highest first. Each result contains the place summary, overlap and affinity. Because of the multiplier, affinity can exceed 1.

Reading the list

  • High affinity, complementary category — natural co-tenants and partners. A gym and a café with 0.7 overlap share a morning audience.
  • High overlap, same category — direct competitors for the same households. Affinity is discounted (×0.6), but the overlap value itself tells you how intense the competition is.
  • High overlap, unrelated category — usually co-location in the same district; useful context, weaker as a partnership signal.
  • Destination places (shopping centers, department stores, hotels) have broad footprints and overlap moderately with many places.

Important: this is modeled, not observed

In real-world cross-shopping, overlap is measured from the same people being seen at both places. MapDove’s demo dataset contains no individual-level movement at all — overlap here is computed from modeled visitor-origin distributions. Two places can show high overlap without a single shopper actually visiting both. The method answers “do these places draw from the same neighborhoods?”, which is a reasonable proxy for co-tenancy planning but not a measure of shared customers.

This design is deliberate: MapDove never tracks or links individuals, and the Acceptable Use Policy prohibits attempts to re-identify people from any output.

Limitations

  • Footprints depend on straight-line distance and same-category competition (Methodology).
  • Places in the same hex will always show substantial overlap.
  • Time of day is not considered — a breakfast café and a late-night bar can share a footprint without sharing a daypart.