Skip to content

Radio Coverage + Congressional Districts: Use Cases

Updated: January 2026

Dataset Overview

Metric Count
Radio stations 2,012
Coverage contours 15,979
District coverage relationships 38,431
Districts with coverage 441 (100%)

By service type: - FM: 15,049 contours - AM: 930 contours


Use Case 1: Campaign Media Buying Intelligence

Question: Which radio stations reach the most swing district voters?

Approach: - Query stations by district overlap percentage to find optimal ad buys - Identify stations that span multiple competitive districts for cost efficiency - Rank by district_pct (how much of the district is covered) vs contour_pct (how much of the station's reach is in that district)

Example Query:

-- Stations covering multiple competitive districts
SELECT
    s.callsign,
    s.frequency,
    s.power_kw,
    COUNT(DISTINCT c.geoid) as districts_reached,
    AVG(c.district_pct) as avg_coverage
FROM radio_stations s
JOIN radio_district_coverage c ON s.facility_id = c.facility_id
WHERE c.district_pct > 10  -- Meaningful coverage
GROUP BY s.facility_id, s.callsign, s.frequency, s.power_kw
HAVING COUNT(DISTINCT c.geoid) >= 3
ORDER BY districts_reached DESC, avg_coverage DESC;


Use Case 2: Rural Coverage Analysis

Question: Which districts have limited radio coverage?

Approach: - Many rural districts have limited FM coverage but strong AM daytime signals - Map "radio deserts" vs districts with 50+ stations - Correlate with broadband access data for media strategy decisions

Example Query:

-- Districts by radio station count
SELECT
    d.geoid,
    d.namelsad,
    COUNT(DISTINCT c.facility_id) as station_count,
    COUNT(DISTINCT CASE WHEN s.service_type = 'fm' THEN c.facility_id END) as fm_count,
    COUNT(DISTINCT CASE WHEN s.service_type = 'am' THEN c.facility_id END) as am_count
FROM districts d
LEFT JOIN radio_district_coverage c ON d.geoid = c.geoid
LEFT JOIN radio_stations s ON c.facility_id = s.facility_id
GROUP BY d.geoid, d.namelsad
ORDER BY station_count ASC;


Use Case 3: Cross-District Reach Mapping

Question: Which stations have the widest regional reach?

Approach: - High-power stations (50-100kW) can cover 10+ districts - Find stations that bridge urban/suburban/rural audiences - Useful for statewide campaigns or regional messaging

Example Query:

-- Stations with broadest district reach
SELECT
    s.callsign,
    s.service_type,
    s.frequency,
    s.power_kw,
    s.state,
    COUNT(DISTINCT c.geoid) as districts_covered,
    SUM(c.overlap_sq_km) as total_coverage_sq_km
FROM radio_stations s
JOIN radio_district_coverage c ON s.facility_id = c.facility_id
GROUP BY s.facility_id, s.callsign, s.service_type, s.frequency, s.power_kw, s.state
ORDER BY districts_covered DESC
LIMIT 20;


Use Case 4: Format-Based Targeting

Question: How do station formats align with district demographics?

Approach: - Enrich with station format data (News/Talk, Country, Spanish, etc.) from cbradio - Match formats to district demographics from Census data - Example: Spanish-language stations overlaid with Hispanic population percentage

Data Enhancement Needed: - Import format field from cbradio station metadata - Join with ACS demographic variables (DP05 Hispanic origin data)

Potential Query:

-- Spanish-language station coverage vs Hispanic population
SELECT
    d.geoid,
    d.namelsad,
    dem.dp05_0071pe as hispanic_pct,  -- % Hispanic or Latino
    COUNT(DISTINCT CASE WHEN s.format LIKE '%Spanish%' THEN s.facility_id END) as spanish_stations
FROM districts d
JOIN demographics dem ON d.geoid = dem.geoid
LEFT JOIN radio_district_coverage c ON d.geoid = c.geoid
LEFT JOIN radio_stations s ON c.facility_id = s.facility_id
GROUP BY d.geoid, d.namelsad, dem.dp05_0071pe
HAVING hispanic_pct > 20
ORDER BY hispanic_pct DESC;


Use Case 5: Competitive District Radio Landscape

Question: What's the radio landscape in swing districts?

Approach: - Overlay coverage with Cook PVI or election margins - Build a "persuadable reach" metric combining swing voters + signal strength - Identify underserved competitive districts

Data Enhancement Needed: - Import Cook PVI ratings or election results by district - Create composite scoring model

Metrics to Consider: - Station count per district - Total coverage area (sq km) - Average signal strength (proxy: power_kw weighted by coverage) - Format diversity index


Use Case 6: Emergency Communications Planning

Question: Are there coverage gaps for emergency alerts?

Approach: - Identify stations with EAS (Emergency Alert System) capability - Map coverage gaps for disaster preparedness planning - Correlate with population density for impact assessment

Data Enhancement Needed: - EAS participation data from FCC - Population-weighted coverage calculations


API Endpoints

The following endpoints support these use cases:

Endpoint Description
GET /api/v1/radio/stats Aggregate statistics
GET /api/v1/radio/stations List stations with filtering
GET /api/v1/radio/stations/{id} Station details
GET /api/v1/radio/stations/{id}/contour Coverage polygon GeoJSON
GET /api/v1/radio/stations/{id}/districts Districts covered by station
GET /api/v1/radio/districts/{geoid} Stations covering a district
GET /api/v1/radio/districts/{geoid}/geojson Coverage contours as GeoJSON

Future Enhancements

  1. Station format import - Pull format/genre data from cbradio
  2. Election data overlay - Add Cook PVI or historical results
  3. Population-weighted metrics - Coverage weighted by district population
  4. Time-based analysis - AM stations have different day/night patterns
  5. Owner/network analysis - Identify station group ownership for bulk buys
  6. Signal strength modeling - More sophisticated coverage probability maps