Skip to content
Menu
All work

Client projectPrivate

Every competitor site in three markets, rescanned weekly and checked before it counts

5,700+ sites from eight public sources, rescanned every week, stopped at a gate when a list looks wrong, and turned into a map that plans where to build next.

Industry
Multi-market network operator
What it shows
Competitor intelligence, OSINT, Geospatial analysis, Expansion planning
Year
2026
Status
Private
Network censusWeekly scan · 3 markets · 8 public sourcesDummy dataMARKET AMARKET BMARKET C123REDACTED · PLACES AND SITES ANONYMISEDBackground: client gapcompetitor within 1 km, client notClient siteCompetitor siteNew this week1Planned site, ringed by its 1 km reachMarket A · Market B · Market C · a made-up regionThis weekScan accepted9 of 9 checks · 1 warning answeredNew9Removed3Moved2Renamed38 within 300 m of a client siteEvery removal checked on the operator’s own mapWhere to buildpeople newly within 1 km1No site nearbyMarket B+1,5002No site nearbyMarket C+1,4743Client gapMarket C+1,316Client coverage with three new sites43.1%→46.1%Greedy plan: most people not yet reached, then repeat
Illustration with a made-up region, sites and changes. The layers, change rules, scan checks and plan method are the project's real ones.

In numbers

competitor and client sites in three markets, from eight public sources
5,700+
conditions that stop a scan before a bad list can count
19
same-place pairs right when checked by hand
815 / 817
stores of 20 chains joined to the sites, checked against OpenStreetMap
3,900

Figures come from the project’s own files and records.

What changes

The steps people did by hand, and the route the work takes now.

Management asks where competitors are opening

Before

  1. Open every competitor’s map
  2. Copy the sites into a spreadsheet
  3. Guess what changed since last time
  4. Eyeball the gaps

With AI

  1. Eight public lists collected and checked every week
  2. A planning map shows the gaps and where to build

A weekly change report and a build plan

The problem

The client competes on the ground. Its rivals open, close and move sites every week, and each publishes its network only on its own map, in its own format. Management wanted to know where competitors were opening, where customers walked past a rival’s site to reach none of the client’s, and where the next site would do the most good. Answering that by hand meant opening eight maps, copying thousands of rows and guessing what had changed since the last time.

What we built

A weekly census of every site in three markets, built only from public sources. Claude runs each scan from written instructions: collect the eight published lists as they are, turn them into one table, stop if anything looks wrong, compare with last week, and report what changed and where.

In the latest week the report found 45 changes: 30 new sites, 5 removed, 4 renamed, 3 with a new address, 2 moved and 1 with a refined location. The scan passed the gate with no stops and three warnings, each answered before the report went out.

Every scan that passes rebuilds a planning map. It joins the sites to an official 1 km population grid, area boundaries and 3,900 stores of 20 retail and fuel chains, and turns them into intelligence layers: who has no site within 1 km, where a competitor is within 1 km and the client is not, how each area scores, which chains host which operators, and where a new site would reach the most people the client does not reach yet.

Why the numbers can be trusted

A census is only useful if nobody has to wonder whether a change is real. A source that returns half its sites, a list cut off at a page limit or coordinates that come back swapped all stop the scan before it can count, and the stopped scan never becomes the baseline. History is never overwritten. A self-test runs a whole scan on planted data, including a broken source that must be stopped.

The map is held to the same standard. Before a new scan is applied, the rebuild must reproduce last week’s map exactly. Every published figure is then calculated three ways, in the page itself, independently from the scan and in the method text, and all three must agree. The rule for when two sites stand in the same place was checked by hand on 817 pairs and was right on 815.

The method also says what the data cannot do. Against about 2,400 sites mapped independently in OpenStreetMap, half of the operators’ own points sit within 13 m, three quarters within 30 m and nine in ten within 56 m. So a 25 m result is only indicative, while a 100 m result barely moves when the threshold does.

