# Kentucky Lake & Lake Barkley Levels (public government data) (`standardwork/kentucky-lake-levels`) Actor

Hourly pool elevation, 24-hour change, and dam release for Kentucky Lake and Lake Barkley, from public TVA and Army Corps data. Clean JSON, CSV, or Excel.

- **URL**: https://apify.com/standardwork/kentucky-lake-levels.md
- **Developed by:** [Standard Work Co.](https://apify.com/standardwork) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.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

## US Reservoir & Lake Levels (TVA + Army Corps)

Informational only. Not for navigation, safety, emergency, financial, medical, or legal decisions. Check the official source before you rely on it.

Get current pool elevation, 24-hour change, tailwater and dam discharge for TVA and US Army Corps of Engineers reservoirs in one clean JSON/CSV, from official public government feeds (no scraping of private sites).

**Who it's for:** marinas, fishing guides, lake rental hosts, boating apps, newsletters, and anyone tracking lake levels on a schedule.

**Input:** two checkboxes, Include Kentucky Lake and Include Lake Barkley (both on by default), plus optional TVA site codes (e.g. `KYDK2` = Kentucky Dam) and/or Army Corps CWMS series (e.g. Lake Barkley).
**Output per lake:** source, site, series, observedAt (ISO 8601 with Central offset, e.g. 2026-10-16T21:00-05:00), observedAtLocal (e.g. Oct 16, 2026 9:00 PM CDT), poolElevationFt, change24hFt, tailwaterFt, dischargeCfs, historyCount, history (hourly readings inside the Hours window), note, error, qcStatus, qcNotes, sourceUrl, retrievedAt.

Notes: Army Corps pool series report elevation only, so tailwaterFt and dischargeCfs are null for those rows. TVA publishes only the last 48 hours. If a reading is missing at the source, history may have one fewer entry than the hours requested. A bad site code returns a row with the error field filled instead of failing the run.

**Self-check:** every row gets qcStatus (ok or flagged) and qcNotes. A row is flagged, not dropped, if the pool level is outside a plausible range, the newest reading is more than 6 hours old or in the future, any hour-to-hour change is over 1 ft, or the source returned an error. Filter on qcStatus = ok if you only want clean rows. sourceUrl is the exact official feed the row came from and retrievedAt is when it was read.

**Pricing:** pay per result.

### No-code setup

You do not need to write code to get these readings on autopilot.

1. **Run it on a schedule.** In Apify Console, create a schedule (for example every morning at 6 AM) and pick this Actor. Guide: https://docs.apify.com/platform/schedules
2. **Send results to Google Sheets.** Add the Google Sheets Import & Export Actor as an integration after each run, or run it on its own schedule: https://apify.com/lukaskrivka/google-sheets
3. **Zapier or Make.** Use Apify's official integrations to send each run's results to email, Slack, a spreadsheet, or your own app. Zapier: https://docs.apify.com/platform/integrations/zapier . Make: https://docs.apify.com/platform/integrations/make
   Each run still bills per result the same way. All integrations: https://apify.com/integrations

### Disclaimer

Informational only. Not for navigation, safety, emergency, financial, medical, or legal decisions. Check the official source before you rely on it.

This is an independent tool by Standard Work Co. It is not affiliated with, endorsed by, or sponsored by any government agency named here. Agency names are used only to say where the data comes from.

The data comes from public government sources and is passed through as published, only reformatted. Government data can be preliminary, late, missing, revised, or wrong, and this tool can fail too. This output is not an official government record.

Provided "as is" with no warranty of any kind, including accuracy, completeness, or timeliness. You are responsible for checking the official source before acting on anything here. Liability is limited as stated in the Apify Standard Actor Contract for this tool.

Not for boating, swimming, fishing safety, navigation, flood, or emergency decisions. For current official conditions, check tva.com and water.usace.army.mil and follow posted warnings.

### Data sources and credits

Tennessee Valley Authority (TVA) lake and dam observed data: tva.com.
Lake Barkley data: U.S. Army Corps of Engineers, Corps Water Management System (CWMS) Data API, cwms-data.usace.army.mil. USACE does not endorse this tool.

U.S. government works are not subject to U.S. copyright protection (17 U.S.C. 105). Any copyright in this Actor covers only its code and documentation, not the underlying government data.

# Actor input Schema

## `includeKentuckyLake` (type: `boolean`):

Include Kentucky Lake (TVA site KYDK2). Turn off to skip it even if KYDK2 is in the TVA list.

## `includeLakeBarkley` (type: `boolean`):

Include Lake Barkley (Army Corps CWMS series). Turn off to skip it even if it is in the CWMS list.

## `tvaSites` (type: `array`):

TVA site codes, e.g. KYDK2 (Kentucky Dam).

## `cwmsSeries` (type: `array`):

Objects with office and name, e.g. {"office":"LRN","name":"BAHK2-BARKLEY.Elev-Pool.Inst.1Hour.0.dcp-rev","label":"Lake Barkley"}

## `hours` (type: `integer`):

Hours of history to return per lake (1-168). TVA publishes only the last 48 hours, so TVA history is capped at 48. The 24-hour change is always computed.

## Actor input object example

```json
{
  "includeKentuckyLake": true,
  "includeLakeBarkley": true,
  "tvaSites": [
    "KYDK2"
  ],
  "cwmsSeries": [
    {
      "office": "LRN",
      "name": "BAHK2-BARKLEY.Elev-Pool.Inst.1Hour.0.dcp-rev",
      "label": "Lake Barkley"
    }
  ],
  "hours": 24
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "tvaSites": [
        "KYDK2"
    ],
    "cwmsSeries": [
        {
            "office": "LRN",
            "name": "BAHK2-BARKLEY.Elev-Pool.Inst.1Hour.0.dcp-rev",
            "label": "Lake Barkley"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("standardwork/kentucky-lake-levels").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 = {
    "tvaSites": ["KYDK2"],
    "cwmsSeries": [{
            "office": "LRN",
            "name": "BAHK2-BARKLEY.Elev-Pool.Inst.1Hour.0.dcp-rev",
            "label": "Lake Barkley",
        }],
}

# Run the Actor and wait for it to finish
run = client.actor("standardwork/kentucky-lake-levels").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 '{
  "tvaSites": [
    "KYDK2"
  ],
  "cwmsSeries": [
    {
      "office": "LRN",
      "name": "BAHK2-BARKLEY.Elev-Pool.Inst.1Hour.0.dcp-rev",
      "label": "Lake Barkley"
    }
  ]
}' |
apify call standardwork/kentucky-lake-levels --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,standardwork/kentucky-lake-levels"
        }
    }
}
```

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/scmfuoZQDEbPeNkve/builds/wprbHNv5T5RsxfNqj/openapi.json
