I built a tool to find unlisted airfields from ADS-B. It found nothing, twice, and the second time was more useful.
For about two months I've been recording every military and UAV contact that appears in 1,081 watched airspaces, from public ADS-B. It's up to around 560,000 observations. The obvious question once you have that is whether it can find places that aren't on any map.
The idea is simple enough. An aircraft that lands stops transmitting. An aircraft that takes off starts. Collect the points where tracks end and begin, filter to the ones that are low and slow, cluster them, and you should get airfields. Anything that clusters but has no catalogued airfield nearby is a candidate for something the registers don't list — a range, a landing zone, a training area.
It works well enough to be worth testing. Against 72,444 catalogued open airfields, 875 of 1,005 clusters — 87% — matched a known field within 3nm. That number is the one to watch: it says the clustering finds real places rather than noise. It says nothing about whether the unmatched remainder are discoveries.
The first thing it found that wasn't on a map was a weapons range in New Zealand, about 8nm from RNZAF Ohakea. Correctly absent from the airfield databases, because it isn't an airfield. It turned up again in a separate run six weeks later from independent data, which is the closest thing to validation this kind of method gets.
So far, so encouraging.
The candidate that wasn't
The biggest unmatched cluster in the September run was in Cedarville, Maryland. Four adjacent clusters, 49 aircraft between them, nothing catalogued within 4nm. Imagery showed cleared land inside a state forest, a tower, a small compound with about twenty cars — and access via a road named Air Force Road.
That looks like a finding. It was about three hours from being written up as one.
The test I hadn't run was whether the aircraft actually dwell. A landing means an aircraft disappears and reappears later at the same place. A coverage gap means it disappears and reappears somewhere else along its heading, because it flew low enough to drop below the horizon of every receiver that could hear it. Clustered endpoints, balanced arrivals and departures — both produce the same signature.
So I wrote the check: for every gap of 3 to 240 minutes, did the track resume within 1.5nm, or further away?
Cedarville: 60% resumed in the same place. Raumai, the known range, as a control: 69%.
Near enough identical. On that number, Cedarville was a find.
Reading the rows instead of the summary
The ratio was wrong, and the rows said so. Every Cedarville record resumed at 60 to 100 knots. Nothing below 33kt anywhere in the "stopped" set. Raumai had readings at 1, 2 and 3 knots.
A helicopter at 80kt that vanishes and returns half a mile later hasn't landed. It's flown behind a ridge. Distance alone can't tell those apart, and a ratio built on it will call a transit corridor an airfield every time.
Add a speed clause — a stop requires the track to resume in the same place and something under 10kt on one side of the gap — and the same data gives:
Cedarville: 0 stops. Raumai: 11.
The traffic confirmed it. Cedarville was almost entirely one callsign across sequential ICAO addresses ae6230 to ae6251, all Bell 212s: one unit, operating a few miles from its own base.
Then I screened all of them
With a criterion that meant something, I ran it across every unmatched cluster from a fresh run — 25 of them. Thirteen showed an aircraft genuinely stopping. Twelve were corridors.
Three had several distinct callsigns at rest, which is the pattern that separates a place from a single unit's patch. I checked all three against imagery from four providers.
Empty farmland. Trees and a creek. A car dealership.
Then I asked my own archive what the aircraft actually were, which should have been the first question rather than the last. Two of the three resolved immediately:
- Southern Alabama — dozens of airframes in one ICAO block, every one a CH-47 Chinook, flagged military in the aircraft database the watch uses. Consistent with a Chinook training unit and a training landing zone; the region has many and none are secret.
- Near Patuxent River — T-38s, T-6Bs, UH-60s, C-12s and EC145s sharing one callsign family, all database-flagged military. A fleet that varied is consistent with a test organisation, and it sat 3nm from a naval air station.
I'm deliberately not naming the units. Both attributions are inference from aircraft type and geography — likely right, not confirmed, and being confidently wrong about who flies what is the easiest mistake to make in this hobby.
The third one is still open
Near Teesside in the north-east of England: seven sequential ICAO addresses, 425300 to 425307, broadcasting ADS-B as unmanned.
Not military, and I initially assumed otherwise. My archive classifies them self_declared — the category B6 flag is the aircraft's own claim about itself, not a database's judgement. Those addresses fall in the UK's allocated range. They carry no registration and no type, and adsbexchange returns "Unassigned" for every one of them.
Multiple airframes, sequential addresses, operating in a cluster, self-identifying as drones, unknown to the public registries. That could be a survey contractor, a test programme, a university, or a military trial. I have no idea, and I'd rather say so than pick the most interesting option.
It isn't an airfield, which is what I was looking for. It's just the one thing in the batch that didn't resolve.
What I actually learned
A summary statistic will hide the thing that distinguishes its members. 60% against 69% concealed 0 against 11. The answer was in a column the ratio discarded. That's the third time this project has been misled the same way.
Four imagery sessions across four map providers established nothing that one database query resolved in seconds. The aircraft type was sitting in my own archive the whole time. Identify the traffic before you interpret the place.
And the structural one: dense ADS-B coverage exists where the receivers are, which is where the people are, which is not where anything is hidden. A method like this works best exactly where there is least to find. Where an unlisted site would actually be interesting there are few receivers to hear it, and anything that cared about being seen wouldn't be transmitting anyway.
The tool works. It found a real range, twice. It also correctly found nothing else, and that's the more useful result to publish.
Data from streetwatch.earth, which records this publicly. Method and known limits at streetwatch.earth/methodology.html. Corrections welcome — particularly on the Teesside addresses, if anyone recognises them.