Utility & Maintenance DashboardPhase 0 · sample data
May 2026
5 active alerts
Bill error 305 E 86th St · estimated gas read
↑14% spend 240 W 37th St · Electric
AI flag 585 Flatbush Ave · gas anomaly
47d to expiry 1150 Grand Concourse · ESCO supply
Emergency No heat — 1150 Grand Concourse #4C · super en route
Manage thresholds
Portfolio · four boroughs of NYC · ~1,500 ConEd meters & ESCO accounts

Where the money is going this month

Spend by property

May 2026 · top 6

Recent alerts

last 7 days
Bill audit flagged an estimated read
305 E 86th St · ConEd gas · $24,605.68 on a 64-day winter estimate — dispute drafted
1h ago
Electric spend up 14% MoM
240 W 37th St · ConEd · exceeds 10% threshold, usage flat
2h ago
AI flagged a gas anomaly
585 Flatbush Ave · usage 18% above seasonal expectation
5h ago
After-hours emergency dispatched
No heat · 1150 Grand Concourse #4C · work order filed 1:52 AM, super confirmed ETA
9h ago
3 routine calls batched for 7 AM
Transcripts + callback numbers attached · nobody was woken
9h ago
ESCO supply contract expires in 47 days
1150 Grand Concourse · Constellation · fixed → index rate reset risk
1d ago
Account ledger · ~1,500 ConEd meters · electric = common-area · gas = master · 13-account sample shown

Accounts

Showing 13 of 1,502 accounts
Account / Property Supplier Commodity Usage Eff. rate Cost/unit Supply / Delivery Rate class 12-mo MoM YoY Contract
ESCO supply contracts · from master spreadsheet

Contracts

Third-party supply contracts riding on the utility account — same meter, same delivery, but the supply half is bought from an ESCO. Fixed and index agreements across the portfolio, flagged at 60 days to expiration.

Property / Account ESCO supplier Commodity Rate Locked rate Volume Term Days left
After-hours AI voice agent · answers · triages · files · dispatches

After hours, the line answers itself

A natural AI voice takes every maintenance call, triages it against per-property emergency criteria, files the work order with the full transcript attached, and dispatches the on-call super — call, then text, then the next super. Routine calls never wake anyone. Work orders file via a non-Yardi path.

Calls handled
this week · after hours
112
zero missed · median answer 2 rings
Work orders
auto-filed with transcript
38
emergency + routine · callback verified
Supers dispatched
call → text → next super
14
per-building zones · ETA texted to tenant
Coverage
every call answered
24/7
supers reroute their own line by phone

Tonight — live line

click a call
No heat — 1150 Grand Concourse #4C · Bronx
1:52 AM · vulnerable occupant · emergency criteria matched · super paged
4m
Leaking radiator — 88-30 Roosevelt #2A · Queens
11:41 PM · contained · batched for the 7 AM board
22m
Coverage reroute — Super M. Reyes phoned in
"Send my calls to Adam tonight" · verified against roster · reverts 7:00 AM
38m

The call

1:52 AM · 74 seconds
Tenant
There's no heat in 4C and I have a baby here.
AI agent
I understand — no heat with an infant in the unit. I'm filing this as an emergency right now. Is the radiator cold to the touch, or warm but the apartment stays cold?
Tenant
Completely cold. Since around midnight.
AI agent
Thank you. The work order is filed and I'm paging the on-call super for your building now. You'll get a text when he's on his way.
System
WO-2207-114 created · on-call super paged (Bronx zone) · tenant texted ETA 1:55 AM
✓ Emergency criteria matched✓ Work order filed✓ Super confirmed ETA

Dispatch ladder

per-building zones
Emergency criteria matched (no heat + infant)
Criteria are configurable per property — no heat, flood / active leak, lockout, gas smell (911 first).
Work order filed with full transcript — 1:53 AM
Recording, transcript and verified callback number ride with the ticket.
On-call super called → answered — 1:54 AM
No answer in 90 seconds → text + call the next super on the ladder.
Awaiting on-site resolution
Ladder exhausted → escalate to the on-call manager line. Every hop timestamped.

The 7 AM board

