AIDEVELOPER TOOLS

Water System Risk Report

Water system risk report generator for any US city, county, or water utility — no data science background required. Enter a location, and the actor queries 9 government data sources in parallel to produce a composite Water Risk Score (0-100) with a five-tier verdict, dimension breakdowns, and prioritized recommendations.

Try on Apify Store
$0.40per event
0
Users (30d)
0
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.40
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

analysis-runs
Estimated cost:$40.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
analysis-runFull intelligence analysis run$0.40

Example: 100 events = $40.00 · 1,000 events = $400.00

Documentation

Water system risk report generator for any US city, county, or water utility — no data science background required. Enter a location, and the actor queries 9 government data sources in parallel to produce a composite Water Risk Score (0-100) with a five-tier verdict, dimension breakdowns, and prioritized recommendations.

Built for due diligence professionals, public health analysts, real estate teams, and municipal planners who need a structured, repeatable way to evaluate drinking water contamination risk, infrastructure vulnerability, drought stress, and water affordability in one report.

What data can you extract?

Data PointSourceExample
📊 Composite Risk ScoreWeighted average of 4 dimensions68
🏷️ Risk VerdictScoring thresholdsHIGH_RISK
☣️ Water Vulnerability ScoreOpenAQ + Federal Register + Data.gov72 (HIGH)
🏗️ Infrastructure Risk ScoreUSGS + FEMA + NOAA55 (AGING)
☀️ Drought & Climate ScoreNOAA + World Bank35 (STRESSED)
💸 Affordability ScoreCFPB + BLS + World Bank58 (STRESSED)
⚠️ Risk SignalsAll 4 scoring models"5 contaminant regulations — MCL impact"
📋 RecommendationsThreshold-triggered"Upgrade treatment capabilities"
🔬 Contaminant Alert CountFederal Register5
🌊 Seismic Risk Sub-scoreUSGS M4.0+ events6
🌧️ Disaster Exposure Sub-scoreFEMA flood/hurricane history24
📍 MetadataRun configlocation, generatedAt, actorsCalled

Why use Water System Risk Report?

Manually assessing water system risk means pulling data from the EPA Safe Drinking Water Information System, cross-referencing FEMA disaster declarations, querying the Federal Register for Maximum Contaminant Level rules, checking NOAA drought alerts, and correlating all of it with economic stress indicators — a process that takes an experienced analyst 4-8 hours per location. Then you do it again when conditions change.

This actor automates the entire pipeline. It calls 7-9 government data sources in parallel, applies four validated scoring models, and returns a structured risk report in under 90 seconds.

  • Scheduling — run weekly or monthly to track risk trajectory as contamination rules, disaster events, and drought conditions evolve
  • API access — trigger runs from Python, JavaScript, or any HTTP client to integrate risk scores into your existing workflows
  • Proxy rotation — all sub-actor API calls use Apify's managed infrastructure, so you never deal with rate limits or access blocks
  • Monitoring — get Slack or email alerts when a run produces a CRITICAL or HIGH_RISK verdict for locations you track
  • Integrations — push results directly to Google Sheets, HubSpot, Zapier, or Make for reporting and alerting workflows

