Data API · data as of
Every county, district and state, as a file you can fetch.
The map's figures are published as plain JSON files at predictable addresses, one per place, refreshed with the map every week. Pull a county's numbers into a news graphic, a cancer center's dashboard or a research notebook with one request. No key, no sign-up, no rate limit.
Addresses
| Place | Address | Example |
|---|---|---|
| national.json | The United States | api/national.json |
| state/{USPS}.json | One state or DC, by two-letter code | api/state/TX.json |
| district/{USPS}-{NN}.json | One congressional district; 00 for an at-large seat | api/district/TX-34.json |
| county/{FIPS}.json | One county, by 5-digit FIPS code | api/county/48215.json |
| county_names.json | Every county's FIPS, name, state and residents 55+ as one small array of [fips, name, state, pop55], for resolving a name to its file | api/county_names.json |
| ask/counties.json ask/county_sites.json | Compact copies for the question box: every county field as one cols array plus one array per county (without the by-site rates), and the by-site incidence and death rates keyed by FIPS. The same figures as all_counties.json, in a form that parses in a few milliseconds | api/ask/counties.json |
| all_states.json all_districts.json all_counties.json | Every place at that level, as one array | api/all_states.json |
| trial/{NCT}.json | A plain-language summary (English and Spanish), who the record says it is for and not for, and tags, written by an AI model from the registry record; exists only for trials summarised so far (trials_index.json has the count) | api/trials_index.json |
| index.json | This page as data: files, field definitions, data date, license, the list of district ids | api/index.json |
Base URL: . Districts use the 119th Congress maps (2024 elections); the plan field says so in every district file.
One line of code
// JavaScript, in any web page
const r = await fetch("api/district/TX-34.json").then(r => r.json());
console.log(r.name, r.pct_lt20_trials_within_60rdmi + "% of residents 55+ short of trials", r.member.name);
# Python
import requests
d = requests.get("api/county/48215.json").json()
print(d["name"], d["people_lt20_trials_within_60rdmi"], "residents 55+ with fewer than 20 trials within 60 road-miles")
# R
d <- jsonlite::fromJSON("api/all_counties.json")
head(d[order(-d$people_lt20_trials_within_60rdmi), c("name", "pop55", "pct_lt20_trials_within_60rdmi")])
Fields
Every file carries the same core fields, so county, district and state records can be handled alike. Percentages are of residents aged 55 and older; distances are road miles on the highway network from where people live. Full definitions and limits are on Methods & data.
| Field | Meaning |
|---|
A value of null means not computable for that place (for example, a median road distance where no residents have a road route).
The map's other layers
Since November 2026 the files also carry the data behind every map layer, so a county's rural code, road distances, incidence, death rates and oncologists can be read from the same file. The cut-offs these use (the county median incidence, the top-third death-rate cut, the periods, site labels) are in index.json under thresholds.
| Field | Meaning |
|---|---|
| County files | |
| rucc | USDA Rural-Urban Continuum Code, 1 (metro, 1 million+) to 9 (nonmetro, urban under 5,000, not adjacent); rucc_label is its label. |
| metro | true for codes 1–3, false for 4–9 (counties). In state and national files metro and nonmetro are objects instead: see below. |
| road_mi_nci_from_center | Road miles from the county population center to the nearest NCI-designated cancer center; null = no road route. |
| road_mi_broad_menu_from_center | Road miles from the population center to the nearest county with 100+ recruiting trials (0 when the county hosts one). |
| road_mi_limited_menu_from_center | Road miles to the nearest county with 20+ recruiting trials (0 when the county hosts one). |
| no_road_route_reason | null when road distances exist; island (no road connection to a broad menu or NCI center); off (population center more than 30 miles from any primary or secondary road). |
| drive_hours_nci, drive_hours_broad_menu | Estimated driving time in hours from the population center to the nearest NCI center / broad-menu county. |
| trials_within_60rdmi_of_center | Recruiting trials with a site within 60 road-miles of the population center (the count on the county card); facilities_within_60rdmi_of_center counts the sites. |
| incidence | State Cancer Profiles incidence, age-adjusted per 100,000, all ages: all (all-sites rate), cases_per_year, small_numbers (fewer than 16 cases a year: interpret with caution), status (ok / suppressed / no data), status_text (as the map prints it), period, by_site (rate per site key, null where not published). |
| mortality | State Cancer Profiles cancer death rates, the same shape with deaths_per_year. |
| oncologists | count (CMS Care Compare: medical oncology, hematology/oncology, hematology, with a practice location in the county), radiation, gynecologic, surgical, within_60rdmi, class 1–4 with class_label (Oncologists and trials / Oncologists, no trials / Trials, no oncologist listed / Neither), all_also_elsewhere (every oncologist counted also practises in another county). |
| incidence_above_county_median | true when the all-sites incidence is above the median of US counties with a published rate (the map's "high incidence"); null when not published. |
| mortality_top_third | true when the all-sites death rate is in the top third of US counties with a published rate (the map's "high mortality"); null when not published. |
| District, state and national files | |
| nonmetro_pct | Share (%) of residents 55+ living in nonmetro counties (RUCC 4–9). |
| incidence_all_sites | All-sites age-adjusted incidence per 100,000 as the map's incidence layer paints it: the residents-55+-weighted mean of county rates; incidence_all_sites_cases_per_year is the matching annual case count. |
| incidence_published | States and the nation only: the published state/national rate (all, cases_per_year, by_site), the figure the state card leads with. |
| oncologists | count of oncologists practising in the place (district: in counties touching it), pct_pop55_in_counties_with_oncologists_no_trials, …_with_both, …_with_trials_no_oncologist, …_with_neither, counties_with_oncologists_no_trials (a count; the FIPS codes for a district), oncologists_per_100k_pop55 (state, nation). |
| metro, nonmetro | States and the nation only: the access figures for residents of metro (RUCC 1–3) and nonmetro (4–9) counties: pop55, counties, pct_lt20_trials_within_60rdmi, people_lt20_trials_within_60rdmi, pct_zero_trials_within_60rdmi, people_zero_trials_within_60rdmi, pct_lt100_trials_within_60rdmi, mean_trials_within_60rdmi, pct_gt60rdmi_nci, pct_gt60rdmi_broad_menu, median_road_mi_nci, median_road_mi_broad_menu (and the short aliases pct_lt20, pct_zero, mean_trials_60). nonmetro is null for DC. |
| senators | States only: the two senators (name, party, bioguide) and s4440, each one's position on the Senate Clinical Trial Modernization Act (S. 4440): sponsor, original (original cosponsor), cosponsor or none. Empty for DC. |
License and citation
The data files are free to use, share and build on under Creative Commons Attribution 4.0: use them for anything, including commercial work, and credit the source. The underlying sources (ClinicalTrials.gov, the Census Bureau, NCI, CMS) are public data. The site's code is on GitHub.
If you use the data in a publication, a dashboard or a news story, a note to the issue page is welcome; it helps show where the work is being used.
Good to know
- Freshness. Files are rebuilt with each weekly registry refresh;
data_as_ofin every file is the registry date the figures come from. Trials change weekly, so cache with that in mind. - Stability. Field names will not be renamed or removed without a version note here. New fields may be added. November 2026: the map-layer fields above were added (rural codes, road distances from the population center, incidence, death rates, oncologists, senators); nothing was renamed, and
all_counties.jsongrew to about 9 MB, so fetch one county file when you need one place. Later in November 2026, two corrections and one addition:trials_listed_herein district and state files had been the place's census-tract count and is now the number of distinct recruiting trials with a site in the place (district: in any county that overlaps it, so a county shared by two districts counts for both);wmean_trials_within_60rdmihad beennullfor 48 dense districts and for New Jersey where the true value is 1,000 or more, and is now the number; and county files gaineddistricts, the ids of the congressional districts that overlap the county (the inverse of the district files'counties), also carried as the last column ofask/counties.json. County figures and every other field are unchanged. - Counties. County shares are computed from census tracts weighted by residents 55+, the same way as districts and states, so the three levels add up.
- Not medical advice. A listed trial may not be enrolling at a given site today, and being listed does not mean a patient is eligible.