# Home Electrical Load Calculator (NEC 220) (`jumblemog/electrical-load-calculator`) Actor

NEC Article 220 home electrical load calculation from plain text: standard and optional methods, service size and conductors, and whether an existing panel can take a new EV charger, heat pump or appliance.

- **URL**: https://apify.com/jumblemog/electrical-load-calculator.md
- **Developed by:** [Jumble Mog](https://apify.com/jumblemog) (community)
- **Categories:** AI, Automation, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Home Electrical Load Calculator (NEC 220)

**Work out a home's electrical load and service size by NEC Article 220, or whether the existing panel can take a new EV charger, heat pump or hot tub, from one line of text.** Ask `2,400 sq ft house, electric range 12 kW, dryer 5 kW, water heater 4.5 kW, AC 30 A, electric furnace 10 kW` or `1,800 sq ft home with gas heat, AC 24 A, dishwasher, disposal, microwave, 200 A panel, can I add a 48 A EV charger` and you get back:

- **Both NEC methods, line by line**: the standard method (general lighting and receptacles with the Table 220.45 demand factors, small-appliance and laundry circuits, fixed appliances at 75% when there are four or more, dryers, cooking by Table 220.55, the larger of heating or cooling, 25% of the largest motor, EV chargers) and the optional method of 220.82 (10 kVA at 100% and the rest at 40%, plus heating or cooling by 220.82(C)).
- **The service size**: the calculated amps at 240 V, the standard service rating that covers it (at least 100 A) and the service conductors in copper and aluminum from Table 310.12.
- **An existing panel check**: spare or missing amps, and for appliances marked `add` or `new`, the load before and after.
- **A chart** and a **Markdown report** showing every number with its NEC section.

It's made for:

- Electricians, EV charger and heat pump installers checking whether a panel upgrade is needed before quoting.
- Homeowners, builders, inspectors and students who want the load calculation done and explained.
- AI agents, quoting tools and energy apps that need a code-based service size they can cite.

![A chart made by this Actor for a 2,400 sq ft all-electric house on a 100 A service adding a 48 A EV charger: the demand load of each part by the standard method (202 A) and the optional method (136 A), against the 150 A service needed and the existing 100 A service](https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/electrical-load-calculator-example.png?signature=6kygrc6hCfbMJb57xh9d)

### How to use it

1. Write **Homes**, one per entry. The form has examples.
2. Optionally choose the **Default method**: both (the service is sized by the lower, as the NEC allows), standard or optional.
3. Click **Start**. Each home is a row in the results, with its summary, chart and report.

#### What you can write

| You write | It means |
|---|---|
| `2,400 sq ft`, `220 m2` | Floor area (3 VA per ft², 220.41) |
| `range 12 kW`, `cooktop 7 kW`, `2 wall ovens 4 kW each` | Cooking (a cooktop and ovens count as one range, Table 220.55 Note 4) |
| `dryer 5 kW`, `water heater 4500 W`, `dishwasher`, `disposal`, `microwave 12 A at 120 V` | Appliances; amps are at 240 V unless you write `120 V` |
| `AC 30 A`, `3 ton AC`, `mini-split 15 A`, `heat pump 25 A` | Cooling and heat pumps |
| `10 kW heat strips`, `electric furnace 10 kW`, `6 baseboard heaters 1.5 kW each` | Electric heat (central or separately controlled units) |
| `48 A EV charger`, `well pump 1 hp`, `pool pump 1.5 hp`, `hot tub 50 A` | EV chargers, motors and others |
| `gas heat`, `gas range` | Not electric: left out |
| `200 A service`, `100 amp panel` | The existing service, checked against the load |
| `add a 48 A EV charger`, `new heat pump 25 A` | New loads: the load before and after |
| `3 small-appliance circuits`, `2 laundry circuits` | More than the minimum 2 and 1 |
| `optional method`, `standard method` | One method only |

An appliance without a rating gets a typical one, listed in the notes. The same as an object: `{"area": 2000, "appliances": ["range 12 kW", {"name": "dryer", "kw": 5}, {"name": "EV charger", "amps": 40, "new": true}], "existingService": 100}`.

### Examples

- `2,400 sq ft house, electric range 12 kW, dryer 5 kW, water heater 4.5 kW, dishwasher 1.2 kW, disposal 0.9 kW, microwave 1.5 kW, AC 30 A, electric furnace 10 kW` → standard 36.9 kVA = 154 A; optional 27.9 kVA = 116 A; a 125 A service with 2 AWG copper or 1/0 aluminum.
- `1,800 sq ft home with gas heat, AC 24 A, dishwasher, disposal, microwave, 200 A panel, can I add a 48 A EV charger` → the charger takes the load from 72 A to 91 A: it fits with 109 A to spare.
- `3,000 sq ft, heat pump 25 A with 10 kW heat strips, cooktop 7 kW, 2 wall ovens 4 kW each, dryer 5.5 kW, water heater 4500 W, 100 A service` → 141 A by the optional method: the 100 A service is 41 A short; 150 A needed.
- `1,200 sq ft cabin, 6 baseboard heaters 1.5 kW each, range 8 kW, water heater 4.5 kW, well pump 1 hp` → 78 A by the optional method (40% of four or more separately controlled heaters): the 100 A minimum service.

### How-to examples

Each example is a complete input; the results are from runs of the Actor (also listed under **Examples**).

#### How to calculate a home's electrical load and service size (NEC 220)

```json
{"requests": ["2,400 sq ft house, electric range 12 kW, dryer 5 kW, water heater 4.5 kW, dishwasher 1.2 kW, disposal 0.9 kW, microwave 1.5 kW, AC 30 A, electric furnace 10 kW"]}
```

Result: standard method 36.9 kVA = 154 A; optional method 27.9 kVA = 116 A; a 125 A service with 2 AWG copper or 1/0 aluminum. Every number comes with its NEC section.

#### How to check if a panel can take an EV charger

```json
{"requests": ["1,800 sq ft home with gas heat, AC 24 A, dishwasher, disposal, microwave, 200 A panel, can I add a 48 A EV charger"]}
```

Result: the charger takes the load from 72 A to 91 A, so it fits with 109 A to spare.

#### How to find out if a service needs an upgrade for a heat pump

```json
{"requests": ["3,000 sq ft, heat pump 25 A with 10 kW heat strips, cooktop 7 kW, 2 wall ovens 4 kW each, dryer 5.5 kW, water heater 4500 W, 100 A service"]}
```

Result: 141 A by the optional method, so the 100 A service is 41 A short and a 150 A service is needed.

#### How to let an AI agent do load calculations

Add this Actor to the [Apify MCP server](https://mcp.apify.com) with `https://mcp.apify.com/?tools=jumblemog/electrical-load-calculator`. The agent lists the house and its appliances in one line, the way the owner described them, and answers with the amps, the service size and whether the panel has room.

### FAQ

**Which method does it use?** Both NEC Article 220 methods, standard and optional, line by line, from the 2023 NEC.

**Can it check an existing panel?** Yes. Give the panel size and mark new appliances with `add` or `new`, and it gives the load before and after and the spare amps.

**Does it size the service wires?** Yes, in copper and aluminum, from Table 310.12.

**Is it a permit calculation?** It's a design aid. Use the equipment's nameplate ratings; the authority having jurisdiction and local amendments have the final word.

### Input

| Field | What it is |
|---|---|
| `requests` | Homes, as lines of text or objects (up to 200 per run) |
| `method` | both, standard or optional, when a request doesn't say |
| `charts` | Draw a chart for each request (default on) |

### Output

One dataset item per request, also saved together in the run's `OUTPUT` record:

```json
{
  "request": 1, "status": "ok", "type": "load", "title": "Dwelling service load calculation",
  "summary": "Calculated load 36.9 kVA = 154 A by the standard method and 27.9 kVA = 116 A by the optional method (220.82). A 125 A service is enough, with 2 AWG copper or 1/0 AWG aluminum service conductors (Table 310.12).",
  "service": {"method": "optional", "calculatedAmps": 116.3, "recommended": 125, "copper": "2 AWG", "aluminum": "1/0 AWG"},
  "standard": {"lines": [{"load": "Cooking", "connected": 12000, "demand": 8000, "basis": "Table 220.55 column C, 8 kW"}, "..."],
               "totalVA": 36920, "amps": 153.8, "service": 175},
  "optional": {"lines": ["..."], "totalVA": 27920, "amps": 116.3, "service": 125},
  "appliances": [{"name": "AC", "category": "cooling", "rating": "30 A at 240 V", "va": 7200, "count": 1, "motor": true, "new": false}],
  "units": {"power": "VA", "current": "A", "area": "ft²"},
  "imageUrl": "https://api.apify.com/v2/key-value-stores/.../records/001-Dwelling-service-load-calculation.png"
}
```

With an existing service, `service` also has `existing`, `spareAmps`, `existingOk` and, when there are new appliances, `beforeNewAmps`. Every item has `warnings`, `notes` (every assumption), a Markdown `report` and links to the chart and report. A request that can't be computed has `"status": "failed"` and the reason in `error`, and isn't billed.

### How it works

1. **Standard method** (Article 220 Part III): 3 VA per ft² plus 1,500 VA per small-appliance and laundry circuit, with 3,000 VA at 100% and the rest at 35% (Table 220.45); fixed appliances at 75% when four or more (220.53); dryers at 5,000 W or nameplate (220.54); cooking by Table 220.55 (8 kW up to 12 kW, plus 5% per kW over); heating or cooling, whichever is larger, at 100% (220.60); 25% of the largest motor (220.50); EV chargers at 7,200 W or nameplate (220.57).
2. **Optional method** (220.82): everything except heating and cooling at nameplate, 10 kVA at 100% and the rest at 40%, plus the largest of 100% of cooling, the heat pump with 65% of its supplemental heat, 65% of central electric heat, or 65% (under four) or 40% (four or more) of separately controlled heaters.
3. **Service**: amps = VA ÷ 240, the next standard rating of at least 100 A (230.79(C)), and the Table 310.12 conductors for it.

### Pricing

You pay one low price per request, at the price shown on this page. The chart and report are included. Requests that can't be computed are never charged. If you set a maximum cost per run, the Actor stops before a request that wouldn't fit.

### Speed

A request takes milliseconds. A run through the API answers in about 10 seconds, including the cloud container starting.

### Tips and limits

- **This is a design aid.** Use the nameplate ratings of the actual equipment; the authority having jurisdiction and your local code amendments have the final word.
- **One dwelling unit on a 120/240 V single-phase service.** Multifamily buildings (220.84), commercial services, three-phase and 208 V services aren't covered.
- **Tons** are turned into about 1.2 kVA per ton when no amps are given; the nameplate minimum circuit ampacity is better.
- **Not included**: the neutral load (220.61), the measured-load method for existing homes (220.87) and EV energy management systems (625.42), which can let a charger fit a smaller service.
- **Limits**: 200 requests per run.

### For AI agents and developers

This Actor works with the [Apify MCP server](https://mcp.apify.com), so AI agents can call it as a tool. Pass `requests` as plain text and read `summary`, `service` and `warnings`. A direct API call that waits for the answer:

```bash
curl -X POST "https://api.apify.com/v2/acts/jumblemog~electrical-load-calculator/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"requests": ["2,000 sq ft house, range 12 kW, dryer 5 kW, water heater 4.5 kW, AC 24 A, 100 A service, add a 40 A EV charger"]}'
```

`run-sync` instead returns the run's `OUTPUT`: the status, the counts and every result as JSON.

In Python, with the `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("jumblemog/electrical-load-calculator").call(run_input={
    "requests": [{"area": 1600, "appliances": ["heat pump 20 A", "heat strips 8 kW", "range 10 kW"], "existingService": 100}],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["summary"])
```

### Credits

- Method: NFPA 70, *National Electrical Code*, 2023 edition: Article 220, 230.79, Table 310.12 and Table 430.248. This Actor is not affiliated with the NFPA.
- Charts: [Vega-Lite](https://vega.github.io/vega-lite/) and [vl-convert](https://github.com/vega/vl-convert) (BSD-3-Clause), with the [Inter](https://rsms.me/inter/) font (SIL Open Font License).

# Actor input Schema

## `requests` (type: `array`):

One home or dwelling unit per entry, as a line of text or an object. Give the floor area ('2,400 sq ft' or '220 m2') and the appliances with their ratings in kW, W, VA, A (240 V unless '120 V' is written), hp or tons: range, cooktop, ovens, dryer, water heater, dishwasher, disposal, microwave, AC or mini-split, heat pump, heat strips, furnace, baseboard heaters ('6 baseboard heaters 1.5 kW each'), EV charger, well pump, pool pump, hot tub. Appliances without a rating get a typical one (noted). Options: '200 A service' (checks the existing panel), 'add' or 'new' before an appliance (shows the load before and after), '3 small-appliance circuits', '2 laundry circuits', 'optional method' or 'standard method' (both by default). Object fields: area, smallApplianceCircuits, laundryCircuits, appliances (text or {name, kw, w, va, amps, volts, hp, tons, count, new}), existingService, method, title, text.

## `method` (type: `string`):

Which NEC method sizes the service when a request doesn't say.

## `charts` (type: `boolean`):

The demand load of each part of the calculation and the calculated amps against the service.

## Actor input object example

```json
{
  "requests": [
    "2,400 sq ft house, electric range 12 kW, dryer 5 kW, water heater 4.5 kW, dishwasher 1.2 kW, disposal 0.9 kW, microwave 1.5 kW, AC 30 A, electric furnace 10 kW",
    "1,800 sq ft home with gas heat, AC 24 A, dishwasher, disposal, microwave, 200 A panel, can I add a 48 A EV charger",
    "3,000 sq ft, heat pump 25 A with 10 kW heat strips, cooktop 7 kW, 2 wall ovens 4 kW each, dryer 5.5 kW, water heater 4500 W, 100 A service",
    "1,200 sq ft cabin, 6 baseboard heaters 1.5 kW each, range 8 kW, water heater 4.5 kW, well pump 1 hp",
    {
      "area": 2000,
      "appliances": [
        "range 12 kW",
        {
          "name": "dryer",
          "kw": 5
        },
        {
          "name": "EV charger",
          "amps": 40,
          "new": true
        }
      ],
      "existingService": 100
    }
  ],
  "charts": true
}
```

# Actor output Schema

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

One row per request: the summary and chart.

## `output` (type: `string`):

The OUTPUT record: every result in one JSON object.

## `files` (type: `string`):

Charts (PNG and SVG) and Markdown reports in the run's key-value store.

# 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 = {
    "requests": [
        "2,400 sq ft house, electric range 12 kW, dryer 5 kW, water heater 4.5 kW, dishwasher 1.2 kW, disposal 0.9 kW, microwave 1.5 kW, AC 30 A, electric furnace 10 kW",
        "1,800 sq ft home with gas heat, AC 24 A, dishwasher, disposal, microwave, 200 A panel, can I add a 48 A EV charger",
        "3,000 sq ft, heat pump 25 A with 10 kW heat strips, cooktop 7 kW, 2 wall ovens 4 kW each, dryer 5.5 kW, water heater 4500 W, 100 A service",
        "1,200 sq ft cabin, 6 baseboard heaters 1.5 kW each, range 8 kW, water heater 4.5 kW, well pump 1 hp",
        {
            "area": 2000,
            "appliances": [
                "range 12 kW",
                {
                    "name": "dryer",
                    "kw": 5
                },
                {
                    "name": "EV charger",
                    "amps": 40,
                    "new": true
                }
            ],
            "existingService": 100
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jumblemog/electrical-load-calculator").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 = { "requests": [
        "2,400 sq ft house, electric range 12 kW, dryer 5 kW, water heater 4.5 kW, dishwasher 1.2 kW, disposal 0.9 kW, microwave 1.5 kW, AC 30 A, electric furnace 10 kW",
        "1,800 sq ft home with gas heat, AC 24 A, dishwasher, disposal, microwave, 200 A panel, can I add a 48 A EV charger",
        "3,000 sq ft, heat pump 25 A with 10 kW heat strips, cooktop 7 kW, 2 wall ovens 4 kW each, dryer 5.5 kW, water heater 4500 W, 100 A service",
        "1,200 sq ft cabin, 6 baseboard heaters 1.5 kW each, range 8 kW, water heater 4.5 kW, well pump 1 hp",
        {
            "area": 2000,
            "appliances": [
                "range 12 kW",
                {
                    "name": "dryer",
                    "kw": 5,
                },
                {
                    "name": "EV charger",
                    "amps": 40,
                    "new": True,
                },
            ],
            "existingService": 100,
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("jumblemog/electrical-load-calculator").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 '{
  "requests": [
    "2,400 sq ft house, electric range 12 kW, dryer 5 kW, water heater 4.5 kW, dishwasher 1.2 kW, disposal 0.9 kW, microwave 1.5 kW, AC 30 A, electric furnace 10 kW",
    "1,800 sq ft home with gas heat, AC 24 A, dishwasher, disposal, microwave, 200 A panel, can I add a 48 A EV charger",
    "3,000 sq ft, heat pump 25 A with 10 kW heat strips, cooktop 7 kW, 2 wall ovens 4 kW each, dryer 5.5 kW, water heater 4500 W, 100 A service",
    "1,200 sq ft cabin, 6 baseboard heaters 1.5 kW each, range 8 kW, water heater 4.5 kW, well pump 1 hp",
    {
      "area": 2000,
      "appliances": [
        "range 12 kW",
        {
          "name": "dryer",
          "kw": 5
        },
        {
          "name": "EV charger",
          "amps": 40,
          "new": true
        }
      ],
      "existingService": 100
    }
  ]
}' |
apify call jumblemog/electrical-load-calculator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jumblemog/electrical-load-calculator"
        }
    }
}
```

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/3iJeMMwdOhF6xwzUD/builds/zMmGlZj7AW20Ouiqd/openapi.json
