# US Drought Monitor Texas Weekly Records (`automation-lab/us-drought-monitor-texas-records`) Actor

Export official US Drought Monitor Texas weekly drought area percentages by report date. Retrieve statewide or supplied county FIPS records with cumulative None/D0–D4 percentages, validity dates and source URLs for agricultural and water-risk reporting.

- **URL**: https://apify.com/automation-lab/us-drought-monitor-texas-records.md
- **Developed by:** [Automation Lab](https://apify.com/automation-lab) (community)
- **Categories:** Other, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.88 / 1,000 item processeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## US Drought Monitor Texas Weekly Records

Export **US Drought Monitor Texas** weekly records for recurring agricultural and water-risk reporting. Choose Texas statewide, supplied Texas county FIPS codes, or both, and an inclusive report-date range. Get official cumulative drought area percentages as typed dataset rows, ready for CSV, Excel or JSON export.

### What does this Actor do?

The Actor downloads official anonymous USDM CSV exports from the University of Nebraska–Lincoln data service. Each row describes one weekly report for one geography. It preserves report date, None and D0–D4 percentages, validity dates, county name when applicable, and the source request URL.

It does not create maps, forecasts, alerts, recommendations or a persistent change history. It uses no AI and requires no source account, cookies, paid API subscription or proxy.

### Who is it for?

- Agricultural analysts comparing county drought exposure across reporting weeks.
- Water-risk teams refreshing a dated spreadsheet or internal dashboard.
- Researchers building a Texas historical drought time series.
- Reporting teams that need reproducible geography/date-indexed records rather than copying values from maps.

### Why use this Actor?

The useful work is turning the official export into a predictable dataset contract: exact Texas scope, validated FIPS, typed percentages, duplicate removal and explicit date boundaries. The source sometimes includes a week outside the requested range because its validity period overlaps that range. This Actor filters by **report date** instead, so a January report-date request does not silently include December reports.

### Getting started

1. Leave **Include Texas statewide** enabled for statewide records.
2. Optionally enter county FIPS codes, for example `48453` for Travis County.
3. Enter start and end dates as `YYYY-MM-DD`, or omit them for the trailing 30 days.
4. Set the global maximum number of records.
5. Run, inspect the dataset and export the required format.

```json
{
  "includeState": true,
  "countyFips": ["48453"],
  "startDate": "2026-01-01",
  "endDate": "2026-01-31",
  "maxItems": 1000
}
```

That example returns four January 2026 reports for Texas and four for Travis County: eight rows, not one row per calendar day.

### Input parameters

| Field | Default | Behavior |
| --- | --- | --- |
| `includeState` | `true` | Include Texas statewide records first. |
| `countyFips` | `[]` | Exact five-digit Texas county codes; deduplicated in input order. |
| `startDate` | 30 days before end | Inclusive report-date boundary, earliest `2000-01-04`. |
| `endDate` | Today UTC | Inclusive report-date boundary, not a forecast date. |
| `maxItems` | `1000` | Global accepted-row cap, integer 1–10000. Zero is invalid. |

With `includeState:false`, supply at least one county code. Only Texas counties are supported; county names, arbitrary URLs and other states are rejected. Dates must be valid, ordered and not in the future. Omitted startDate is calculated relative to the supplied/default endDate.

### Ordering and limits

Statewide records come first, then counties in supplied order. Within each geography, reports are newest first. Requests are split by calendar year to bound response size. `maxItems` applies across the whole run, not per county or year. Reaching it may omit older reports and later counties. To focus on county history, disable statewide output and choose a sufficiently large cap.

There is no cross-run deduplication: scheduled snapshots may contain the same report again. Use `fips` plus `reportDate` as your downstream upsert key. A legitimate range with no report dates produces an empty dataset. Unexpected responses and exhausted request failures fail the run rather than pretending an empty result is successful.

### Extracted fields

| Field | Meaning |
| --- | --- |
| `reportDate` | Weekly map/report date, YYYY-MM-DD. |
| `geographyType` | `state` or `county`. |
| `state` | Always `TX`. |
| `fips` | State `48` or the five-digit county FIPS. |
| `county` | Official county name, null for statewide rows. |
| `none` | Percentage of area with no drought classification. |
| `d0` | Area percentage at D0 or worse, abnormally dry or worse. |
| `d1` | Area percentage at D1 or worse, moderate drought or worse. |
| `d2` | Area percentage at D2 or worse, severe drought or worse. |
| `d3` | Area percentage at D3 or worse, extreme drought or worse. |
| `d4` | Area percentage at D4, exceptional drought. |
| `validStart`, `validEnd` | Official validity dates. |
| `statisticsType` | Always `cumulative`. |
| `sourceUrl` | Official CSV request URL with date/geography parameters. |
| `scrapedAt` | UTC retrieval timestamp. |

**Do not sum D0–D4.** These are overlapping cumulative percentages, not mutually exclusive categories. For example, D3 area also belongs to D2, D1 and D0. Values are source-reported percentages, not population, acreage or parcel-level risk measurements.

### Output example

Values below are from the official Travis County report for January 27, 2026.

```json
{
  "reportDate": "2026-01-27",
  "geographyType": "county",
  "state": "TX",
  "fips": "48453",
  "county": "Travis County",
  "none": 0,
  "d0": 100,
  "d1": 100,
  "d2": 99.97,
  "d3": 71.25,
  "d4": 0,
  "validStart": "2026-01-27",
  "validEnd": "2026-02-02",
  "statisticsType": "cumulative",
  "sourceUrl": "https://usdmdataservices.unl.edu/api/CountyStatistics/GetDroughtSeverityStatisticsByAreaPercent?aoi=48453&startdate=1%2F1%2F2026&enddate=1%2F31%2F2026&statisticsType=1",
  "scrapedAt": "2026-10-26T21:00:00.000Z"
}
```

### How much does it cost to export Texas drought records?

Pay per event: **$0.001 per run start**, plus a per-record charge. One accepted weekly geography row is one `item` event. Invalid, duplicate and out-of-range rows have no item charge. Requests and retries have no separate event charge.

| Store spend tier | Per weekly record |
| --- | ---: |
| FREE | $0.0036064 |
| BRONZE | $0.003136 |
| SILVER | $0.0024461 |
| GOLD | $0.0018816 |
| PLATINUM | $0.0018816 |
| DIAMOND | $0.0018816 |

At BRONZE, estimated Actor charges are $0.026088 for eight records, $0.3146 for 100 records and $3.137 for 1000 records, including one start event. Empty successful requests still incur the start charge. Spend tiers refer to qualifying aggregate monthly Apify Store spending, not volume with this Actor alone. Check current Store pricing before running. Estimates are not guaranteed invoices; account/platform terms also apply. Refunds, disputes, fraud, taxes, corrections and contractual clawbacks can affect revenue or payouts; no payout is promised.

### Integrations

Schedule a trailing-window run weekly and upsert the dataset into a spreadsheet or database using `(fips, reportDate)`. A small overlapping window helps capture official revisions without treating repeated weeks as new observations. Use Apify dataset exports or your existing Make, Zapier or webhook workflow to move rows into reporting systems. These downstream integrations are user-configured, not built-in alerts or automatic change detection.

### API usage

Start one asynchronous run and retain its run ID. Poll that same run until terminal status; only read its dataset as complete after SUCCEEDED.

```bash
curl -X POST \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"startDate":"2026-01-01","endDate":"2026-01-31","maxItems":100}' \
  'https://api.apify.com/v2/acts/automation-lab~us-drought-monitor-texas-records/runs'
```

JavaScript with the official client:

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/us-drought-monitor-texas-records')
    .call({ countyFips: ['48453'], maxItems: 100 });
if (run.status !== 'SUCCEEDED') throw new Error(run.status);
const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 100 });
console.log(items);
```

Python:

```python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/us-drought-monitor-texas-records').call(
    run_input={'countyFips': ['48453'], 'maxItems': 100})
