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 placepfrom hexh(Huff probability × hex demand), with competition computed withinp’s own category.s_p(h)— share ofp’s visitors coming from hexh; 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.