Features

  • 4-dimensional composite scoring — Water Vulnerability (30%), Infrastructure Risk (25%), Drought/Climate (25%), and Affordability (20%) weighted and summed into a single 0-100 composite score
  • 9 parallel data source calls — OpenAQ air quality, USGS earthquakes, FEMA disasters, NOAA weather alerts, Data.gov water datasets, Federal Register regulations, CFPB consumer complaints, BLS economic data, and World Bank indicators, all called simultaneously via Promise.all
  • 18-contaminant detection — Federal Register regulations are scanned for lead, PFAS (PFOA/PFOS), arsenic, nitrate, bacteria (E. coli, coliform), trihalomethane, chlorine, fluoride, mercury, chromium, radium, uranium, perchlorate, and microplastics
  • Emergency contaminant rule detection — identifies Maximum Contaminant Level (MCL) rule filings and emergency regulatory actions, which score 10 points each in the vulnerability model
  • Seismic infrastructure scoring — USGS earthquake data is parsed for magnitude, with M4.0+ events triggering pipe-rupture risk signals and M6.0+ events generating critical infrastructure damage alerts
  • FEMA flood/disaster exposure — counts disaster declarations by incident type, weighting flood, hurricane, and storm events at 8 points each in the infrastructure model
  • NOAA drought and heat cascade detection — identifies concurrent drought alerts and heat events as compounding water stress, triggering a 15-point long-trend signal
  • CFPB billing complaint analysis — filters complaints by 8 billing keywords (bill, shut off, disconnection, overcharge, rate increase, etc.) to detect water utility affordability stress
  • BLS economic correlation — unemployment above 6% and CPI above 4% trigger economic stress signals that compound the affordability score
  • 5 verdict tiers — LOW_RISK, MANAGEABLE, ELEVATED, HIGH_RISK, CRITICAL — each with a matching sub-dimension verdict scale (e.g., MODERN to FAILING for infrastructure)
  • Threshold-triggered recommendations — six specific recommendations auto-generate when dimension scores cross critical thresholds, covering contamination, infrastructure, drought, affordability, seismic, and treatment capacity
  • Optional climate data toggle — set includeClimate: false to skip NOAA and World Bank sources for faster runs when only contamination and infrastructure data is needed

Use cases for water system risk assessment

Municipal utility capital planning

Water utility managers and city engineers need to justify capital improvement budgets to councils and bond rating agencies. This actor produces a defensible composite risk score across contamination, infrastructure age, climate, and affordability dimensions that can be run quarterly to track trajectory and support prioritized investment decisions. The seismic and FEMA disaster sub-scores are directly relevant to pipe replacement planning in disaster-prone regions.

Real estate and development due diligence

Developers evaluating residential or commercial projects in new markets need to assess whether local water systems pose long-term reliability or regulatory risk. A HIGH_RISK or CRITICAL verdict — particularly one driven by infrastructure deterioration or compounding drought stress — signals material risk to project timelines, ESG reporting obligations, and long-term asset values. Run the actor for any target market before committing to site selection.

Environmental and public health consulting

Consultants advising communities with legacy contamination issues — PFAS, lead pipe replacement programs, industrial runoff — need a baseline risk profile to frame remediation scope and regulatory urgency. The Federal Register contaminant alert count and emergency MCL detection provide a regulatory activity signal that complements direct sampling data, and the affordability dimension helps identify communities least able to fund remediation.

Insurance and bond risk underwriting

Actuaries underwriting water utility revenue bonds or municipal insurance policies need quantified exposure to seismic, flood, drought, and contamination risks. This actor provides a structured, reproducible risk score from authoritative government sources that can be applied at scale across a portfolio of utility clients. The infrastructure sub-scores map directly to common underwriting criteria.

Investigative and public interest research

Journalists, policy researchers, and advocacy organizations tracking drinking water equity can run the actor across dozens of cities and compare composite scores to identify communities facing compounding contamination vulnerability and affordability stress — the combination most associated with water crises like those in Flint and Jackson. The affordability dimension specifically surfaces communities where low income and high billing complaint rates suggest rate-shock risk.

ESG and sustainability due diligence

ESG analysts conducting water stewardship assessments for infrastructure investors, lenders, or corporate supply chain teams can use the composite score as a quantified baseline for water risk exposure. The drought/climate dimension and World Bank water stress indicators align with TCFD physical climate risk disclosure frameworks.

How to generate a water system risk report

  1. Enter a location — Type any US city, county, or region name into the location field. Examples: "Phoenix Arizona", "Jackson Mississippi", "Harris County Texas", "Navajo Nation". This is the search query sent to all 9 data sources.
  2. Optionally name the utility — Enter a specific utility name in the utilityName field (e.g., "Phoenix Water Services"). If left blank, the location string is used as the system name in the report.
  3. Choose climate data — Leave includeClimate checked (default) to include NOAA weather and World Bank water stress data. Uncheck it for faster runs when you only need contamination and infrastructure scoring.
  4. Run the actor — Click "Start" and wait approximately 60-90 seconds for all parallel data source calls to complete.
  5. Download your report — Open the Dataset tab to view results, or download as JSON, CSV, or Excel. Each run produces one report record per location.

