USGS Karst Sinkhole Risk Screener — Geohazard by Coordinate
Pricing
from $4.40 / 1,000 results
USGS Karst Sinkhole Risk Screener — Geohazard by Coordinate
Karst & sinkhole-risk screener: batch point-in-polygon over the USGS national CONUS_Karst compilation (7 layers: carbonate, evaporite, sandstone karst + pseudokarst). Returns in_karst_terrain, karst type, near-surface vs buried, rock unit, and an editorial sinkhole-risk tier per coordinate.
Pricing
from $4.40 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Maloney
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
USGS Karst Sinkhole Risk Screener -- Geohazard by Coordinate
Batch karst and pseudokarst susceptibility screen. Send a list of coordinates, get back a point-in-polygon check against all 7 relevant layers of the USGS CONUS_Karst compilation (the national soluble-rock/karst map behind USGS Open-File Report 2014-1156, Weary & Doctor) -- carbonate karst, evaporite karst, sandstone karst, subsurface evaporite basins, a broad gypsum extent, and two non-carbonate pseudokarst mechanisms (soil piping, volcanic lava tubes).
Each asset gets a plain-English risk note, a sinkhole_risk_context tier
(Elevated / Moderate / None mapped), a geotech_phase1_flag for due-diligence
checklists, and -- new in v1.1 -- the full geologic detail behind the
verdict: the USGS Exposure code, the overburden description, lithology,
rock unit and age, climate regime, evaporite depth and thickness, and a
risk_basis audit trail naming every layer and USGS FID that contributed.
Be honest about what this is: this is a regional geology susceptibility
screen, not a site-specific sinkhole prediction, a geotechnical
investigation, or an insurance/engineering determination. USGS karst polygons
are drawn at state/formation scale. A "clear" result does not rule out an
undocumented local sinkhole. A "hit" does not mean collapse is imminent. Every
row carries a disclaimer field saying exactly that.
What v1.1 changed, and why it matters
v1.1 is a hardening pass. Nothing was removed or renamed and the price is unchanged; every change is either a new field or the removal of an answer the actor was not entitled to give.
- A failed layer can no longer produce a billable "no karst". v1.0 wrapped
the nearby-radius queries in a catch that returned an empty result, so an
upstream outage rendered as a clean, billable "clear, nothing nearby" row
with no error. Every layer now reports its own outcome in a
<layer>_statuscolumn, and a negative answer is only written when all seven layers actually answered. Otherwise the karst fields arenull, which means not checked -- never no karst. - The run fails before it bills if the upstream has drifted. Before any row exists, the actor re-reads the service metadata, the field list and feature count of all 7 layers, probes 7 known-karst coordinates plus one known-clear control, and confirms the response really is WGS84. Any of these failing aborts the run with a message and charges nothing.
- Queries are paginated and truncation is detected. v1.0 sent no
resultRecordCount/resultOffsetand never readexceededTransferLimit. - Broad regional indicators are separated from real karst hits. The USGS
GypsumExtentlayer is a single polygon covering roughly a third of the lower 48 -- Denver, Wichita, Carlsbad and the Oklahoma panhandle all fall inside it. v1.0 reported that identically to a mapped carbonate unit at Mammoth Cave. The newbroad_indicator_only,karst_confidenceandrisk_basisfields let you tell them apart at a glance. - ~40 columns the actor already paid for are now emitted.
outFields=*was fetched on every layer and four columns were used.
Who this is for
- Phase-I ESA / environmental consultants -- karst and sinkhole potential is a standard checklist item (ASTM E1527); this turns a manual USGS map lookup into a batch API call.
- Geotechnical engineers & CRE lenders -- flag a portfolio of sites for
soluble-bedrock foundation risk before ordering a full subsurface
investigation.
exposure_code,overburden_description,evaporite_depth_rangeandevaporite_thicknessare the numbers that drive that call. - Sinkhole/subsidence insurance underwriters (especially FL, TX, MO, PA, TN, KY) -- a fast first-pass screen ahead of full underwriting.
- Land developers & real-estate due diligence teams siting anything from a single pad site to a subdivision.
- AI agents / MCP tool chains doing automated site-diligence workflows.
Example input
{"assets": [{ "lat": 28.54, "lon": -81.38, "label": "Orlando, FL (buried carbonate karst, cover-collapse)" },{ "lat": 37.1869, "lon": -86.1005, "label": "Mammoth Cave, KY (exposed carbonate karst)" },{ "lat": 32.1751, "lon": -104.4437, "label": "Carlsbad, NM (exposed evaporite karst)" },{ "lat": 39.7392, "lon": -104.9903, "label": "Denver, CO (broad gypsum/evaporite extent only)" },{ "lat": 45.5152, "lon": -122.6784, "label": "Portland, OR (clear point, lava-tube pseudokarst nearby)" },{ "lat": 46.8772, "lon": -96.7898, "label": "Fargo, ND (verified clear on all 7 layers)" }],"radiusMiles": 2,"maxAssets": 500}
Output fields (one row per asset -- all 65 declared fields)
The site you asked about
| Field | Meaning |
|---|---|
asset_label | Your label for the site, or asset_N if you did not supply one. |
asset_lat | WGS84 latitude echoed back. |
asset_lon | WGS84 longitude echoed back. |
radius_miles | The nearby-search radius used for this run. |
checked_at | ISO 8601 timestamp of the run. |
The verdict
| Field | Meaning |
|---|---|
in_karst_terrain | TRUE if the exact coordinate falls inside a mapped karst/pseudokarst polygon. FALSE only when all 7 layers answered and none matched. null = not checked, never "no karst". |
sinkhole_risk_context | Editorial tier: Elevated (soluble rock at/near surface), Moderate (karst/pseudokarst present but buried, regional, or non-carbonate), None mapped. Null when the screen was incomplete. |
geotech_phase1_flag | TRUE when this site should be a karst/sinkhole line item in Phase-I due diligence. Mirrors in_karst_terrain. |
primary_karst_class | Machine key of the highest-severity matched layer: carbonate, evaporite, sandstone_karst, evaporite_basin, gypsum_extent, piping_pseudokarst, volcanic_pseudokarst. |
primary_karst_label | Human-readable name of that layer. |
layers_matched | Every karst/pseudokarst layer whose polygon contains this coordinate, semicolon separated. |
layers_matched_count | Count of distinct layers hit. |
all_karst_classes | The same set as machine keys -- the filterable companion to layers_matched. |
pseudokarst_flag | TRUE if a hit came from soil-piping or lava-tube pseudokarst rather than true soluble-rock karst. |
soluble_rock_karst_flag | TRUE if at least one true soluble-rock karst layer matched (carbonate / evaporite / sandstone karst). |
broad_indicator_only | TRUE when the ONLY basis for the hit is a broad regional layer (the single nationwide GypsumExtent polygon, or a basin-scale EvapBasins polygon) rather than a mapped karst unit. |
karst_mechanism | The physical process implied: surface_dissolution, cover_collapse, deep_evaporite_dissolution_subsidence, soil_piping, lava_tube_collapse, broad_regional_evaporite_indicator. |
karst_confidence | How precisely the driving layer locates the hazard -- low for the nationwide gypsum extent and basin-scale polygons, moderate for a mapped geologic unit. Never high; this is a regional screen. |
risk_basis | Audit trail: which layer drove the verdict, plus layer id, USGS FID, indicator-vs-unit, Exposure code and unit name for every contributing layer. |
note | Plain-English one-line summary. |
The geology behind it
| Field | Meaning |
|---|---|
near_surface | TRUE = soluble rock at/near the land surface. FALSE = buried under insoluble cover. Null when not applicable. |
exposure_code | Authoritative USGS Exposure code: E, B1, B2, B3. The letters are not a depth ranking -- B3 (50 ft or less of glacial cover) is shallower than B1 (less than 300 ft of insoluble sediment). |
exposure_description | Plain-English decode of exposure_code. |
overburden_description | The insoluble cover described by the USGS record, e.g. "Buried under <300 ft of insoluble sediments". |
karst_type_detail | The raw USGS KARST_TYPE description (or DESCRIPT / basin summary for the non-KARST_TYPE layers). |
induration | Consolidated or Unconsolidated. Unconsolidated calcareous sediment behaves very differently from consolidated limestone. |
climate | USGS climate regime, dry or humid -- a control on dissolution rate. Reported verbatim; the source occasionally disagrees with local expectation. |
rock_types | ROCKTYPE1-3 for the primary hit, comma separated. |
lithology_class | Coarse lithology: carbonate, evaporite, sandstone, volcanic, or a mixed combination. Evaporite dissolves orders of magnitude faster than carbonate. |
rock_unit | Named geologic unit or formation for the primary hit. |
unit_age | Geologic age of that unit. |
mapped_state | US state abbreviation carried by the source polygon. |
ecoregion_l3 | EPA Level-III ecoregion name. |
unit_link | USGS SGMC unit key. |
unit_source_url | USGS mrdata page for the mapped unit. |
unit_comments | USGS free-text comment. Sparse (about 1.4% of records) but often names the karst feature itself -- "Carlsbad Caverns", "Lava Beds National Monument", "Kutz Canyon piping caves". |
primary_feature_id | USGS FID of the exact polygon that drove the verdict. |
Subsurface evaporite basin (when EvapBasins matched)
| Field | Meaning |
|---|---|
evaporite_basin_name | Named basin, e.g. "Floridan shelf", "Permian Basin". |
evaporite_formation | Named evaporite-bearing formation. |
evaporite_formation_age | Its geologic age. |
evaporite_depth_range | Published depth range, e.g. "0-700 m". |
evaporite_thickness | Published thickness, e.g. "300-600 m". |
evaporite_lithology | Evaporite minerals present, e.g. "halite, anhydrite, gypsum". |
Nearby karst (only when the exact coordinate is clear)
| Field | Meaning |
|---|---|
nearby_karst_within_radius | TRUE if mapped karst falls within radiusMiles of a clear point -- catches near-boundary sites. null if the radius search could not be completed. |
nearby_karst_types | Labels of the karst layers found within the radius. |
nearest_karst_bound_miles | An honest upper bound on the distance to the nearest mapped karst, found by halving the radius while something still intersects. A bound, not a measured distance. |
nearby_screen_status | complete / partial / failed / not_applicable / not_checked. |
nearby_layers_unavailable | Any layer that failed the radius query. |
Did the screen actually run? (the null-vs-false contract)
| Field | Meaning |
|---|---|
carbonate_status | Outcome of the Carbonates48 query: ok / unavailable / not_checked. |
evaporite_status | Outcome of the Evaporites48 query. |
sandstone_karst_status | Outcome of the SandstoneKarst48 query. |
evaporite_basin_status | Outcome of the EvapBasins query. |
gypsum_extent_status | Outcome of the GypsumExtent query. |
piping_pseudokarst_status | Outcome of the Piping48 query. |
volcanic_pseudokarst_status | Outcome of the Volcanics48 query. |
screen_status | complete (all 7 answered) / partial / failed. |
screen_complete | TRUE only when all 7 layers answered. |
layers_screened_count | Always 7 (layer 0 is a glacial-extent polyline and is excluded). |
layers_screened_ok_count | How many of the 7 actually answered. |
layers_unavailable | Names of any layer that failed; null when all answered. |
result_truncated | TRUE if an ArcGIS page still reported exceededTransferLimit after pagination. Normally false. |
error | Per-asset error or partial-screen explanation; null when OK. |
Provenance
| Field | Meaning |
|---|---|
disclaimer | The standing susceptibility-screen caveat. |
source_url | The USGS CONUS_Karst FeatureServer used. |
data_vintage | The USGS publication behind the compilation and its update posture. |
Failure modes -- what a red run and a null field mean
| You see | It means |
|---|---|
| Run FAILED with "upstream drift detected" | A preflight check caught the USGS service returning something it should not -- a missing or renamed layer, a feature count outside its expected band, a known-karst coordinate that stopped matching, a dropped spatial filter, or a projected (Web Mercator) response. Nothing was emitted and nothing was billed. |
| Run FAILED with "preflight could not be completed" | The USGS ArcGIS service is unreachable. Nothing was emitted or billed. |
| Run FAILED with "All N asset(s) failed to produce a karst verdict" | Every asset either had an invalid coordinate or hit a total layer outage. Rather than bill you for rows that assert nothing, the run fails. |
Row with screen_status: "partial" and null karst fields | Some layers answered and some did not. The layers that answered found nothing, but that is not a clear result. Re-run the asset. |
Row with nearby_karst_within_radius: null | The point-in-polygon answer above it is complete and valid, but the radius search could not be completed. |
in_karst_terrain: false with screen_status: "complete" | A genuine, verified negative -- all 7 layers answered and none matched. |
The design rule throughout: null means not checked; false means checked
and negative. They are never interchangeable.
Use as an MCP tool
This actor is Pay-Per-Event priced on the automatic Result event, which makes
it directly callable by AI agents (Claude, Cursor, etc.) via mcp.apify.com.
Field-level output descriptions are written so an agent can reason about
sinkhole_risk_context, broad_indicator_only, karst_mechanism and
geotech_phase1_flag without extra prompting. The screen_status and
<layer>_status columns exist specifically so an agent can tell a verified
negative from an unanswered question and decide whether to retry -- useful as
a grounding tool in a larger site-diligence or underwriting agent.
Pricing
Pay-Per-Event on the automatic Result event: $8 per 1,000 result rows (one row per screened asset), with the standard graduated paid-plan discounts. A clear site costs the same as a hit -- you are paying for the answer, not the alarm. Rows that could not be answered are not emitted at all when no asset could be answered, so a total upstream outage bills nothing.
Related actors (same coordinates, same pipeline)
- usgs-bedrock-geology-lithology-screener -- the full USGS SGMC bedrock unit, lithology hierarchy and NOA/asbestos screen. The natural companion: this actor tells you karst, that one tells you what the rock is.
- usgs-landslide-proximity-screener -- mapped landslide deposits and susceptibility at the same coordinate.
- usgs-seismic-design-screener -- ASCE 7 seismic design parameters, including the PGA_M needed for liquefaction screening.
- site-due-diligence-bundle -- 20 environmental and geotechnical layers for one coordinate in one call, with a composite site score. Karst is one of them.
FAQ
Does this predict an actual sinkhole at my address? No. It screens against a national, regional-scale geologic compilation. Use it to triage which sites need a real geotechnical/karst investigation, not as a substitute for one.
Why does Orlando, FL come back "Moderate" instead of "Elevated" when
Florida is famous for sinkholes?
Because the USGS map classifies much of central Florida's carbonate bedrock
as buried under insoluble sediment -- exposure_code B1, cover-collapse
country -- not exposed at the surface. Buried soluble rock still carries real
subsidence risk; it is just a different mechanism (cover_collapse vs
surface_dissolution) than bare, near-surface carbonate karst in places like
the Kentucky karst belt, which this actor scores Elevated.
Denver comes back as a hit. Is that right?
Yes, and it is worth understanding. Denver falls inside the USGS
GypsumExtent layer -- a single nationwide polygon marking the greater extent
of gypsum and other evaporite deposits, which covers roughly a third of the
lower 48. That is a genuine regional indicator, not an error, but it is a much
weaker signal than a mapped karst unit. The row says so: broad_indicator_only
is TRUE, karst_confidence is low, and risk_basis names the layer.
What counts as "pseudokarst"?
Terrain that behaves like karst (collapse-prone voids) but is not dissolved
soluble rock -- soil piping in non-carbonate sediments, and lava tubes in
volcanic terrain. Flagged separately via pseudokarst_flag.
Does this cover Alaska or Hawaii?
No -- the USGS CONUS_Karst compilation is CONUS-only. A non-CONUS coordinate
returns a valid None mapped clear row, not an error.
Why did my run fail instead of returning zero rows? Because a broken screen and a genuinely clear site look identical in a dataset of zeros. If the upstream has drifted or every layer is down, this actor fails loudly and bills nothing rather than handing you a confident "no karst hazard". See the failure-modes table above.
What does a "clear" result cost? The same as a hit -- billing is the automatic Result event per pushed row. An unanswerable run costs nothing at all.