US Water System & Utility Leads Scraper (EPA SDWIS)
Pricing
from $2.75 / 1,000 water system records
US Water System & Utility Leads Scraper (EPA SDWIS)
Scrape every US public water system from the official EPA SDWIS database: utility name, admin contact, email, phone, address, population served, service connections, owner & source type, plus health-based violations. Filter by state, size & type. B2B water-utility leads + monitoring.
Pricing
from $2.75 / 1,000 water system records
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Extract every public water system in the United States — drinking-water utilities, water districts, municipal systems, mobile-home parks, HOAs, schools and more — straight from the official EPA SDWIS (Safe Drinking Water Information System) database. Each system comes with its administrative contact, email, phone and mailing address, plus population served, service connections, owner type, water source, and an optional drinking-water violation / compliance history.
No login, no cookies, no browser, no API key — fast JSON extraction from the EPA Envirofacts service with a derived lead score on every record.
Why this water system scraper?
Most "water" scrapers on the market either dump raw SDWIS rows with no contacts, or focus on hydrology gauges and risk reports. This actor ships the richest water-utility lead dataset in the category — built for sales, not just research:
| Data | Typical scrapers | This actor |
|---|---|---|
| Administrative contact name | ❌ | ✅ |
| Contact email | ❌ | ✅ |
| Contact phone + extension | ❌ | ✅ |
| Full mailing address | partial | ✅ |
| Population served + size tier | partial | ✅ |
| Service connections | ❌ | ✅ |
| Owner type (local gov / private / state / federal) | ❌ | ✅ |
| Water source (ground / surface / purchased) | ❌ | ✅ |
| Wholesaler & school/daycare flags | ❌ | ✅ |
| Health-based violations + contaminants | ❌ | ✅ opt-in |
| Counties / cities served | ❌ | ✅ opt-in |
| Lead score (0–100) + lead signals | ❌ | ✅ |
| New-system / new-violation monitoring | ❌ | ✅ |
There are ~150,000 active public water systems in the US (≈50,000 of them community systems serving year-round residents) — every one a potential buyer of treatment chemicals, equipment, lab testing, engineering, metering or compliance software.
Use cases
- B2B lead generation — water utilities are recurring buyers: treatment chemicals & equipment (filtration, disinfection, membranes), pipe/valve/pump suppliers, SCADA / AMI smart-metering / leak-detection, lab & PFAS/lead testing, engineering & consulting, infrastructure financing, and compliance SaaS. Score systems by
populationServedand reach the namedcontactName/contactEmaildirectly. - Territory planning — pull every community system in a state, filter by size (
minPopulationServed) and owner type, and build a clean call list for reps. - Compliance / service intent — turn on
includeViolationsandhealthBasedViolationsOnlyto surface systems with recent MCL / treatment-technique violations — the highest-intent prospects for remediation, treatment and testing vendors. - Market & infrastructure analysis — analyze water-source mix, system sizes, ownership and service connections by state or county.
- Monitoring — schedule recurring runs with
monitorModeto capture only new systems or newly-recorded violations as fresh leads.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the US Water System Scraper, choose states and system types, set filters (size, owner, source, compliance), and click Start.
- Watch results stream into the dataset table.
- Export as JSON, CSV, Excel, XML, or HTML — or pull results programmatically via the Apify API.
Input
{"states": ["TX"],"pwsTypes": ["CWS"],"ownerTypes": ["L", "P"],"minPopulationServed": 3300,"withPhoneOnly": true,"includeViolations": true,"healthBasedViolationsOnly": false,"sortBy": "leadScore","maxResults": 500}
- states — two-letter USPS codes (
CA,TX,NY). Leave empty to sweep all states & territories (bounded bymaxResults). - pwsTypes (default
["CWS"]) —CWS(Community),NTNCWS(Non-Transient Non-Community: schools/factories/offices),TNCWS(Transient Non-Community: gas stations/campgrounds). Empty = all. - activeOnly (default true) — only systems currently active in SDWIS.
- ownerTypes / sourceTypes — filter by ownership (Local gov, Private, State, Federal, Mixed, Native American) and water source (Ground / Surface / GUDI).
- cities / zipCodes / nameQuery — filter by the system's mailing city, ZIP prefix, or name text.
- minPopulationServed / maxPopulationServed / minServiceConnections — target by system size.
- wholesalersOnly / servesSchoolOrDaycareOnly / withEmailOnly / withPhoneOnly — high-value segment toggles.
- includeViolations (default false) — enrich each system with its EPA drinking-water violation history (counts, latest date, contaminants, recent detail).
- healthBasedViolationsOnly — keep only systems with recent health-based violations (needs
includeViolations). - includeGeographicArea (default false) — add the counties, cities and ZIPs each system serves.
- sortBy —
leadScore(recommended),populationHigh,connectionsHigh,recentViolation,name, orsource. - maxResults / maxResultsPerState / deduplicateResults — output controls.
- monitorMode / monitorKey — only emit new / changed systems across scheduled runs.
Output
One record per public water system (recordType: "waterSystem"):
{"recordType": "waterSystem","pwsid": "TX0610001","pwsName": "City Of Austin Water","pwsTypeCode": "CWS","pwsType": "Community Water System","isCommunity": true,"activityStatus": "Active","ownerTypeCode": "L","ownerType": "Local government","isGovernmentOwned": true,"primarySourceCode": "SW","primarySource": "Surface water","isSurfaceWater": true,"populationServed": 960000,"populationCategory": "Very large (>100k)","serviceConnections": 248000,"isWholesaler": true,"servesSchoolOrDaycare": false,"primacyType": "State","epaRegion": "06","orgName": "City Of Austin","contactName": "Jane Doe","contactEmail": "jane.doe@austintexas.gov","contactPhone": "(512) 555-0142","addressLine1": "625 E 10th St","city": "Austin","state": "TX","zip": "78701","fullAddress": "625 E 10th St, Austin, TX, 78701","violationCount": 7,"healthBasedViolationCount": 1,"recentHealthViolationCount": 1,"latestViolationDate": "2024-09-30","topContaminants": ["3100", "1040"],"hasRecentHealthViolation": true,"countiesServed": ["Travis"],"leadScore": 92,"leadSignals": ["Very large system (>100k served)", "Community water system", "Local government", "Has email", "Has phone", "Water wholesaler", "Recent health-based violation"],"sourceUrl": "https://data.epa.gov/efservice/WATER_SYSTEM/PWSID/TX0610001/JSON","scrapedAt": "2026-06-20T12:00:00.000Z"}
Every record also carries sourceFields — the complete raw SDWIS row — so no data is lost.
Field coverage — measured, not promised
Measured on real platform runs (2026-07-22) and verified field-by-field against the raw EPA
columns, so you know exactly what you are buying. Core lead fields are 100%: pwsid,
pwsName, pwsType, ownerType, primarySource, populationServed, serviceConnections,
contactName, contactPhone, addressLine1, city, state, zip, fullAddress, leadScore.
| Field | Coverage | Why |
|---|---|---|
contactEmail | 100% large municipal (TX) · 83% FL · 68% small rural (WY/MT) | EPA makes the admin email optional; coverage scales with system size. Use withEmailOnly to keep only systems that publish one. |
seasonBeginDate / seasonEndDate | 100% seasonal systems · 0% year-round | SDWIS records an operating season only for seasonal systems (campgrounds, RV parks) — not a gap. |
fax, phoneExt, altPhone, addressLine2 | 0–18% | Optional legacy SDWIS columns, rarely filled by the utility. |
Violation block (violationCount, healthBasedViolationCount, topContaminants, …) | 100% with includeViolations on | Off by default because it adds one request per system. |
countiesServed / citiesServed / zipsServed | 97% / 57% / 7% with includeGeographicArea on | Off by default (one request per system). EPA indexes most systems by county, about half by city, and rarely by ZIP served. |
Nothing above is a parser gap — each was checked against its raw EPA column in sourceFields
and matches 1:1. Empty means EPA is empty.
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it weekly/monthly with
monitorModeto capture newly-added systems and newly-recorded violations as leads. - Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/us-water-system-scraper').call({states: ['CA'],pwsTypes: ['CWS'],minPopulationServed: 10000,withPhoneOnly: true,sortBy: 'leadScore',maxResults: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} water-utility leads`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new utility leads straight into your CRM.
- Slack — get notified when a monitored search finds new systems.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find every large community water utility in Texas with a phone number and recent violations" and let it run this scraper for you.
Agent-ready: autonomous payments (x402 & Skyfire)
This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:
- x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
- Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.
Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.
More scrapers from scrapesage
Build a complete US B2B lead-gen & regulatory-intelligence stack from official open-data sources:
- EPA ECHO Scraper — regulated facilities, environmental compliance, violations & penalties (air, water, hazardous waste).
- FMCSA Trucking Scraper — motor carriers & trucking companies with safety ratings and contacts.
- MSHA Mine, Quarry & Aggregates Scraper — mine & quarry operators, parent companies and violations.
- USDA FSIS Establishment Scraper — meat, poultry & egg plant leads.
- US Organic Operations Scraper — USDA-certified organic business leads.
- US Property Records Scraper — property & parcel records with owner mailing addresses.
- US Business Formation Scraper — newly-registered companies as fresh B2B leads.
- US Contractor License Scraper — licensed contractors from official state registries.
- Website Contact Scraper — enrich any utility website for emails, phones and socials.
Tips
- Best leads first: keep
pwsTypesonCWSandsortByonleadScore— community systems with a contact email/phone and large populations rank highest. - Service-intent targeting: turn on
includeViolations+healthBasedViolationsOnlyto find systems with active water-quality problems (treatment, testing, engineering buyers). - National sweeps: leave
statesempty and set amaxResultscap; usemaxResultsPerStatefor an even spread across states. - Cost & speed: compliance and geographic enrichment add one request per returned system — leave them off for the fastest, cheapest base list, then re-run with enrichment on your shortlist.
- Proxies: not needed — the EPA SDWIS / Envirofacts API is queried directly. Leave the proxy off for the fastest queries.
FAQ
Where does the data come from? The official US EPA SDWIS (Safe Drinking Water Information System), served through the public Envirofacts REST API (data.epa.gov/efservice). No API key or login is required.
What is a "public water system"? Any system that provides water for human consumption to at least 15 connections or 25 people. SDWIS classifies them as Community (CWS), Non-Transient Non-Community (NTNCWS), or Transient Non-Community (TNCWS).
Do records include contact emails and phones? Yes — SDWIS stores each system's administrative contact (name, email, phone, mailing address). Coverage varies by system; fields are null only when EPA doesn't publish them, never because the scraper skipped them.
Can I get only systems with violations? Yes — turn on includeViolations, then healthBasedViolationsOnly to keep only systems with recent health-based (MCL / treatment-technique) violations.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
How do I monitor new systems automatically? Turn on monitorMode, give each watch a monitorKey, and create a Schedule. Each run emits only systems that are new or whose violation history changed since the last run.
Is this legal? This actor collects publicly available government data only. You are responsible for using the data in compliance with applicable laws and EPA's terms.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.