# OpenEI Utility Rates Scraper (`parseforge/openei-utility-rates-scraper`) Actor

Scrapes electricity rates from the OpenEI public database. Returns each rate as a flat row with the utility name, sector, rate schedule, and pricing details.

- **URL**: https://apify.com/parseforge/openei-utility-rates-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.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.
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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### OpenEI Utility Rates Scraper

**Scrape residential, commercial, and industrial electricity rates from OpenEI, up to a million per run.** Each rate includes the utility name, effective dates, tariff details, and energy charges. Export to CSV, JSON, Excel, or XML.

OpenEI publishes thousands of utility rate structures across the United States, but manually comparing them is slow and error-prone. This scraper reads the public rate database directly, returning each rate as a clean, flat row. No API key, no registration, and no rate limits to manage.

| Who uses it | What they scrape OpenEI for |
|---|---|
| Solar installers | Calculate accurate customer savings by comparing their current utility rate against a proposed solar offset. |
| Energy consultants | Benchmark commercial and industrial rates across service territories for client proposals. |
| Rate analysts | Track tariff changes and effective dates for specific utilities over time. |
| EV infrastructure planners | Model the cost of electricity for charging stations in different utility districts. |

### What it does

This Actor collects utility electricity rates from the OpenEI database and returns each one as a structured row with the utility name, rate schedule, and pricing details.

- ⚡ **Full rate details:** energy charges, demand charges, fixed fees, and time-of-use periods where available.
- 📋 **Structured output:** every rate is a flat row with the utility name, sector, and rate schedule label.
- 🔄 **Bulk collection:** set a high maximum and pull the entire public database in one run.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with OpenEI data

**☀️ Model solar savings by utility territory.**

A solar installer pulls all residential rates for a state, matches each against a proposed system output, and generates a personalized savings estimate for every lead in that zip code.

**🏭 Compare industrial rates across states.**

An energy broker scrapes commercial and industrial rates for the Midwest, identifies the three lowest-cost utilities for a manufacturing client, and recommends site locations.

**📈 Monitor rate changes over time.**

A rate analyst runs the scraper weekly, diffs the effective dates and energy charges, and flags utilities that have filed new tariffs.

**🚗 Plan EV charging costs.**

An infrastructure planner collects time-of-use rates for all utilities along a highway corridor and models the per-mile electricity cost for a proposed charging network.

### Why choose this scraper

|  | What you get |
|---|---|
| **Utility name** | The electric utility that offers this rate |
| **Rate schedule** | The tariff name or label, such as 'Residential Standard' or 'TOU-G' |
| **Sector** | Residential, commercial, or industrial classification |
| **Energy charges** | Per-kWh pricing and any tiered or time-of-use breakdowns |

### How it compares

No other Store actor targets OpenEI the same way, so the honest comparison is with the alternatives teams actually weigh.

| | OpenEI Utility Rates Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When OpenEI changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Set the maximum number of rates to collect per run, from a single sample up to the full database. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "maxItems": 10
}
```

A larger pull:

```json
{
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.0065 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $0.65 |
| 1,000 results | $6.50 |
| 10,000 results | $65.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [OpenEI Utility Rates Scraper](https://apify.com/parseforge/openei-utility-rates-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to OpenEI through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/openei-utility-rates-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting fewer results than my maxItems setting?**

The scraper collects all available rates up to your maximum. If the OpenEI database has fewer total rates than your maxItems value, you will receive all of them and the run will finish normally.

**Some rates are missing energy charge details.**

OpenEI's data completeness varies by utility and rate schedule. Some tariffs may have only the rate label and effective dates. The scraper returns whatever fields OpenEI has published for each rate.

**The run timed out.**

Large runs pulling hundreds of thousands of rates can take time. Increase the run timeout in your Actor task settings, or reduce the maxItems value and run multiple smaller batches.

**I need rates for a specific utility but cannot find them.**

Not all utilities have submitted their rate data to OpenEI. Check OpenEI.org directly to confirm the utility is listed. If it is missing, the data has not been uploaded to the public database.

**The output has duplicate rows.**

OpenEI may list multiple versions of a rate with different effective dates. Check the effective date fields in your dataset to distinguish historical versions from the current tariff.

### FAQ

| Question | Answer |
|---|---|
| What is OpenEI? | OpenEI is an open data platform run by the U.S. Department of Energy that publishes energy information, including a database of thousands of utility electricity rates from across the United States. |
| Does this scraper need an API key? | No. It reads the publicly available rate data directly from OpenEI.org. You do not need to register an application or obtain an API key. |
| What data fields does each rate include? | Each row includes the utility name, rate schedule label, sector (residential, commercial, or industrial), effective dates, and the pricing components such as energy charges and demand charges where OpenEI has them. |
| Can I filter by state or utility? | The scraper collects rates from the full database. You can filter the resulting dataset by state, utility name, or sector after the run using the dataset tools in Apify or by exporting to your own analysis environment. |
| How many rates can I scrape in one run? | You set the maximum. The input lets you choose any number from 1 up to 1,000,000, so you can pull a small sample or the entire public database. |
| Are commercial and industrial rates included? | Yes. The scraper collects rates for all sectors that OpenEI publishes: residential, commercial, and industrial. |
| How often is the OpenEI data updated? | OpenEI updates its rate database as utilities file new tariffs. Run the scraper on a schedule to keep your local copy in sync with the latest published rates. |
| What export formats are supported? | You can export your results to CSV, JSON, Excel, or XML from the Apify dataset tab. |
| Does this cover all U.S. utilities? | It covers every utility rate that has been submitted to the OpenEI database. Coverage is extensive but depends on what utilities and contributors have uploaded. |
| Can I use this for time-of-use rate analysis? | Yes. When OpenEI includes time-of-use period details for a rate, those fields appear in the output row alongside the standard energy charges. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by OpenEI.org. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

How many utility rates to collect per run.

## Actor input object example

```json
{
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

Overview

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/openei-utility-rates-scraper").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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parseforge/openei-utility-rates-scraper").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 '{
  "maxItems": 10
}' |
apify call parseforge/openei-utility-rates-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/openei-utility-rates-scraper"
        }
    }
}

```

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/VyiCawCGXweHcYZU4/builds/OyFwQSuX3kRvfhRd9/openapi.json