Input parameters

ParameterTypeRequiredDefaultDescription
locationstringYesCity, county, region, or water system name sent to all data sources (e.g., "Flint Michigan", "Los Angeles County")
utilityNamestringNoOptional specific utility name. If omitted, location is used as the system identifier in the report output
includeClimatebooleanNotrueInclude NOAA weather alerts and World Bank climate indicators. Set to false to skip 2 of 9 sources for faster runs

Input examples

Standard city assessment (most common):

{
  "location": "Jackson Mississippi",
  "includeClimate": true
}

Named utility with climate data:

{
  "location": "Newark New Jersey",
  "utilityName": "Newark Watershed Conservation and Development Corp",
  "includeClimate": true
}

Fast run — contamination and infrastructure only:

{
  "location": "Navajo Nation Arizona",
  "includeClimate": false
}

Input tips

  • Be specific with location names — include the state name to disambiguate (e.g., "Springfield Illinois" not "Springfield"). This improves match quality across all 9 data sources.
  • Use includeClimate: false for batch runs — if you are scoring 20+ locations quickly, disabling climate data reduces run time by roughly 20-30 seconds per run and cuts costs slightly.
  • For county-level assessment, use county format — e.g., "Harris County Texas" or "Maricopa County Arizona" rather than a city name, to capture broader infrastructure and disaster history.
  • Match utilityName to the official EPA SDWIS name — for the most coherent report labeling, especially when sharing results with regulators or stakeholders.

Output example

{
  "system": "Jackson Mississippi",
  "compositeScore": 74,
  "verdict": "HIGH_RISK",
  "waterVulnerability": {
    "score": 78,
    "contaminantAlerts": 6,
    "airQualityImpact": 18,
    "environmentalRisk": 20,
    "riskLevel": "HIGH",
    "signals": [
      "2 emergency contaminant rules — new MCL standards impact",
      "6 contaminant-related regulatory actions"
    ]
  },
  "infrastructure": {
    "score": 62,
    "seismicRisk": 4,
    "disasterExposure": 30,
    "climateStress": 20,
    "riskLevel": "DETERIORATING",
    "signals": [
      "4 flood/storm disasters — water treatment plant vulnerability",
      "3 flood alerts — treatment plant overwhelm risk"
    ]
  },
  "droughtClimate": {
    "score": 48,
    "droughtAlerts": 2,
    "heatEvents": 4,
    "waterStressLevel": "STRESSED",
    "signals": [
      "2 active drought conditions — water supply crisis risk",
      "4 heat events — increased water demand + evaporation",
      "Concurrent drought + heat — compounding water stress"
    ]
  },
  "affordability": {
    "score": 65,
    "complaints": 14,
    "economicStress": 20,
    "affordabilityLevel": "UNAFFORDABLE",
    "signals": [
      "9 billing complaints — rate affordability concern",
      "Unemployment 8.1% — reduced ability to pay utility bills",
      "High poverty rate — water affordability crisis risk"
    ]
  },
  "allSignals": [
    "2 emergency contaminant rules — new MCL standards impact",
    "6 contaminant-related regulatory actions",
    "4 flood/storm disasters — water treatment plant vulnerability",
    "3 flood alerts — treatment plant overwhelm risk",
    "2 active drought conditions — water supply crisis risk",
    "4 heat events — increased water demand + evaporation",
    "Concurrent drought + heat — compounding water stress",
    "9 billing complaints — rate affordability concern",
    "Unemployment 8.1% — reduced ability to pay utility bills",
    "High poverty rate — water affordability crisis risk"
  ],
  "recommendations": [
    "Multiple contaminant regulations — upgrade treatment capabilities",
    "Failing infrastructure — capital improvement plan urgently needed",
    "Affordability crisis — low-income assistance programs needed"
  ],
  "metadata": {
    "location": "Jackson Mississippi",
    "utilityName": null,
    "includeClimate": true,
    "actorsCalled": [
      "openaq-air-quality",
      "usgs-earthquake-search",
      "fema-disaster-search",
      "datagov-dataset-search",
      "federal-register-search",
      "cfpb-consumer-complaints",
      "bls-economic-data",
      "noaa-weather-alerts",
      "world-bank-indicators"
    ],
    "generatedAt": "2026-03-20T11:22:00.000Z"
  }
}