What it shows

This is open-source intelligence that management can act on: a standing weekly report instead of a one-off study, and a planning tool that ranks sites by the people they would reach rather than by a score nobody can explain. The same approach fits any business that competes through physical locations, from retail and banking to healthcare and charging. Below, explore a made-up region with the real layers, rules and checks.

Interactive · 8 journeys

Interactive system map

From eight public lists to a map that plans the next site

24 parts and 8 journeys: the weekly scan, the gate that stops a bad one, the person who checks every removal, and the map with its layers. Generic part names; the client stays anonymous.

Play 8 journeys, or click any of its 24 parts.

sites in three markets, from eight public sources
5,700+
conditions that stop a scan
19
same-place pairs right when checked by hand
815/817

Explore the map

InteractiveSwitch the map's layers, filter this week's changes, size an expansion plan, or break a scan.
View
MARKET AMARKET BMARKET C12345678910REDACTED · PLACES AND SITES ANONYMISED
Background, one at a time
Sites and stores only. Pick a background to read the map.
People per 1 km cell, from an official census grid. Darker means more people.
Client gap: people with a competitor’s site within 1 km and none of the client’s. This is where customers walk past to a rival.
No site within 1 km: people no operator serves yet. New market rather than a fight for share.
Area score: the share of each area’s people within 1 km of a client site. The real map offers five such measures per municipality.
Any site within 1 km
76.0%
Client site within 1 km
43.1%
People in the client gap
46,225
No site within 1 km
33,570

Of 140,165 dummy residents. Straight-line distance from each cell’s centre to the nearest site.

Markers

Stores come from 20 chains' own lists and were checked against OpenStreetMap. A site counts as inside a store within 100 m, or within 300 m when it carries the chain’s name.

Compare
Kinds of change

17 changes, 8 of them within 300 m of a client site.10 changes, 2 of them within 300 m of a client site.

  1. NewOperator F · F-779 · Market ANot in last week’s list · 204 m from a client site
  2. NewOperator B · B-780 · Market ANot in last week’s list · 137 m from a client site
  3. NewOperator B · B-781 · Market ANot in last week’s list · 188 m from a client site
  4. NewOperator B · B-782 · Market ANot in last week’s list · 171 m from a client site
  5. NewOperator B · B-783 · Market ANot in last week’s list · 181 m from a client site
  6. NewOperator B · B-784 · Market ANot in last week’s list
  7. NewOperator D · D-785 · Market BNot in last week’s list
  8. NewOperator B · B-786 · Market ANot in last week’s list
  9. NewOperator C · C-787 · Market ANot in last week’s list · 275 m from a client site
  10. RemovedOperator E · E-127 · Market AGone from the list; checked on the operator’s own map
  11. RemovedOperator F · F-161 · Market AGone from the list; checked on the operator’s own map · 156 m from a client site
  12. RemovedOperator D · D-424 · Market AGone from the list; checked on the operator’s own map
  13. MovedOperator D · D-177 · Market AMoved 609 m · 293 m from a client site
  14. MovedOperator D · D-605 · Market CMoved 598 m
  15. RenamedOperator D · D-354 · Market CName changed, same place
  16. RenamedOperator B · B-280 · Market BName changed, same place
  17. RenamedOperator B · B-163 · Market AName changed, same place
  18. NewOperator D · D-788 · Market CNot in last week’s list · 189 m from a client site
  19. NewOperator C · C-789 · Market ANot in last week’s list · 168 m from a client site
  20. NewOperator F · F-790 · Market CNot in last week’s list
  21. NewOperator D · D-791 · Market CNot in last week’s list
  22. NewOperator C · C-792 · Market BNot in last week’s list
  23. RemovedOperator B · B-131 · Market AGone from the list; checked on the operator’s own map
  24. RemovedOperator B · B-137 · Market AGone from the list; checked on the operator’s own map
  25. MovedOperator F · F-482 · Market BMoved 698 m
  26. RenamedOperator C · C-478 · Market BName changed, same place
  27. RenamedOperator B · B-589 · Market AName changed, same place
