ADS-B Aircraft Tracker: Raspberry Pi + RTL-SDR Build

Build a permanent ADS-B aircraft tracking station with a Raspberry Pi 5 (or Pi 4 / Zero 2 W), an RTL-SDR Blog V4 dongle, and a tuned 1090 MHz antenna. Total cost: ~$120. Total build time: 90 minutes. Result: live aircraft map within 100-300 NM of your location, feeding FlightAware / FlightRadar24 / OpenSky for free Enterprise account credit.

Intermediate · 90 minutes · 5 steps

What You Need

What ADS-B is and why aircraft transmit it

ADS-B (Automatic Dependent Surveillance — Broadcast) is the global aircraft position-reporting protocol. Every commercial aircraft transmits its GPS-derived position, altitude, callsign, and identifying information on 1090 MHz roughly once per second. The 'broadcast' is unencrypted and intentional — air traffic control and other aircraft use the signal for situational awareness. The FAA mandates ADS-B Out equipment in most US controlled airspace since January 2020.

You can receive these broadcasts with any RTL-SDR. The signal is short (~100 microseconds), uses pulse position modulation, and is decoded by software (dump1090, readsb) running on the host computer. Aircraft within 100-300 nautical miles of your antenna show up on a real-time web map — altitudes, headings, speeds, callsigns. Larger commercial aircraft transmit identifying info; smaller GA aircraft may transmit only position. The free PiAware (FlightAware) and Pi24 (FlightRadar24) software packages bundle dump1090 with a feeder client that uploads your data and earns you free enterprise-account credit.

Why a permanent Pi-based setup beats a laptop

ADS-B is a 24/7 hobby. Aircraft are always flying, the antenna is fixed at the highest point of your roof, the receiver runs unattended for months. A Raspberry Pi 5 or Pi 4 (or even Pi Zero 2 W) is the right host — low power consumption (3-7W typical), silent (no fan with the V4 dongle), boots from microSD with the entire stack pre-configured.

The Pi mounts in an outdoor enclosure near the antenna (minimizing coax loss) or indoors with an LMR-400 coax run to a rooftop antenna. Power-over-Ethernet adapters let you place the Pi anywhere a single Ethernet cable reaches. Once configured and running, the only maintenance is occasional apt-get updates and replacing the microSD card every 2-3 years as wear levels degrade. Some setups have been running continuously since 2014 with no intervention beyond hardware refreshes.

