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.
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| analysis-run | Full 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 Point | Source | Example |
|---|---|---|
| 📊 Composite Risk Score | Weighted average of 4 dimensions | 68 |
| 🏷️ Risk Verdict | Scoring thresholds | HIGH_RISK |
| ☣️ Water Vulnerability Score | OpenAQ + Federal Register + Data.gov | 72 (HIGH) |
| 🏗️ Infrastructure Risk Score | USGS + FEMA + NOAA | 55 (AGING) |
| ☀️ Drought & Climate Score | NOAA + World Bank | 35 (STRESSED) |
| 💸 Affordability Score | CFPB + BLS + World Bank | 58 (STRESSED) |
| ⚠️ Risk Signals | All 4 scoring models | "5 contaminant regulations — MCL impact" |
| 📋 Recommendations | Threshold-triggered | "Upgrade treatment capabilities" |
| 🔬 Contaminant Alert Count | Federal Register | 5 |
| 🌊 Seismic Risk Sub-score | USGS M4.0+ events | 6 |
| 🌧️ Disaster Exposure Sub-score | FEMA flood/hurricane history | 24 |
| 📍 Metadata | Run config | location, 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: falseto 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
- Enter a location — Type any US city, county, or region name into the
locationfield. Examples:"Phoenix Arizona","Jackson Mississippi","Harris County Texas","Navajo Nation". This is the search query sent to all 9 data sources. - Optionally name the utility — Enter a specific utility name in the
utilityNamefield (e.g.,"Phoenix Water Services"). If left blank, the location string is used as the system name in the report. - Choose climate data — Leave
includeClimatechecked (default) to include NOAA weather and World Bank water stress data. Uncheck it for faster runs when you only need contamination and infrastructure scoring. - Run the actor — Click "Start" and wait approximately 60-90 seconds for all parallel data source calls to complete.
- 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
location | string | Yes | — | City, county, region, or water system name sent to all data sources (e.g., "Flint Michigan", "Los Angeles County") |
utilityName | string | No | — | Optional specific utility name. If omitted, location is used as the system identifier in the report output |
includeClimate | boolean | No | true | Include 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: falsefor 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
utilityNameto 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
| Field | Type | Description |
|---|---|---|
system | string | Name used to identify the water system in the report (utility name or location) |
compositeScore | number | Weighted composite risk score 0-100 (higher = greater risk) |
verdict | string | Five-tier verdict: LOW_RISK, MANAGEABLE, ELEVATED, HIGH_RISK, CRITICAL |
waterVulnerability.score | number | Contamination vulnerability sub-score 0-100 |
waterVulnerability.contaminantAlerts | number | Count of Federal Register contaminant regulatory actions found |
waterVulnerability.airQualityImpact | number | Air quality pollution contribution to vulnerability (0-25) |
waterVulnerability.environmentalRisk | number | Compound environmental risk score (0-20) |
waterVulnerability.riskLevel | string | LOW, MODERATE, ELEVATED, HIGH, or CRITICAL |
waterVulnerability.signals | string[] | Human-readable signals from contaminant and air quality analysis |
infrastructure.score | number | Infrastructure risk sub-score 0-100 |
infrastructure.seismicRisk | number | Seismic contribution to infrastructure risk (0-30) |
infrastructure.disasterExposure | number | FEMA disaster history contribution (0-30) |
infrastructure.climateStress | number | NOAA weather alert contribution (0-25) |
infrastructure.riskLevel | string | MODERN, ADEQUATE, AGING, DETERIORATING, or FAILING |
infrastructure.signals | string[] | Signals from earthquake, disaster, and weather data |
droughtClimate.score | number | Drought and climate stress sub-score 0-100 |
droughtClimate.droughtAlerts | number | Count of NOAA drought alert events |
droughtClimate.heatEvents | number | Count of NOAA heat/excessive heat events |
droughtClimate.waterStressLevel | string | ABUNDANT, ADEQUATE, STRESSED, SCARCE, or EMERGENCY |
droughtClimate.signals | string[] | Signals from drought, heat, and fire weather analysis |
affordability.score | number | Affordability stress sub-score 0-100 |
affordability.complaints | number | Total CFPB billing and debt complaints found |
affordability.economicStress | number | BLS economic indicator contribution to affordability score (0-30) |
affordability.affordabilityLevel | string | AFFORDABLE, MANAGEABLE, STRESSED, UNAFFORDABLE, or CRISIS |
affordability.signals | string[] | Signals from complaints, unemployment, inflation, and poverty data |
allSignals | string[] | Combined signal list from all four scoring dimensions |
recommendations | string[] | Threshold-triggered actionable recommendations (up to 6) |
metadata.location | string | Location string provided as input |
metadata.utilityName | string | null | Utility name if provided, otherwise null |
metadata.includeClimate | boolean | Whether NOAA and World Bank sources were included |
metadata.actorsCalled | string[] | List of all sub-actor names called during the run |
metadata.generatedAt | string | ISO 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.
| Scenario | Reports | Cost per report | Total cost |
|---|---|---|---|
| Quick test | 1 | $0.10 | $0.10 |
| Small batch | 10 | $0.10 | $1.00 |
| Medium batch | 50 | $0.10 | $5.00 |
| Large batch | 200 | $0.10 | $20.00 |
| Enterprise | 1,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
-
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. -
Run with
includeClimate: truefor 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. -
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.
-
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.
-
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.
-
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.
-
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
| Actor | How to combine |
|---|---|
| Company Deep Research | Run after a HIGH_RISK verdict to generate a full financial and governance profile of the utility operator or municipal issuer |
| Federal Contract Intelligence | Identify federal water infrastructure grants and contracts awarded to utilities in your target location to understand capital investment trajectory |
| Website Change Monitor | Monitor a utility's public-facing Consumer Confidence Report page for annual quality report updates |
| CFPB Consumer Complaints | Pull the raw CFPB complaint feed for a region to analyze billing complaint narratives in detail beyond the aggregate score |
| Trustpilot Review Analyzer | Cross-reference public customer sentiment about a utility with the affordability score for a more complete picture of community trust |
| B2B Lead Qualifier | Score water technology vendors serving utilities in high-risk regions to identify sales opportunities in the water treatment market |
| Multi-Review Analyzer | Aggregate 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
actorsCalledmetadata 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:
- Go to Account Settings > Privacy
- 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
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
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.
Related actors
Bulk Email Verifier
Verify email deliverability at scale. MX record validation, SMTP mailbox checks, disposable and role-based detection, catch-all flagging, and confidence scoring. No external API costs.
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Website Tech Stack Detector
Detect 100+ web technologies on any website. Identifies CMS, frameworks, analytics, marketing tools, chat widgets, CDNs, payment systems, hosting, and more. Batch-analyze multiple sites with version detection and confidence scoring.
Ready to try Water System Risk Report?
Start for free on Apify. No credit card required.
Open on Apify Store