# Texas Drought & Water Restrictions (Edwards Aquifer + TCEQ) (`texas-data-feeds/texas-drought-water-restrictions`) Actor

Merged, filtered Texas drought feed: Edwards Aquifer critical-period stages and well/spring readings plus TCEQ water systems under use restrictions, filterable by county, population, and stage.

- **URL**: https://apify.com/texas-data-feeds/texas-drought-water-restrictions.md
- **Developed by:** [Texas Data Feeds](https://apify.com/texas-data-feeds) (community)
- **Categories:** Developer tools, Lead generation, Open source
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Texas Drought & Water Restrictions: Edwards Aquifer stages + TCEQ restricted water systems

One scheduled run answers the question: **which Texas water systems are restricting water use right now, and what stage is the Edwards Aquifer in?** The actor merges two public sources that normally live on separate sites in different formats, normalizes them into clean typed JSON, CSV, or Excel, and filters them down to the counties, system sizes, and stages you care about. It's built for daily monitoring by irrigation, landscaping, pool, car-wash, ag, and industrial operators, by local newsrooms, and by dashboards.

### What you get

| record_type | What it is | Key fields |
|---|---|---|
| `eaa_pool_stage` | Official Critical Period stage for the San Antonio and Uvalde pools | `stage`, `stage_number`, `pumping_reduction_pct`, `source_updated` |
| `eaa_site_reading` | J-17 and J-27 index wells (ft amsl); Comal and San Marcos springflow (cfs) | `today`, `yesterday`, `ten_day_avg` (+ `six_months_ago`, `one_year_ago`, `historical_monthly_avg`, `diff_from_historical` when `detailedHistory` is on) |
| `tceq_restricted_pws` | Public water systems that reported water-use restrictions to TCEQ | `pws_id`, `pws_name`, `county`, `date_notified`, `tceq_stage`, `tceq_stage_number`, `priority`, `population`, `report_generated` |
| `tceq_no_match` | Emitted when your filters match no systems, so a scheduled run never looks broken | `note` |

### Input

| Field | Default | Meaning |
|---|---|---|
| `includeEdwardsAquifer` | true | Edwards Aquifer stages and readings |
| `includeTceqRestrictions` | true | TCEQ restricted-system list |
| `counties` | \[] | e.g. `["Bexar","Travis"]`; empty means statewide |
| `minPopulation` | 0 | Keep only systems serving at least this many people |
| `minTceqStage` | 0 | e.g. 2 keeps only systems at stage 2 or higher |
| `detailedHistory` | false | Adds historical comparisons. Fetches a large (about 26 MB) EAA page, so leave it off for daily runs |
| `maxItems` | 0 | Cap on output items |
| `requestDelaySecs` | 2 | Politeness delay between requests |

Example (Central Texas, stage 2+):
`{"includeEdwardsAquifer": false, "counties": ["Bexar","Travis","Hays","Comal"], "minTceqStage": 2}` returned 15 systems on 2026-11-04.

### Data sources & credit

**Legal status (Scout review, 2026-11-04): CLEAR WITH CONDITIONS.** Pricing is based on the automation this actor adds, not on access to TCEQ data. TCEQ and EAA are credited, no logos are used, and the disclaimer below applies.

- **Source: Texas Commission on Environmental Quality (TCEQ).** [List of Texas PWSs Limiting Water Use to Avoid Shortages](https://www.tceq.texas.gov/drinkingwater/trot/droughtw.html). The complete raw list is free to view at that link. The [Data Dictionary on that page](https://www.tceq.texas.gov/drinkingwater/trot/droughtw.html) explains the stage and priority codes. Systems self-report their entries, and TCEQ regenerates the report periodically (see `report_generated`).
- **Source: Edwards Aquifer Authority (EAA).** [edwardsaquifer.org](https://www.edwardsaquifer.org/) (current stage and readings) and the [EAA Environmental Data Portal: Aquifer Conditions](https://data.edwardsaquifer.org/AquiferConditions). Free to view. EAA marks all readings as provisional and subject to revision. We use EAA data only, never EAA images.
- **What you pay for** is the automation layer: fetching and merging both sources, parsing them into typed fields, county, population, and stage filters, and delivery on your schedule through Apify integrations (webhooks, Sheets, Slack, and so on). The underlying public data stays free at the links above.
- This actor is **not affiliated with, endorsed by, or an official product of** TCEQ or EAA. No agency logos are used.

### Pricing (pay-per-event, suggested)

| Event | Price | Notes |
|---|---|---|
| `apify-actor-start` | $0.005 per run | |
| `result` | $0.001 per item | You pay only for the rows left after your filters. A full statewide run (about 184 items) costs about $0.19; a filtered county watch (about 6–20 items) costs about $0.01–0.03 |
| *(planned)* `stage-change-alert` | $0.02 | Emitted only when an EAA or TCEQ stage changes compared with your previous run |

A daily full run costs about $5.70/month; a daily county watch costs about $0.50/month.

### Etiquette

3–4 requests per run, sent one at a time with a 2 s minimum gap. The actor checks robots.txt, identifies itself honestly (`TexasDroughtActor/0.2`), and backs off for a long time on 403 or 429. Please don't schedule it more than a few times a day, because the sources update daily (EAA) or less often (TCEQ).

### Disclaimer

Data is provided **"as is" without warranty** of any kind, including accuracy, completeness, or timeliness. It is **not an official source**. TCEQ makes no warranty on the information on its site. The TCEQ list is self-reported by water systems, and EAA data is provisional. Always confirm current restrictions with your water utility, TCEQ, or EAA before you make any operational, legal, or financial decision. If a source changes or is unavailable, the run still returns whatever other sources succeeded and lists the problem in the `RUN_SUMMARY` key-value record.

### Run locally (developers)

```
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt jsonschema
.venv/bin/python validate.py      # runs with test_input.json, validates, writes sample_output/
```

# Changelog

This Actor's version history is a separate document: https://apify.com/texas-data-feeds/texas-drought-water-restrictions/changelog.md

# Actor input Schema

## `includeEdwardsAquifer` (type: `boolean`):

Include Edwards Aquifer stages & readings

## `includeTceqRestrictions` (type: `boolean`):

Include TCEQ water systems under restrictions

## `counties` (type: `array`):

County names, e.g. Bexar. Empty = all.

## `minPopulation` (type: `integer`):

Minimum population served (TCEQ)

## `maxItems` (type: `integer`):

Max items (0 = no limit)

## `requestDelaySecs` (type: `integer`):

Delay between requests (s)

## `detailedHistory` (type: `boolean`):

Fetches the ~26 MB EAA data portal page. Leave off for daily monitoring.

## `minTceqStage` (type: `integer`):

e.g. 2 = only systems at stage 2+

## Actor input object example

```json
{
  "includeEdwardsAquifer": true,
  "includeTceqRestrictions": true,
  "counties": [],
  "minPopulation": 0,
  "maxItems": 0,
  "requestDelaySecs": 2,
  "detailedHistory": false,
  "minTceqStage": 0
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset with all output records

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("texas-data-feeds/texas-drought-water-restrictions").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("texas-data-feeds/texas-drought-water-restrictions").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call texas-data-feeds/texas-drought-water-restrictions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,texas-data-feeds/texas-drought-water-restrictions"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ATG5WPLmgGtgoxhGR/builds/G7rQUpfMirbUFCIiV/openapi.json