The rules, as in the project
  • Sites are matched by operator, market and the operator’s own ID.
  • A removed and a new site of one operator within 30 m count once, as a changed ID.
  • Moved: more than 50 m. 10 to 50 m is a refined location.
  • Every removal and every doubtful new site is checked by a person, on the operator’s own map, and the note is kept.
New client sites
+1,500
people newly within 1 km of a client site
Won from competitors
1,091
New market
409
Client coverage 43.1% to 44.1%
+4,290
people newly within 1 km of a client site
Won from competitors
3,486
New market
804
Client coverage 43.1% to 46.1%
+6,811
people newly within 1 km of a client site
Won from competitors
5,497
New market
1,314
Client coverage 43.1% to 47.9%
+12,135
people newly within 1 km of a client site
Won from competitors
10,821
New market
1,314
Client coverage 43.1% to 51.7%
  1. 1No site nearby · Market BArea with no site within 1 km+1,500
  2. 2No site nearby · Market CArea with no site within 1 km+1,474
  3. 3Client gap · Market CArea where competitors reach people and the client does not+1,316
  4. 4Chain 4 store, 3 competitors · Market CCompetitor place, 3+ operators, no client+1,283
  5. 5No site nearby · Market AArea with no site within 1 km+1,238
  6. 6Client gap · Market BArea where competitors reach people and the client does not+1,167
  7. 7Chain 3 store, 4 competitors · Market ACompetitor place, 3+ operators, no client+1,090
  8. 8Client gap · Market CArea where competitors reach people and the client does not+1,061
  9. 9Client gap · Market AArea where competitors reach people and the client does not+1,004
  10. 10Chain 2 store, 4 competitors · Market BCompetitor place, 3+ operators, no client+1,002

142 candidates of four kinds. The plan takes the one that reaches the most people the client does not reach yet, marks them as reached, and repeats, so neighbours never count the same people twice. No weights and no scores: the order is the build order.

Every weekly scan passes 19 conditions before it may count. Pick what goes wrong and see which check stops it. The rules and limits are the project’s own; the operators and numbers in the messages are dummies.
What happens this week
  1. Two reads of every file give the same row count
    Two reads of every file give the same row count
    Two reads of every file give the same row count
    Two reads of every file give the same row count
    Two reads of every file give the same row count
    Two reads of every file give the same row count
  2. Every operator and market is in the scan
    Every operator and market is in the scan
    Every operator and market is in the scan
    Every operator and market is in the scan
    Every operator and market is in the scan
    Every operator and market is in the scan
  3. No operator’s count moved more than 10% in a weekOperator C in market A grew 2.9%, above the 2% warning line: checked, it is real
    No operator’s count moved more than 10% in a weekOperator D in market B: 412 to 198 sites (−52%), probably a broken source
    No operator’s count moved more than 10% in a week
    No operator’s count moved more than 10% in a week
    No operator’s count moved more than 10% in a week
    No operator’s count moved more than 10% in a week
  4. At least 90% of last week’s IDs are still there
    At least 90% of last week’s IDs are still thereOperator D in market B: only 48% of last week’s IDs are still there
    At least 90% of last week’s IDs are still there
    At least 90% of last week’s IDs are still there
    At least 90% of last week’s IDs are still there
    At least 90% of last week’s IDs are still there
  5. Coordinates fall inside their market
    Coordinates fall inside their market
    Coordinates fall inside their marketOperator E: 214 sites (3.8%) outside their market, above the 1% limit: latitude and longitude swapped
    Coordinates fall inside their market
    Coordinates fall inside their market
    Coordinates fall inside their market
  6. No ID appears twice
    No ID appears twice
    No ID appears twice
    No ID appears twice
    No ID appears twice
    No ID appears twice
  7. No list stops at a page limit or short of the source’s own total
    No list stops at a page limit or short of the source’s own total
    No list stops at a page limit or short of the source’s own total
    No list stops at a page limit or short of the source’s own totalOperator F: 2,000 records, exactly the page limit: ask for the next page
    No list stops at a page limit or short of the source’s own total
    No list stops at a page limit or short of the source’s own total
  8. Partner labels did not fall by more than 20%
    Partner labels did not fall by more than 20%
    Partner labels did not fall by more than 20%
    Partner labels did not fall by more than 20%
    Partner labels did not fall by more than 20%Operator B: rows labelled as a partner’s fell from 57 to 3; they would be counted as its own
    Partner labels did not fall by more than 20%
  9. Both passes of each area search found the same sites
    Both passes of each area search found the same sites
    Both passes of each area search found the same sites
    Both passes of each area search found the same sites
    Both passes of each area search found the same sites
    Both passes of each area search found the same sitesOperator C: the shifted second pass found 6 sites the first missed; rerun those areas