nobody was woken for these
Leaking radiator — 88-30 Roosevelt #2A
11:41 PM · steady drip, contained · tenant prefers morning entry
Plumbing
Intercom buzzing — 585 Flatbush Ave #3L
12:15 AM · intermittent · no entry needed
Electrical
Stuck window — 240 W 37th St (office 4)
12:48 AM · commercial tenant · access after 9 AM
Carpentry
At 7:00 AM the batch posts to the day team with transcripts and access notes attached, sorted and ready to assign. Tenants are texted their work window.
Notification rules

Alerts

Every threshold is adjustable per portfolio. Changes apply to the next scrape cycle.

Contract expiration

Warn before a fixed-rate supply agreement ends or resets to index pricing, so renewals can be negotiated in time.

Cost spike

Flag any account whose total billed cost jumps beyond the limit versus the prior period.

After-hours maintenance line

What counts as an emergency (immediate dispatch) vs. routine (batched for the morning). Criteria apply per property.

Recipients & delivery

Who gets notified and how. Each rule can route to a different group.
JS Jay S. × OG Ownership group × + Add

AI anomaly & seasonal flags

Surfaces bills that fall outside the seasonal pattern for that account — catching unusual charges the fixed thresholds miss.

Bill audit & recovery

Every parsed bill runs through automated checks. Anything flagged as abnormal is one-click actionable — a dispute, read request, tax claim, rate review or supply review, pre-filled and ready to send. The goal: claw back overcharges and cut cost everywhere across the utility process.
Billing errors → dispute / credit
Estimated reads (escalate on repeat or large bills)
Meter change not reconciled across swap
Demand ratchet — stale peak carried forward
Meter multiplier / CT-ratio error
Duplicate or double-billed period
Late fees & interest (if billing-caused)
Back-billing beyond the allowed window
Cost spike with no usage change
Tier creep from an over-estimated read
Savings → optimize / switch
Sales-tax exemption (retroactive recovery)
Rate class / tariff not optimal
ESCO supply above index benchmark
Contract expiry / rate reset
Vacant / closed account still billed
Output
Auto-draft the matching letter per flag
One provider to start — every check above runs on the ConEd book (electric + gas) and on ESCO supply statements. Additional providers plug into the same engine as a later phase.
Data ingestion · no Yardi login required

Sources

Every input is something the team already has or can authorize in a click. One provider to start — ConEd. The dashboard reads from a secure mirror — never directly from Yardi or a shared password.

Inputs
ConEd — credentialed bill capturePrimary

The branded PDF invoice for every meter — captured per account (MFA handled), archived on arrival, then parsed line-by-line. This is the piece a usage feed does not deliver. A direct authenticated portal fetch stands by as the in-house contingency. Access is organized as a handful of portal logins, each holding many accounts — count confirmed at kickoff.

Login 1620 accts
Login 2430 accts
Login 3280 accts
Login 4172 accts
≈1,502 ConEd meters (common-area electric · master gas) · last bill parsed 2h ago
Green Button ConnectAuthorized

ConEd usage + cost data, authorized by ownership in a click — no stored passwords, revocable any time. Green Button does not deliver the PDF invoice; the capture layer above does.

Usage feed · pacing & anomaly detection between bills
Forwarded bills + OCRActive

ESCO supply statements billed separately land in a dedicated address and are parsed automatically — every charge line extracted, matched to its ConEd delivery account.

≈40 ESCO statements/mo · last parsed 3h ago
AI maintenance lineActive

After-hours calls answered by the AI voice agent — transcribed, triaged, filed as work orders via a non-Yardi path, supers dispatched. Full recording + transcript stored with each ticket.

112 calls this week · 38 work orders filed
Roster importOne-time

Account → property → units, from the master sheet the team already keeps (or derived from bills + public NYC building records / BBL). No Yardi login.

Maps every meter to its building & unit count
Secure mirror
🗄
Private database

Encrypted storage, least-access inputs, and a full audit trail of every file and feed received. The dashboard reads only from here.

EncryptedAudit logNo write-back to Yardi
Reads & analyzes only — this platform never pays bills or pushes data back into Yardi. Writing invoices into Yardi is a separately scoped future add-on, once the import path is confirmed.
Draft dispute

Auto-generated from the flagged charge. Review, edit, then copy into the supplier portal or your email.

Sends nothing automatically — you stay in control.