Griffin Trygg
Get in touch

Underwriting & ResearchCorridor Ventures / Apparent Capital

Deal Memo Excel Add-in

An Excel task pane that turns the underwriting model into a print-ready IC memo.

A figure sitting on a tall stack of spreadsheets, chin on hand, one clean page floating up

Why I built it

Every acquisition memo restates numbers that already exist in the model: pricing, returns, sources and uses, unit mix, debt, capex. And for properties we already manage, the operating history got copied out of AppFolio reports by hand. Both steps were slow, and both were where the typos came from.

What it does

  • Detects the model on open: property, units, and which of the expected tabs (Summary, Monthly I&E, Floor Plan Summary, Amortization Tables, Tax Revaluation, Closing Costs, Capex) are present or missing.
  • One click builds a seven-page preliminary IC memo: cover metrics, sources and uses, overview and structure, sponsor and SWOT, market fundamentals, returns, and photos.
  • Claude drafts the narrative and, with web search on, researches the submarket's employers, transaction volume and rent outlook.
  • A no-AI quick mode builds the numbers pages alone.
  • AppFolio tab: pull T3/T6/T12 income against T12 expenses for any property and quarter, map GL accounts to model rows, and fill the property tab.
  • Pulls new leases and renewals for the quarter and quarter-to-date for lease-premium analysis.

How it works

Office.js finds tabs by name and values by row label, not by cell address. Inserting a row in the model doesn't break anything.

Every figure in the memo comes from the workbook. Claude only writes prose, returned as JSON sections with length limits so each one fits on a printed page.

Both outside APIs go through Vercel functions so the keys stay on the server. The AppFolio proxy sits behind a passphrase and is paced to stay under their rate limit.

Calls I made

The memo says what it couldn't read

If a tab is missing, the memo still builds and lists exactly what it was built without.

The account map lives in the workbook

GL-to-model mappings sit on a sheet in the file. A new account shows up flagged for review instead of getting bucketed quietly.