USGS Karst Sinkhole Risk Screener — Geohazard by Coordinate avatar

USGS Karst Sinkhole Risk Screener — Geohazard by Coordinate

Pricing

from $4.40 / 1,000 results

Go to Apify Store
USGS Karst Sinkhole Risk Screener — Geohazard by Coordinate

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

Kyle Maloney

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

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>_status column, and a negative answer is only written when all seven layers actually answered. Otherwise the karst fields are null, 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/resultOffset and never read exceededTransferLimit.
  • Broad regional indicators are separated from real karst hits. The USGS GypsumExtent layer 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 new broad_indicator_only, karst_confidence and risk_basis fields 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_range and evaporite_thickness are 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

FieldMeaning
asset_labelYour label for the site, or asset_N if you did not supply one.
asset_latWGS84 latitude echoed back.
asset_lonWGS84 longitude echoed back.
radius_milesThe nearby-search radius used for this run.
checked_atISO 8601 timestamp of the run.

The verdict

FieldMeaning
in_karst_terrainTRUE 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_contextEditorial 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_flagTRUE when this site should be a karst/sinkhole line item in Phase-I due diligence. Mirrors in_karst_terrain.
primary_karst_classMachine key of the highest-severity matched layer: carbonate, evaporite, sandstone_karst, evaporite_basin, gypsum_extent, piping_pseudokarst, volcanic_pseudokarst.
primary_karst_labelHuman-readable name of that layer.
layers_matchedEvery karst/pseudokarst layer whose polygon contains this coordinate, semicolon separated.
layers_matched_countCount of distinct layers hit.
all_karst_classesThe same set as machine keys -- the filterable companion to layers_matched.
pseudokarst_flagTRUE if a hit came from soil-piping or lava-tube pseudokarst rather than true soluble-rock karst.
soluble_rock_karst_flagTRUE if at least one true soluble-rock karst layer matched (carbonate / evaporite / sandstone karst).
broad_indicator_onlyTRUE 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_mechanismThe physical process implied: surface_dissolution, cover_collapse, deep_evaporite_dissolution_subsidence, soil_piping, lava_tube_collapse, broad_regional_evaporite_indicator.
karst_confidenceHow 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_basisAudit trail: which layer drove the verdict, plus layer id, USGS FID, indicator-vs-unit, Exposure code and unit name for every contributing layer.
notePlain-English one-line summary.

The geology behind it

FieldMeaning
near_surfaceTRUE = soluble rock at/near the land surface. FALSE = buried under insoluble cover. Null when not applicable.
exposure_codeAuthoritative 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_descriptionPlain-English decode of exposure_code.
overburden_descriptionThe insoluble cover described by the USGS record, e.g. "Buried under <300 ft of insoluble sediments".
karst_type_detailThe raw USGS KARST_TYPE description (or DESCRIPT / basin summary for the non-KARST_TYPE layers).
indurationConsolidated or Unconsolidated. Unconsolidated calcareous sediment behaves very differently from consolidated limestone.
climateUSGS climate regime, dry or humid -- a control on dissolution rate. Reported verbatim; the source occasionally disagrees with local expectation.
rock_typesROCKTYPE1-3 for the primary hit, comma separated.
lithology_classCoarse lithology: carbonate, evaporite, sandstone, volcanic, or a mixed combination. Evaporite dissolves orders of magnitude faster than carbonate.
rock_unitNamed geologic unit or formation for the primary hit.
unit_ageGeologic age of that unit.
mapped_stateUS state abbreviation carried by the source polygon.
ecoregion_l3EPA Level-III ecoregion name.
unit_linkUSGS SGMC unit key.
unit_source_urlUSGS mrdata page for the mapped unit.
unit_commentsUSGS 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_idUSGS FID of the exact polygon that drove the verdict.

Subsurface evaporite basin (when EvapBasins matched)

FieldMeaning
evaporite_basin_nameNamed basin, e.g. "Floridan shelf", "Permian Basin".
evaporite_formationNamed evaporite-bearing formation.
evaporite_formation_ageIts geologic age.
evaporite_depth_rangePublished depth range, e.g. "0-700 m".
evaporite_thicknessPublished thickness, e.g. "300-600 m".
evaporite_lithologyEvaporite minerals present, e.g. "halite, anhydrite, gypsum".

Nearby karst (only when the exact coordinate is clear)

FieldMeaning
nearby_karst_within_radiusTRUE 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_typesLabels of the karst layers found within the radius.
nearest_karst_bound_milesAn 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_statuscomplete / partial / failed / not_applicable / not_checked.
nearby_layers_unavailableAny layer that failed the radius query.

Did the screen actually run? (the null-vs-false contract)

FieldMeaning
carbonate_statusOutcome of the Carbonates48 query: ok / unavailable / not_checked.
evaporite_statusOutcome of the Evaporites48 query.
sandstone_karst_statusOutcome of the SandstoneKarst48 query.
evaporite_basin_statusOutcome of the EvapBasins query.
gypsum_extent_statusOutcome of the GypsumExtent query.
piping_pseudokarst_statusOutcome of the Piping48 query.
volcanic_pseudokarst_statusOutcome of the Volcanics48 query.
screen_statuscomplete (all 7 answered) / partial / failed.
screen_completeTRUE only when all 7 layers answered.
layers_screened_countAlways 7 (layer 0 is a glacial-extent polyline and is excluded).
layers_screened_ok_countHow many of the 7 actually answered.
layers_unavailableNames of any layer that failed; null when all answered.
result_truncatedTRUE if an ArcGIS page still reported exceededTransferLimit after pagination. Normally false.
errorPer-asset error or partial-screen explanation; null when OK.

Provenance

FieldMeaning
disclaimerThe standing susceptibility-screen caveat.
source_urlThe USGS CONUS_Karst FeatureServer used.
data_vintageThe USGS publication behind the compilation and its update posture.

Failure modes -- what a red run and a null field mean

You seeIt 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 fieldsSome 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: nullThe 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.

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.