ADS-B stops at the horizon.
Much of the world is past it.
Ground receivers hear aircraft directly, so coverage ends where the earth curves — or where no one's run a receiver. Over oceans and in the great empty interiors of continents, aircraft go dark for hours. ADS-C is how they report from those places — over satellite, on a C-Band downlink only a real dish can recover.
Line of sight, where people are
Direct broadcasts, dense and fast. The feeder network has this remarkably well covered. Every new ground station makes it stronger — and there's always room for more.
Oceans, poles, and empty land
The North Atlantic, the Pacific, Antarctica, the Amazon basin, central Africa, the Sahara, Siberia. No ground receivers. Flights vanish from the map mid-track, sometimes for hours.
The aircraft's own satellite reports
ADS-C position reports ride an Inmarsat satellite downlink back to earth. Pull that signal down and you put flights back on the map that no ground antenna can see. This is what only a C-Band ground station can do.
Three reasons this build is
genuinely hard.
This isn't a warning — it's the spec. If you're still reading after this section, you're probably the right person. A working station takes months. These are the three problems you'll need to solve.
The signal is weak and narrow
You're catching a faint C-Band downlink at ~3.6 GHz. That requires real aperture — a 2.4 m dish minimum, bigger if you can source it. No amount of clever RF work substitutes for dish size. More dish is simply more signal.
The receiver must be rock-stable
The data channel is narrow enough that a standard LNB's clock drifts right off it. You need a GPS-disciplined LNB — specifically an older external-reference Norsat model, before 5G filters became common and silently blocked this signal. Sourcing one is its own project.
The dish has to track
A "geostationary" satellite actually traces a slow figure-8 in the sky every 24 hours. At the gain a 2.4 m dish produces, the beam is too narrow to ignore this movement. You'll build a tracking loop — a linear actuator, an Arduino, and a Node-RED controller that follows the orbit through the night.
What it takes,
part by part.
This isn't a shopping cart — the two parts that decide everything are sourced used, not on Amazon. Everything else is more standard. The total cost varies widely depending on what you find and where.
C-Band dish, 2.4 m+ (6–8 ft)
Bigger is always better. Old C-Band TV dishes appear second-hand for next to nothing. Not shippable flat-pack — source locally and plan a solid, accessible mount you can reach at any hour.
Browse used dishes on eBay →Non-5G C-Band LNB (3.4–4.2 GHz, external reference)
The make-or-break part. You want an older Norsat with an external reference input that can be GPS-disciplined. Current models ship with 5G filters that silently remove the ADS-C signal. Verify the exact model before you spend anything. Read the warning below.
GPSDO module (e.g. Leo Bodnar)
Locks the LNB to GPS time so the narrow data channel doesn't drift. You'll open the LNB and inject this reference — a soldering job, not plug-and-play.
Leo Bodnar shop →Bias-T / diplexer (Mini-Circuits ZABT-2R12G+)
Sends ~20 V and the 10 MHz reference up the coax to the LNB, and passes only RF back down to the SDR — critical protection for your dongle. Order direct from Mini-Circuits.
Scalar ring + dielectric
A choke ring matched to your dish's f/D ratio, plus a small dielectric — a sliver of bare PCB you cut yourself — to convert the feed to circular polarisation. Small parts, but the dielectric is critical to sensitivity.
RTL-SDR Blog V3
Receives the LNB's downconverted L-band output. The same dongle used across satcom work. Stick with the V3 for this application.
View on Amazon →Feedback linear actuator + Arduino H-bridge controller
A linear actuator with a resistance position sensor (not pulse/end-stop), an Arduino, and an H-bridge to drive it. The Node-RED control loop computes orbital position from TLE data and nudges the dish every 10–15 minutes.
Example actuator →Capable PC — not a Pi
Decoding several channels simultaneously needs real CPU: an i5/i7 with 8–16 GB RAM and an SSD. A Raspberry Pi cannot keep up with C-Band. A used mini-PC is ideal. Windows or Linux both work fine.
Coax, power injector, GPS antenna
Quad-shield 75-ohm coax for the run, a low-noise 18–21 V power injector, and a small GPS antenna for the GPSDO (it needs clear sky, not a precise location). All standard satellite-grade parts.
The LNB is where money gets wasted. The model people relied on for years is discontinued, and most current C-Band LNBs now ship with 5G filters that block the ADS-C signal — and can't be GPS-modified. Buy the wrong one and you'll have an expensive paperweight that silently filters out exactly what you came for. Confirm the specific model and year with the satcom community on Discord before you spend a cent.
The approachable way to
track the satellite.
Skip consumer DiSEqC positioners — they're built for light TV dishes, move along the wrong axis, and can't carry a 2.4 m dish. The reliable path is a single elevation actuator with a software loop, built up in stages.
By hand — prove the chain first
- Move the dish manually twice a day — morning and evening — to catch the top and bottom of the orbit.
- Mark the dish positions for the orbit's top, bottom, and sides on a fixed reference.
- Confirm you're decoding aircraft. This alone validates the dish, LNB, and feed before you build anything mechanical.
Elevation loop — leave azimuth manual
- Mount the feedback linear actuator on the elevation axis, calibrated to the travel you already mapped by hand.
- Stand up Node-RED to compute satellite position from auto-updated TLE data.
- Arduino compares target to actuator feedback and nudges every 10–15 minutes, with a deadband so it doesn't hunt continuously.
From empty sky to
aircraft on the map.
Each step only makes sense once the previous one works. The full sequence can take months — treat this as a project with a worthy finish line, not a weekend.
Confirm your satellite — and your sky
Identify which Inmarsat covers you, then verify an unobstructed view across its entire daily orbit. A blocked sightline ends the project before it starts.
Plot the orbit
Stand up an orbit graph (Node-RED or similar) with auto-updating TLE data, showing azimuth and elevation over 24–48 hours. You'll reference this constantly during commissioning.
Get the dish up
Source and mount the dish on a level, solid base with safe, easy access at odd hours. You'll be out there making fine adjustments during commissioning — often at dawn or dusk.
Build the feed
GPS-discipline the LNB, fit the dielectric and scalar ring, wire the diplexer and power injector, run coax to the SDR. This is the soldering-and-care stage.
Find the signal
Pivot the dish to the middle of the orbit and hunt the strong 10500 burst on the SDR waterfall. Peak the LNB and dish alignment back and forth until it's clean and consistent.
Get aircraft on a map
Run Jaero to decode the bursts and output positions. Seeing real aircraft appear over open ocean or remote land — positions no ADS-B receiver anywhere can see — is the proof of concept that makes the rest worth it.
Add tracking
Once you're tired of moving the dish by hand, fit the elevation actuator and close the Node-RED + Arduino control loop so it follows the orbit automatically, around the clock.
Scale up and feed us
Add VFOs for the 1200 and 8400 channels, one Jaero instance per channel, and send decoded positions to ADS-B Exchange. This is where the capable PC earns its place — and where your callsign goes on the map.
Connecting to
ADS-B Exchange.
Once Jaero is decoding, point its SBS output at feed.adsbexchange.com on port 31600 over TCP. Two paths — both land in the same place.
Local readsb relay
The battle-tested path used by existing satellite feeders. readsb buffers and handles reconnections cleanly.
- In Jaero: Settings → Decoding → ADS data output, set SBS1 TCP server to
localhost:30003(server mode). - Install readsb locally, or run the ultrafeeder Docker container.
- Configure readsb:
readsb holds a persistent connection and reconnects automatically if it drops.
Jaero client mode
Minimal setup, no relay. Fine to get started; add a readsb relay later for resilience.
- In Jaero: Settings → Decoding → ADS data output, switch to client mode.
- Set destination to
feed.adsbexchange.comport31600 - Jaero sends SBS data directly to our endpoint.
Nothing to configure on our end — port 31600 accepts your connection straight away. Your aircraft appear tagged,"type": "adsc" distinct from ADS-B, and visible to everyone using the map and API.
The detailed
build guides.
This page is the overview. These community resources are the turn-by-turn detail — hardware sourcing, alignment, frequencies, and the hard-won tuning knowledge that only comes from people who've done it.
Finding your satellite
Which Inmarsat covers you and how to confirm you have a clear sky view. Do this before anything else.
Read the guide →Build a C-Band ground station
Complete build: dish selection, GPS-locked LNB modification, alignment, tracking loop, and decoding.
Read the guide →ADS-B Exchange Discord
The satcom channel is where the small community of working ADS-C feeders hangs out. Ask about LNB models here before you buy.
Join Discord →Feeder Hub
Manage your receivers, track your contributions, and connect a new data source to the network once you're decoding.
Go to Feeder Hub →Tell us you're
building one.
If you have the space, the patience, and a clear shot at the satellite, get in touch before you start. We'll help you identify the right satellite for your location and steer you around the dead ends that have stopped others.