Transmission Line & Substation Distance API by Coordinates avatar

Transmission Line & Substation Distance API by Coordinates

Pricing

from $5.50 / 1,000 results

Go to Apify Store
Transmission Line & Substation Distance API by Coordinates

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

Kyle Maloney

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

3 days ago

Last modified

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:

Sitev1.1 reportedv1.2 reports
Storm Lake, IA2.545 mi @ 161 kV, 2 lines0.649 mi @ 69 kV, 21 lines3.9× overstated
Bend, OR1.204 mi @ 115 kV, 27 lines0.300 mi @ 69 kV, 37 lines4.0× overstated
Ashburn, VA0.507 mi, 18 lines0.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)

TierRule
HIGHAn existing line ≥ 230 kV within 2 miles
MEDIUMExisting ≥ 115 kV within 2 miles, or ≥ 230 kV within 5 miles
LOWAny existing line within the search radius
NONENo existing line within the search radius
ERRORAsset 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)

FieldMeaning
asset_label, asset_lat, asset_lonYour site, echoed back
nearest_line_distance_milesDistance to nearest transmission line, perpendicular to the line geometry
nearest_line_voltage_kvIts voltage in kV; null when the source reports the unknown sentinel (14,248 of 94,619 records)
nearest_line_volt_classVoltage class: UNDER 100, SUB 100, 100-161, 220-287, 345, 500, 735 AND ABOVE, DC, Unknown
nearest_line_ownerOwning utility (null on the ~17% of records that don't report one)
nearest_line_statusRaw status (NOT AVAILABLE = unspecified, not out of service)
nearest_line_typeAC; OVERHEAD / AC; UNDERGROUND / DC; … — underground tap costs differ materially
nearest_line_geometry_inferredtrue when the alignment was inferred, not surveyed — a confidence flag on the distance
nearest_line_substation_a / _bThe 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_radiusLine-record count within radius (source segments, not distinct circuits)
sub_transmission_lines_within_radius69 kV sub-transmission proximity — existing lines below 100 kV in range
lines_under_construction_within_radiusOf those, how many are flagged under construction
max_voltage_within_radius_kv / max_existing_voltage_within_radius_kvHighest voltage in range, all statuses / existing only
nearest_substation_nameNearest substation to coordinates — null when the source has only a numbered placeholder
nearest_substation_namedfalse = a substation was found but is unnamed upstream (vs no substation at all)
nearest_substation_idStable upstream ID, so an unnamed substation is still joinable and dedupable
nearest_named_substation_name / _distance_milesThe 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_radiusHow many substations in range have a real name
nearest_substation_distance_miles / _distance_kmDistance in both units
nearest_substation_max_voltage / _min_voltage_kvSubstation voltages. Both are sparse upstream: max voltage is null for 78% of substations and min voltage for 81% — see the FAQ
nearest_substation_line_countCircuits 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_radiusSubstation count within radius
nearest_power_plant_name / _distance_miles / _distance_km / _fuel / _type / _capacity_mw / _sectorNearest plant (fuel e.g. natural gas, solar, wind, batteries)
nearest_power_plant_eia_plant_code / _eia_utility_idEIA join keys into EIA-860 / EIA-923
power_plants_within_radius, generation_mw_within_radiusPlant count and total MW in range
battery_storage_mw_within_radiusBattery storage near my site, in MW
solar_mw_within_radius, wind_mw_within_radiusSolar / wind MW in range
serving_utility_nameWhich utility serves this address
serving_utility_eia_idUtility service territory API join key (EIA utility ID)
serving_utility_type, serving_utility_regulated, holding_company, serving_utility_stateOwnership, regulation, parent
utility_customers, utility_summer_peak_mw, utility_summer_capacity_mwUtility scale (EIA-861)
balancing_authority_code, iso_rto, market_typeISO RTO territory lookup by lat long: PJM, ERCOT, CAISO, MISO, SPP, ISO-NE, NYISO
overlapping_utility_countHow many territories cover the point (>1 is common)
state_industrial_price_cents_kwh / state_commercial_price_cents_kwh / electricity_price_period / _scopeOptional EIA state price (needs a free key)
planned_line_nearbyLow-confidence, non-authoritative hint (opt-in; see FAQ)
grid_tierHIGH / MEDIUM / LOW / NONE / ERROR
lines_source, lines_data_vintage, substation_data_vintage, generation_data_period, utility_data_yearWhich layer served the row and how current each source is
error, checked_at, source_urlError 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 tariffelectricity_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-tracker
  • malonestar/site-due-diligence-bundle
  • malonestar/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.