Pennsylvania Radon - Test Results & Mitigation Systems avatar

Pennsylvania Radon - Test Results & Mitigation Systems

Pricing

from $0.03 / 1,000 pennsylvania radon records

Go to Apify Store
Pennsylvania Radon - Test Results & Mitigation Systems

Pennsylvania Radon - Test Results & Mitigation Systems

Pennsylvania home radon data (public open data): 3.33M test results (1985-2026) with the reading in pCi/L, county, municipality, building type, floor tested and test method; plus 523k mitigation systems with the remediation installed and its cost. Filter by county, floor, method or level.

Pricing

from $0.03 / 1,000 pennsylvania radon records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Two Pennsylvania radon registers from the Department of Environmental Protection, published as public open data on data.pa.gov - every recorded radon measurement (homes, schools and non-residential buildings), and every mitigation system installed to fix one.

Low cost

From $0.00005 per record, down to $0.00003 at Gold. Pay only for the records you actually receive - the whole register stays queryable, you are never billed for the scan behind it.

What you get

Pick a register with corpus:

corpus=testing (default) - radon test results

3.33 million measurements, from 1986 through July 2026. 99.9998% carry a real numeric reading in pCi/L.

  • Where - county, municipality, ZIP
  • What building - purpose (Residential / School / Non-Residential), building type and sub-type
  • The test - the floor tested, the test method, and the two test dates
  • The result - the reading in pCi/L

corpus=mitigation - mitigation systems

~527k systems, through October 2026.

  • Where - county, municipality, ZIP and coordinates (the coordinates are county-level centroids, not site-level locations)
  • What building - purpose, building type, floor tested
  • The fix - the remediation system installed, whether the test was pre- or post-mitigation, and the system cost
  • The reading - the radon level at that system's test

The two registers cannot be joined

Their identifiers live in different namespaces - a testing row carries a radon_data_identifier in roughly the 5-11 digit range plus a small integer result id; a mitigation row carries a much shorter dataidentifier and a formatted result id (31646-0584-1-2). No key is shared between the two registers. They are offered side by side as two ends of one story - a measurement and the fix installed after it - never as linkable.

Filter it

  • County, municipality, ZIP - county="Allegheny", municipality="Pittsburgh", postalCode="19148".
  • Radon level - minValue=4 finds every result at or above the EPA action level of 4 pCi/L (1,123,051 of 3.33M test results).
  • Floor, building purpose, test method.
  • Remediation - remediationSystem="Sub-Slab Ventilation", minCost=1500 (mitigation register).
  • Date range on the test end date, and last-N-days.

Example inputs

Tests at or above the EPA action level - the headline query.

{ "corpus": "testing", "minValue": 4, "maxResults": 50 }

One county's radon picture - filter and aggregate in one register.

{ "corpus": "testing", "county": "Montgomery", "mode": "aggregate", "groupBy": "buildingType" }

What mitigation costs - the systems installed, and their cost.

{ "corpus": "mitigation", "minCost": 1500, "maxResults": 50 }

Or roll it up

Set mode=aggregate for a rolled-up count by county, building purpose, building type, floor tested, test method, remediation system or device type. Dimensions differ per register; remediationSystem/deviceType are mitigation-only and testMethod is testing-only (the mitigation register stores a bare equipment code with no legend, so that field is left blank there). Every group comes back - not cut off by maxResults.

Then follow the money and the risk

  • Every home radon reading in a county, and the share above 4 pCi/L.
  • Which remediation systems are installed where, and at what cost.
  • Radon by building type, floor and test method - basement vs. first floor.
  • The mitigation record for a ZIP code, with county-level coordinates.

Example output

One mitigation system - corpus=mitigation, county=Allegheny:

{
"platform": "pa-radon",
"source": "pa-radon-mitigation",
"mode": "rows",
"groupKey": "",
"groupCount": "",
"groupBy": "",
"dataIdentifier": "517274",
"testResultIdentifier": "372377-3322-1-2",
"county": "Allegheny",
"municipality": "IMPERIAL",
"postalCode": "15126",
"buildingPurpose": "Residential",
"buildingType": "2-STORY",
"buildingSubType": "",
"floorTested": "BASEMENT",
"testMethod": "",
"measureValue": "0.5",
"testStartDate": "",
"testEndDate": "2026-06-20T00:00:00.000",
"dataSource": "Pennsylvania Department of Environmental Protection",
"deviceType": "",
"remediationSystem": "ACTIVATE A PASSIVE SYSTEM",
"mitigationTestType": "POST",
"mitigationYear": "2026",
"systemCost": "775",
"latitude": "40.46735543",
"longitude": "-79.98619843",
"corpus": "mitigation",
"sourceUpdatedAt": "2026-10-13"
}

mode=aggregate, groupBy=county (testing) - one count row per county:

Montgomery 391,126
Allegheny 356,402
Bucks 292,080
Chester 261,523
Delaware 193,590
Philadelphia 193,339

Notes on the data, from the source

  • Readings are in pCi/L (picocuries per litre). The EPA action level is 4 pCi/L; the value is returned exactly as measured.
  • Two registers, not one table. See above - they cannot be joined.
  • Mitigation coordinates are county-level centroids. The source carries only 67 distinct points for ~527k systems, so use county for geography; the coordinates do not identify a site.
  • deviceType is sparse on the mitigation register - it is recorded on about a quarter of rows, so its roll-up returns a large (blank) group.
  • Two columns in the testing register are dead and are not exposed. The mitigation-system indicator holds a single value across all 3.33M rows, and the census tract is filled on 6.6% of rows. Exposing either would promise a filter that cannot narrow anything.
  • "Not Collected" and "Unknown" are values the source publishes, not missing data.
  • The registers are refreshed annually (the State's own update frequency), not daily; sourceUpdatedAt carries the dataset's own refresh date.