Skip to content
Open standard for commercial real-estate underwriting

One verifiable underwriting record for every CRE deal.

UW Markdown is an open interoperability standard for underwriting. A .uwx.md record keeps typed deal facts, underwriting assumptions, calculation inputs, narrative, and provenance together in one plain-text file. Excel models, AI agents, underwriting applications, and data pipelines can all work from the same deal record.

AI can extract, classify, and explain. Deterministic code calculates and verifies the financial results.

RENT ROLL units + leasesT-12 operating statementASSUMPTIONS market + underwrittenDEBT terms + sizingCASH FLOWS + returnsNARRATIVE credit storyPROVENANCE who, what, when

Show me a deal

A plain-text record, and the underwriting it produces.

An excerpt from a 48-unit multifamily acquisition. The narrative explains the analyst's adjustments; the JSON block beneath it holds the same numbers in typed form, so any compatible tool can read and recompute them.

Open the complete record
Parkview-Apts-Glendale-AZ.uwx.mdVALIDMETRICS RECOMPUTED

The record

plain text · excerpt
---
uw_version: "3.0"
deal_name: "Parkview Apartments — Glendale, AZ"
asset_class: "multifamily"
quick_metrics:
  purchase_price:   7200000
  noi_underwritten: 396635
  dscr:             1.109
  ltv:              0.70
source_documents:
  - "parkview_rent_roll_apr2026.xlsx"
  - "parkview_t12_2025.pdf"
---

## Underwritten NOI

Vacancy is normalized to 7% against the
owner's reported 5%. The management fee
drops from 10% to 5.5% of EGI under the
new agreement. Taxes are reassessed to
the post-sale value.

```json uw:section=noi_model
{
  "_meta": { "quality": { "confidence": "high" }, … },
  "income": {
    "vacancy_credit_loss": {
      "value": 45864, "rate_applied": 0.07
    },
    "effective_gross_income": 630936
  },
  "expenses": { "total_operating_expenses": 234301 },
  "net_operating_income": 396635
}
```

What a compatible tool shows

underwriting view

Parkview Apartments

48 units · 1987 vintage · Glendale, Arizona
Purchase price$7,200,000
UW NOI$396,635
DSCR1.109×
LTV70.0%
Parkview Apartments operating statement, T-12 actuals against underwritten figures
Operating statementT-12UW
Gross potential rent$655,200$655,200
Vacancy / credit loss($32,760)($45,864)
Other income$18,000$21,600
Effective gross income$640,440$630,936
Total operating expenses($228,344)($234,301)
Net operating income$412,096$396,635

DSCR and LTV recomputed by the multifamily calculation pack
The pack derives DSCR, LTV, cap rate, and debt yield from figures stated in the record, using deterministic code rather than a model. The operating statement is stated, and validator cross-checks test it for consistency. The DSCR of 1.109× produces a financial flag in the warning band. Financial flags describe the deal; validation issues describe the record.

What the record holds

The underwriting you already do, written down in a form software can check.

Deal facts

Property, ownership, rent roll, and the T-12 operating statement as extracted from source documents.

property · rent_roll · operating_statement

Underwriting assumptions

Market and underwritten vacancy, expenses, growth, and cap rates, with the analyst's rationale beside each one.

noi_model · assumptions · market_analysis

Debt and capital

Loan terms, sizing constraints, and capital stacks: the inputs behind DSCR, debt yield, and LTV.

debt_structure · preliminary_sizing · capital_stack

Cash flows and returns

Projected and dated cash flows, lease-up schedules, and distribution waterfalls behind IRR and equity returns.

dcf · lease_up_schedule · distribution_waterfall

Credit narrative

Ordinary Markdown for the story a credit committee reads: thesis, risks, mitigants, and open questions.

Markdown prose · risk_assessment

Provenance

Each block records who or what wrote it, when, from which source, and how confident they were. Revisions supersede earlier blocks instead of erasing them.

_meta · append-only revisions

Each JSON block is a typed section with a published schema. Validators, calculation packs, converters, and conformance fixtures all work against those same sections. See UWX and UW Lite for the compact .uw.md summary representation.

AI never does the financial math

Models read documents. Code does the arithmetic.

The record sits between judgment and computation. Anything that interprets a document can write facts and narrative into it. Only deterministic code turns those facts into NOI, DSCR, or IRR.

Building with AI
  1. 01 · SourcesDeal documents

    Rent roll · T-12 · lease abstracts · loan terms · market assumptions

  2. 02 · Analyst or AIExtract and explain

    Pull facts from documents, classify them, flag gaps, draft the credit narrative

  3. 03 · Record.uwx.md

    Facts, assumptions, narrative, and provenance in one file both sides read

  4. 04 · EngineValidate and calculate

    Check structure and rules, then compute the metrics a registered calculation pack or verifier defines

  5. 05 · ResultsRecomputed figures

    DSCR · debt yield · LTV · cap rate · verified cash-flow returns, with an optional verification receipt

  6. 06 · ConsumersEvery downstream system

    Excel · credit memos · underwriting apps · APIs · portfolio and data systems

AI is optional. A person, a parser, or an application can write the same record. Whoever writes it, financial results come from deterministic code, not from the model's output.

Receipts prove derivation, not truth. A verified receipt shows the stated results follow from the record under a named pack. It does not show that the rent roll or T-12 behind it is accurate.

Try it

Create and validate a record in two commands.

The published CLI runs with Node.js 18 or later. Nothing to clone, no account.

TERMINAL@uwmd/cli
$ npx @uwmd/cli init --output deal.uwx.md
Created: deal.uwx.md

$ npx @uwmd/cli validate deal.uwx.md
Validation result: WARNINGS — deal.uwx.md
Stage Readiness (workflow completeness):
  screening: incomplete
Issues (3):
  [WARN] CC-13: the property section does not
  state multifamily's primary size field …
  [INFO] DQ-06: screening requires debt_structure
  [INFO] DQ-06: screening requires validation

Starter tools · non-normative

@uwmd/verify reads and verifies a record on its own. The reference tools help you work with it.

Open and vendor-neutral

MIT-licensed. Not tied to any vendor SDK, service, or model provider.

Released under the MIT License.