Transmission Line & Substation Distance API by Coordinates
Pricing
from $5.50 / 1,000 results
Transmission Line & Substation Distance API by Coordinates
For each lat/lon site: distance to the nearest transmission line (kV, owner, overhead/underground), nearest substation, nearest power plant, the serving utility and its ISO/RTO, plus generation and battery-storage MW nearby. Includes sub-100 kV. Data-center, renewable, BESS and EV siting.
Pricing
from $5.50 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Maloney
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Nearest Transmission Line & Substation Finder by Lat/Lon
Answers "how far is this site from transmission and a substation, and who serves it?" for a whole list of sites at once. For every lat/lon you get the distance to the nearest transmission line (kV, owning utility, overhead vs underground), the nearest substation to those coordinates, the nearest power plant, how much generation and battery storage sits within the radius, which utility serves this address and its ISO/RTO — plus a HIGH/MEDIUM/LOW grid-access tier you can sort a portfolio by. Built for data center site power availability screening, BESS interconnection site screening, and renewable grid capacity site selection.
What's new in v1.2 (important accuracy fix)
v1.0–1.1 silently missed 44.8% of the national transmission network. The layer they queried was a truncated copy containing zero circuits below 100 kV — every 69 kV / 46 kV / 34.5 kV sub-transmission line was invisible. That is exactly the 69 kV sub-transmission proximity that mid-size solar, BESS and EV-charging projects actually interconnect to.
v1.2 moves to the complete national layer (94,619 records vs 52,244). Measured effect on real sites:
| Site | v1.1 reported | v1.2 reports | |
|---|---|---|---|
| Storm Lake, IA | 2.545 mi @ 161 kV, 2 lines | 0.649 mi @ 69 kV, 21 lines | 3.9× overstated |
| Bend, OR | 1.204 mi @ 115 kV, 27 lines | 0.300 mi @ 69 kV, 37 lines | 4.0× overstated |
| Ashburn, VA | 0.507 mi, 18 lines | 0.435 mi, 31 lines |
Also new: serving utility + ISO/RTO per site, EIA's monthly power-plant inventory (the previous 2018 snapshot is missing the 766 MW Potomac Energy Center outside Ashburn entirely, and at Bend OR it sees 2 plants where EIA sees 5, including 29.8 MW of post-2018 solar), battery/solar/wind MW within the radius, honest substation naming, miles alongside kilometres, and a data-vintage stamp on every source. All existing columns are unchanged — v1.2 is purely additive.
How it works
For every asset the actor runs a bounding-box query against the national transmission-line, substation and power-plant layers, plus a point-in-polygon lookup against electric retail service territories, then computes distances locally. Line distance is measured perpendicular to the line geometry (true point-to-segment, not to the nearest vertex or a centroid). One combined row is emitted per asset. No API key, no login.
A bad coordinate or a total transmission-layer failure produces an ERROR row for that asset only. If the primary line layer is unreachable the actor automatically falls back to the older truncated copy and records that in lines_source — so a degraded answer is never mistaken for a complete one. If every asset fails, the run fails outright and nothing is billed.
Grid-access tier (editorial model)
| Tier | Rule |
|---|---|
| HIGH | An existing line ≥ 230 kV within 2 miles |
| MEDIUM | Existing ≥ 115 kV within 2 miles, or ≥ 230 kV within 5 miles |
| LOW | Any existing line within the search radius |
| NONE | No existing line within the search radius |
| ERROR | Asset could not be screened (see error) |
"Existing" means energized lines, excluding those whose STATUS marks them under construction, proposed or retired. Most existing lines are tagged NOT AVAILABLE rather than IN SERVICE, so this screener treats NOT AVAILABLE as existing — a strict IN SERVICE-only filter would wrongly report NONE next to real 230 kV lines. Only 65 of 52,244 records nationally carry a genuinely non-operational status, so lines_under_construction_within_radius is 0 for almost every site. The tier is a heuristic for ranking sites, not an interconnection or hosting-capacity study.
Example input
{"assets": [{ "lat": 39.0170, "lon": -77.4600, "label": "Ashburn VA data center site" },{ "lat": 42.6414, "lon": -95.2097, "label": "Storm Lake IA site" }],"radiusMiles": 10,"includeSubstations": true,"includePowerPlants": true,"includeUtility": true}
Tip on radius: 5 miles is a tight transmission screen, but generation is sparser than transmission, so a 5-mile circle often contains no power plant at all and the whole nearest_power_plant_* / generation_mw_within_radius block comes back null. Both sites above are exactly that case — the nearest plant to Ashburn (the 766 MW Potomac Energy Center) is 5.37 miles out. Use 10 miles or more when you care about the generation and storage columns.
Output fields (one combined row per asset)
| Field | Meaning |
|---|---|
asset_label, asset_lat, asset_lon | Your site, echoed back |
nearest_line_distance_miles | Distance to nearest transmission line, perpendicular to the line geometry |
nearest_line_voltage_kv | Its voltage in kV; null when the source reports the unknown sentinel (14,248 of 94,619 records) |
nearest_line_volt_class | Voltage class: UNDER 100, SUB 100, 100-161, 220-287, 345, 500, 735 AND ABOVE, DC, Unknown |
nearest_line_owner | Owning utility (null on the ~17% of records that don't report one) |
nearest_line_status | Raw status (NOT AVAILABLE = unspecified, not out of service) |
nearest_line_type | AC; OVERHEAD / AC; UNDERGROUND / DC; … — underground tap costs differ materially |
nearest_line_geometry_inferred | true when the alignment was inferred, not surveyed — a confidence flag on the distance |
nearest_line_substation_a / _b | The two substations the circuit connects. null when the source carries only a numbered UNKNOWN146360 placeholder — 43% of records for the A end, 22% for the B end |
lines_within_radius | Line-record count within radius (source segments, not distinct circuits) |
sub_transmission_lines_within_radius | 69 kV sub-transmission proximity — existing lines below 100 kV in range |
lines_under_construction_within_radius | Of those, how many are flagged under construction |
max_voltage_within_radius_kv / max_existing_voltage_within_radius_kv | Highest voltage in range, all statuses / existing only |
nearest_substation_name | Nearest substation to coordinates — null when the source has only a numbered placeholder |
nearest_substation_named | false = a substation was found but is unnamed upstream (vs no substation at all) |
nearest_substation_id | Stable upstream ID, so an unnamed substation is still joinable and dedupable |
nearest_named_substation_name / _distance_miles | The closest substation that actually has a name. Use this when nearest_substation_name is null — the single closest is often an unnamed placeholder while real named substations sit just behind it |
named_substations_within_radius | How many substations in range have a real name |
nearest_substation_distance_miles / _distance_km | Distance in both units |
nearest_substation_max_voltage / _min_voltage_kv | Substation voltages. Both are sparse upstream: max voltage is null for 78% of substations and min voltage for 81% — see the FAQ |
nearest_substation_line_count | Circuits terminating there — a better capacity proxy than max voltage. null when unreported (the source encodes unknown as 0 on 19% of substations; that is never emitted as a count) |
substations_within_radius | Substation count within radius |
nearest_power_plant_name / _distance_miles / _distance_km / _fuel / _type / _capacity_mw / _sector | Nearest plant (fuel e.g. natural gas, solar, wind, batteries) |
nearest_power_plant_eia_plant_code / _eia_utility_id | EIA join keys into EIA-860 / EIA-923 |
power_plants_within_radius, generation_mw_within_radius | Plant count and total MW in range |
battery_storage_mw_within_radius | Battery storage near my site, in MW |
solar_mw_within_radius, wind_mw_within_radius | Solar / wind MW in range |
serving_utility_name | Which utility serves this address |
serving_utility_eia_id | Utility service territory API join key (EIA utility ID) |
serving_utility_type, serving_utility_regulated, holding_company, serving_utility_state | Ownership, regulation, parent |
utility_customers, utility_summer_peak_mw, utility_summer_capacity_mw | Utility scale (EIA-861) |
balancing_authority_code, iso_rto, market_type | ISO RTO territory lookup by lat long: PJM, ERCOT, CAISO, MISO, SPP, ISO-NE, NYISO |
overlapping_utility_count | How many territories cover the point (>1 is common) |
state_industrial_price_cents_kwh / state_commercial_price_cents_kwh / electricity_price_period / _scope | Optional EIA state price (needs a free key) |
planned_line_nearby | Low-confidence, non-authoritative hint (opt-in; see FAQ) |
grid_tier | HIGH / MEDIUM / LOW / NONE / ERROR |
lines_source, lines_data_vintage, substation_data_vintage, generation_data_period, utility_data_year | Which layer served the row and how current each source is |
error, checked_at, source_url | Error message, run timestamp, source layer |
Serving utility, ISO/RTO and market
For each site the actor resolves the retail electric service territory containing the point. Territories genuinely overlap — Phoenix returns 12, Dallas 5 — so the actor picks a primary: the largest by summer peak load, excluding federal power marketers. Verified to select Oncor at Dallas, Arizona Public Service at Phoenix, PG&E at San Jose and Virginia Electric & Power at Ashburn.
The balancing-authority code is then mapped to one of the seven US organized markets. iso_rto is null in vertically integrated territory, which is itself the answer — it tells you there is no ISO interconnection queue to enter. This pairs directly with an interconnection-queue tracker keyed on the same seven ISOs.
Field reliability, measured across all 2,931 territories: utility name and EIA ID 100%, balancing authority 96.7%, customers 99.2%, summer peak 42.5%, ownership type 42.5%, regulated status 22.7%, summer capacity 21.5%. Do not compute a reserve margin from capacity minus peak — capacity is present on barely a fifth of records.
Generation and storage nearby
Power-plant data comes from EIA's monthly operable-generator inventory (13,446 plants), refreshed far more often than the static critical-infrastructure snapshots most grid tools use. Beyond the nearest plant you get total generation MW in range broken out by battery, solar and wind — the strongest co-location signal for a data-centre or BESS developer, and impossible to answer from a 2018 snapshot that predates essentially the entire US grid-battery fleet.
Optional: electricity price
Supply a free EIA API key as eiaApiKey to populate state_industrial_price_cents_kwh and state_commercial_price_cents_kwh (latest month, ~2-month lag). No key is required — leave it empty and those two columns are null while everything else runs normally. One lookup per distinct state, not per site. These are state-by-sector averages, not the specific utility tariff — electricity_price_scope says so on every row.
Who uses it
- Data-center site selectors screening candidate parcels for data center site power availability before spending on interconnection studies.
- Solar, wind and BESS developers ranking parcels by grid capacity site selection and the voltage class they can realistically tie into.
- EV-charging network planners verifying grid presence and sub-transmission access around candidate hubs.
- Land agents adding grid-access, nearest-substation and serving-utility columns to listing sheets.
- Energy analysts looking at line density, ownership, fuel mix and market structure around a point.
Use as an MCP tool
This Actor is callable directly by any MCP-compatible AI agent through Apify's hosted MCP server. There is no server to run and no integration code to write - the tool schema an agent sees is generated from this Actor's own input and dataset schemas.
Endpoint
https://mcp.apify.com?tools=malonestar/hifld-grid-proximity-screener
Claude Desktop, Claude Code or Cursor - add to claude_desktop_config.json,
.mcp.json or .cursor/mcp.json respectively:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=malonestar/hifld-grid-proximity-screener","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Get a token at https://console.apify.com/settings/integrations. Claude Desktop can
also authenticate interactively via OAuth against https://mcp.apify.com with no
headers block. Full reference: https://docs.apify.com/platform/integrations/mcp
Try asking your agent
For these four candidate solar sites, how far is the nearest transmission line, what voltage is it, and which utility and ISO would serve them?
Chains well with - expose these alongside it by comma-separating the tools
parameter, and the agent can carry results from one into the next:
malonestar/interconnection-queue-trackermalonestar/site-due-diligence-bundlemalonestar/epa-contaminated-site-screener
https://mcp.apify.com?tools=malonestar/hifld-grid-proximity-screener,malonestar/interconnection-queue-tracker,malonestar/site-due-diligence-bundle,malonestar/epa-contaminated-site-screener
Billing is unchanged when called as an MCP tool: this Actor is Pay-Per-Event and an agent pays the same per-result price a human does. A run that cannot answer fails without billing rather than returning an unverified negative.
FAQ
Is there a distance to nearest electric substation API? Yes — every screened asset returns nearest_substation_distance_miles, nearest_substation_distance_km, nearest_substation_name, nearest_substation_line_count and nearest_substation_max_voltage, on by default.
Can I do substation proximity screening for data centers in bulk? Yes — submit up to 2,000 sites per run as assets and get one row per site.
Which utility serves this address, and what ISO is it in? serving_utility_name and iso_rto answer both from a lat/lon, with serving_utility_eia_id as the join key into EIA data.
Does it include sub-transmission (69 kV and below)? Yes, since v1.2 — see sub_transmission_lines_within_radius. Set minVoltageKv to 115 or 230 if you only want high-voltage access.
Which columns are commonly null, and why? Substation max_voltage (78% null upstream), min_voltage_kv (81%), name (62% placeholders — use nearest_named_substation_name), and line substation_a/_b (43%/22% placeholders). The four electricity-price columns need an optional EIA key; planned_line_nearby needs includePlanned: true; error is null on every successful row by design. Nothing else should be null across a batch — if a whole block is, the radius is likely too tight.
Why is nearest_substation_max_voltage often null? Because the only national public substation dataset does not publish it for 78% of substations, and 62% carry a numbered placeholder instead of a real name. Rather than emit UNKNOWN30442 as if it were a name, this actor nulls it and sets nearest_substation_named: false, and gives you nearest_named_substation_name (the closest substation that does have a name), nearest_substation_id (a stable identifier you can still join on), and nearest_substation_line_count as a more reliable capacity proxy. That layer is a 2018 snapshot — substation_data_vintage says so on every row. No fresher national substation service exists publicly; we report the limitation instead of hiding it.
Is the distance exact? The math is exact: distances are measured perpendicular to the published geometry, accurate to a few feet at screening scales. The geometry is a separate question — 62% of line records are flagged as inferred rather than surveyed, which is why nearest_line_geometry_inferred is on every row. Treat a flagged line's distance as approximate.
Does it include planned transmission lines? Only as an opt-in, non-authoritative hint. The planned-line layer is an editable scratch layer with geometry only (no owner/voltage/status). Set includePlanned: true to populate planned_line_nearby and treat it as a weak signal.
Where does the data come from? Public, keyless ArcGIS FeatureServers: the national electric power transmission lines layer hosted by Esri's Federal user community (2025-08), electric substations mirrored on FEMA's ArcGIS Online org (2018-04), EIA's US power plants inventory (monthly), and HIFLD electric retail service territories (2025-08). Vintages differ by source and are stamped on every row. This is advisory data — confirm with the utility before committing capital.
How is it billed? One result per screened asset. Assets that fail to screen are emitted as ERROR rows unless you set skipErrorRows: true; a run in which every asset fails is failed outright and bills nothing.