0 stops · 1 warning
Accepted

Each warning is answered by a person first. Then the scan is kept as its own dated set, becomes next week’s baseline, and the change report and the map are rebuilt from it.

2 stops · 0 warnings
Set aside

The scan is moved to a rejected folder and never becomes the baseline. Last week’s scan stays the one to compare against. Nothing is overwritten.

1 stop · 0 warnings
Set aside

The scan is moved to a rejected folder and never becomes the baseline. Last week’s scan stays the one to compare against. Nothing is overwritten.

1 stop · 0 warnings
Set aside

The scan is moved to a rejected folder and never becomes the baseline. Last week’s scan stays the one to compare against. Nothing is overwritten.

1 stop · 0 warnings
Set aside

The scan is moved to a rejected folder and never becomes the baseline. Last week’s scan stays the one to compare against. Nothing is overwritten.

1 stop · 0 warnings
Set aside

The scan is moved to a rejected folder and never becomes the baseline. Last week’s scan stays the one to compare against. Nothing is overwritten.

Before any scan is trusted

A self-test runs a whole scan end to end on planted data, including a deliberately broken source that must be stopped. On the last real scan, 0 stops and 3 warnings, each answered.

A made-up region, scaled down from the real 5,700+ sites and 3,900 stores: places, operators, people and changes are dummies. The layers, change rules, plan method and scan checks are the project’s real ones.

Under the hood

  • Claude
  • Python
  • NumPy
  • SciPy
  • Shapely
  • scikit-learn
  • Playwright
  • Leaflet
  • Excel
  1. 01Collect (OSINT)

    Only the operators’ own published lists: eight public sources, some read in a browser, two by searching map areas twice on shifted tiles. Every raw file is fingerprinted with SHA-256.

  2. 02Source register

    Where each list comes from, what each field means and the evidence for it, the exceptions, and the rule that a partner’s site counts once, for its own operator.

  3. 03The gate

    19 conditions stop a scan: a sudden change of more than 10% in a count, missing groups, vanished IDs, swapped coordinates, duplicates, lists cut at a page limit, partner labels that fall away. A failed scan is set aside and never becomes the baseline.

  4. 04Change report

    New, removed, moved and renamed sites, matched by operator and ID, with changes within 300 m of the client’s own sites flagged. Every removal is checked by hand on the operator’s own map.

  5. 05Planning map

    Ten views over the sites, an official 1 km population grid, area boundaries and 3,900 chain stores: coverage, client gaps, area scores, overlaps, chains, changes and an expansion planner, all exporting to Excel.

  6. 06Verification

    A self-test with a deliberately broken source, an identity run that must rebuild last week’s map exactly, and every published figure recalculated three independent ways.

Want something like this built for your team?

Tell us about the process or the data. We'll reply within two business days with a first view of what we'd build.