Output fields

FieldTypeDescription
systemstringName used to identify the water system in the report (utility name or location)
compositeScorenumberWeighted composite risk score 0-100 (higher = greater risk)
verdictstringFive-tier verdict: LOW_RISK, MANAGEABLE, ELEVATED, HIGH_RISK, CRITICAL
waterVulnerability.scorenumberContamination vulnerability sub-score 0-100
waterVulnerability.contaminantAlertsnumberCount of Federal Register contaminant regulatory actions found
waterVulnerability.airQualityImpactnumberAir quality pollution contribution to vulnerability (0-25)
waterVulnerability.environmentalRisknumberCompound environmental risk score (0-20)
waterVulnerability.riskLevelstringLOW, MODERATE, ELEVATED, HIGH, or CRITICAL
waterVulnerability.signalsstring[]Human-readable signals from contaminant and air quality analysis
infrastructure.scorenumberInfrastructure risk sub-score 0-100
infrastructure.seismicRisknumberSeismic contribution to infrastructure risk (0-30)
infrastructure.disasterExposurenumberFEMA disaster history contribution (0-30)
infrastructure.climateStressnumberNOAA weather alert contribution (0-25)
infrastructure.riskLevelstringMODERN, ADEQUATE, AGING, DETERIORATING, or FAILING
infrastructure.signalsstring[]Signals from earthquake, disaster, and weather data
droughtClimate.scorenumberDrought and climate stress sub-score 0-100
droughtClimate.droughtAlertsnumberCount of NOAA drought alert events
droughtClimate.heatEventsnumberCount of NOAA heat/excessive heat events
droughtClimate.waterStressLevelstringABUNDANT, ADEQUATE, STRESSED, SCARCE, or EMERGENCY
droughtClimate.signalsstring[]Signals from drought, heat, and fire weather analysis
affordability.scorenumberAffordability stress sub-score 0-100
affordability.complaintsnumberTotal CFPB billing and debt complaints found
affordability.economicStressnumberBLS economic indicator contribution to affordability score (0-30)
affordability.affordabilityLevelstringAFFORDABLE, MANAGEABLE, STRESSED, UNAFFORDABLE, or CRISIS
affordability.signalsstring[]Signals from complaints, unemployment, inflation, and poverty data
allSignalsstring[]Combined signal list from all four scoring dimensions
recommendationsstring[]Threshold-triggered actionable recommendations (up to 6)
metadata.locationstringLocation string provided as input
metadata.utilityNamestring | nullUtility name if provided, otherwise null
metadata.includeClimatebooleanWhether NOAA and World Bank sources were included
metadata.actorsCalledstring[]List of all sub-actor names called during the run
metadata.generatedAtstringISO 8601 timestamp of report generation

How much does it cost to generate a water system risk report?

Water System Risk Report uses pay-per-run pricing — you pay approximately $0.10 per report. Platform compute costs are included.

ScenarioReportsCost per reportTotal cost
Quick test1$0.10$0.10
Small batch10$0.10$1.00
Medium batch50$0.10$5.00
Large batch200$0.10$20.00
Enterprise1,000$0.10$100.00

You can set a maximum spending limit per run to control costs. The actor stops when your budget is reached.

Compare this to water risk consulting engagements at $2,000-10,000 per location report, or environmental data platforms charging $500-2,000/month for similar data access. Most users running 50-200 assessments per month spend $5-20/month with no subscription commitment. Apify's free tier includes $5 of monthly credits, enough for approximately 50 test reports.

