Skip to main content
The SDR radio integration brings software-defined radio capabilities directly into the SIGINT panel. It combines three sources: KiwiSDR public receivers, OpenMHz trunked radio systems, and Broadcastify scanner feeds.

KiwiSDR receivers

The KiwiSDR Receivers layer plots 500+ public software-defined radio receivers from the KiwiSDR network as amber markers on the map.

Data fetching

The backend scrapes the KiwiSDR public listing at http://kiwisdr.com/.public/ — receiver metadata is embedded as HTML comments inside each entry <div>. The scraper parses the following fields:
FieldDescription
nameNode name (truncated to 120 characters)
gpsLatitude and longitude
locLocation description (city, country)
antennaAntenna type description
bandsSupported frequency bands
usersCurrent active user count
users_maxMaximum simultaneous users
offlineWhether the node is offline (excluded if yes)
Offline nodes are filtered out before display. Results are cached for 10 minutes (TTL cache) and re-fetched every 30 minutes via the slow-tier scheduler.

Map display

  • Receivers are displayed as clustered amber markers
  • Clusters show the count of receivers in the area and decluster on zoom-in
  • Clicking a marker opens the receiver’s metadata in the SIGINT panel

Live radio tuner

Clicking any KiwiSDR marker opens an embedded live radio tuner directly inside the SIGINT panel. The tuner loads the receiver’s web interface in an iframe, allowing you to tune to any frequency the node supports without leaving the dashboard.

Metadata shown in the panel

  • Node name and location
  • Antenna type
  • Supported frequency bands
  • Current active user count vs. maximum capacity
  • Direct link to open the receiver in a new tab
Receivers with low user counts relative to their maximum are more likely to be available for connection. The users / users_max values help you identify nodes with capacity.

OpenMHz trunked radio

OpenMHz provides real-time audio captures from P25 trunked radio systems — the digital radio infrastructure used by many US public safety agencies.

How it works

  • The backend fetches the full directory of OpenMHz systems from https://api.openmhz.com/systems (cached for 1 hour)
  • When a user activates the radio panel, the backend finds the nearest systems by haversine distance from the user’s map center
  • Recent call audio is fetched from https://api.openmhz.com/{sys_name}/calls (cached for 20 seconds per system to limit polling rate)
  • Audio bursts are returned as .m4a URLs for playback in the SIGINT panel

Broadcastify scanner feeds

Broadcastify hosts live audio streams from thousands of public safety scanner feeds worldwide.

Top feeds

The backend scrapes the Broadcastify Top 50 live feeds page at https://www.broadcastify.com/listen/top and parses the feed table (cached for 5 minutes). Each feed entry includes:
FieldDescription
Feed nameName of the radio system or channel
LocationState and city
CategoryAgency type (police, fire, EMS, etc.)
Listener countCurrent concurrent listeners
Stream URLDirect CDN stream at https://broadcastify.cdnstream1.com/{feed_id}
Feeds are presented in the Radio Intercept Panel with a scanner-style UI. Click any feed to begin playback.
The KiwiSDR layer is off by default. Enable it from the Layers panel to see receiver locations on the map.

Build docs developers (and LLMs) love