if run['status'] != 'SUCCEEDED':
    raise RuntimeError(run['status'])
rows = client.dataset(run['defaultDatasetId']).list_items(limit=100).items
print(rows)
```

### MCP: Claude Code, Claude Desktop, Cursor and VS Code

Use this Actor-scoped endpoint, not an unqualified tool collection:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/us-drought-monitor-texas-records"
```

Claude Desktop and Cursor MCP JSON configuration (use the client's supported HTTP transport and Apify authentication flow):

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/us-drought-monitor-texas-records"
    }
  }
}
```

VS Code uses the corresponding HTTP server entry under `servers` in `.vscode/mcp.json`:

```json
{
  "servers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/us-drought-monitor-texas-records"
    }
  }
}
```

Example prompt: “Export Travis County weekly drought percentages for January 2026, excluding statewide rows, at most 10 records. Explain cumulative D0–D4 and show the report dates.”

Discover actual names and arguments using read-only `tools/list`. Actor selection also exposes run/data helper tools; it is not exactly one tool. An authorized invocation should start once, retain run and storage IDs, then follow the same run with `get-actor-run`, bounded backoff (2, 4, 8, then at most 10 seconds) and a 120-second total deadline. Server waits may end before completion. A timeout is not permission to restart. If still pending, report its ID and stop.

After success, use `get-dataset-items` with explicit offset, limit and fields. Example consumer budget: 20 source rows per page, at most 100 rows and 64 KiB serialized UTF-8 admitted to model context, whichever comes first. Enforce bytes host-side, report truncation and next offset, and leave full exports in storage. If the client cannot enforce bytes before model injection, do not claim that guarantee. IDs are metadata, not result rows. Failures may have partial output. No universal token-saving claim is made.

### FAQ and troubleshooting

Transient network errors, HTTP 429 and 5xx responses receive at most three total attempts per request. Each request has a 30-second timeout and bounded backoff. Other HTTP failures and unexpected CSV shapes fail closed. Upstream outages can still interrupt long histories; any dataset already written is partial when the run fails. Narrow the input or retry after the source recovers, not repeatedly during an outage.

**Why did I get zero rows?** The interval may contain no weekly report dates. A single non-report day is a valid empty range.

**Why are some counties missing?** The global cap may have been reached by statewide or earlier county records. Increase it or request counties separately.

**Why do the drought percentages exceed 100 when summed?** They are cumulative overlapping severity thresholds; do not sum them.

**Can I request categorical statistics or another state?** No. This product intentionally supports only cumulative Texas area percentages.

### Legality, responsible use and source attribution

Source: [U.S. Drought Monitor](https://droughtmonitor.unl.edu/), produced through the NDMC, USDA, NOAA and NASA partnership. Consult official source guidance and attribution requirements when redistributing records. This independent automation is not affiliated with or endorsed by those organizations. It uses Apify standard user terms and adds no custom license restrictions. Public availability does not remove your responsibility for lawful downstream use. These data are not site-specific agricultural, insurance or financial advice.

### Data handling and support

Only public aggregate drought statistics and user-supplied public date/FIPS filters are processed. No source login, personal records or AI provider is used. Apify stores run input, logs and datasets under your account's storage/retention controls; this Actor creates no persistent named cache. Delete datasets, key-value stores and runs through Apify as appropriate; platform backups follow Apify policy rather than a deletion guarantee from this Actor.

Failed operations send sanitized diagnostic input, exceptions and actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed; diagnostic reports are retained for 30 days. No raw upstream response body or credential is intentionally logged. For bugs or questions, open an issue on the Actor's Apify page with a run link and non-sensitive expected behavior.

### Related Actors

For complementary current weather warnings, see [US Active Weather Alerts Tracker](https://apify.com/automation-lab/us-active-weather-alerts-tracker). Weekly drought coverage is a separate dataset from short-term NWS warnings; this Actor does not combine them or issue alerts.

# Changelog

This Actor's version history is a separate document: https://apify.com/automation-lab/us-drought-monitor-texas-records/changelog.md

# Actor input Schema

## `includeState` (type: `boolean`):

Include Texas statewide records first. When false, at least one county FIPS is required.

## `countyFips` (type: `array`):

Optional exact five-digit Texas county FIPS strings, such as 48453 for Travis County. Duplicates are removed; input order is retained. No county-name lookup or all-counties shortcut.

## `startDate` (type: `string`):

Inclusive YYYY-MM-DD report-date boundary, on or after 2000-01-04. Defaults to 30 days before endDate. Invalid calendar dates and reversed ranges fail.

## `endDate` (type: `string`):

Inclusive YYYY-MM-DD report-date boundary. Defaults to today in UTC. Future dates fail. Published weekly records only; this does not produce forecasts.

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

Global output and billing cap across all geographies, 1–10000; zero is invalid. Default 1000. State first, then supplied counties; newest reports first within each geography. Reaching this cap can omit later counties or older weeks.

## Actor input object example

```json
{
  "includeState": true,
  "startDate": "2026-01-01",
  "endDate": "2026-01-31",
  "maxItems": 10
}
```

# Actor output Schema

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

Export records as JSON, CSV, Excel or other dataset formats.

# 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 = {
    "startDate": "2026-01-01",
    "endDate": "2026-01-31",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/us-drought-monitor-texas-records").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 = {
    "startDate": "2026-01-01",
    "endDate": "2026-01-31",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/us-drought-monitor-texas-records").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 '{
  "startDate": "2026-01-01",
  "endDate": "2026-01-31",
  "maxItems": 10
}' |
apify call automation-lab/us-drought-monitor-texas-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/us-drought-monitor-texas-records"
        }
    }
}
```

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/UYjHgSpOImSdnd4eA/builds/eZ2u1nujfJwSYA5wP/openapi.json
