Method and sources
Every number on this site is either an input you can change or a formula written out below. If you disagree with an assumption, good. Change it.
How the forecast works
Traffic-driven sites (highway, retail) start from the road. EVs passing per day equal traffic times EV share. Sessions equal EVs passing times a capture rate, adjusted for site quality and for competing ports nearby (each competitor cuts demand by roughly 13%, a factor of 1 divided by 1 plus 0.15 per competitor).
Destination sites (hotel, workplace, multifamily) start from the people already there. Sessions equal population times the share present on a given day, times vehicles per person, times EV share, times the share of those EVs that charge that day.
Both are capped at practical capacity: ports times operating minutes divided by session length, times a maximum utilization. Past that cap, drivers queue or leave, and the forecast says so.
EV share grows at a constant annual rate, capped at 60% of vehicles. That cap is a safety rail, not a prediction.
The honest part. Capture rates and charging propensity are the least certain numbers here. The defaults are informed judgment, not measured values. If you have session data from comparable sites, overwrite them. That one change will improve the forecast more than everything else combined.
How the site planner works
- Capex is hardware, plus make-ready (per kW for DC, per port for Level 2), plus any utility upgrade, plus design and permitting as a percentage (with a minimum), plus contingency. Grants and make-ready rebates come off the top.
- Grid energy equals delivered energy divided by charger efficiency. You pay for the losses, the driver doesn't.
- Billed demand equals installed kW times a billed demand percentage, every month, all year. Real peaks depend on how sessions overlap. At low utilization, assume they overlap more than you'd like.
- Sessions grow at a flat annual rate, capped at 24 per port per day for DC and 8 for Level 2.
- Results are in today's dollars, pre-tax, unlevered, with no depreciation, no hardware replacement, and no residual value. Chargers that last ten years exist. Plan as if yours are not among them.
- Break-even sessions scale DC and Level 2 sessions together until net present value hits zero.
Live data, and where it comes from
The forecast can pull two things automatically: traffic counts from state DOT ArcGIS map services, and public port counts within a radius from the federal Alternative Fuels Data Center. Both are open and free. Traffic needs no key. Port counts use a monthly snapshot of the station database that ships with this site, or the live database if you paste in a free key from developer.nlr.gov/signup.
The lookups run in your browser and call those services directly. When one fails, the agency’s server is down, rate limited, or has moved its layer, which state DOTs do without telling anyone. Type the number in by hand and try again later.
The traffic lookup queries an ArcGIS feature layer for count sites within your radius, reads whichever field carries volume, and picks the busiest road inside your radius. It lists the next few too, so you can choose the one your driveway is actually on. Field names differ by state, which is why it matches on the name rather than assuming one. If your state is not in the list, paste its layer URL: most DOTs publish one, and searching your state plus "AADT ArcGIS REST" finds it. The built-in list is a convenience, not a guarantee. Verify against the source map.
Counts are per segment and sometimes per direction. The busiest nearby road is a starting point, not the traffic passing your driveway. An interstate half a mile away with no exit near you is scenery.
How the battery math works
- Daily grid energy is split into a busy window (hours and share of daily energy, both inputs). Everything above what the grid limit can supply in that window is the battery's job.
- The battery covers up to the lesser of its usable energy and its power times the window length. Whatever it cannot cover is spread across the window and added back to billed demand.
- Billed demand becomes the grid limit plus any shortfall, and never more than the site would have drawn without a battery.
- Round trip losses are charged as extra energy on everything that passes through the battery.
- Battery cost is per kWh and per kW for a site battery, or a premium per charger for battery-integrated units. Replacement, if you set a year, lands as a cash outflow in that year.
- The result is compared against the identical site with no battery, so the NPV difference is what the battery is worth on its own.
- What this does not model: recharge scheduling between windows, time-of-use arbitrage, degradation curves, grid services revenue, and the utility interconnection review that storage triggers. All four matter. None are one-liners.
Running it offline with a local data file
The repository includes build-data.mjs, a dependency-free Node script that downloads open data and writes compact JSON into a data folder next to the page. This site ships a monthly station snapshot built this way and loads it only when you ask for a port count. Serve your own copy and the page picks up whatever data/manifest.json lists. Or load files by hand in the forecast, which works with no network at all, because reading a file you chose is not a network call.
Once a file is loaded, lookups run in your browser: the busiest traffic count nearby, and port counts inside your radius. No API key, no network, no rate limits, and the page remembers the data between visits.
The formats are deliberately boring, so you can generate them from anything:
- Traffic: type "aadt", rows of latitude, longitude, and daily volume.
- Stations: type "stations", rows of latitude, longitude, DC fast port count, and Level 2 port count.
What about PlugShare
PlugShare has the best crowd-sourced charging data in North America and no open API. Access is a commercial license through Recargo, and their terms do not permit scraping or redistributing the data. A site that tells people to respect their vendor contracts should not ship a scraper, so this one does not. If you have a PlugShare license, the local file format above is three columns wide and you can fill it yourself.
The open substitutes are the Alternative Fuels Data Center, which is federal data and free to use, and Open Charge Map, which is community data under a share-alike license. Neither has PlugShare's check-in history, which is the part you would actually have wanted.
Utility rates
The planner can pull current commercial tariffs from the US Utility Rate Database, which is maintained on behalf of the Department of Energy and served through OpenEI. It lists EV-specific schedules first, averages time-of-use energy prices into one number, and takes the highest first-tier demand charge. That simplification is fine for screening and wrong for a final model. Real tariffs have seasons, tiers, ratchets and minimums, and the schedule you land on depends on your service size, which the utility decides.
Where the benchmarks come from
Session-level logs from operating sites, published with permission and stripped of anything that identifies a site, host, operator or driver. Figures are trailing twelve months where a site has that history and lifetime otherwise. A session counts when it delivered at least half a kWh. Failed sessions are attempts that delivered nothing.
How the newer benchmark data was cleaned
- Some session exports had their dates partly converted by spreadsheet software, which read day-first dates as month-first whenever the day was 12 or under. Those dates were swapped back before any analysis. Without the fix, some sites appeared to have more than a year of history when they had eleven weeks.
- Sessions per port count each connector. Sessions per charger count each physical unit, which is the fairer comparison because the dual-connector units in this data almost always charged one car at a time.
- "Drivers who left with nothing" counts failed attempts that were not followed by a successful session at the same site within fifteen minutes, with clusters of failures counted once. It's a better measure of lost customers than the raw failure rate, which counts every retry.
- Figures are for the most recent twelve months where a site has that much history, and for the full period otherwise.
Where to get real inputs
- Traffic counts: your state DOT's traffic count map (search your state name plus "traffic counts"), or the FHWA Highway Performance Monitoring System.
- EV registrations and adoption: AFDC maps and data and Atlas EV Hub.
- Competing chargers: the AFDC station locator.
- Incentives: AFDC laws and incentives, DSIRE, and the 30C credit entry for the federal status.
- Electricity rates: your utility's commercial tariff book, and ask specifically about EV rate schedules.
- Costs: real quotes. Hardware from at least two vendors, make-ready from a local electrical contractor who has done a charging site before, and utility upgrade costs from the utility itself.
Limits
This is a ballpark tool for learning and early screening. It is not an engineering study, a traffic study, an interconnection estimate, or investment, legal, or tax advice. Use it to decide which sites deserve a real study, not to skip the study.
License
Written content is released under Creative Commons Attribution 4.0. Code is released under the MIT license. Copy it, fork it, fix it, and credit the source. Corrections to assumptions are the most useful contribution you can make.
Data credits: Alternative Fuels Data Center, US Department of Energy. Open Charge Map contributors, CC BY-SA 4.0. State departments of transportation for traffic counts. If you publish a copy that ships their data, carry their credits with it.
Last updated October 2026.