What this site counts, and how.
Many smaller airports have control towers that are staffed only part of the day, and some have no tower at all. Those hours, where they exist, were set when the airport had no passenger flights. They have not changed. The passenger flights have arrived. This site does not argue that from anecdote — it counts the flights.
- ADS-B — Automatic Dependent Surveillance–Broadcast. Nearly every aircraft carries a transponder that broadcasts its identity, position, altitude and speed about once a second, for anyone with a receiver to hear. It is how the FAA tracks aircraft today, and the source of every flight path on this site. The altitude it carries is measured against a standard air pressure, so we correct it to height above the field (AGL) using the airport's hourly weather reports; the raw figure is labelled "ADS-B altitude".
- FlightAware AeroAPI — arrival and departure records, and the ADS-B position signals each aircraft broadcast, collected by FlightAware's receiver network.
- FAA Chart Supplement and NASR data — the official published tower hours and facility record, plus the physical latitude and longitude of each runway end and the declared runway dimensions used for the amber map overlay. Runways follow the current 28-day FAA cycle; an older replay may therefore show today’s published runway configuration.
- FAA Aircraft Registry — aircraft make, model, airframe, year, registration type, registered name, and city/state. Dark Towers uses only the releasable FAA fields and does not display street addresses or ZIP codes.
- Published airline schedules — to tell passenger flights apart from private ones.
- OpenStreetMap and CARTO — basemap tiles.
Collect every flight while the tower is closed
For each night we list every arrival and departure between the tower closing and reopening the next morning, in local time. Flights are grouped by the evening they belong to, so a 1 a.m. landing is filed under the night before.
Keep only the paths close to the airport
A flight counts once it comes within 10 nautical miles of the airport — about 11.5 road miles. Its path is then kept out to 20 nautical miles in both directions, so approaches, procedure turns and go-arounds are shown whole. Flights that never come inside 10 NM, or pass by while the tower was open, are dropped.
Measure how close aircraft came to each other
Positions are lined up to a common clock and every pair of aircraft is measured. When two aircraft are less than 3 nautical miles apart and less than 1,000 feet apart vertically at the same moment, we flag it as a close approach.
With a controller on duty, aircraft within 3 nautical miles of each other are kept at least 1,000 feet apart vertically. When the tower is closed, nothing enforces this safety margin.
What counts as a close approach
Every close approach on this site passed all of the following tests at one and the same moment. Nothing is flagged on judgement; the same rules are applied to every flight, and re-running them over the same data gives the same result.
- When
- The tower was closed. Flights are checked only between the published closing and reopening times for that night.
- Where
- Both aircraft were within 10 nautical miles of the airport — the point midway between them is inside the 10 NM ring.
- Side to side
- Less than 3.00 nautical miles apart, measured over the ground.
- Vertically
- Less than 1,000 feet apart, using the altitudes the aircraft reported. Both conditions must be true at the same instant; being inside one of them alone is normal and is not counted.
- Both flying
- Each aircraft was more than 150 feet above the field (after the pressure correction) and moving faster than 40 knots. An aircraft on the runway, taxiing, or rolling out after landing does not count.
- Two aircraft
- Two records of the same aircraft never count: the same tail number, or two tracks that ride on top of each other for most of their length (a callsign and a registration for one flight), including a once-a-minute radar copy that trails a few seconds behind the same aircraft.
- Same clock
- Positions are reported a few seconds apart, at different moments for each aircraft. Each path is smoothed through its reported points and both are read at the same instant, every second, so the distance is between where the aircraft actually were, not between their nearest reports.
- Counted once
- Each pair of flights is counted at most once per night, at the moment they were closest. “Very close” means under 1 nautical mile and under 500 feet at that moment.
Not counted: an aircraft sitting on the runway while another lands on it. Wake turbulence is tested separately below because it follows different rules from the 3 NM / 1,000 ft standard.
What counts as a wake-turbulence event
Dark Towers applies the current terminal CWT “directly behind” and “on approach” matrices in FAA Order JO 7110.65BB, section 5-5-4. The detector deliberately does not apply the reduced 2.5 NM final-approach rule or the 1.5 NM / 500 ft Class B/C VFR-to-IFR provisions: those are facility- and operation-specific exceptions that this data cannot establish. The same deterministic test is applied once per second.
- Aircraft class
- Each ICAO aircraft type is assigned FAA Consolidated Wake Turbulence (CWT) category A through I. A is the A380; B–D are heavy jets; E is the Boeing 757; F–G are large aircraft; H–I are small aircraft. An unknown type is conservatively Category I as a follower, but can never be the leader that creates a flag.
- In trail
- The follower must be behind the leader, travelling within 15° of the same direction, and pass within 0.50 NM of a point occupied by the leader earlier. Crossing, opposite-direction and merely nearby tracks do not count.
- Height
- The aircraft must be within 2,500 feet vertically, and the follower cannot be more than 1,000 feet below the leader. Both must also pass the same airborne and 10 NM-ring tests used for close approaches.
- Spacing
- The along-track spacing must be below the applicable FAA CWT minimum. On approach: A→B 5 NM; A→C/D 6; A→E/F/G 7; A→H/I 8. B→B 3, C/D 4, E/F/G/H 5, I 6. C→E/F/G 3.5, H 5, I 6. D→B 3, C/D 4, E/F/G 5, H/I 6. E→I and F→I are 4 NM. Blank FAA matrix cells are not flagged.
- Departures
- For two departures the FAA “directly behind” matrix is used: the approach matrix above except B/C/D→I are 5 NM, C→H is 5 NM, D→H is 5 NM, and F→I has no distance minimum. Published same-runway departure time rules (generally 2 minutes, 3 behind an A380 or for certain intersection departures) are not inferred because ADS-B tracks do not reliably identify runway threshold or intersection use.
- Counted separately
- A wake-turbulence event is not called a loss of 3 NM / 1,000 ft separation. It has its own label and count; the same pair can produce one event of each kind when both tests independently apply.
Controller criteria: FAA JO 7110.65BB §5-5-4. Departure timing rules: §3-9-6. Wake procedures and cautionary advisories: §§2-1-19–20.
What a flagged event is, and what it is not
A flag means two aircraft were closer than a controller would have allowed. It is not a finding that either pilot did anything wrong, and it is not an official ruling of any kind. When the tower is closed, pilots flying by sight are legally permitted to fly closer than these distances as long as they see each other and keep clear. That is the point: a passenger airliner coming in to land and a training aircraft circling the field share the same air with nothing between them but a radio call and a pair of eyes.
Known limitations
- Aircraft that do not broadcast ADS-B, or whose signal no receiver picked up, do not appear at all, so these counts are a floor, not a total.
- ADS-B altitude is measured against a standard air pressure, not the day's actual pressure, and in steps of 100 feet. Heights above the field (AGL) are corrected using the airport's hourly weather reports (the altimeter setting), interpolated between reports; a night with no weather report is shown uncorrected and says so. Expect about ±100 feet. The difference between two aircraft is not affected by this correction, so separation figures use the altitudes exactly as reported.
- Landing and takeoff times are sometimes estimated rather than measured; where the measured time is missing, the estimate is used.
- Coverage close to the ground is uneven, so the lowest parts of some flight paths are missing.
- An aircraft on the runway does not count. Any moment when either aircraft was within 150 feet of the field (after the pressure correction), or moving slower than 40 knots, is left out — so a landing roll beneath a passing aircraft is not flagged.
A citizen project, built on public data.
Dark Towers is not run by the FAA, an airport, an airline, or any government body. It is the work of two residents who live under these flight paths. Everything on the site is drawn from publicly available ADS-B position data — the same signals aircraft broadcast for anyone to receive — and from published tower hours and airline schedules. Nothing here is confidential, and none of it required special access.
If you see something we have wrong, tell us. Corrections improve the record.