A preview of what development intelligence could look like. Conversion across the full pipeline, from outreach through wins. Live data, unfinished UI.
Full conversion picture and capacity by state.
| State | Leads | Deals | Deal % | Won | Won % | MW Won | Top Utility |
|---|
Conversion performance and capacity across the largest utilities by lead count.
| Utility | State | Leads | Deals | Deal % | Won | MW Won |
|---|
Feature service: development_enriched/FeatureServer/0. A view joining the development table to ssm_outreach_batch_polygon via spatial relationship. Contains all leads and deals with their batch metadata. ~21,000 records. This is the primary data source for pipeline, conversion, and project stage analytics.
Feature service: SSM_Outreach_Batch/FeatureServer/0. The authoritative batch tracking table. Each record is one outreach batch with initial_contacts (true proposal count), proposal_date, status, and assignment metadata. ~194 records. Used as the denominator for all conversion calculations to avoid survivorship bias in the development layer.
Public feature service from Esri Living Atlas: USA_Counties_Generalized_Boundaries. Provides county/planning region polygon boundaries for the conversion choropleth map. Joined to development data on normalized county name + state abbreviation.
2024+ filter: Conversion metrics are scoped to outreach batches with a proposal_date in 2024 or later. Older data suffers from survivorship bias — leads that didn't convert were cleaned from the development layer over time, inflating historical rates. The "Historical Rates" toggle in the Cost to Convert table includes all-time data with this caveat.
Join key: batch_uuid links SSM batches to development_enriched records. Records without a batch_uuid are excluded from conversion analysis.
Dates: created_date is never used — it reflects GIS feature creation, not lead origination. batch_proposal_date (proposal sent date) is the lead-start timestamp.
Developer attribution: Deals count toward a developer only if the deal's batch_uuid matches one of their assigned batches AND the deal's developer field still matches. Reassigned deals don't count for either person.
Total MW(AC) capacity from records where project_stage = 'Operating/In Construction'. This field lumps operating and in-construction projects together — there's no way to separate them from this field alone.
Total MW(AC) from records where status = 'deal' and the deal is not yet won, lost, or terminated. Represents capacity actively being pursued.
Sum of initial_contacts from SSM batches with a proposal_date in the current calendar year.
Deals / total proposals, using SSM initial_contacts as the denominator. Scoped to batches with proposal_date >= 2024.
Excludes batches sent in the last 90 days. Fresh proposals haven't had time to field calls or convert, so including them artificially tanks the rate. A batch of 1,000 letters sent last week would show as 0 deals / 1,000 contacts until the phone starts ringing. The 90-day maturation window gives outreach time to actually work before its batch gets counted.
All development_enriched records plotted as centroids. Grey = leads, orange = deals, green = won. Queried with returnCentroid=true since the underlying features are polygons.
Sum of initial_contacts from SSM batches with proposal_date in the current calendar year. The +/-% compares to last year's YTD through the same calendar date.
Trailing 90-day contact volume from SSM batches. The +/-% compares to the rolling 90-day average across all 2024+ data: total contacts / (date range in days / 90).
Top 3 programs ranked by total initial_contacts in each time window (YTD and trailing 90 days). Sourced from SSM_Outreach_Batch.
Monthly contact volume from SSM batches. Current year (solid orange) vs prior year (dashed grey). Each point is the sum of initial_contacts for batches with proposal_date in that month.
ArcGIS heatmap renderer applied to development_enriched polygon centroids filtered to records with a batch_uuid. Toggle between last 90 days and YTD. Uses returnCentroid=true to convert polygons to points (heatmap renderer requires point geometry).
Non-completed batches from SSM_Outreach_Batch plus recently-due completed batches (due_date in last 90 days). Timeline shows 5 stages: data-prep → ssm-in-progress → outreach-prep → proposal-sent → completed. Click to expand details. Unnamed data-prep batches are hidden.
Deals / total proposals, using SSM initial_contacts as the denominator. Scoped to batches with proposal_date >= 2024. This is the front-of-funnel efficiency — what percentage of proposals result in a deal.
Excludes batches sent in the last 90 days. Fresh proposals haven't had time to field calls or convert, so including them artificially tanks the rate. A batch of 1,000 letters sent last week would show as 0 deals / 1,000 contacts until the phone starts ringing. The 90-day maturation window gives outreach time to actually work before its batch gets counted. This same maturation filter is applied everywhere on this tab (KPIs, Deal Rate Map, Sankey diagrams, Cost to Convert table).
Inverse of deal rate — how many proposals need to be sent to generate one deal. Lower is better. Calculated as total proposals / total deals. Uses the same denominator as Deal Rate (excludes batches sent in the last 90 days).
Won / deals — closing efficiency once a deal exists. This measures the back of the funnel: of the deals that made it past the initial response, what percentage actually close. Does NOT include "no response" leads in the denominator. Only counts deals from batches at least 90 days old (same maturation filter as Deal Rate).
5 / (MW won / total proposals). Only counts MW from Closed (Won) records. Answers: "at our current win rate and average project size, how many proposals does it take to land 5 MW of closed-won capacity?" Uses the same 90-day maturation filter as the other conversion KPIs.
Two views toggled via "By County" / "By Utility" buttons:
By County: County polygons from Esri's public USA Counties layer, joined to development_enriched by normalized county + state. Handles Connecticut planning regions and St./St naming variations via an alias table. Minimum 30 proposals to appear.
By Utility: Service territory polygons from Service_Territories/FeatureServer/0, joined to outreach batch conversion data by utility + state. Shows the same deal rate but at the utility territory level instead of county.
Colors: red (0–3%), orange (3–6%), yellow (6–10%), light green (10–15%), green (15%+). Click any area for a popup with the name, deal rate, proposals sent, and deals.
Excludes batches sent in the last 90 days so immature outreach doesn't skew a county or utility's rate downward. Same maturation filter as the Deal Rate KPI.
Two-tier visualization. Top bar shows the proposal→response split (orange = no response, green = deals). The Sankey below zooms into deals only: Won (green), Active Pipeline (light green = Interested/Considering/Late-Stage/Verbal Yes), On Hold/Delayed (yellow), Lost + Terminated (red spectrum, broken out by closed_lost_reason). Programs and developers with fewer than 30 proposals are excluded from the dropdown.
Excludes batches sent in the last 90 days so a program or developer with recent heavy outreach isn't penalized for leads that haven't converted yet.
Developer Sankey uses strict attribution: proposals = initial_contacts from SSM batches assigned to that developer. Deals count only if the deal's batch_uuid matches one of their batches AND developer still matches. Reassigned deals don't count for either developer's conversion rate.
Per program: proposals needed for 1 deal, 1 win, and 5 MW. Toggle between "Since 2024" (default, reliable) and "Historical Rates" (all-time, subject to survivorship bias). Programs with fewer than 30 proposals or zero deals are excluded. Sorted by proposals-per-deal ascending (most efficient first).
Both toggles exclude batches sent in the last 90 days. The maturation rule applies regardless of cohort year — fresh proposals need time to field calls whether you're looking at 2024+ or all-time.
Total records where status = 'deal'. Includes all deal stages: interested, negotiating, won, lost, stalled, and terminated.
Deals in Considering Agreement + Late-Stage Negotiation + Verbal Yes. These are the closest to closing and represent near-term revenue.
Total MW(AC) from deals that are not yet won, lost, or terminated. Represents capacity actively being pursued.
Deals in On Hold + Decision Delayed + Terminated stages. These are stuck or dead and may need intervention or cleanup.
Horizontal progression: Interested → Negotiating (Considering Agreement + Late-Stage Negotiation + Verbal Yes) → Won. Stalled branch (On Hold + Decision Delayed) drops down as a two-way arrow indicating deals can return to the main flow. Each node shows deal count and MW(AC). Filterable by program (min 10 deals).
Shows the development lifecycle: Early Stage → Mid Stage → Late Stage → Awarded → NTP Ready → Operating. Uses the project_stage field which takes over from stage once a deal progresses to development. All steps shown even if count is zero. Filterable by program.
Records where project_stage = 'Operating/In Construction'. This field lumps both together — cannot be separated without service_date or energization which are sparsely populated.
Total MW(AC) from Operating/In Construction records. Average per project shown in subtitle.
Records in Awarded + NTP Ready + Mid Stage + Late Stage. These are projects heading toward construction but not yet building or operating.
Total MW(AC) capacity in pre-build project stages. Represents near-term construction pipeline.
Uses the build_group field, which contains year tags ('2024', '2025', etc.) and named cohorts. Only year-prefixed values are charted. Past years shown in green (presumably operating), current year in orange, future in grey.
Records in pre-build project stages (Awarded, NTP Ready, Mid Stage, Late Stage) sorted by MW(AC) descending. Shows deal name, state, utility, stage, build group, and capacity.