Everything the app does, and exactly how to use it — from onboarding a lease to exporting journal entries.
ROU Asset is organized by organization (your company). Everything — leases, entries, reports — belongs to an org, and access is controlled per member. The whole close cycle lives here: onboard a lease, let the engine build the schedule, generate and approve journal entries, then export them to your general ledger.
Get started (email, or Google/Microsoft SSO).is_demo that you can delete.Settings → Billing to unlock the app.⌘K anywhere to jump to a lease or location by name.Configure your org before onboarding real leases — this is a five-minute, one-time setup that makes every later journal entry land on the right accounts. Settings has these areas:
From Leases → New lease you get a step-by-step flow with a live measurement preview on the right that updates as you type. You can save as a draft at any step and come back.
+ New next to the location field to add one (with Google address autocomplete) without leaving the flow.RC on an option to mark it reasonably certain; reasonably-certain renewals extend the computed term.Add stream for each stream: choose type (fixed, in-substance fixed, variable-index, variable-usage, non-lease), frequency, advance/arrears timing, amount, escalation (fixed %, fixed $, or steps, every N months), and free-rent month indexes. A live cashflow table shows the expanded grid so you can sanity-check before moving on.Suggest to pull from your IBR table by term), economic life, and fair value, then work the five-test walkthrough. You can override the computed classification, but the app requires a written reason.Activate lease to persist the initial measurement and generate the full schedule.AI lease extraction. If enabled, an Upload lease PDF panel appears at the top of the flow:
At commencement each lease is classified via the five tests — any "yes" makes it a finance lease, otherwise operating:
Two additional statuses:
Every answer and input (economic life, fair value, ratios) is stored for audit. Changing a reasonably-certain flag on an active lease routes through the reassessment flow, never a direct edit.
Activation generates the amortization schedule. Both classifications accrete the liability identically; they differ in ROU amortization:
| # | Period | Payment | Interest | Principal | Liability |
|---|---|---|---|---|---|
| 1 | Feb 2026 | 10,000.00 | 2,528.44 | 7,471.56 | 511,766.66 |
| 2 | Mar 2026 | 10,000.00 | 2,492.07 | 7,507.93 | 504,258.73 |
| 3 | Apr 2026 | 10,000.00 | 2,455.51 | 7,544.49 | 496,714.24 |
| 4 | May 2026 | 10,000.00 | 2,418.78 | 7,581.22 | 489,133.02 |
| 5 | Jun 2026 | 10,000.00 | 2,381.86 | 7,618.14 | 481,514.88 |
| 6 | Jul 2026 | 10,000.00 | 2,344.76 | 7,655.24 | 473,859.64 |
The period convention (calendar-month stub vs payment-anniversary) and rate convention (compound (1+annual)^(1/12)−1 vs simple annual/12) are org settings, stamped on each measurement. Advance payments reduce the liability before interest accrues; arrears after.
0.00 and ROU accumulated amortization exactly equals ROU gross. The engine throws if an invariant fails — the numbers always tie.On a lease's Schedule tab you see all rows grouped by measurement; superseded rows (from lifecycle events) are collapsed by default.
Journal Entries is a period workbench. Pick a month with the period picker and you see every entry with totals by account and per-entry line drill-down.
| Account | Debit | Credit |
|---|---|---|
| Interest Expense | 2,528.44 | |
| Lease Liability | 7,471.56 | |
| Lease Clearing | 10,000.00 | |
| ROU Amortization Exp. | 8,653.97 | |
| Accum. Amort. — ROU | 8,653.97 | |
| Balanced | 18,653.97 | 18,653.97 |
Every payment credits a Lease Clearing account — your real AP/cash lives in your GL, and the clearing account makes reconciliation after import trivial.
From an active lease's Actions menu you can run any lifecycle event. Each opens a focused wizard with a before/after impact preview ("Liability 412,300 → 389,150; adjustment entry: …") before you confirm. Mechanics: unposted future rows are superseded, a new measurement + forward schedule is created, a balanced adjustment entry is emitted, and posted history is never touched.
Most leases arrive years into their term. On a draft lease, Onboard mid-life gives two modes:
Historical rows before go-live are saved as pre-system (reported, never exported), so nothing double-posts to your GL. No opening entry is booked by default ("balances already in your GL"), with an optional opening entry against an account you choose.
On a lease's Variable Costs tab, log a variable cost (date, amount, type — index differential / usage / taxes & insurance / CAM true-up / other, description). Each creates a draft journal entry (Dr Variable Lease Expense / Cr Lease Clearing).
For short-term leases, a monthly job books straight-line short-term lease expense. Both feed the lease-cost disclosure totals.
Reports has six ASC 842 reports, each viewable on-screen and downloadable as CSV or XLSX, as of any date:
0.00.| Line | Amount | Recon. |
|---|---|---|
| Opening liability | 519,238.22 | 0.00 |
| Interest accreted | 30,412.09 | 0.00 |
| Cash paid | (120,000.00) | 0.00 |
| Closing liability | 429,650.31 | 0.00 |
The Dashboard is the post-login landing: KPI row (total liability, total ROU, active leases, cash due next 30 days, weighted-avg term & rate), a locations panel (list or Google Map toggle — click a location to filter leases, or + New to add one on the spot), a critical-dates feed, upcoming payments (90 days), a trailing-12-month lease-cost chart, and a needs-attention widget.
Alerts lists option notice deadlines, expirations, and upcoming payments. Run Scan now to refresh; admins who opt in also get a daily email digest.
Export a period's approved entries in a built-in format, or build your own layout. The built-ins available in the batch dropdown are:
Each layout maps to the fields the target system's import expects, and every file is balanced by construction. See the per-system guides: QuickBooks, Xero, NetSuite, Odoo, Sage Intacct, Dynamics 365.
Need an exact match for your ERP? Build a custom template in Settings → Export Templates with the column designer:
| Date | Number | Journal | Account | Debit | Credit |
|---|---|---|---|---|---|
| 2026-02-01 | JE-1 | Lease | 8100 | 2528.44 | |
| 2026-02-01 | JE-1 | Lease | 2400 | 7471.56 | |
| 2026-02-01 | JE-1 | Lease | 2450 | 10000.00 |
Built-in formats are just seeded templates in the same rendering pipeline — one engine, no special cases. Exported batches are stored and re-downloadable, and the period is marked exported.
ROU Asset has a read-only REST API for pulling data out of the app — primarily journal entries, plus leases to join against. It's built for GL syncs, BI/warehouse loads, and letting an AI assistant read your entries through the bundled MCP server.
Settings → API Keys (admin only), create a key and copy it — the full key is shown once and only its hash is stored.Authorization: Bearer <key>. Keys are scoped to your organization; a request only ever sees that org's data.GET /api/v1/ping.https://your-host/api/v1).GET /api/v1/journal-entries — list entries with their balanced lines, newest first. Query params: period (YYYY-MM), status (draft/approved/exported), lease_id, limit (1–500, default 100), offset.GET /api/v1/journal-entries/{id} — a single entry with its lines.GET /api/v1/leases — the org's leases (id, name, status, classification, dates) to join against entries.GET /api/v1/ping — confirm the key works; returns the org id it maps to.curl -s "https://your-host/api/v1/journal-entries?period=2026-07&status=approved" \ -H "Authorization: Bearer rou_live_…"
Response (money kept as strings for exact precision):
{
"data": [
{
"id": "…", "entry_date": "2026-07-01", "period": "2026-07",
"source": "schedule_row", "status": "approved", "lease_id": "…",
"memo": "Period 6", "export_batch_id": null,
"lines": [
{ "account_slot": "interest_expense", "account_number": "8100",
"account_name": "Interest Expense", "debit": "2344.76", "credit": "0.00",
"description": "Interest" },
{ "account_slot": "lease_liability", "debit": "7655.24", "credit": "0.00", … },
{ "account_slot": "lease_clearing", "debit": "0.00", "credit": "10000.00", … }
]
}
],
"pagination": { "limit": 100, "offset": 0, "total": 42, "has_more": false }
}Errors come back as { "error": { "code", "message" } } with a matching HTTP status (401 for a missing/invalid key, 404 for an unknown entry). Responses send permissive CORS so browser clients work too.
The repo ships an MCP server at packages/mcp/server.mjs so an AI assistant (Claude Desktop, Claude Code) can read your entries directly. It's a zero-dependency wrapper over the API and exposes four tools: rouasset_list_journal_entries, rouasset_get_journal_entry, rouasset_list_leases, and rouasset_ping.
{
"mcpServers": {
"rouasset": {
"command": "node",
"args": ["/absolute/path/to/rouasset/packages/mcp/server.mjs"],
"env": {
"ROUASSET_API_URL": "https://your-host",
"ROUASSET_API_KEY": "rou_live_…"
}
}
}
}For Claude Code: claude mcp add rouasset -e ROUASSET_API_URL=https://your-host -e ROUASSET_API_KEY=rou_live_… -- node /absolute/path/to/packages/mcp/server.mjs. Then ask it things like “pull July's approved journal entries from ROU Asset.”