Water system risk assessment using the API

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/water-system-risk-report").call(run_input={
    "location": "Phoenix Arizona",
    "utilityName": "City of Phoenix Water Services",
    "includeClimate": True
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"System: {item['system']}")
    print(f"Composite Score: {item['compositeScore']} — {item['verdict']}")
    print(f"Water Vulnerability: {item['waterVulnerability']['riskLevel']}")
    print(f"Infrastructure: {item['infrastructure']['riskLevel']}")
    print(f"Drought/Climate: {item['droughtClimate']['waterStressLevel']}")
    print(f"Affordability: {item['affordability']['affordabilityLevel']}")
    for rec in item.get("recommendations", []):
        print(f"  Recommendation: {rec}")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/water-system-risk-report").call({
    location: "Phoenix Arizona",
    utilityName: "City of Phoenix Water Services",
    includeClimate: true
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    console.log(`System: ${item.system}`);
    console.log(`Score: ${item.compositeScore} — ${item.verdict}`);
    console.log(`Signals: ${item.allSignals.length} risk signals detected`);
    item.recommendations.forEach(rec => console.log(`  > ${rec}`));
}

cURL

# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~water-system-risk-report/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "location": "Phoenix Arizona",
    "utilityName": "City of Phoenix Water Services",
    "includeClimate": true
  }'

# Fetch results (replace DATASET_ID from the run response above)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"

How Water System Risk Report works

Phase 1 — Parallel data collection from 9 government sources

When a run starts, the actor builds a list of up to 9 sub-actor calls based on the input. All calls are dispatched simultaneously using Promise.all, so the total wait time equals the slowest single source call rather than the sum of all calls. Each sub-actor receives the location string as its query and returns up to 1,000 items. The core 7 sources always run: OpenAQ (air quality measurements), USGS (earthquake events), FEMA (disaster declarations), Data.gov (water dataset catalog), Federal Register (regulatory documents), CFPB (consumer complaints), and BLS (economic series). When includeClimate is true, NOAA weather alerts and World Bank indicators are added. Each sub-actor call is given a 120-second timeout and 512 MB memory allocation.

Phase 2 — Four independent scoring models

Results from the parallel fetch are passed into four scoring functions, each operating on a specific subset of the collected data:

Water Vulnerability uses OpenAQ AQI values to detect industrial pollution proxy signals (extreme AQI events above 200 score 8 points each), then scans Federal Register documents for all 18 contaminant keywords, applying a 10-point bonus for documents containing "emergency", "maximum contaminant level", or "MCL". Data.gov datasets are filtered for water-related titles and violation datasets. The four sub-scores (air quality, regulatory, dataset, compound) sum to a maximum of 100, then weight at 30% in the composite.

Infrastructure Risk processes USGS earthquake records by magnitude, treating M4.0+ events as significant (10 points each) and M6.0+ as critical infrastructure damage events. FEMA disaster records are classified by incident type, with flood and hurricane events weighted at 8 points each. NOAA alerts are categorized as drought, flood, or extreme weather, with drought alerts scoring 6 points each. A compound bonus of up to 15 points activates when both seismic and flood exposure are present simultaneously. This dimension weights at 25%.

Drought and Climate focuses on NOAA alert events, scoring drought alerts at 10 points, heat events at 5 points, and fire weather alerts at 4 points. World Bank indicators are scanned for precipitation and freshwater keywords, with annual precipitation below 500mm triggering a scarcity signal. A long-trend compound score of up to 30 points activates when drought and heat events co-occur, and further increases when World Bank data corroborates stress conditions. This dimension weights at 25%.

Affordability filters CFPB complaints using 8 billing-related keyword patterns, then separately counts debt collection complaints. BLS economic series are evaluated for unemployment above 6% and CPI above 4%. World Bank poverty indicators above 15% and Gini coefficients above 40 add poverty risk points. A compound stress score adds up to 15 points when billing complaints and economic stress signals co-occur. This dimension weights at 20%.

Phase 3 — Composite scoring, verdicts, and recommendations