Step-by-Step Instructions

  1. Step 1 Flash Raspberry Pi OS Lite (64-bit) to a microSD card

    Download Raspberry Pi Imager from raspberrypi.com/software. Insert a 16+ GB microSD card. In the Imager, choose 'Raspberry Pi OS Lite (64-bit)' as the OS (no desktop needed for headless ADS-B). Click the gear icon to pre-configure: enable SSH, set a hostname like 'adsb-pi', set username / password, and add your Wi-Fi credentials if using Wi-Fi instead of Ethernet. Flash. Eject. Insert into the Pi.

    Boot the Pi — it'll take 60-90 seconds to first-boot and connect to your network. SSH in from a laptop: ssh [email protected]. You should land at a shell prompt. Run sudo apt update && sudo apt upgrade -y to update packages. This is typically a 5-minute wait on a fresh OS.

    Tip: Use a high-endurance microSD card (Sandisk High Endurance or Samsung Pro Endurance) rated for 24/7 writes. Cheap consumer cards burn out in 6-12 months under continuous dump1090 writes.
  2. Step 2 Install dump1090 and PiAware (FlightAware feeder)

    FlightAware provides a one-line installer for the entire ADS-B stack. Run: wget -O - https://flightaware.com/adsb/piaware/install | sudo bash. This downloads and installs dump1090-fa (the decoder), piaware (the FlightAware feeder client), and a web interface. Takes 2-5 minutes.

    After install completes, plug the RTL-SDR Blog V4 into one of the Pi's USB ports. Run sudo systemctl status piaware to verify the service is running. Open a browser on any device on your network to http://adsb-pi.local:8080 — you should see a map of aircraft. Most of the world's commercial aircraft will show up within minutes if your antenna can hear anything.

    Tip: If no aircraft show up after 5 minutes, the antenna is the problem. Test with the V4's stock telescoping dipole first to confirm the software stack works; then upgrade to a proper outdoor 1090 MHz antenna.
  3. Step 3 Sign up at FlightAware and claim your feeder

    Create a free account at flightaware.com. Navigate to My ADS-B → Statistics. Click 'Claim Your Feeder' and enter the unique site key shown in your Pi's piaware status output (run sudo piaware-status on the Pi to see it). FlightAware links your feeder to your account.

    Within 24 hours of feeding live data, your account upgrades from Free to FlightAware Enterprise — a paid tier that's free for ADS-B feeders. Enterprise unlocks 7+ years of flight history, full aircraft details, and unlimited search. You can run multiple feeders from the same account to cover wider areas.

    Tip: FlightAware ranks feeders by data volume and quality. Better antennas + higher elevations rank higher. Top-100 feeders globally get special swag from FlightAware (T-shirts, stickers, occasional hardware).
  4. Step 4 Add FlightRadar24 + OpenSky feeders (optional, 5 minutes)

    Each ADS-B aggregator offers free credit / accounts for active feeders. FlightRadar24: install via wget -qO - https://repo-feed.flightradar24.com/install_fr24_rpi.sh | sudo bash. After install, set your latitude / longitude and the FR24 feeder runs alongside dump1090.

    OpenSky-Network (academic / open-data aggregator) installs similarly: wget -O - https://www.opensky-network.org/files/feeders/install-opensky.sh | sudo bash. RadarBox24, ADSB Exchange, and PlanePlotter all offer similar single-line installers. You can feed multiple aggregators from one dump1090 instance — they read decoded messages from the local stream. Running 3-4 feeders adds no extra CPU load.

    Tip: Feed at least 2 aggregators. Each aggregator's coverage map has gaps; feeding multiple aggregators improves your usefulness to the global ADS-B network.
  5. Step 5 Upgrade to a proper outdoor 1090 MHz antenna

    The V4's stock telescoping dipole tunes to 1090 MHz but is electrically short, picks up significant local noise, and is intended for indoor use. For permanent ADS-B, replace with a tuned outdoor 1090 MHz antenna ($20-150 depending on quality). Popular choices: FlightAware's 1090 MHz antenna ($45), the FlightAware Pro Stick Plus (an SDR with integrated 1090 MHz bandpass filter and LNA — drop-in replacement for the V4 paired with any external antenna), or DIY a quarter-wave 1090 MHz antenna from 6.9 cm of solid copper wire and an SMA connector.

    Mount the antenna at the highest accessible point of your home with clear sky in all directions. Run LMR-400 coax (LOW loss at 1090 MHz — RG-58 loses 50% of signal over 30 ft at this frequency) from antenna to Pi. The Pi can sit indoors if the coax is LMR-400; for longer runs put the Pi in a weatherproof box at the antenna and run Ethernet back. Range jumps from 30-50 NM indoors to 200-300 NM with a 30 ft elevation outdoor antenna.

    Tip: Bias-T support on the V4 enables powering an active LNA at the antenna without separate power injection. For 200+ NM range, add an external LNA at the antenna ($15-30) and enable bias-T in dump1090 config.

Frequently Asked Questions

What's the realistic range?

Indoor antenna: 30-80 NM. Outdoor rooftop antenna: 100-200 NM for typical commercial cruise altitudes. With LNA + LMR-400 + tower mount you may catch occasional high-altitude (FL400+) aircraft beyond 250 NM, but the typical envelope is line-of-sight limited. The math: range in NM ≈ 1.23 × √(antenna_height_ft + aircraft_altitude_ft).

Does it pick up military / private aircraft?

Most private aircraft (Cessnas, Piper) transmit ADS-B as of January 2020 (FAA mandate). Many military aircraft transmit ADS-B in civilian airspace but switch off in training / military operations areas. ADSB Exchange (and similar aggregators) does not filter blocked or sensitive aircraft like FlightAware does, so you'll see more on those feeds.

Can I use a Pi Zero 2 W instead of Pi 5?

Yes — Pi Zero 2 W handles single-stream ADS-B at the V4's 2.4 MSPS comfortably. CPU load is about 30% with PiAware + 2 feeders. The advantage is much lower power consumption (~1.5W vs ~3-7W for Pi 5). The disadvantage is slower SSH responsiveness and slower web interface rendering when many aircraft are visible. Pi 4 is the sweet spot for ADS-B if you want headroom.

Do I need to feed data to anyone?

No. dump1090 + the web interface runs entirely locally — view your aircraft map at http://your-pi.local:8080 without feeding anyone. Feeding aggregators is optional but earns free Enterprise / Premium accounts ($90+/year value) and contributes to global ADS-B coverage.

What about MLAT (multilateration) for non-ADS-B aircraft?

MLAT requires multiple ADS-B receivers within range of the same aircraft, time-synchronized via GPS. The aggregators (FlightAware, FR24, ADSB Exchange) all do MLAT server-side — you don't need a local MLAT setup. Your feeder data contributes to MLAT for aircraft that transmit Mode S squitter but not ADS-B position.

How do I monitor the receiver status remotely?

PiAware exposes a status page at http://your-pi.local:8080/perf-graphs.html showing messages per second, MLAT sync status, range, and gain. For email alerts on outages, install Uptime Kuma (free, open-source) on the same Pi or a separate VM and add HTTP checks for the PiAware port.