# EIA Power Project Monitor

Monitor planned US generators, capacity and scheduled operation months from official EIA reporting. Filter project watchlists and compare confirmed saved observations.

Canonical product page: https://mayd-it.com/data-tools/actors/eia-power-project-monitor/
Public Actor: https://apify.com/maydit/eia-power-project-monitor

## Example input

```json
{
  "states": [
    "TX"
  ],
  "maxSourceEntries": 100,
  "maxResults": 5
}
```

## Full guide

![Follow planned power project revisions — illustrative generator watchlist](https://api.apify.com/v2/key-value-stores/nemaYfVcrTgloz8Wn/records/eia-power-project-monitor-0a9e4653425d.png?signature=vUYMtdou7dWaiB8PiKyl)

## Follow planned power project revisions

Build a focused research list from EIA's official planned-generator table. Review the published entity, technology, capacity, project status and scheduled operation month, then compare later observations with your saved baseline. Useful for equipment sales research, engineering teams and project development watchlists.

**One result is one planned generator.** The data describes monthly reporting, with publication lag. It does not verify current construction, forecast completion, or establish that a project serves a data center.

[Open in Console](https://console.apify.com/actors/l7DzOEjLHsxsaExoe/input) · [First run](#try-five-texas-generators) · [Output preview](#output-preview) · [Saved comparisons](#turn-a-project-list-into-a-saved-watchlist) · [Pricing](#pricing-and-run-outcomes)

## Try five Texas generators

Copy this input into Console's JSON editor. It selects up to 100 matching source entries and saves at most five generator observations. No API key, login or proxy subscription is required.

```json
{
  "states": [
    "TX"
  ],
  "maxSourceEntries": 100,
  "maxResults": 5
}
```

Open **Saved observations** or **CSV export** for the data, then **Run report** for counts and coverage. Check `reportingMonth` and `sourcePublishedDate` before using a row. Empty input reads the same official table and saves up to five rows across the unfiltered sample.

## Output preview

| Project review | Fields | How to read them |
| --- | --- | --- |
| Generator identity | `plantId`, `generatorId`, `plantName` | A plant can have several generators; use both IDs |
| Published organization | `entityId`, `entityName`, `producerType` | Source entity and classification, without contact enrichment |
| Technology and location | `state`, `technology`, `energySourceCode`, `primeMoverCode` | Published classifications |
| Reported project status | `statusCode`, `status` | Official planned-generator status and wording |
| Scheduled operation | `plannedYear`, `plannedMonth`, `plannedOperationMonth` | Month precision; no day or construction milestone is inferred |
| Capacity | `nameplateCapacityMw`, `netSummerCapacityMw` | Published MW values; unavailable values stay null |
| Reporting age | `reportingMonth`, `sourcePublishedDate` | Actual reporting period and release date, separate from `observedAt` |
| Saved revisions | `plannedOperationChangeMonths`, `nameplateCapacityChangeMw`, `netSummerCapacityChangeMw` | Current values minus the last saved values; positive month change means a later scheduled period |
| Supporting evidence | `sourceUrl`, `comparisonStatus`, `changedFields`, `previous`, `previousObservedAt`, `contentHash`, `matchedKeywords` | Official source, saved comparison and literal filter evidence |

Without comparison, status is `not_requested` and prior values/deltas are null. With comparison, `new` means new to your saved observations. It does not establish when a project was first announced. JSON preserves the prior snapshot; CSV works well for your project register.

## Find planned battery storage of at least 50 MW

```json
{
  "technologies": [
    "Batteries"
  ],
  "minimumCapacityMw": 50,
  "maxSourceEntries": 100,
  "maxResults": 5
}
```

## Follow an exact EIA plant ID

```json
{
  "plantIds": [
    "68847"
  ],
  "maxSourceEntries": 5,
  "maxResults": 5
}
```

Plant 68847 identifies 1000 Mile Solar in the retained source sample. A later release may change or omit its planned-generator entry, so this watchlist can legitimately become empty.

## Turn a project list into a saved watchlist

1. Choose plant IDs or a focused filter. Add `comparePrevious: true` and a dedicated `snapshotName` to the input.
2. Run once to save `new` generator observations. Repeat with the same snapshot name to receive `changed` or `unchanged` rows with prior values.
3. Keep `comparePrevious: true` and add `onlyChanges: true` to skip unchanged observations. This Actor requires both flags for changes-only output; a healthy repeat can save zero rows.
4. Read the completed run's SUMMARY before sending data to a spreadsheet or CRM. Upsert by `plantId + ":" + generatorId`. Retain the run ID for delivery replay. Route positive `plannedOperationChangeMonths` or nonzero capacity deltas for source review.

History is stored per generator in `maydit-eia-power-<snapshotName>`. Only confirmed saved output advances its entry; failed writes, spending stops and deadlines preserve unsaved baselines. Use **one writer per snapshot name**. Detected concurrent changes produce a partial result; the check is not an atomic lock. Inspect `historyUpdated` and `failedSources` before relying on a saved baseline.

Reporting period, release date and retrieval time alone do not create a project change. The snapshot covers substantive published generator fields. Missing entries never produce cancellation, retirement or removal records. Configure your own recurrence around EIA's monthly publication cycle; the Actor creates no schedule or downstream connection.

## Filters and bounded coverage

- States and plant IDs match exactly. Technology phrases and keywords match literally without case sensitivity; any listed term can match within its group. Keywords search plant name, entity name, technology and status. Separate filter groups use AND.
- `minimumCapacityMw` applies to published nameplate capacity; missing capacity cannot satisfy the threshold.
- The table is downloaded once. Filters run before stable plant-ID/generator-ID ordering and the `maxSourceEntries` selection. `maxResults` then caps confirmed dataset writes. Increasing the window does not fetch historical months.
- Defaults are 100 source entries, five saved results and a 240-second run budget. Supported bounds are 10,000 source entries, 5,000 saved rows and 30–3,600 seconds. The platform deadline retains a separate 25-second reserve.

Intentional source/result caps can finish successfully and remain visible in SUMMARY. Check `windowLimited`, matching/source counts and stop flags before calling the selected scope complete. Requests honor robots rules and use bounded responses, public-address checks and fixed source-origin restrictions. No private or user-supplied destination is fetched.

## Source and interpretation

The source is [EIA Electric Power Monthly, Table 6.5](https://www.eia.gov/electricity/monthly/epm_table_grapher.php?t=table_6_05), based on EIA-860/EIA-860M reporting. It excludes facilities with total generator nameplate capacity below 1 MW and covers planned additions, rather than a full operating/retired/cancelled catalog or interconnection queue.

The retained sample reported **July 2026 data released September 24, 2026**. Each run preserves the dates supplied by its response; the run date never replaces the reporting period. Preliminary reports can be revised, and a schedule/status change may be a correction. Verify consequential project decisions with current official records and the sponsor.

[EIA permits reuse of public-domain data with source and publication-date attribution](https://www.eia.gov/about/copyrights_reuse.php). This independent Actor is not endorsed by EIA and does not use its logo.

## Pricing and run outcomes

Base result rate on the FREE tier: **$5 per 1,000 saved generator observations**, plus the listed **Actor Start** charge. The [Pricing tab](https://apify.com/maydit/eia-power-project-monitor/pricing) is authoritative for your plan's current rates. Saved unchanged rows are billable; changes-only skips create no dataset-item charge. Platform usage charges may apply. Set both a result cap and an Apify maximum charge for recurring runs.

SUMMARY and Run report show saved counts, unchanged skips, history commits, errors and limit flags. Source failures and malformed records never become paid diagnostic rows. An all-failed run fails; a genuine no-match succeeds with an explanatory warning. Source/time/spending stops are incomplete, even when some rows remain useful. If EIA answers without its report period and release date (its site error or maintenance page can arrive as a normal-looking page), the Actor fetches again after 10 seconds and, if needed, once more after another 60 seconds, as far as the run budget allows; `sourceRetries` and `firstAttemptProblem` record that, and a repeated failure names the HTTP status, size, content type and page title in `failedSources`.

For help, open **Issues** with the run URL, public plant ID or filter and expected field. Remove credentials and private information before posting.