The four dimension scores are combined using the weighted formula: composite = vulnerability×0.30 + infrastructure×0.25 + drought×0.25 + affordability×0.20. The result is rounded to an integer and mapped to a five-tier verdict (LOW_RISK below 20, MANAGEABLE 20-39, ELEVATED 40-59, HIGH_RISK 60-79, CRITICAL 80+). All signals from all four dimensions are merged into allSignals. Up to 6 threshold-triggered recommendations are generated based on individual dimension verdict levels and sub-scores crossing critical thresholds. The final report object is pushed to the Apify dataset as a single JSON record.

Tips for best results

  1. Include the state name in every location query. Data.gov, FEMA, and Federal Register searches return cleaner results for "Newark New Jersey" than "Newark" alone. Ambiguous city names will pull data from multiple states.

  2. Run with includeClimate: true for annual or quarterly assessments. The NOAA and World Bank dimensions add substantial signal for locations facing drought, wildfire, or heat stress — particularly in the Western US. For rapid screening of a long list, disable climate to cut 20-30 seconds per run.

  3. Compare composite scores across time, not just locations. Schedule the same location monthly to detect trajectory changes. A system moving from ELEVATED to HIGH_RISK over three months is more actionable than a static snapshot.

  4. Combine with Company Deep Research when assessing a utility as a bond issuer or counterparty. The water risk score provides environmental exposure; the company research adds financial health and governance context.

  5. For rural or tribal systems, use county or region names. Small utilities often lack sufficient CFPB complaint volume to produce meaningful affordability signals. County-level searches surface FEMA and Federal Register data more reliably than utility-specific names.

  6. Treat the recommendations as a triage list, not an audit. Each recommendation flags a threshold breach in one or more data models. They are starting points for deeper investigation, not final determinations. Verify with direct EPA SDWIS data and local utility annual quality reports.

  7. Batch similar locations in sequential runs rather than one at a time. Each run calls 9 sub-actors in parallel internally, so the per-location wall-clock time is already optimized. Running 50 locations one after another is more cost-effective than building a custom parallel pipeline.

Combine with other Apify actors

ActorHow to combine
Company Deep ResearchRun after a HIGH_RISK verdict to generate a full financial and governance profile of the utility operator or municipal issuer
Federal Contract IntelligenceIdentify federal water infrastructure grants and contracts awarded to utilities in your target location to understand capital investment trajectory
Website Change MonitorMonitor a utility's public-facing Consumer Confidence Report page for annual quality report updates
CFPB Consumer ComplaintsPull the raw CFPB complaint feed for a region to analyze billing complaint narratives in detail beyond the aggregate score
Trustpilot Review AnalyzerCross-reference public customer sentiment about a utility with the affordability score for a more complete picture of community trust
B2B Lead QualifierScore water technology vendors serving utilities in high-risk regions to identify sales opportunities in the water treatment market
Multi-Review AnalyzerAggregate community feedback from multiple platforms to supplement the quantitative risk score with qualitative resident experience

Limitations

  • No direct EPA SDWIS integration. The actor does not query the EPA Safe Drinking Water Information System directly. Contamination risk is derived from Federal Register regulatory activity and Data.gov datasets, not from actual violation records or compliance history. For authoritative violation data, cross-reference the output with the EPA's public SDWIS interface.
  • US-centric data sources. All 9 sub-actors draw from US government APIs (FEMA, USGS, Federal Register, CFPB, BLS). The actor is not designed for international water system assessment. World Bank indicators provide some global context but are not geographically matched to local systems.
  • Affordability score is a proxy, not a direct rate analysis. The actor cannot access actual water rate schedules or compare them against income benchmarks. The CFPB complaint volume, unemployment rate, and poverty indicators are proxies that correlate with affordability stress but do not replace a formal affordability analysis using rate-to-income comparisons.
  • Historical data depth varies by source. FEMA disaster search returns recent declarations. USGS earthquake data covers recent seismic activity. The actor does not provide a 10-20 year trend analysis — it reflects current and recent conditions, not historical baselines.
  • Scores reflect data availability, not just risk. Systems with sparse regulatory activity, few disaster declarations, or low complaint volumes may receive low scores because the data sources contain little relevant content — not necessarily because the system is safe. Under-documented rural systems may appear lower-risk than warranted.
  • No water pressure or pipe material data. The actor cannot assess lead pipe inventory, pipe age, or service line material — factors that are critical for lead contamination risk. For pipe material analysis, use EPA LCRR compliance data directly.
  • Sub-actor dependency. If one or more of the 9 sub-actors is unavailable or rate-limited during a run, that dimension returns an empty array and contributes zero to the corresponding score. The report still produces a composite score, but affected dimensions will be underweighted. The actorsCalled metadata field lists which sources were queried.
  • Not a regulatory compliance tool. Risk verdicts and recommendations are informational. They do not constitute regulatory determinations, legal opinions, or engineering assessments. Do not use the output as a substitute for certified water quality testing or licensed engineering evaluation.

