HRSA HPSA & MUA Shortage Designation Monitor API
Pricing
from $4.95 / 1,000 results
HRSA HPSA & MUA Shortage Designation Monitor API
Monitor HRSA HPSA & MUA/MUP shortage designations from the official ArcGIS feed. Normalize the 3 HPSA disciplines + MUA into one row per designation; filter by state, discipline, score, rural; delta newly designated vs withdrawn; roll up by county, district or state.
Pricing
from $4.95 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Maloney
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Share
HRSA HPSA & MUA Shortage Designation Monitor
Track federal health-care shortage designations — HPSA (Health Professional Shortage Areas) and MUA/MUP (Medically Underserved Areas/Populations) — straight from HRSA's official GeoPortal (HPSA) and Data Warehouse (MUA/MUP). This actor normalizes the three HPSA disciplines plus MUA into one clean row-per-designation, then lets you filter, delta, and roll up so you get an answer instead of a raw dump.
Designations decide real money: HPSA status = Medicare telehealth originating-site reimbursement eligibility, HPSA score drives NHSC loan-repayment and J-1 / Conrad 30 waiver priority, and MUA status gates FQHC / RHC / grant eligibility. When a designation is withdrawn, that funding and eligibility can disappear — so the delta mode is a genuine recurring alert.
Scope and cost — read this first
state is required. There is no default and no hidden nationwide mode,
so a run always answers about the states you actually named.
{ "state": "Texas" }
A call with no state is rejected before the run starts — HTTP 400, no
compute, no rows, nothing billed. That is deliberate: this field used to
carry a schema default, and because Apify injects defaults server-side, anyone
who omitted it was quietly answered about one arbitrary state and charged for
it on a run that reported SUCCESS. A rejected call is cheaper than a wrong answer.
What a run costs. Billing is pay-per-result at $9.00 per 1,000 rows
(about $0.90 per 100 rows), and paid Apify plans get a graduated discount
of 20-70% off that. Only rows actually written to the dataset are billed — a run
that fails a pre-flight check emits nothing and bills nothing. Set maxResults
to put a hard ceiling on any single run.
How many rows to expect. Scope drives the bill, so size it deliberately: a single state returns roughly 500-3,000 HPSA designations depending on discipline. Run one state per run and combine the datasets rather than guessing at a wide scope.
Who it's for
- Telehealth companies — confirm which sites/areas keep Medicare originating-site eligibility (HPSA), catch withdrawals early.
- Physician & locum recruiters / staffing — target high-HPSA-score areas for NHSC loan-repayment and J-1 waiver candidates.
- Rural hospitals & clinics — monitor their own and neighboring designations.
- FQHC / RHC grant writers — MUA/MUP status is a hard eligibility gate; verify before applying.
- Health-equity researchers & GIS teams — clean, normalized, geo-tagged shortage data by state / county / congressional district.
Example input
{"designationType": "HPSA","discipline": "Primary Care","state": "Alabama","minScore": 14,"ruralStatus": "rural","maxResults": 5000}
Delta example (newly withdrawn/designated since a date)
{"designationType": "all","state": "Texas","sinceDate": "2026-01-01"}
Rollup example (count + avg score by discipline)
{"designationType": "HPSA","discipline": "all","state": "California","rollupBy": "discipline"}
Rollup availability, changed 2026-10-07, service moved 2026-10-24. HRSA first emptied the HPSA point layers, then retired the whole HealthProfessionalShortageAreas_FS service; HPSA is now read from the HRSA AnalyzerTool service, whose layers do not publish a county-FIPS or congressional-district column either.
rollupBy"state"and"discipline"work on every run."county_fips"works on MUA rows (the bulk datamart publishes it) and is refused with a clear error on HPSA rows rather than returning one group keyed"Unknown"."congressional_district"is refused on both backends — no HRSA source publishes it any more. A refused run bills nothing.
Output fields (one row per designation)
| Field | Description |
|---|---|
source_id | HRSA HPSA/MUA source id |
designation_type | HPSA or MUA |
discipline | Primary Care / Mental Health / Dental, or MUA type |
name | Designation / service-area name |
status | Designated / Withdrawn / Proposed for Withdrawal |
score | HPSA score (0-26) or MUA/IMU score (0-100) |
designation_date | First designated (YYYY-MM-DD) |
last_update_date | Last updated (YYYY-MM-DD) |
withdrawal_date | Withdrawn date, if any |
rural_status | Rural / Non-Rural |
hpsa_type | HPSA facility/area type |
designation_population | Population covered |
pop_provider_ratio_goal | Target population-to-provider ratio |
state, state_fips, county_fips, congressional_district | Geography. county_fips is populated on MUA / bulk-datamart rows and null on HPSA rows (the HPSA ArcGIS layers do not publish it); congressional_district is null on every row since 2026-10-07. Both are listed in fields_unavailable so a null is never mistaken for "this designation has none". |
fields_unavailable | Which declared columns are null on this row because the backend that answered does not publish them at all |
source_layer | ArcGIS layer id (HPSA perimeter polygons: 2 Dental, 6 Mental Health, 10 Primary Care) |
status_change | Delta mode only: newly_designated / newly_withdrawn |
data_backend, data_vintage | Which HRSA backend answered the row (arcgis_geoportal or hrsa_data_warehouse_csv) and the bulk file date |
run_layers_requested, run_layers_failed, run_complete | Which layers the run asked for, which could not be read, and whether the answer is complete |
state_input | The state exactly as you supplied it (e.g. TX), before conversion to HRSA spelling |
In rollup mode each row is instead rollup_by, group_key, designation_count, avg_score.
Use from an AI agent: quickstart
The smallest input that returns a real answer. Verified live on 2026-10-05: the run SUCCEEDED and returned 5 rows in about 10 seconds.
{"state": "Texas","maxResults": 5}
Call it through the hosted MCP server (https://mcp.apify.com?tools=malonestar/hrsa-shortage-designation-monitor) or straight over HTTP:
POST https://api.apify.com/v2/acts/malonestar~hrsa-shortage-designation-monitor/run-sync-get-dataset-itemsAuthorization: Bearer YOUR_APIFY_TOKENContent-Type: application/json
with the JSON above as the body. The response is a JSON array of dataset rows.
What comes back: one row per HPSA or MUA designation. Abbreviated first row from that run (the full row has 23 fields, all described in the output schema):
{"source_id": "1481242969","designation_type": "HPSA","discipline": "Primary Care","name": "PARKVIEW RURAL HEALTH CLINIC","status": "Designated","score": 15,"designation_date": "2021-12-28","rural_status": "Rural","state": "Texas","county_fips": null,"congressional_district": null,"fields_unavailable": "county_fips,congressional_district"}
Read before you conclude anything: status, withdrawal_date and data_vintage.
Input notes for agents
statetakes a full name ("Texas") or a 2-letter code ("TX"), case-insensitive, converted to HRSA's spelling before the query; DC and the territories work too. A value that names no HRSA state or territory fails the run and bills nothing. (Until build 1.1.9,{"state":"TX"}succeeded with 0 rows, which read like "no shortage areas in Texas".)- MUA/MUP rows come from the HRSA Data Warehouse bulk file (data.hrsa.gov), because the GeoPortal MUA layer no longer publishes state, score or status columns; those rows carry
data_backend: hrsa_data_warehouse_csv. Before build 1.1.9 an MUA run failed and anallrun silently returned HPSA only. - Every row carries
run_layers_requested,run_layers_failedandrun_complete. Ifrun_completeisfalse, a missing designation is not evidence it does not exist. - There is no all-states mode; run one state per call.
designationTypeisHPSA,MUAorall;disciplineisPrimary Care,Mental Health,Dentalorall.maxResultsdefaults to 1,000.
Cost: $0.0090 per row at the Free-tier list price (paid plans get a discount), so the example above costs about $0.045. A run that cannot answer fails and bills no rows.
Use as an MCP tool
This actor is callable by AI agents (Claude, Cursor, etc.) via mcp.apify.com. The input and output schemas are fully field-described, so an agent can chain it — e.g. "find newly withdrawn Primary Care HPSAs in Texas since Jan 2026" — and pass the normalized rows straight into a downstream tool.
Coverage
- HPSA: Primary Care, Mental Health, Dental (three feature layers).
- MUA/MUP: Medically Underserved Areas & Populations.
- Data is national; filter by state to keep runs fast. Source: HRSA GeoPortal (
gisportal.hrsa.gov), keyless. WKID 4326. - HPSA source service moved 2026-10-24. HRSA retired every child layer of
Shortage/HealthProfessionalShortageAreas_FS; HPSA now comes fromAnalyzerTool/AnalyzerToolon the same host (layers 1/2/3 = Primary Care / Mental Health / Dental). Verified same dataset and same grain: Alabama returned 84 Primary Care and 25 Mental Health designations on both the old and new service, with national counts 3,921 / 2,150 / 3,188 against the retired layers' 3,909 / 2,133 / 3,176. The new service is refreshed daily (designation updates through 2026-10-22 at the time of the move). No output field changed.
FAQ
How do I get an HPSA shortage designation dataset / API? Set designationType: "HPSA" and a state; this actor returns normalized HPSA rows with scores and dates.
How do I find newly withdrawn HPSA or MUA designations? Use delta mode: set sinceDate (e.g. 2026-01-01). Rows come back with status_change = newly_withdrawn or newly_designated.
Which areas qualify for Medicare telehealth originating-site reimbursement? Areas with an active HPSA designation; filter status: "Designated" and your state.
How do I find high-score HPSA areas for NHSC loan repayment or J-1 waivers? Set minScore (e.g. 14+) — higher HPSA scores get funding/priority.
Is a place a Medically Underserved Area (MUA/MUP)? Set designationType: "MUA" and your state; MUA status gates FQHC/RHC eligibility.
Can I count shortage areas by state or discipline? Yes — set rollupBy to state or discipline for counts + average score. county_fips works on MUA rows only, and congressional_district is no longer answerable (see the rollup note above); either is refused with an explanatory error rather than answered wrongly, and a refused run bills nothing.
Notes
- Billing is a single automatic result event (per dataset item).
- Data is refreshed by HRSA; this actor always reads the live feed.