Build an ADS-B Flight Tracker with Raspberry Pi and RTL-SDR
This site already covers a general-purpose remote SDR server (rtl_tcp and SpyServer, for feeding any SDR software) and ham radio digital modes on a Raspberry Pi. This project is narrower and arguably the single most popular first SDR project in the hobby: a dedicated ADS-B flight tracker that decodes aircraft transponder signals at 1090MHz and plots every plane within range on a live map, running unattended on a Pi in the corner of a room. It needs no license, no transmitting hardware, and produces an immediately satisfying result — a map filling with live air traffic — from genuinely inexpensive hardware.
How ADS-B Works, Briefly
Most aircraft (commercial airliners, and a growing share of general aviation under mandate in many countries) continuously broadcast their own position, altitude, speed, and identification over a standard called ADS-B (Automatic Dependent Surveillance-Broadcast), transmitted as 1090MHz Mode S extended squitter messages roughly twice a second. Because it's a broadcast (not a request-response protocol), any receiver within radio line of sight can decode it with no cooperation from or transmission to the aircraft — which is exactly what an RTL-SDR dongle and a Raspberry Pi are well suited to do.
What You're Building
An RTL-SDR dongle tuned to 1090MHz feeds raw samples to decoder software (dump1090-fa, FlightAware's actively maintained fork, or the similar readsb project) running on the Pi, which extracts aircraft position and identity data from the decoded messages. A companion web interface (tar1090 is the current standard choice) turns that decoded data into a live, zoomable map you can view from any browser on your network, and optionally feeds the same data upstream to aggregators like FlightAware, ADS-B Exchange, or Flightradar24 in exchange for enhanced account perks on those services.
Hardware and Antenna Placement
Reception range for this project is overwhelmingly a function of antenna height and line-of-sight clearance, not raw receiver sensitivity — a dongle and antenna in a window or attic will meaningfully outperform the same hardware on a desk in a windowless room, and moving the antenna to a roof or high point typically extends range from tens of miles to well over a hundred, since 1090MHz reception is fundamentally limited by the radio horizon.
PlacementTypical rangeNotes Indoor, away from windows10-30 milesFine for initial testing and confirming the setup works before investing in a better antenna location Window or attic40-80 milesA meaningful step up with no additional cost beyond antenna placement Roof or mast-mounted, clear horizon150-250+ milesLimited mainly by the curvature of the earth (radio horizon) at typical aircraft cruising altitudes, not by the receiver itselfUse low-loss coax for any run longer than a few feet between the antenna and the dongle — standard RG-58 loses a surprising amount of signal at 1090MHz over any real distance, and a longer run in thin, lossy cable can undo much of the benefit of a better antenna position.
Build Steps
- Flash Raspberry Pi OS Lite (no desktop environment needed) to a microSD card, and enable SSH during imaging so the Pi can run fully headless from first boot — see this site's headless Raspberry Pi setup guide for the general process.
- Boot the Pi, connect over SSH, and update the system packages.
- Install dump1090-fa following FlightAware's published installation instructions for Raspberry Pi OS, which handles the RTL-SDR driver setup and the decoder itself as a system service.
- Install tar1090 for the live map web interface, which reads the same decoded data dump1090-fa produces and serves it as an interactive map on the Pi's local web server.
- Plug in the RTL-SDR dongle with the antenna connected, and confirm the decoder service starts automatically and begins reporting messages — the service logs and the tar1090 map itself both show a message rate that should quickly climb from zero once aircraft are within range.
- Browse to the Pi's IP address on port 8080 (tar1090's default) from another device on the network and confirm aircraft appear on the map as they're received.
- Optionally, install the FlightAware, ADS-B Exchange, or Flightradar24 feeder client alongside dump1090-fa to share your received data upstream — each of these has a straightforward install script and typically rewards consistent feeders with an enhanced account tier on their respective service at no cost.
Antenna Options
Antenna typeNotes Stock antenna included with many RTL-SDR/ADS-B bundle kitsAdequate for initial testing and confirming the whole chain works, but a clear step down from a dedicated 1090MHz antenna in real range Dedicated 1090MHz collinear or ground-plane antennaPurpose-tuned for the exact frequency in use, and the single highest-value upgrade for range once the software side is working Filtered RTL-SDR dongle (built-in 1090MHz bandpass filter)Worth it in RF-noisy environments (urban areas, near other transmitters) where out-of-band signals overload a standard dongle's front end and actually reduce effective rangeTroubleshooting
SymptomLikely cause No aircraft ever appear, message rate stays at zeroAntenna not connected or connector not fully seated; dongle not recognized (check with a USB device listing); decoder service not actually running Aircraft appear but only briefly overhead, poor rangeAntenna placement (indoors, low, obstructed) is the most common cause — move it higher and clearer before suspecting the hardware itself Pi randomly reboots or the dongle drops outInsufficient USB power, especially common on a Pi Zero or Pi 3 powered from a marginal supply while the RTL-SDR dongle draws its own current — use a powered USB hub or a higher-current power supply Message rate is high but position data is sparse or missing for many aircraftNormal at longer range — some message types (including position) transmit less frequently than others, and weaker signal at the edge of range disproportionately drops the less frequent message types firstExpanding the Station
Once the core ADS-B setup is running reliably, it pairs naturally with a second RTL-SDR dongle and a separate antenna for general-purpose SDR use (see this site's remote SDR server project) or with a discone antenna for broader VHF/UHF monitoring — a single Pi can run more than one SDR dongle simultaneously as long as each is assigned to its own service and the Pi's USB power budget can support both.
Safety Notes
- If mounting an antenna outdoors or on a roof, follow standard ladder and fall-protection practices — an antenna mounting job is not worth a fall injury, and this is true regardless of how simple the actual mounting hardware is.
- Any outdoor antenna and its coax run should include proper lightning protection (a grounded lightning arrestor in the coax line, and a solid grounding path for the mast/mount) if it will be a permanent installation — an ungrounded outdoor antenna is a real lightning strike and induced-surge risk to both the antenna and anything connected to it indoors.
- Keep antenna mounting clear of power lines entirely; maintain generous clearance when working with any mast or pole near overhead electrical service.
This is a genuinely low-effort, high-reward first SDR project — most of the "work" is antenna placement, not software configuration, and the payoff (a live map of every aircraft overhead, running unattended indefinitely on hardware that draws a few watts) is immediate and keeps being interesting long after the novelty of the initial setup wears off.
Related Guides
- RF and Antenna Fundamentals for Makers: Dipoles, Ground Planes, SWR, and Feedline Loss
- Build a Raspberry Pi E-Ink Digital Photo Frame (Wired or Battery-Powered)
- Build a Raspberry Pi NAS with Samba File Sharing
- Build a Cyberdeck: Custom Portable Computer with a Laser-Cut and 3D Printed Enclosure
- Build a PiKVM: Remote Out-of-Band BIOS/Boot-Level Access with a Raspberry Pi
- Build a Raspberry Pi Whole-Home Audio Streamer: Volumio, DAC HAT, and Multi-Room Sync
- Build an APRS iGate and Digipeater with Raspberry Pi and RTL-SDR
- Build a Battery-Powered Raspberry Pi Wildlife Trail Camera with PIR Trigger