Integrations

  • Zapier — trigger an automated alert workflow when a location returns a HIGH_RISK or CRITICAL verdict, sending notifications to stakeholders or creating tasks in project management tools
  • Make — build multi-step automations that run water risk reports on a schedule, filter by verdict tier, and route results to different teams or dashboards
  • Google Sheets — export composite scores and sub-dimension scores to a shared spreadsheet for portfolio tracking and stakeholder reporting
  • Apify API — integrate water risk scoring into Python or JavaScript applications for real-time or batch due diligence workflows
  • Webhooks — receive a POST notification when any run completes, enabling downstream processing in your own infrastructure
  • LangChain / LlamaIndex — feed water risk report output into RAG pipelines or LLM agents to generate natural-language summaries, comparison reports, or regulatory memo drafts

Troubleshooting

The composite score is unexpectedly low for a location I know has water problems. This usually means the data sources returned sparse results for your location query. Try reformatting the location to include the state name and be more specific (e.g., "Flint Michigan" instead of "Flint"). Also check whether the Federal Register or FEMA returned meaningful results by inspecting the allSignals array — an empty or short signals list confirms thin data coverage.

The run completed but the dataset is empty. The location field is required. If it was omitted or blank, the actor logs a warning and exits without pushing data. Confirm your input includes a non-empty location string.

Run time is consistently over 2 minutes. The actor waits for all 9 sub-actors to complete, and the slowest call determines total run time. Temporarily set includeClimate: false to eliminate the NOAA and World Bank calls. If the issue persists, one of the core sub-actors may be experiencing upstream API delays — retry the run or check the Apify status page.

Affordability signals are missing despite known economic stress. The CFPB complaint search uses the location string plus "water utility" as the query. If the region uses a distinct utility name not mentioned in complaint narratives, fewer complaints will match. Try running without a utilityName to see if the generic location query improves complaint retrieval.

Recommendations array is empty. Recommendations only generate when specific dimension scores cross hard thresholds (e.g., infrastructure riskLevel === 'FAILING', affordability affordabilityLevel === 'CRISIS'). A HIGH_RISK composite score can still produce zero recommendations if no individual dimension crosses its specific trigger threshold. Use the allSignals array for a full picture of detected risk signals at any score level.

Responsible use

  • This actor queries only publicly available government data from EPA, FEMA, USGS, NOAA, Federal Register, CFPB, BLS, Data.gov, and World Bank APIs.
  • Risk verdicts and scores are informational tools. They are not regulatory determinations, engineering assessments, or legal opinions.
  • Do not use this actor's output as the sole basis for decisions affecting public health or safety without corroborating primary data and qualified professional review.
  • For guidance on responsible use of public government data, see Apify's guide on web scraping legality.

FAQ

How many locations can I assess in a single run? Each run assesses one location and produces one report record. To compare multiple cities or utilities, run the actor once per location using the API with a loop, or use Apify's scheduled runs to process a list over time. There is no built-in batch mode — one location per run is the intended workflow.

What contaminants does the water system risk report detect? The actor scans Federal Register regulatory documents for 18 contaminant categories: lead, PFAS (PFOA and PFOS), arsenic, nitrate, bacteria (E. coli and coliform), trihalomethane, chlorine, fluoride, mercury, chromium, radium, uranium, perchlorate, and microplastics. Documents referencing Maximum Contaminant Level (MCL) rules or emergency actions score higher than general regulatory mentions.

