US Grid Capacity & Interconnection Monitor
Pricing
Pay per event
US Grid Capacity & Interconnection Monitor
Monitor US grid hosting capacity and interconnection queues. Track new and changing solar, BESS, wind, and generation projects across public energy datasets.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Kenny Ha
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Monitor US hosting capacity and interconnection queues from multiple public energy datasets in one normalized workflow.
45,000+ normalized records across 5 live energy data sources.
Track:
- new interconnection projects
- project status and capacity changes
- battery storage and BESS activity
- solar and wind development
- project removals
- utility hosting capacity
Instead of manually downloading spreadsheets and utility datasets, run one Actor and receive normalized structured data with persistent change detection.
Built for recurring monitoring: once your baseline is established, a scheduled run that finds no changes costs approximately $0.05 — see Pricing.
Why use this Actor?
Hosting capacity + interconnection queues + automated change monitoring in one Actor.
Most interconnection datasets only tell you what exists right now. This Actor also remembers previous runs, so scheduled monitoring can tell you what's actually new, updated, unchanged, or removed — turning fragmented public utility data into an ongoing lead feed instead of a one-off download.
What can you use this Actor for?
- Monitor new interconnection projects as they enter a public queue
- Track changes to existing queue projects (status, capacity, target completion date)
- Research solar development activity in a specific state or utility territory
- Research battery storage and BESS project activity
- Monitor renewable-energy development across multiple public datasets at once
- Analyze public utility hosting-capacity datasets for available headroom
- Watch competitor or developer project activity
- Research regional grid activity by state, county, or utility
- Build structured energy datasets for internal tools or BI
- Automate recurring grid-data monitoring on a schedule
- Detect projects added or removed since the previous run
Who is this Actor for?
Solar developers — research public hosting-capacity data and monitor new or changing solar projects in interconnection queues.
Battery storage and BESS developers — track storage projects, queue activity, capacity information, and changing interconnection records.
Renewable-energy developers — monitor public interconnection datasets without repeatedly downloading and comparing spreadsheets manually.
Energy investors — follow project-development activity, technologies, developers, capacities, and queue changes.
Energy consultants — aggregate multiple public grid datasets into one normalized structured schema.
Competitive-intelligence teams — track changes in project activity by developer, geography, technology, capacity, and status where available.
Infrastructure and data-center researchers — use public grid and hosting-capacity information as one input into broader infrastructure research.
Hosting-capacity data alone does not prove that a location is suitable for a data center or that power can actually be delivered to a project — see Limitations.
Supported sources
| Source | Region | Dataset type | Status |
|---|---|---|---|
| NYSEG / RG&E (Avangrid) Hosting Capacity | New York | Hosting capacity | Live |
| CAISO Public Generator Interconnection Queue | California | Interconnection queue | Live |
| NYISO Interconnection Queue | New York | Interconnection queue | Live |
| LBNL Queued Up | United States (national) | Interconnection queue | Live |
| PSCo / Xcel Energy Colorado Hosting Capacity | Colorado | Hosting capacity | Live |
The full current dataset across all five sources contains approximately 45,000 records as of the last verified full run — this changes over time as source data changes, so treat it as an order of magnitude, not a fixed count. Full technical detail per source (exact endpoints, fields, update cadence, and sources we researched but rejected): docs/SOURCES.md.
Hosting-capacity data
The Actor integrates selected public utility hosting-capacity datasets (NYSEG/RG&E and PSCo/Xcel Colorado today). These can help you research:
- distribution circuits and feeders
- available hosting capacity headroom (in MW)
- regional capacity patterns across a utility's territory
- utility infrastructure identifiers (substation, feeder, voltage)
A value in a hosting-capacity dataset does not guarantee that a specific interconnection request will be approved — it's a utility-published estimate, not a commitment.
Interconnection queue data
The Actor combines public queue datasets (CAISO, NYISO, LBNL Queued Up) into one normalized schema. Depending on the source, a record may include:
- project name and, where the source publishes it, developer/owner
- technology (
projectType, plus the original source text inrawTechnology) - capacity in MW
- queue status (normalized
status, plus the original source text inrawStatus) - interconnection point / point of interconnection
- state and county
- queue date and target completion date, where available
Field availability genuinely differs by source — for example, CAISO's public queue report doesn't publish a developer name at all, so developer is null for CAISO records; NYISO and LBNL do publish it when the source itself has it.
Delta monitoring
Every record gets a deterministic recordId (stable across runs — never based on a timestamp) and a fingerprint computed from the fields that actually matter commercially (capacity, status, dates, location, point of interconnection). Every run tags each record:
- NEW — a record seen for the first time. On a source's very first-ever run this is your baseline; from then on,
NEWmeans a genuinely new project entered that source. - UPDATED — an existing record whose tracked information changed since last seen.
changedFieldsandpreviousValuestell you exactly what changed. - UNCHANGED — an existing record with no detected change. These do not generate item-level billing (see Pricing).
- REMOVED — a record that disappeared from a source since last seen.
Removal safety: a source only ever reports REMOVED records when it completed a full, successful, unfiltered fetch. If a source temporarily fails, or you scope a run with states/counties/maxItems, the Actor will never mistake "we didn't look at everything this time" for "everything we didn't see is gone" — no false mass-removals.
Snapshot vs. monitoring mode
Set with the deltaMode input field:
deltaMode value | What you get |
|---|---|
all (default) | Every current record, tagged NEW/UPDATED/UNCHANGED (plus REMOVED if enabled) — a full current snapshot with change context. |
changes-only | Only NEW, UPDATED, and REMOVED — skip everything unchanged. |
new-only | Only brand-new records — the cleanest feed for a scheduled lead alert. |
Your first run for a given stateStoreName establishes the baseline for whichever sources you selected — everything comes back as NEW. If you'd rather not see that initial flood, set initializeStateOnly: true on the first run: it saves the baseline silently and returns no dataset items, so your next real run starts clean.
Example use cases
Track new grid projects — run on a schedule with deltaMode: "new-only" and read only newly discovered projects each time.
Monitor battery-storage projects — set projectTypes: ["battery-storage", "hybrid"] (paired solar/wind+storage projects normalize to hybrid, storage-only projects to battery-storage) and watch for new or updated records.
Watch California interconnection activity — set sourceIds: ["caiso-public-queue"] and monitor queue changes on a schedule.
Research US interconnection projects broadly — set sourceIds: ["lbnl-queued-up"] for the broadest national interconnection dataset in this Actor.
Research hosting capacity — set sourceIds: ["nyseg-rge-hosting-capacity"] or ["psco-colorado-hosting-capacity"] for utility-published available-capacity data.
How much does it cost?
This Actor uses Pay-Per-Event pricing — you pay for what you get, not for compute time:
| Event | Fires when | Price |
|---|---|---|
| Actor start | Once per run | $0.05 |
| Initial item | A record from a source's first-ever baseline population | $0.0002 |
| New item | A genuinely new record found during ongoing monitoring | $0.005 |
| Updated item | A record whose tracked data changed | $0.005 |
| Removed item | A record safely confirmed removed from a source | $0.002 |
| Unchanged | — | $0, never charged |
A full run across all five sources contains around 45,000 normalized records and costs approximately $9 on a fresh baseline. After that baseline is established, an identical monitoring run with no changes costs approximately $0.05 — because unchanged records are never billed.
| Monitoring result | Approximate price |
|---|---|
| No changes | $0.05 |
| 10 changes | $0.10 |
| 100 changes | $0.55 |
| 1,000 changes | $5.05 |
Actual cost depends on which sources you select, how many records populate your baseline, and how many changes a given run detects. Full pricing rationale and how it's implemented: docs/MONETIZATION.md.
If you run all five sources for your first baseline, set a run cost limit of at least $10 (Console's "Cost limit" field, or maxTotalChargeUsd via the API). Without one, Apify caps spending at your currently available balance — the Actor will stop cleanly and safely partway through rather than overcharging you, but you'd get an incomplete baseline. Running sources one at a time, or starting with initializeStateOnly: true, avoids this entirely.
Example input
Full dataset, default settings (all five sources, first run establishes your baseline):
{}
Establish a baseline quietly on your first run (no dataset items, just seeds the monitor):
{ "initializeStateOnly": true }
Monitor CAISO for new and updated records only:
{"sourceIds": ["caiso-public-queue"],"deltaMode": "changes-only","stateStoreName": "my-caiso-monitor"}
Track new battery-storage and hybrid projects above 20 MW:
{"projectTypes": ["battery-storage", "hybrid"],"minCapacityMw": 20,"deltaMode": "new-only","stateStoreName": "my-storage-monitor"}
Research hosting capacity in New York:
{"sourceIds": ["nyseg-rge-hosting-capacity"],"minAvailableCapacityMw": 1,"deltaMode": "all"}
See the Input tab for every available field and its default.
Example output
{"recordId": "626a22fa6d633851e7abdb6e","sourceId": "caiso-public-queue","sourceName": "CAISO Public Generator Interconnection Queue","sourceType": "interconnection-queue","projectName": "TULE WIND","developer": null,"projectType": "hybrid","rawTechnology": "Wind Turbine + Battery","capacityMw": 193.8,"state": "CA","county": "SAN DIEGO","utility": "SDGE","isoRto": "CAISO","pointOfInterconnection": "Boulevard East Substation 138 kV","queueDate": "2004-05-24","status": "active","rawStatus": "Active","changeType": "NEW","changedFields": null,"sourceUrl": "https://www.caiso.com/library/interconnection-queue-reports","scrapedAt": "2026-08-21T22:12:47.560Z"}
This is a real record from a live run — a 193.8 MW wind+battery hybrid project in San Diego County, CA. Fields not relevant to a given record (e.g. substation/voltageKv for a queue-type source, or latitude/longitude when a source doesn't publish coordinates) are null rather than guessed.
Scheduling
Use Apify Schedules to run this Actor automatically — daily or weekly monitoring is the primary intended use. Keep stateStoreName identical across scheduled runs so persistent state keeps working: that's what lets the Actor tell a genuinely new record apart from one it already showed you.
API
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('huykenny/us-grid-capacity-interconnection-monitor').call({sourceIds: ['caiso-public-queue'],deltaMode: 'new-only',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('huykenny/us-grid-capacity-interconnection-monitor').call(run_input={'sourceIds': ['caiso-public-queue'],'deltaMode': 'new-only',})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
curl:
curl "https://api.apify.com/v2/acts/huykenny~us-grid-capacity-interconnection-monitor/runs?token=YOUR_APIFY_TOKEN" \-X POST \-H "Content-Type: application/json" \-d '{"sourceIds": ["caiso-public-queue"], "deltaMode": "new-only"}'
Output formats
Results land in a standard Apify dataset — export as JSON, CSV, Excel, or XML directly from the Console, or read them via the Apify API/SDKs.
Integrations
Works with anything that connects to an Apify dataset: the Apify API, Schedules, webhooks, Make, Zapier, or a direct pull into your own database or workflow.
Reliability
- Each source is isolated — one source failing (a utility endpoint down, a spreadsheet format change) doesn't stop the run; the others still complete, and the failure is reported in the run's
RUN_SUMMARY. - Parsing is defensive: unexpected values are left
null/unknownrather than guessed, and known source quirks (footer rows, broken header rows, Excel serial dates) are handled explicitly per source. - Removal safety (above) protects against a temporary source failure ever being mistaken for real removals.
- Every source's raw schema is normalized into one consistent output schema, with the original source text preserved in
rawTechnology/rawStatusfor traceability.
Limitations
- This Actor does not cover every US utility or interconnection authority — five sources today, across NY, CA, CO, and one national dataset. See docs/SOURCES.md for what was researched and rejected.
- Public source datasets can contain inaccuracies, and the utilities/operators can change their formats or update cadence without notice.
- Hosting capacity is not guaranteed interconnection capacity, and interconnection-queue presence does not guarantee a project gets built.
- Normalized fields (
developer,capacityMw, dates, etc.) are genuinely absent for some sources — this reflects what the source actually publishes, not a parsing gap. - Some source-specific values (e.g. NYISO's short fuel-type codes) are kept in their original source-native form pending a verified lookup table.
- External sources can occasionally be temporarily unavailable; that source is skipped for the run rather than failing everything.
Disclaimer
This is an independent, community-built Actor and is not affiliated with, endorsed by, or sponsored by CAISO, NYISO, LBNL, NYSEG, RG&E, Xcel Energy, PSCo, or any other referenced utility, grid operator, government organization, or data publisher. All trademarks and organization names belong to their respective owners. The Actor aggregates publicly accessible data for structured research and monitoring purposes.
Support
If a source stops working, a field looks incorrect, you hit an error, or you need help configuring a run, please open an issue through this Actor's Issues tab on Apify Store.