$15,538 a year found in two real leases
Built for
retail tenants and the brokers who represent them
Project
LeaseIQ
Seventeen findings across an ATI Physical Therapy lease ($11,930 a year) and a Best Foot Spa lease ($3,608 a year), each quoting the lease section and the reconciliation line verbatim. Seventeen forensic checks run against industry practice; the dashboard renders the report a CFO can act on.
Demo




How it works
01
Three prompt stages, extract then audit then quantify, each producing JSON the next stage consumes.
02
Every finding must cite a lease section and a verbatim quote; the registry comments forbid fabricated figures.
03
The dashboard fingerprints the dropped filename and loads the matching audit, so demos never need a live model call.
04
Editorial React UI with a pipeline progress view sized to the lease's page count.
Stack and code
- Claude
- React
- Vite
- Tailwind
- JSON audit schema
audit-best-foot-spa.js— A real Stage-2 audit: property, summary, findings with quotes.
// Best Foot Spa — full forensic audit.
// Sources: Best Foot Spa lease (executed 2026-01-16), Cardinal Center 2026
// Annual Reconciliation Statement (issued 2027-03-15), Operating Expense
// Detail (Schedule A) with vendor-level GL.
//
// Best Foot Spa's CAM exclusion list is materially weaker than ATI's, so
// fewer reconciliation line items are clearly excluded. The dominant
// findings remain structural — over-broad CAM definition, opaque pro-rata
// denominator, no exclusive use, etc. One confirmed reconciliation overcharge:
// the Verizon leasing commission, which Best Foot Spa's Section 3.9 does
// explicitly exclude.
export const bestFootSpaAudit = {
property: {
tenant_name: 'Best Foot Spa (Hai Ying Ji)',
landlord_name: 'Cougar Commercial, LLC',
premises_address: '3300 Washington Drive, Suite 400, Melissa, TX 75454',
premises_sqft: 1010,
project_sqft_stated: 9500,
project_sqft_actual: 9543,
pro_rata_share_stated_naive: '10.63%',
pro_rata_share_actual_rent_roll: '10.58%',
lease_commencement_date: 'January 2026',
initial_term_years: 10,
renewal_options: 'Two 5-year options (Section 2.4 / Exhibit F)',
initial_base_rent_psf: 42.0,
initial_base_rent_annual: 42420,
nnn_escrow_monthly: 841.67,
nnn_escrow_annual: 10100,
},
supporting_documents: [
{
name: 'Cardinal Center 2026 CAM Reconciliation Statement',
issued: '2027-03-15',
type: 'reconciliation',
},
{
name: 'Cardinal Center 2026 Operating Expense Detail (Schedule A)',
issued: '2027-03-10',
type: 'gl_detail',
},
],
audit_summary: {
total_dollar_impact_annual: 3608,
total_dollar_impact_lease_to_date: 36080,
errors_found_count: 8,
high_confidence_errors_count: 5,
audit_confidence_overall: 80,
executive_summary:
'Best Foot Spa’s lease is meaningfully weaker than ATI’s — fewer explicit CAM exclusions, no management-fee cap, no exclusive use, and a sweeping Real Property Taxes definition. Reviewing the 2026 reconciliation against the lease produces one clear billing overcharge: the Verizon leasing commission ($688 to Best Foot Spa) which Section 3.9 explicitly excludes. The remaining seven findings are structural exposures backed by lease text — including an opaque pro-rata denominator that pulls every pass-through up by ~10%, loss-of-rents insurance billed through to the tenant, no requirement to credit tax-appeal savings, and a 30-day landlord relocation right with no business-interruption compensation.',
},
errors: [
{
error_id: 'BFS-001',
category: 'CAM',
error_type: 'Verizon leasing commission billed through CAM (excluded by Section 3.9)',
description:
'Line CAM-18 of the 2026 Cardinal Center reconciliation charges $6,500 for the Verizon Wireless lease-up commission paid to Falcon Realty Advisors (Invoice FRA-26-0188, dated 2026-04-02). Best Foot Spa’s Section 3.9 carve-out is short but it explicitly excludes "leasing commissions" from Common Expenses. Pure exclusion, no interpretation needed.',
lease_section: 'Lease §3.9 (page 7) · Recon line CAM-18',
dollar_impact_annual: 688,
dollar_impact_lease_to_date: 688,
confidence: 99,
evidence:
'"In addition to other commonly excluded items, Common Expenses shall not include unamortized capital improvements, Landlord legal fees, leasing commissions or reserves." — Lease Section 3.9.',
evidence_type: 'reconciliation',
recommended_action:
'Demand removal of $6,500 from CAM and refund of Best Foot Spa’s $688 share. Same exclusion will apply to every future tenant lease-up commission.',
},
{
error_id: 'BFS-002',
category: 'CAM',
error_type: 'Opaque pro-rata share — denominator never disclosed',
description:
'The lease defines Tenant’s Share with the Premises rentable area divided by the Project rentable area EXCLUDING any Common Areas, but the Project size (~9,500 sqft) is stated INCLUDING common areas, and the lease never tells the tenant what the excluding-common-areas denominator actually is. Cross-checking against the actual rent roll in the supporting Operating Expense Detail — ATI 2,600 + Dorado 4,000 + Great Clips 1,000 + Best Foot Spa 1,010 + Verizon 933 = 9,543 SF leased — the lease language permits a denominator as low as ~8,500 (rent roll minus common areas) which would push the share to ~11.88%, vs. the naive 10.63%. The tenant has no way to verify what denominator the landlord is actually using on its monthly billings.',
lease_section: 'Lease §1.2(k) (Tenant’s Share definition) · §1.2(i) (Project size) · pages 3-4',
dollar_impact_annual: 1100,
dollar_impact_lease_to_date: 11000,
confidence: 88,
evidence:
'"Tenant’s Share shall mean the ratio between the rentable area located within the Leased Premises and the number of square feet of rentable area located within the Project (excluding any Common Areas)." — Lease §1.2(k).',
evidence_type: 'lease_text',
recommended_action:
'Demand letter requiring written disclosure of the GLA-excluding-common-areas figure used as the pro-rata denominator, plus reconciliation of any prior billings against the disclosed figure.',
},
{
error_id: 'BFS-003',
category: 'INSURANCE',
error_type: 'Loss-of-rents insurance billed to tenant via pro-rata',
description:
'The definition of "Insurance Costs" explicitly includes "rent insurance" — i.e., loss-of-rents insurance that protects the LANDLORD against lost rental income, not the tenant. Best Foot Spa pays Tenant’s Share of this premium under Section 3.8. The 2026 reconciliation’s INS-01/02/03 lines show $24,300 in landlord insurance with no breakdown by coverage type, so the loss-of-rents premium cannot be isolated and stripped without the underlying invoices. Industry-standard tenant-side audit practice excludes loss-of-rents.',
~/Documents/LeaseIQ/dashboard/src/data/audit-best-foot-spa.js
audits.js— Filename fingerprint registry; no fabricated figures allowed.
// LeaseIQ — audit registry
//
// Each entry maps a lease file's "fingerprint" (a list of substrings that
// should appear in the dropped filename) to a real Stage-2 audit JSON.
// The dashboard hashes the dropped File.name and looks for a match here.
//
// IMPORTANT: All audit objects below MUST be backed by real lease text.
// They are populated by reading the actual PDFs and quoting verbatim.
// Do NOT fabricate dollar figures, section numbers, or evidence quotes.
import { bestFootSpaAudit } from './audit-best-foot-spa.js'
import { atiPhysicalTherapyAudit } from './audit-ati-physical-therapy.js'
export const AUDIT_REGISTRY = [
{
fingerprints: ['best_foot', 'best foot', 'foot_spa', 'foot spa'],
audit: bestFootSpaAudit,
},
{
fingerprints: ['ati', 'physical_therapy', 'physical therapy'],
audit: atiPhysicalTherapyAudit,
},
]
export function findAuditForFile(filename) {
if (!filename) return null
const needle = filename.toLowerCase()
for (const entry of AUDIT_REGISTRY) {
if (entry.fingerprints.some((fp) => needle.includes(fp.toLowerCase()))) {
return entry.audit
}
}
return null
}
~/Documents/LeaseIQ/dashboard/src/data/audits.js
demo-plan.md— The 45-minute execution plan for the YC demo video.
# LeaseIQ — YC Demo Execution Plan
**Goal:** Submit a 90-second product video to YC showing the LeaseIQ pipeline finding real dollar errors in a real NNN retail lease.
**Total time budget:** 45 minutes of work + ~10 minutes of recording/upload.
**Definition of done:**
1. Two leases audited end-to-end through Stages 1 → 2 → 3.
2. One rendered audit PDF chosen as the "hero" deliverable (highest dollar impact, high confidence).
3. One 90-second MP4 recorded, uploaded as Unlisted to YouTube.
4. URL pasted into the YC application's product video field.
---
## Pre-flight checklist (5 min)
Before opening Claude.ai, get these in one place. If any are missing, stop and fix before running any prompts.
- [ ] **Two NNN retail lease PDFs** dropped into `/Users/ibi/Documents/LeaseIQ/`. Name them `lease-01-<property>.pdf` and `lease-02-<property>.pdf` so outputs stay organized.
- [ ] **The three prompt blocks** (Stage 1 / 2 / 3) saved as separate text files for fast paste. Suggested filenames:
- `prompts/stage-1-extraction.txt`
- `prompts/stage-2-audit.txt`
- `prompts/stage-3-render.txt`
- [ ] **Output folder** ready: `/Users/ibi/Documents/LeaseIQ/runs/lease-01/` and `.../lease-02/`. Each will hold `stage-1.json`, `stage-2.json`, `stage-3.md`, `audit.pdf`.
- [ ] **Claude.ai** open in a browser, signed in, on a model that handles PDFs natively (Sonnet 4.7 or Opus 4.7).
- [ ] **Markdown-to-PDF tool** of choice picked: md2pdf.netlify.app is the lowest-friction, or browser print-to-PDF from a rendered preview. Pandoc if installed.
- [ ] **Screen recorder** ready (QuickTime on Mac → File → New Screen Recording, or Loom). Test that audio capture works.
- [ ] **Optional but useful:** any tenant billing statements, CAM reconciliations, or tax pass-through invoices for either property. These materially improve Stage 2 audit quality. If you don't have them, the pipeline still works on the lease alone — the audit just leans more on lease-text checks (CHECK 1, 7, 9, 12, 13, 14, 15, 16) than on billing-vs-lease checks (CHECK 2–6, 10, 11).
---
## Run lease 1 through the pipeline (10 min)
Do all three stages in **separate Claude.ai conversations** — no shared context. Each stage gets a clean window so the model isn't tempted to pull from earlier reasoning.
### Stage 1 — Extraction (≈3 min)
1. New conversation.
2. Paste the Stage 1 prompt.
3. Upload `lease-01-<property>.pdf` directly to the same message. (Claude.ai accepts PDFs natively — do **not** convert to text first.)
4. Send. Wait for full JSON response.
~/Documents/LeaseIQ/demo-plan.md