Click to upload or drag a CSV here label, address (or lat/lng)
Search parameters
Radius (mi)
Min capacity
Season
Show top N
Display only — the API returns every candidate in radius (often 40–150+ per site); this just caps what's shown per site when expanded. Doesn't affect CSV export.
Score weights
Weighted score
Capacity50
Distance50
Data quality50
Queue ratio50
Transformer margin50
Same open-weight logic as the map UI (utils/scoring.py, parity-tested). Scores are relative to each site's own result set — not comparable across sites.
Up to 100 sites per batch (server-enforced cap, see handover doc §16). Cached geocodes resolve instantly; new addresses hit Geocodio.
Contract (verified against api.py, Aug 8):radius_miles / min_capacity_mw
/ season go in the URL query string; only file and optional JSON-string
weights are multipart form fields. No top_n param exists server-side —
"Show top N" above is display-only. Response is {matched, unmatched}; each matched
site carries input_address/matched_address/geocode_source/
geocode_confidence/geocode_match_type plus results[].
⬡
Upload a CSV of candidate sites, set your search parameters and weights, then run the batch. Results are scored per-site using the same open-weight logic as the map tool.