The goal of cori.data.fcc is to facilitate the discovery, analysis, and use of FCC public data releases.
The package provides access to data from the following sources:
- National Broadband Map (NBM) data1
- Form 477 data
See Democratizing analytics on FCC’s (big) data for more info about the different ways we are using this data.
Installation
You can install the development version of cori.data.fcc from GitHub with:
# install.packages("remotes")
remotes::install_github("ruralinnovation/cori.data.fcc")Examples
National Broadband Map
Key uses:
- Access parquet files stored in a CORI s3 bucket, by county:
guilford_cty <- get_nbm_county_raw(geoid_co = "37081")
#> [1] "Downloading raw NBM data for NC to specified dir (or temp_dir)..."
dplyr::glimpse(guilford_cty)
#> Rows: 1,427,284
#> Columns: 14| Column | Type | Example |
|---|---|---|
frn |
chr | “0001857952” |
provider_id |
chr | “130077” |
brand_name |
chr | “AT&T” |
location_id |
chr | “1344957580” |
max_advertised_download_speed |
int | 75 |
max_advertised_upload_speed |
int | 20 |
low_latency |
lgl | TRUE |
business_residential_code |
chr | “X” |
geoid_bl |
chr | “370810160062003” |
geoid_co |
chr | “37081” |
file_time_stamp |
date | 2026-04-29 |
release |
date | 2025-06-01 |
state_usps |
chr | “NC” |
technology |
dbl | 10 |
- Access a CORI-opinionated, Census-block level version of the latest NBM release:
# get a county
nbm_bl <- get_nbm_bl(geoid_co = "47051")
#> [1] "Downloading NBM data for TN to specified dir (or temp_dir)..."
dplyr::glimpse(nbm_bl)
#> Rows: 2,146
#> Columns: 21| Column | Type | Example |
|---|---|---|
geoid_bl |
chr | “470519601001000” |
geoid_st |
chr | “47” |
geoid_co |
chr | “47051” |
cnt_total_locations |
int | 5 |
cnt_bead_locations |
int | 0 |
cnt_copper_locations |
int | 0 |
cnt_cable_locations |
int | 0 |
cnt_fiber_locations |
int | 0 |
cnt_other_locations |
int | 0 |
cnt_unlicensed_fixed_wireless_locations |
int | 4 |
cnt_licensed_fixed_wireless_locations |
int | 0 |
cnt_LBR_fixed_wireless_locations |
int | 0 |
cnt_terrestrial_locations |
int | 0 |
cnt_25_3 |
int | 0 |
cnt_100_20 |
int | 0 |
cnt_100_100 |
int | 0 |
cnt_distcint_frn |
int | 1 |
array_frn |
list | NULL |
combo_frn |
dbl | 1.xxx |
release |
date | 2025-12-01 |
state_abbr |
chr | “TN” |
# get census block covered by an ISP identified by their FRN
skymesh <- get_frn_nbm_bl("0027136753")
dplyr::glimpse(skymesh)
#> Rows: 12
#> Columns: 21| Column | Type | Example |
|---|---|---|
geoid_bl |
chr | “391093401001009” |
geoid_st |
chr | “39” |
geoid_co |
chr | “39109” |
cnt_total_locations |
int | 4 |
cnt_bead_locations |
int | 4 |
cnt_copper_locations |
int | 3 |
cnt_cable_locations |
int | 4 |
cnt_fiber_locations |
int | 2 |
cnt_other_locations |
int | 0 |
cnt_unlicensed_fixed_wireless_locations |
int | 4 |
cnt_licensed_fixed_wireless_locations |
int | 3 |
cnt_LBR_fixed_wireless_locations |
int | 0 |
cnt_terrestrial_locations |
int | 4 |
cnt_25_3 |
int | 4 |
cnt_100_20 |
int | 4 |
cnt_100_100 |
int | 3 |
cnt_distcint_frn |
int | 4 |
array_frn |
list | <“0018506568”, “0025646373”, …> |
combo_frn |
dbl | 8.639537e+18 |
release |
date | 2025-12-01 |
state_abbr |
chr | “OH” |
Form 477
Access state data for multiple years:
| Column | Type | Example |
|---|---|---|
Provider_Id |
chr | “7095” |
FRN |
chr | “0017631540” |
ProviderName |
chr | “Kingdom Connection” |
DBAName |
chr | “Kingdom Connection” |
HoldingCompanyName |
chr | “Merrill Information Systems” |
HocoNum |
chr | “130808” |
HocoFinal |
chr | “Merrill Information Systems” |
BlockCode |
chr | “500059570001002” |
TechCode |
chr | “70” |
Consumer |
lgl | TRUE |
MaxAdDown |
dbl | 2 |
MaxAdUp |
dbl | 2 |
Business |
lgl | TRUE |
Date |
date | 2014-12-01 |
StateAbbr |
chr | “VT” |
Utilities
Access the dictionary for each dataset:
dplyr::glimpse(get_fcc_dictionary())
#> Rows: 50
#> Columns: 5| Column | Type | Example |
|---|---|---|
dataset |
chr | “f477” |
var_name |
chr | “Provider_Id” |
var_type |
chr | “TEXT” |
var_description |
chr | “filing number (assigned by FCC)” |
var_example |
chr | “8026” |
The package also provides a list of Provider IDs and FRNs.
str(fcc_provider)
#> 'data.frame': 4456 obs. of 5 variables:| Column | Type | Example |
|---|---|---|
provider_name |
chr | “@Link Services, LLC” |
affiliation |
chr | “AtLink Services, LLC” |
operation_type |
chr | “Non-ILEC” |
frn |
chr | “0016085920” |
provider_id |
num | 290004 |