How accurate is the composite score compared to EPA violation data? The composite score correlates with regulatory activity intensity and environmental stress indicators — it is not a direct translation of EPA violation counts or test result failures. Systems with active Federal Register regulatory proceedings, frequent FEMA disaster declarations, and high CFPB complaint volumes will score higher regardless of whether formal EPA violations have been issued. Use it as a risk signal, not an audit outcome.

How long does a typical water system risk assessment run take? Most runs complete in 60-90 seconds. The actor calls up to 9 sub-actors simultaneously, so total time depends on the slowest single source. Setting includeClimate: false typically reduces run time to 45-70 seconds by eliminating the NOAA and World Bank calls.

Can I schedule this actor to run automatically? Yes. Apify's built-in scheduler lets you run the actor daily, weekly, or monthly for any location. Combine with webhooks or Zapier to alert your team when a verdict changes tier — for example, when a system moves from ELEVATED to HIGH_RISK.

How is this different from paying an environmental consulting firm for a water risk report? A consulting engagement typically costs $2,000-10,000 per location, takes 2-4 weeks, and produces a non-repeatable point-in-time document. This actor costs $0.10 per report, runs in 90 seconds, produces machine-readable structured output, and can be re-run monthly to track trajectory. It uses the same underlying government data sources a consultant would reference, without the labor cost markup. For regulatory compliance or engineering certification, you still need licensed professionals — but for initial screening and portfolio monitoring, this actor is substantially faster and cheaper.

Is it legal to access and use this water risk data? Yes. All data comes from public government APIs — FEMA, USGS, NOAA, Federal Register, CFPB, BLS, Data.gov, and World Bank — which are explicitly designed for public access. There are no terms of service restrictions on using this data for research, analysis, or decision support. See Apify's web scraping legality guide for more context on responsible data use.

What does the infrastructure riskLevel of FAILING actually mean? A FAILING infrastructure verdict means the location's combined seismic exposure, FEMA disaster history, and NOAA climate stress scores summed above 80 out of 100 in the infrastructure model. It signals that the geographic and climate conditions the water system operates under are severe enough to pose material risk of pipe rupture, treatment plant flooding, or capacity failure. It does not mean the pipes have literally failed — it means the stress environment they operate in is at the highest risk tier.

Why does air quality data factor into water contamination risk? Airborne industrial pollutants — particularly PM2.5 — are deposited into surface water sources via precipitation and runoff. Areas with sustained high pollution events (AQI above 200) experience elevated contamination risk in nearby lakes, rivers, and reservoirs that serve as water sources. The OpenAQ air quality dimension acts as an industrial pollution proxy when direct water quality monitoring data is not available through public APIs.

Can I use the output in an ESG or TCFD disclosure report? The output draws from authoritative public government sources and can serve as supporting evidence in ESG water risk disclosures. The drought and climate dimension aligns with TCFD physical climate risk categories. You should cite the specific underlying sources (NOAA, World Bank, FEMA) in any formal disclosure, and note that the composite score represents an analytical synthesis of those sources, not a primary measurement.

What happens if one of the 9 data sources is unavailable during a run? Each sub-actor call is wrapped in an individual try/catch. If a source fails, it returns an empty array and contributes zero to its corresponding scoring dimension. The run continues and produces a composite report based on the sources that did respond. The metadata.actorsCalled field lists which sources were queried, so you can identify if a dimension was affected by a source failure.

Help us improve

If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:

  1. Go to Account Settings > Privacy
  2. Enable Share runs with public Actor creators

This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.

Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations — such as multi-location portfolio monitoring, custom contaminant keyword lists, or integration with internal GIS or asset management systems — reach out through the Apify platform.

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

Get results

Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.

Use cases

Sales Teams

Build targeted lead lists with verified contact data.

Marketing

Research competitors and identify outreach opportunities.

Data Teams

Automate data collection pipelines with scheduled runs.

Developers

Integrate via REST API or use as an MCP tool in AI workflows.

Ready to try Water System Risk Report?

Start for free on Apify. No credit card required.

Open on Apify Store