Track Aircraft With an RTL-SDR: ADS-B Setup Guide
Track aircraft with an RTL-SDR: how ADS-B works, which 1090 MHz antenna, installing readsb and tar1090, improving range and feeding flight-tracking sites.
To track aircraft yourself, you need an RTL-SDR (a USB radio dongle), an antenna tuned for 1090 MHz and the free readsb software. The result is a live map of the aircraft around you, fed only by your own antenna. Allow about an hour to set it up on a Linux PC or a Raspberry Pi.
This guide covers ADS-B data, which aircraft broadcast publicly. It does not cover voice communications.
ADS-B: what aircraft broadcast
ADS-B (Automatic Dependent Surveillance–Broadcast) is a system in which an aircraft works out its own position by satellite and broadcasts it automatically, several times a second, on 1090 MHz. Air traffic control, other aircraft and any ground receiver can pick it up.
Each message carries one of the following:
| Data | Example |
|---|---|
| ICAO address (unique 24-bit identifier) | 4840D6 |
| Flight callsign | BAW123 |
| Position (latitude, longitude) | Encoded, decoded by the software |
| Altitude | 36,000 ft |
| Speed and heading | 450 kt, 135° |
| Transponder code (squawk) | 7000 |
In Europe, almost every airliner and business jet is equipped. Some light aircraft, gliders and military aircraft don't broadcast ADS-B, or not all the time, so part of the traffic will stay invisible.
The 978 MHz UAT system used in the United States does not exist in Europe. Here, everything happens on 1090 MHz.
Hardware: dongle, 1090 MHz antenna, optional Raspberry Pi
The dongle
Any RTL-SDR that covers 1090 MHz works. A TCXO model such as our RTL-SDR receiver runs cooler and drifts less, which helps for a station running day and night. If the dongle isn't set up yet, follow our RTL-SDR beginner setup guide first.
The antenna
At 1090 MHz the wavelength is about 27.5 cm. Two simple options:
- A dipole: two elements of about 6.9 cm each (λ/4), mounted vertically, because aircraft transmit with vertical polarisation. The telescopic dipole in our SDR antenna kit adjusts to that length.
- A quarter-wave ground plane: one 6.9 cm vertical element and four radials, easy to build from a connector and stiff wire.
Collinear or commercial ADS-B antennas add a few more tens of kilometres, but they are wasted as long as the antenna stays indoors.
The Raspberry Pi (optional)
readsb runs on any Debian or Ubuntu computer. A Raspberry Pi becomes useful when you want a permanent station sitting next to the antenna, in a loft or behind a roof window. Decoding is light work.
A quick check
Before installing anything, the rtl-sdr package includes a tiny ADS-B decoder you can use to check the chain works:
rtl_adsb
If lines of hex characters such as *8D4840D6202CC371C32CE0576098; scroll past, you are already receiving aircraft. Stop it with Ctrl+C.
Installing readsb/dump1090 and showing the map
Today's reference decoder is readsb, in the version maintained by wiedehopf. It descends from dump1090 and comes with the tar1090 web interface. The official script installs both on Debian, Ubuntu or Raspberry Pi OS.
Step 1: check the driver
On Debian 12, Ubuntu 22.04 or Raspberry Pi OS Bookworm, the packaged driver (version 0.6.0) does not support V4 or V4L dongles. The readsb documentation says so explicitly. Check with:
apt policy rtl-sdr
At version 2.0 or later (Debian 13, Ubuntu 24.04 and newer), you're fine. Otherwise, build the osmocom driver from source as explained in our setup guide.
Step 2: install readsb and tar1090
The script comes from the adsb-scripts repository. As with any script you run with sudo, you can download and read it first.
sudo bash -c "$(wget -O - https://github.com/wiedehopf/adsb-scripts/raw/master/readsb-install.sh)"
sudo reboot
The script removes other decoders such as dump1090-fa or dump1090-mutability, because only one program can use the dongle at a time.
Step 3: set your location
readsb uses it to decode positions and to centre the map. Give latitude then longitude, in decimal degrees:
sudo readsb-set-location 51.50735 -0.12776
Step 4: set the gain
sudo readsb-gain auto
Automatic mode is fine to start with. If you want to tune by hand, a fixed value such as sudo readsb-gain 43.9 is a starting point, and the project wiki describes a detailed method.
Step 5: open the map
From a browser on the same network, open:
http://address-of-the-machine/tar1090
You'll see the aircraft you receive, their tracks, altitude colour-coding and a detailed table. If the page says "Connection refused", install the lighttpd web server (sudo apt install -y lighttpd) and run the script again.
If anything goes wrong, check the service log first:
sudo journalctl --no-pager -u readsb
Improving range (antenna, location, filter)
The physical limit: the radio horizon
At 1090 MHz, signals travel in straight lines. Maximum range therefore depends on the height of your antenna and of the aircraft. An approximate formula gives the radio horizon in kilometres, with heights in metres:
d ≈ 4.12 × (√h_antenna + √h_aircraft)
For an antenna at 10 m and an aircraft at 10,000 m: 4.12 × (3.2 + 100) ≈ 425 km. That is a theoretical ceiling. Terrain, buildings and the quality of your setup reduce the real figure.
What actually changes results, in order of impact
- Get the antenna outside. Moving from inside a room to outdoors is the single biggest gain. Behind a window you only see part of the sky, and metal-coated double glazing weakens the signal further.
- Raise the antenna. Every metre counts, especially to clear neighbouring roofs.
- Shorten the cable. At 1090 MHz, long thin coax loses much of the signal. Put the dongle, or the Raspberry Pi, next to the antenna and run a longer network or USB cable instead, or use low-loss coax.
- Filter. Nearby mobile networks around 900 MHz can overload an 8-bit dongle. A 1090 MHz band-pass filter between the antenna and the dongle reduces the problem.
- Amplify at the antenna. A low-noise amplifier (LNA) at the antenna end makes up for cable losses. Fitted at the dongle end, after the cable has already lost the signal, it helps far less.
Measuring your range
Rather than trusting figures quoted online, measure your own:
- in tar1090, add
?pTracksto the address (/tar1090/?pTracks) to show accumulated tracks; the shape they draw is your real coverage; - graphs1090, by the same author, plots maximum range, message rate and aircraft count over time.
Let it run for 24 hours before and after each change (antenna, height, filter) so you compare like with like.
Sharing your data (FR24, ADS-B Exchange)
Flight-tracking websites rely heavily on thousands of volunteer receivers. Feeding your data is simple and comes with a few perks:
| Network | Setup | Advertised perk |
|---|---|---|
| FlightAware | piaware package on Raspberry Pi OS (Trixie, Bookworm, Bullseye) | Free Enterprise account for feeders |
| Flightradar24 | fr24feed software | Free subscription, under their current terms |
| ADS-B Exchange | feed.sh script added alongside readsb | Access to a map of your own reception |
For ADS-B Exchange, the script installs next to readsb without replacing it:
curl -L -o /tmp/axfeed.sh https://adsbexchange.com/feed.sh
sudo bash /tmp/axfeed.sh
ADS-B Exchange was bought by a private company in 2023. Since then, part of the community also feeds community-run aggregators such as adsb.lol and airplanes.live. You can feed several networks at once.
Two things to keep in mind:
- Multilateration (MLAT) locates aircraft that don't send their position, using arrival times measured by several receivers. It requires you to declare your antenna's exact location.
- Your privacy: networks usually publish your station's location only approximately. Read their terms before signing up.
The legal side
ADS-B messages are broadcast in the clear for any receiver. Hobbyists receive them, map them and share them with public networks openly and widely. An RTL-SDR is a receiver: it doesn't transmit and cannot interfere with anything.
Two caveats:
- Voice communications between pilots and controllers, around 118–137 MHz, are a more delicate area under French secrecy-of-correspondence rules and similar laws elsewhere. This guide doesn't cover them. If you listen, don't record or publish.
- The data itself is public, but how you use it is still subject to the general law. Tracking and publishing a specific person's movements, for example, raises other questions.
We go through the French texts (Penal Code, telecoms code, ANFR) in is SDR listening legal in France?. This is general information, not legal advice.
Starting your station
A TCXO dongle, a well-placed 1090 MHz antenna and an old PC or a Raspberry Pi are enough for an ADS-B station that runs around the clock. Our RTL-SDR (≈ 24 MHz – 1.7 GHz, receive-only, around €60) and our SDR antenna kit will be back soon: join the waitlist to be notified.
Frequently asked questions
Can I track aircraft without a Raspberry Pi?
Yes. readsb and tar1090 install on any Debian or Ubuntu computer. A Raspberry Pi is simply convenient for a station that runs permanently next to the antenna.
What range can I expect from an RTL-SDR?
It depends mostly on the antenna and where it sits. Behind a window, expect a few tens of kilometres. With a clear outdoor antenna, several hundred kilometres are possible for aircraft at cruising altitude, up to the radio horizon.
Why don't some aircraft show up on my map?
Not every aircraft broadcasts ADS-B. Some light aircraft, gliders and military aircraft are not equipped or don't turn it on. Low aircraft, or aircraft hidden by terrain, may also be out of range.
Is receiving ADS-B legal?
ADS-B messages are broadcast in the clear for any receiver, and hobbyist reception is open and widespread in France and across Europe. This guide sticks to that data; voice communications are a more delicate legal area.
My V4 dongle receives nothing with readsb. Why?
The driver is probably too old. On Debian 12 or Raspberry Pi OS Bookworm, the rtl-sdr package is version 0.6.0, which doesn't support V4 and V4L dongles. Move to a newer distribution or install the current osmocom driver.