Solutions designed with your goals in mind

The Portal That Became the Warehouse's Front Door, Then Learned to Read Its Own Mail

8+

Workspaces replacing manual report assembly

On demand

PDF reports, zero internal involvement

Zero

Wrong-deal routing after the AI guard went live
"Warehouse data becomes useful the moment the right person can open it at the right level of detail without waiting for someone to compile it. Building client separation into the access model from the start, rather than applying it as a filter later, is what made every client's view trustworthy from day one."

At a glance

  • A governed, multi-tenant portal connecting income statements, rent rolls, leasing summaries, and daily operational data to investors and asset managers
  • An AI pipeline that reads inbound email attachments and classifies which deal, system, and report type each one is, before any number touches the warehouse
  • Every financial calculation stays deterministic, reconciled SQL. AI is confined to the one genuinely ambiguous decision

Ember Capital manages multifamily real estate portfolios where investment decisions depend on a consistent, accurate view of property performance. Occupancy, rent collections, delinquency, leasing activity, budget comparisons, and financial snapshots all matter, and so does knowing which user sees which property, with one client's data never touching another's.

The data existed across warehouse tables covering income statements, rent rolls, leasing summaries, pro formas, and daily operational records. What didn't exist was a client-facing interface that made that data accessible, navigable, and useful to the people who needed to act on it. Manual report assembly was the workaround. It was slow, inconsistent, and didn't scale.

That same manual pattern showed up further upstream, too. Hundreds of property-management reports arrived by SharePoint and email every cycle, spanning four different property-management systems and dozens of client and deal IDs. Getting each file routed to the correct deal and report type was manual and error-prone. Analysts spent their time shuffling spreadsheets instead of interpreting them, and leadership couldn't reliably see the portfolio's numbers on demand.

Two different symptoms. One root cause: no layer connected the data to the people, or the systems, that needed to act on it.

Every domain Ember Capital relied on connected into one governed architecture:

Domain Sources What we track
Portfolio Performance PostgreSQL warehouse AUM, trailing NOI, occupancy, receivables, expenses, economic occupancy, lease expirations
Daily Operations Daily operational tables Occupancy, delinquency, leasing activity, leasing trends, rent roll weekly summary
Financials Merged income statements, budget and proforma tables Revenue, expenses, budget variance, trailing financials
Rents and Occupancy Merged rent rolls, resident aged receivables Rent collections, delinquency by unit, occupancy trends
Leasing Leasing summaries Lease expirations, new leases, renewal rates, leasing pipeline
Client and Access Supabase Auth, client config Role assignments, client branding, property-level access scoping

Why the standard answer didn't fit twice

The instinctive fix for the portal problem is a better reporting template on a fixed schedule. That works for a handful of clients. As the portfolio grows, the coordination overhead scales with it; every update needs someone to pull, format and send.

The instinctive fix for the inbound mail problem is hand-written parsing rules. Those break the moment a client renames a file, changes a folder, or renames a column, and a mis-routed file can lose value downstream with no visible error, the most dangerous failure mode for financial data.

Ember Capital didn't need a better template or better rules. They needed a production portal with structural client separation, and a classification layer that got the one genuinely ambiguous decision right without ever guessing on the numbers themselves.

What Orbit built

The portal: Built on the constraint that every client sees exactly their own data at the right level of detail, with every report available on demand.

  • A portfolio dashboard with properties, units, AUM, a property map, capital stack chart, trailing NOI, occupancy, and lease expirations
  • A daily overview surfacing occupancy, delinquency, leasing activity, and rent roll weekly summaries
  • A property analytics workspace with tabbed views across Overview, Financials, Rents, Occupancy, Operations, and Budget Comparison
  • Branded PDF reports generated on demand, with page selection, cover pages, and write-up fields
  • Client separation built structurally through client ID scoping and role-based UI gating, never a filter applied after the fact

The AI layer: Built on the constraint that AI only ever touches the one decision deterministic code kept getting wrong.

  • An AI classifier (DSPy, GPT-4o-mini) that reads each inbound email attachment and decides its deal, client, system, file type, and as-of date
  • A hallucination guard that nullifies the model's answer whenever the deal ID it returns doesn't literally appear in the filename or subject, using word-boundary matching so a real ID like 692 isn't falsely matched inside 1692
  • Everything downstream of that one classification, every financial transformation, stays deterministic, reconciled SQL and dbt
  • A gold-standard evaluation harness that checks the extractor against labelled cases on every run, so correctness isn't assumed; it's measured

Tech Stack:

What made the difference

1. Client separation built in, not bolted on

Client ID scoping, property-level filters, and role-based gating were part of the architecture from the first line of code, not a filter applied after the data was already flowing

2. AI bounded to the one ambiguous call

The model classifies which deal an email attachment belongs to. It never touches a financial number. Everything after that classification runs through the same deterministic SQL and dbt pipeline whether the file came in five minutes ago or five years ago

3. A guard that catches the model when it guesses

The hallucination guard nullifies any deal ID the model invents rather than lets it through, the single fix that turned an ambiguous, error-prone routing step into one the team could actually trust with financial data.

4. Correctness measured, not assumed

A gold-standard evaluation harness runs the classifier against labelled cases continuously, so drift gets caught before it reaches a client's report, not after.

What changed for the team

Before, every client performance update required someone to pull warehouse tables, format numbers, and package the output by hand, and every inbound report required someone to manually figure out which deal and system it belonged to.

  • Clients explore portfolio performance and drill into individual properties without depending on the internal team
  • Branded PDF reports generate on demand, without anyone compiling anything
  • Inbound reports route themselves to the correct deal and system, with a guard that blocks the model from guessing
  • Access control is structural, so each client sees only their own data without manual filtering
  • The internal team spends its time on judgment calls, not on routing files or assembling reports

The data was always there. Orbit built the layer, and the AI, that made it usable and trustworthy for every person and every process that depended on it.

Solutions designed with your goals in mind
Company Overview
A multifamily real estate investment firm managing portfolios across multiple clients and properties. Ember Capital relies on consistent, accurate performance data covering occupancy, rent collections, delinquency, leasing activity, and financial snapshots to support recurring investor reporting and asset management decisions.
Arrow to the top of the page button