FactLot

io.github.9mp96ygnbk-alt由 GitHub 帳號 9mp96ygnbk-alt 發布v0.5.0更新於 Nov 7, 2026

Cited CRE facts and deterministic calculators for agents: rent, CAM, debt sizing, IRR, parcel IDs.

已驗證Streamable HTTP可網頁執行金融知識與記憶資料與分析

概覽

AI 產生的概覽

FactLot 為助理提供可重現、可引用的商用不動產計算器、正規化物件 ID,以及附原文引文核驗的文件事實。

可以做什麼
  • 計算租賃與租金:租金排程、淨有效租金、方案比較、百分比租金、WALT、NPV/IRR
  • 核算營運成本與資本支出:CAM 對帳(單戶與批次)、資本支出回收、費用分攤
  • 測算債務與投資:貸款額度、攤銷、提前清償與 defeasance、DCF 預測、直接資本化、租與買、續租與搬遷、LP/GP 瀑布分配、ASC 842 重新衡量
  • 分析物件表現:多戶住宅租金表、飯店住房率/ADR/RevPAR 指標、1031 與德州房產稅申訴期限及不均等估值算術
  • 核驗文件擷取:依頁碼引文驗證數值與論述、產生租約摘要、比對 estoppel 或租金表、分攤 T-12 報表
  • 產生並驗證地號、實體、建築物、單元與文件的正規化 ID,並依公開 schema 驗證事實
適用情境
適合助理進行商用不動產測算、租約分析、CAM 或房產稅工作,且數字需要可重現、可引用而非在上下文中自行計算時。也適合需要把從租約或營運報表擷取的數值與原文核對的工作流程。
執行需求
可使用託管遠端端點(免金鑰,有速率限制),或在本機執行:獨立套件需要 Node.js 22.6 或更新版本,自架也可使用 Docker。registry 查詢工具需要自架副本並透過 FACTLOT_REGISTRY_DB 設定 registry 資料庫。計算器與 ID 工具不需 API 金鑰或帳號。
安裝前請注意
託管服務不保存請求內容,但沒有 SOC 2 報告;README 建議機密租約採自架,讓文件不離開本機網路。文件工具需要把頁面文字傳送到伺服器。registry 涵蓋不均,託管 registry 查詢尚未開放。另有付費方案提供更高額度。結果僅為算術,不構成稅務、法律或估價意見,與其他系統(如 ARGUS)的一致性未經測試。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 FactLot,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.9mp96ygnbk-alt%2Ffactlot/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "factlot": {
      "type": "http",
      "url": "https://api.factlot.com/mcp"
    }
  }
}

README

FactLot

The open fact layer for commercial real estate AI agents. Deterministic CRE math with an audit trail, canonical property IDs, and public-record facts that cite the document they came from. Free to use hosted, free to run yourself, open source.

[CI] [Release] [MCP Registry] [Hosted MCP] [License]

Try it in ten seconds

No key, no install:

bash
curl -s https://api.factlot.com/v1/calc/debt_sizing -H 'content-type: application/json' \  -d '{"noi":1000000,"value":15000000,"rate_annual":0.065,"amortization_years":30,"max_ltv":0.65,"min_dscr":1.25}'

The answer is a $9,750,000 maximum loan, bound by loan-to-value (the coverage test alone would allow $10.5 million), with every intermediate step, its formula, and the versioned formula ID calc.debt_sizing@3 so an agent can cite exactly how the number was made.

Check what your agent read from a lease the same way: it extracts each term with the exact quote and page, and doc_verify_facts confirms the quote is on that page and states the value, then returns cited facts or the reason it could not (document verification). No model runs on FactLot's side and nothing is stored.

Check us against your own spreadsheet: seven Excel workbooks (office, industrial, retail, hotel, lender, lease accounting and more) put live Excel formulas beside FactLot's numbers with a difference column of 0.00 (synthetic inputs; ARGUS parity is untested and not claimed). What the registry holds, county by county, and the licence and AI-use rights of every source: coverage and rights.

Lease comps, free: 6,994 federal (GSA) lease comps (5.3 MB, public domain) as cited public-record facts, and an open format with lease_comp_validate so firms can share comps with each other, each with stated rights, no names, and a derived net effective rent (lease comps). GSA leases are government-tenant leases, not market comps for every use. Search them from any agent, hosted, with lease_comp_search.

Connect your agent

ClientHow
Claude Code plugin/plugin marketplace add 9mp96ygnbk-alt/factlot, then /plugin install factlot@factlot: twelve CRE skills (loan sizing, lease economics, CAM, ASC 842, returns and more) wired to the hosted tools (plugin)
Claude Codeclaude mcp add --transport http factlot https://api.factlot.com/mcp
Claude (web and Desktop)Settings, Connectors, Add custom connector: https://api.factlot.com/mcp. Or open factlot-0.5.0.mcpb
ChatGPTDeveloper mode app with https://api.factlot.com/mcp, or a Custom GPT Action importing https://api.factlot.com/openapi-3.0.json
Cursor, VS Code, other clientsRemote MCP URL https://api.factlot.com/mcp (guides)
Any MCP client, run locallynpx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.5.0/factlot-mcp-standalone-0.5.0.tgz (Node.js 22.6+, no network calls)
Python agentspip install "git+https://github.com/9mp96ygnbk-alt/[email protected]#subdirectory=python"
Self-hosted REST and MCPdocker run -p 8787:8787 ghcr.io/9mp96ygnbk-alt/factlot:0.5.0

The hosted endpoint is free with no key at 60 requests a minute. It is listed in the official MCP Registry as io.github.9mp96ygnbk-alt/factlot. Runnable examples for REST, Python and agent SDKs are in examples/.

Try the registry tools on real data: the DC registry sample (23.5 MB, CC BY 4.0) holds 18,077 District of Columbia commercial parcels, 5,513 owning entities, 7,931 cited ownership links, 396 buildings, zoning districts for 16,648 parcels and the latest recorded sale for 12,594.

bash
curl -fLO https://github.com/9mp96ygnbk-alt/factlot/releases/download/registry-sample-dc-2026-11-07/factlot-registry-sample-dc-2026-11-07.db.gz && gunzip factlot-registry-sample-dc-2026-11-07.db.gzFACTLOT_REGISTRY_DB="$PWD/factlot-registry-sample-dc-2026-11-07.db" npx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.5.0/factlot-mcp-standalone-0.5.0.tgz

Plans: the hosted endpoint is free with no key: every calculator, ID, fact, rules and document tool at 60 requests a minute per IP address, and 25 registry lookups a day per IP address. Pro, $49 a month: 1 API key, 600 requests a minute, 5,000 registry lookups a month, email support. Team, $599 a month: up to 5 API keys, 3,000 requests a minute, 100,000 registry lookups a month, priority support, and a vote on which regions open next. Limits are hard caps with no overage charges; at a cap the call returns HTTP 429 with the reset time. Paid plans renew monthly until cancelled; cancel any time. A registry download licence ($2,400 a year per state file, refreshed weekly, for internal use, not redistribution) is available on request, and Enterprise (private deployment, invoicing, a signed data-processing agreement with a no-training commitment, and SSO) is by quote: [email protected]. Terms · Privacy. Questions and bug reports go in GitHub Discussions and Issues.

Hosted registry

The hosted API at https://api.factlot.com answers registry lookups on every plan, including the free tier with no key (25 registry lookups a day per IP address). These regions are hosted:

RegionHosted dataLicence
MarylandAll 24 jurisdictions: 109,249 commercial parcels and 2,812 buildings, SDAT data as of 2026-11-05Public domain
District of Columbia18,077 commercial parcels, 5,513 registered business entities and 396 buildings, with owners of record (organisations only), zoning and recorded salesCC BY 4.0
UtahJuab and Summit counties: 1,528 parcels, snapshot as of 2025-11-26CC BY 4.0, "State of Utah, SGID"
TexasHarris (87,717 parcels and 3,511 buildings), Dallas (59,645), Travis (30,556), Collin (18,035), Denton (13,304) and Williamson (11,758) counties: 221,015 commercial parcels with value history by tax year, and the 68,804 Comptroller entities that own them. Denton and Williamson are 2027 preliminary rolls as of 2026-11-07. Tarrant County is not servedPublic record, cited per fact; organisation owners only

Maryland, DC, Utah and Texas hold 349,869 parcels in 33 counties. Call registry_coverage first: it lists exactly what is hosted, and a lookup outside it returns a coverage miss. Every answer cites its source file and the licence or attribution that goes with it. The registry is built to keep owners that are organisations and to exclude natural persons' names (if a record names you as a person, or is wrong, email [email protected] and we will remove or correct it), and the Maryland and Utah files carry no owner names. The DC data is the same as the downloadable sample registry-sample-dc-2026-11-07.

The other regions in the project's pipeline (New York City and more) are available only on a self-hosted FactLot with a registry file; more hosted regions open as their terms allow. Tarrant County is not served by the hosted registry while the publisher's terms for AI use are unclear.

What FactLot is

Agents doing CRE work get stuck in the same places. They can't trust their own arithmetic, they can't cite where a number came from, and they can't tell that "Suite 400, 123 Main LLC" in one system is the same thing as a parcel number in another.

FactLot gives every agent three things it can use by default:

PackageWhat it doesLicense
@factlot/calcDeterministic CRE calculators: rent schedules, net effective rent, proposal comparison, percentage rent, CAM reconciliation, loan sizing, ASC 842 lease remeasurement, prepayment and defeasance, WALT, IRR/NPV, lease vs. own, renew vs. relocate, hotel metrics. Every result includes an audit trail and a versioned formula ID.Apache-2.0
@factlot/idFactLot ID gives canonical IDs for parcels, legal entities, buildings, spaces, leases, and documents. IDs are deterministic wherever the world already has a key (parcels, entities, buildings from their street address, spaces, documents), so any agent can compute them offline; leases get minted IDs.Apache-2.0
@factlot/schemaThe FactLot data model. A fact is one atomic claim with provenance (source document, page, clause, method) and rights (whether an AI may use or redistribute it).MIT
@factlot/toolsThe tool catalog, with native tool definitions for Claude, OpenAI, Gemini, Amazon Bedrock, Mistral, and OpenAPI platforms, plus one runTool dispatcher.MIT
@factlot/serverThe remote connector: Streamable HTTP MCP at /mcp, REST at /v1, and OpenAPI. Runs in Docker.Apache-2.0
@factlot/mcpAn MCP server that exposes all of the above to Claude and any other MCP-capable agent. It runs locally and needs no API key.Apache-2.0

What FactLot covers today

Be clear about scope before adopting it:

  • Calculators, IDs, and the fact model work anywhere. They need no data and no API key, and they run offline in both SDKs with identical results.
  • The registry covers the largest metros, unevenly, and most of it is not hosted yet. The project's registry pipeline has built and verified 1,733,923 commercial, industrial and multifamily parcels in 330 counties (19 states and DC) from 40 public-record sources, with 14.2 million registered entities from Texas, New York, Colorado, Pennsylvania, DC and Connecticut for owner resolution: the largest metros (Harris, Dallas, Tarrant (not served by the hosted registry), Travis and Collin in Texas, New York City, Los Angeles, Boston, San Francisco, Denver, Charlotte, Minneapolis and DC), the rest of the top 100 counties where the licence allows, and statewide files for New York, Maryland, Massachusetts, Vermont, Arkansas and Connecticut, most of Utah, 24 Minnesota counties and Montana's apartments and industrial parcels (catalog, quality report). What you can query today on the hosted API is Maryland, the District of Columbia, Juab and Summit counties in Utah, and Harris, Dallas, Travis, Collin, Denton and Williamson counties in Texas (349,869 parcels). Tarrant County is not served by the hosted registry while the publisher's terms for AI use are unclear. Every other region needs a self-hosted FactLot with a registry file. Cook County, Florida, Fulton, Maricopa, Wayne, Fairfax, King and much of California wait on a licence decision, a form or a purchase. Several public files omit owner names (Maryland, Utah, Los Angeles, San Francisco); zoning, recorded sales, deeds and mortgages, energy benchmarks and CMBS loan data only for some metros (coverage); no tenant rosters. See the registry and the source catalog.
  • One rules pack, the Texas property-tax protest deadline, verified against the official statute text. Other jurisdictions follow only after a person verifies them.
  • Lease ingestion is a prototype: deterministic quote-on-page and value-in-quote checks, OCR for scanned pages through a pluggable backend, but no published accuracy number yet.
  • No SOC 2 report yet. The hosted service keeps no request bodies (see the privacy notice); for confidential documents, self-host FactLot so nothing leaves your network.
  • Hosted, but not yet on npm or PyPI. The hosted endpoint at https://api.factlot.com serves the calculators, IDs, fact tools and registry lookups for the regions above (free at 60 requests a minute); registry regions not hosted need a self-hosted copy with a registry file. To run it yourself, install from the v0.5.0 release, from git, from source, or with Docker (getting started).

Connect FactLot to any AI platform

PlatformHow to connect
ClaudeAdd a custom connector with https://api.factlot.com/mcp, install the one-click Desktop extension (factlot.mcpb), use Claude Code, or call it from the Claude API
ChatGPT and OpenAICreate a ChatGPT app in developer mode (search/fetch make deep research work), import /openapi-3.0.json (the curated subset of at most 30 operations) as a Custom GPT Action, use the Responses API's remote MCP, or use function calling
Google GeminiUse Gemini API function declarations, Gemini CLI over MCP, or Vertex AI
Microsoft CopilotAdd an MCP tool in Copilot Studio, use the Power Platform connector, or build a Microsoft 365 API plugin
Amazon BedrockUse the Converse API toolConfig, or a Bedrock Agents action group backed by the Lambda handler
Mistral, xAI, Llama, DeepSeek, and othersUse OpenAI-compatible function calling or MCP clients

Every surface serves the same tools, generated from one catalog. See connectors/.

Quick start: use FactLot from an agent

FactLot is not on npm or PyPI yet. These work without either: they run the stdio MCP server from a GitHub release, from a clone, or in Docker. Each was run end to end (install verification).

bash
# From the GitHub release: one file, dependencies bundledclaude mcp add factlot -- npx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.5.0/factlot-mcp-standalone-0.5.0.tgz
# From a clonegit clone https://github.com/9mp96ygnbk-alt/factlot.git && cd factlotnpm install && npm run buildclaude mcp add factlot -- node "$PWD/packages/mcp/dist/bin.js"
# Remote connector (Streamable HTTP MCP at /mcp, REST at /v1, OpenAPI)docker run --rm -p 8787:8787 ghcr.io/9mp96ygnbk-alt/factlot:0.5.0

Claude Desktop users can install factlot-0.5.0.mcpb from the release. For any other MCP client, use the same command in its config:

json
{  "mcpServers": {    "factlot": {      "command": "node",      "args": ["/absolute/path/to/factlot/packages/mcp/dist/bin.js"]    }  }}

Getting started has every option, including the TypeScript libraries as release tarballs.

The server provides these tools:

  • Calculators: calc_rent_schedule, calc_net_effective_rent, calc_compare_proposals, calc_multifamily_rent_roll, calc_percentage_rent, calc_cam_reconciliation, calc_cam_reconciliation_batch, calc_capex_recovery, calc_debt_sizing, calc_lease_remeasurement_asc842, calc_prepayment_and_defeasance, calc_walt, calc_npv, calc_irr, calc_lease_vs_own, calc_renew_vs_relocate, calc_hotel_metrics, calc_dcf_pro_forma, calc_direct_cap, calc_amortization_schedule, calc_equity_waterfall, calc_exchange_1031
  • Rules: rules_tx_property_tax_protest_deadline
  • IDs and facts: id_parcel, id_entity, id_space, id_building, id_document, id_parse, fact_validate, fact_package_create, fact_package_verify, lease_comp_validate
  • Documents: doc_verify_facts, doc_abstract_lease, doc_compare, doc_verify_claim, doc_spread_statement, doc_check_use_conflict
  • Discovery: search, fetch, schema_get
  • Registry (hosted for the regions registry_coverage lists, and on a self-hosted FactLot when FACTLOT_REGISTRY_DB points at a registry file): registry_get, registry_resolve_parcel, registry_resolve_external, registry_search_address, registry_search_entities, registry_owned_by, registry_coverage, registry_tx_equity_candidates

Quick start: Python agents

bash
pip install "git+https://github.com/9mp96ygnbk-alt/factlot.git#subdirectory=python"
python
import factlot
tools = factlot.anthropic_tools()  # or factlot.openai_tools(); pass these to your model# When the model calls a tool, run it by name with the model's arguments:result = factlot.run_tool("calc_npv", {"cash_flows": [-1000, 600, 600], "rate": 0.08})result["value"]["npv"]  # 69.96

The Python SDK has no dependencies and passes the same conformance vectors as the TypeScript packages. A differential test runs random inputs through both SDKs in CI and fails on any difference, down to the last digit. See python/README.md.

Quick start: use the libraries

ts
import { debtSizing } from "@factlot/calc";import { parcelId } from "@factlot/id";
const loan = debtSizing({  noi: 1_000_000,  value: 15_000_000,  rate_annual: 0.06,  amortization_years: 30,  max_ltv: 0.65,  min_dscr: 1.25,  min_debt_yield: 0.09,});loan.value.max_loan; // 9750000loan.value.binding_constraint; // "ltv"loan.steps; // every intermediate value, with formulasloan.formula; // { id: "calc.debt_sizing", version: 2 }
parcelId({ stateFips: "06", countyFips: "037", apn: "5432-001-012" });// { kind: "parcel", urn: "fl:parcel:us-06037:5432001012", short: "flp_..." }

Develop

This requires Node.js 22.6 or newer.

bash
npm installnpm run check   # lint, format check, typecheck, tests, build

License

FactLot is open source and fully self-hostable, which matters when leases are confidential.

  • Platform: calculators, IDs, rules, the MCP server, the remote connector, and the ingest and registry code are licensed under Apache-2.0.
  • Schema and SDKs: @factlot/schema, @factlot/tools and the client SDKs are licensed under MIT.
  • Hosted service: api.factlot.com runs the same open-source code, free at 60 requests a minute, with paid plans for higher limits.

Docs

"FactLot" and the FactLot logo are trademarks of their owner. The open-source licenses cover the code, not the name.

來源:README.md,提交 b4a689c

工具

58

calc_rent_schedule

Lease rent schedule

Build a base-rent schedule from commencement date, term, area, starting $/SF/yr, escalations (percent or fixed $/SF), and abated months. Lease months run from the commencement day-of-month with no calendar proration (warns when commencement is mid-month). Returns rent steps, totals, expiration date, and a calculation trace. Optional unit (kw, mw, unit, acre, key, room, space) relabels area and $/SF for data-center, ground, yard, residential, hotel, or parking leases without changing any number. Deterministic: use this instead of doing the math yourself; cite formula calc.rent_schedule@1 and the returned steps, and surface any warnings.

輸入參數unitarea_sf必填escalationterm_months必填abated_monthsinclude_monthlycommencement_date必填round_rate_to_centsstarting_rent_psf_annual必填

calc_net_effective_rent

Net effective rent (NER)

Compute effective rent, straight-line net effective rent, and discounted net effective rent ($/SF/yr) after free rent, TI allowance, leasing commissions, and other landlord concessions. Rent is monthly in advance from the commencement day (no calendar proration), discounted at annual rate ÷ 12. schedule.unit (kw, mw, unit, acre, key, room, space) reports $/kW/yr, $/acre/yr and so on instead of $/SF/yr. Deterministic: use this instead of doing the math yourself; cite formula calc.net_effective_rent@1 and the returned steps, and surface any warnings.

輸入參數schedule必填ti_allowance_psfother_concessionsleasing_commissionsdiscount_rate_annual

calc_compare_proposals

Compare lease proposals

Rank 2–20 lease proposals with different terms, sizes, free rent, TI, concessions, and operating-expense structures (gross, NNN, base year, expense stop, with opex growth) on one discounted $/SF/yr basis, per rentable or usable SF (load factor): effective occupancy cost (tenant perspective) or discounted net effective rent after landlord-borne opex and optional pre-commencement downtime (landlord perspective). Cash flows monthly in advance at annual rate ÷ 12; warns when the usable-SF ranking differs and when terms differ. schedule.unit (kw, mw, unit, acre, key, room, space, the same for every proposal) ranks per kW, MW, unit, acre, key, room, or space instead of per SF. Deterministic: use this instead of doing the math yourself; cite formula calc.compare_proposals@2 and the returned steps, and surface any warnings.

輸入參數proposals必填area_basisperspectivediscount_rate_annual

calc_multifamily_rent_roll

Multifamily rent roll

Analyze an apartment rent roll (up to 5,000 units with status occupied, notice, vacant, model, or down; market and lease rent per month; lease dates; concessions as weeks free, months free, or dollars): gross potential rent, vacancy, non-revenue units, loss to lease, concessions amortised straight-line over each lease term, effective rent income, physical and economic occupancy, effective rent per unit and per SF, a lease expiration schedule by month, and a per-unit-type summary. Single-lease mode (lease instead of units) returns the effective monthly rent after a weeks-free or months-free concession. Deterministic: use this instead of doing the math yourself; cite formula calc.multifamily_rent_roll@1 and the returned steps, and surface any warnings.

輸入參數as_ofleaseunitsinclude_units

calc_percentage_rent

Retail percentage rent

Percentage (overage) rent for a lease year: net sales after exclusions over a natural or fixed breakpoint, prorated for partial years, less amounts already paid. Deterministic: use this instead of doing the math yourself; cite formula calc.percentage_rent@1 and the returned steps, and surface any warnings.

輸入參數rate必填breakpointgross_sales必填period_fractionbase_rent_annual必填sales_exclusionspercentage_rent_paid

calc_cam_reconciliation

CAM / operating expense reconciliation

Reconcile a tenant's annual CAM charge: exclusions, occupancy gross-up of variable expenses, pro rata share, controllable-expense caps (compounding_from_base, simple_from_base, year_over_year), an admin fee (before or after the cap, inside or outside it, with per-line exclusions), base year or expense stop, partial-year occupancy (move-in/move-out prorates share, cap, and base by days), and estimates paid. Returns balance due and a full trace with order-of-operations warnings. Deterministic: use this instead of doing the math yourself; cite formula calc.cam_reconciliation@2 and the returned steps, and surface any warnings.

輸入參數capyear必填expenses必填gross_upadmin_feeoccupancystructureestimates_paidpro_rata_share必填

calc_cam_reconciliation_batch

CAM reconciliation for every tenant (batch)

Reconcile CAM for a whole building in one call: the expense pool and gross-up once, then up to 500 tenants each with share, base year or expense stop, cap, admin fee, occupancy, estimates paid, and lease-specific excluded categories. Returns each tenant's statement (identical to calc_cam_reconciliation for that tenant, with its trace and warnings) and a building reconciliation: total billed against the recoverable pool, the unrecovered amount, and why (unleased or vacant share, lease exclusions, gross-up, caps, base years and stops, admin fees, zero floor, rounding). Deterministic: use this instead of doing the math yourself; cite formula calc.cam_reconciliation_batch@1 and the returned steps, and surface any warnings.

輸入參數year必填tenants必填expenses必填gross_up

calc_capex_recovery

Capital expenditure recovery

Recoverable capital expenditure under a lease clause: amortize a capital cost over its useful life or the lease-specified period, straight-line (declining interest) or level payment, with interest on the unamortized balance or none; optionally cap each year's recovery at demonstrated cost savings (with or without carry-forward); and allocate each year to tenants by pro rata share. Every assumption is echoed with an optional lease clause citation. Deterministic: use this instead of doing the math yourself; cite formula calc.capex_recovery@1 and the returned steps, and surface any warnings.

輸入參數cost必填methodclausestenantsfirst_yearperiod_basiscost_savings_capamortization_years必填interest_rate_annual

calc_debt_sizing

Loan sizing (LTV / DSCR / debt yield)

Size the maximum loan under any combination of max LTV, min DSCR, and min debt yield for a given NOI, rate, and amortization. Reports the binding constraint, debt service, and resulting metrics; optionally a stress table over NOI, rate, and value shocks (max loan, binding constraint, LTV, DSCR, debt yield per scenario) and the refinance shortfall against an existing loan balance. Deterministic: use this instead of doing the math yourself; cite formula calc.debt_sizing@3 and the returned steps, and surface any warnings.

輸入參數noi必填valuestressmax_ltvmin_dscrrate_annual必填round_down_tomin_debt_yieldamortization_years必填existing_loan_balance

calc_lease_remeasurement_asc842

Lease remeasurement (ASC 842, lessee)

Remeasure a lessee's lease liability and right-of-use asset under ASC 842 after a modification, lease-term reassessment, contingency resolution, or residual value guarantee change: new liability (PV of remaining payments), liability and ROU adjustments with any gain (ASC 842-20-35-4), and the per-period amortization table (operating: straight-line single lease cost; finance: interest plus amortization) in cents that foots: every row rolls forward exactly, totals are the row sums, and the final period trues up liability and ROU asset to zero. Warns where judgment is needed. Deterministic: use this instead of doing the math yourself; cite formula calc.lease_remeasurement_asc842@2 and the returned steps, and surface any warnings.

輸入參數event必填payments必填classification必填payment_timingliability_before必填periods_per_yearrou_asset_before必填remaining_periodsdiscount_rate_annual必填discount_rate_updated必填

calc_prepayment_and_defeasance

Loan prepayment premium and defeasance

Prepayment premium, total payoff, and cost as a share of balance for a fixed-rate amortizing or interest-only loan under yield maintenance (PV of remaining payments or rate differential, with a minimum and an explicit discounting convention), a step-down schedule, a flat percentage, or defeasance (cost of the securities portfolio that funds the remaining payments plus stated costs). Deterministic: use this instead of doing the math yourself; cite formula calc.prepayment_and_defeasance@1 and the returned steps, and surface any warnings.

輸入參數balance必填prepayment必填accrued_interestnote_rate_annual必填amortization_months必填remaining_term_months必填

calc_walt

Weighted average lease term (WALT)

Weighted average remaining lease term in years as of a date (actual days ÷ 365.25), weighted by each lease's area_sf (weight_by "area") or annual_rent (weight_by "rent"). Deterministic: use this instead of doing the math yourself; cite formula calc.walt@1 and the returned steps, and surface any warnings.

輸入參數as_of必填leases必填weight_by

calc_npv

Net present value

NPV of periodic cash flows (t = 0, 1, 2, ...; the t = 0 flow is not discounted) at a per-period discount rate given as a decimal. Deterministic: use this instead of doing the math yourself; cite formula calc.npv@1 and the returned steps, and surface any warnings.

輸入參數rate必填cash_flows必填

calc_irr

Internal rate of return

Periodic and annualized IRR of periodic cash flows, as decimals (0.085 = 8.5%), solved deterministically by scanning a 1-point grid of per-period rates and bisecting each sign change; reports every root it finds when cash flows have multiple IRRs (two roots within one grid step can be missed). Errors when the flows do not change sign or no root lies between -99.99% and 1000% per period. Deterministic: use this instead of doing the math yourself; cite formula calc.irr@2 and the returned steps, and surface any warnings.

輸入參數cash_flows必填periods_per_year

calc_lease_vs_own

Lease vs. own

Compare leasing with buying over a fixed horizon: NPV of each case's annual cash costs (rent, free rent, tenant expenses, and move-in costs versus equity, debt service, owner expenses, reserves, and a sale at the horizon by stated value or exit cap rate), optionally after tax, with the year-by-year tables and the break-even residual value at which owning equals leasing. Deterministic: use this instead of doing the math yourself; cite formula calc.lease_vs_own@2 and the returned steps, and surface any warnings.

輸入參數own必填lease必填horizon_years必填discount_rate_annual必填

calc_renew_vs_relocate

Renew vs. relocate

Compare renewing in place with moving over one horizon: NPV and discounted effective rent of each case (rent schedule with free rent, TI net of allowance, fees, moving, downtime, double rent, termination, and disruption costs), the starting rent at which they break even, and year-by-year cash flows. Deterministic: use this instead of doing the math yourself; cite formula calc.renew_vs_relocate@2 and the returned steps, and surface any warnings.

輸入參數renew必填relocate必填horizon_months必填current_rent_monthlydiscount_rate_annual

calc_hotel_metrics

Hotel operating metrics (USALI)

Occupancy, ADR, RevPAR, TRevPAR, and a USALI-style profit ladder for a period: departmental profit, GOP and margin, GOPPAR, management fees, EBITDA, FF&E reserve, and NOI (EBITDA less replacement reserve). Deterministic: use this instead of doing the math yourself; cite formula calc.hotel_metrics@1 and the returned steps, and surface any warnings.

輸入參數rooms必填nights必填fb_revenuerooms_sold必填room_revenue必填other_revenueffe_reserve_raterooms_out_of_ordermanagement_fee_ratemanagement_fee_fixeddepartmental_expensesnon_operating_expenses另有 1 個

calc_dcf_pro_forma

Property DCF from a rent roll

Property-level discounted cash flow from an in-place rent roll: each lease's rent, escalations, remaining term, and expense recovery (NNN, gross, base year), then at expiration one blended lease weighted by the renewal probability (renewal vs new-tenant rent, free rent, TI, leasing commissions, and new-tenant downtime, with fractional downtime and free rent kept as part months rather than rounded); market rent growth, general vacancy and credit loss, operating expenses, management fee, and capital reserves. Returns the annual cash-flow table (NOI and cash flow before debt) for the hold plus one year, the exit value at a cap rate on forward (or trailing) NOI less selling costs, the value (PV at the discount rate, end-of-year or mid-year), and with a purchase price the NPV, unlevered IRR, and equity multiple, with every lease event and convention stated. Deterministic: use this instead of doing the math yourself; cite formula calc.dcf_pro_forma@2 and the returned steps, and surface any warnings.

輸入參數leases必填timinghold_years必填discount_rate必填exit_cap_rate必填exit_noi_basismarket_leasing必填purchase_pricecredit_loss_rateselling_cost_rateexpense_growth_ratemanagement_fee_rate另有 5 個

calc_direct_cap

Direct capitalization value and implied cap rate

Value by direct capitalization: (NOI − capital reserve) ÷ cap rate, then below-the-line deductions for lease-up costs, free-rent burn-off, and other adjustments to an as-is value (optionally rounded); and the cap rate a price implies, before and after reserves and all-in after the below-the-line costs. Records the NOI basis (trailing, forward, stabilized). Deterministic: use this instead of doing the math yourself; cite formula calc.direct_cap@1 and the returned steps, and surface any warnings.

輸入參數noi必填pricearea_sfcap_ratenoi_basislease_up_costsround_value_toother_adjustmentsfree_rent_burn_offcapex_reserve_annual

calc_amortization_schedule

Loan amortization schedule

Period-by-period schedule of a fixed-rate loan, monthly or quarterly: an optional interest-only period, then level payments on an amortization term that can run past maturity (balloon), with 30/360, actual/360, or actual/365 interest (the payment on a 30/360 basis). Rows are in cents that foot: interest is rounded each period, the final payment repays the whole balance, and the totals are the row sums. Deterministic: use this instead of doing the math yourself; cite formula calc.amortization_schedule@1 and the returned steps, and surface any warnings.

輸入參數day_countprincipal必填start_daterate_annual必填term_months必填payment_frequencyamortization_months必填interest_only_months

calc_equity_waterfall

LP/GP equity distribution waterfall

Split periodic project equity cash flows between LP and GP: preferred return (compounding or simple) and return of capital pro rata to capital in either order, an optional GP catch-up, IRR-hurdle tiers with promote splits measured on the LP's IRR, and a residual split. Returns per-period LP and GP contributions and distributions (with the GP's promote) that foot to the cent, and LP, GP, and project IRRs and multiples, with the conventions to confirm against the operating agreement. Deterministic: use this instead of doing the math yourself; cite formula calc.equity_waterfall@1 and the returned steps, and surface any warnings.

輸入參數preftierscatch_uplp_share必填cash_flows必填periods_per_yearresidual_promotedistribution_order

calc_exchange_1031

1031 exchange deadlines, identification, and boot

Not tax advice: arithmetic only. The 45-day identification and 180-day exchange deadlines of IRC §1031(a)(3) (the exchange period ends earlier at a given tax-return due date), the three-property, 200%, and 95% identification tests of Treas. Reg. §1.1031(k)-1(c)(4), and the cash boot, mortgage boot, debt replacement, and trade-down of an exchange, with the boot-limited gain when the basis is given. Deterministic: use this instead of doing the math yourself; cite formula calc.exchange_1031@2 and the returned steps, and surface any warnings.

輸入參數as_ofreplacementrelinquished必填tax_return_due_datecash_received_at_saleidentified_propertiesrelinquished_transfer_date必填

calc_critical_dates

Lease critical dates

Dated list of a lease's notice deadlines and option windows, from its expiration date and options: each renewal option's notice deadline or notice window and renewal term (successive options count back from the term before), each termination option's last day to give notice, an expansion option deadline, and other deadlines (a stated date, or N days after a date such as a ROFO notice). Calendar months; N months before a date keeps the day of month, clamped to a shorter month's end (a warning gives the month-end reading when it is later). Deadlines on a weekend or US federal holiday (5 U.S.C. §6103, observed days included) are flagged, or rolled to the preceding or following business day when business_day_roll says so. With as_of: days to each event, passed deadlines warned, and the next deadline. Steps show each computation. Deterministic: use this instead of doing the math yourself; cite formula calc.critical_dates@1 and the returned steps, and surface any warnings.

輸入參數as_ofholidaysrenewal_optionexpiration_date必填other_deadlinesbusiness_day_rollcommencement_datetermination_optionsexpansion_option_deadline

calc_reconcile_dcf

Tie out a DCF against another system's annual lines

Reconcile FactLot's DCF with another system's export (ARGUS or any other model; parity is not claimed and is untested against real ARGUS output): give the calc_dcf_pro_forma input plus the other system's annual lines {label, values: [year 1, …]}, optionally its value, unlevered IRR and sale price, a tolerance (absolute and relative) and your label mapping. Labels map to FactLot lines by your mapping, else by common CRE line names (Potential Base Rent, Absorption & Turnover Vacancy, Free Rent, Expense Reimbursements, General Vacancy, Credit Loss, Effective Gross Revenue, Operating Expenses, Net Operating Income, Tenant Improvements, Leasing Commissions, Capital Reserves, Cash Flow Before Debt Service); positive deductions are negated (sign_convention). Returns per line and year FactLot's amount, the other amount, the difference and whether it is within tolerance; unmapped labels; and for each differing line a likely_cause from FactLot's documented conventions, worded as a hypothesis to check: differences only in rollover years (fractional downtime and free rent), a rate on a different base (general vacancy), only the exit year, a one-year shift, management fee inside operating expenses, a growth rate, a constant factor or amount, rounding; and for the value FactLot rerun with mid-year or end-of-year discounting, the other exit NOI basis, or no selling costs. Deterministic: use this instead of doing the math yourself; cite formula calc.reconcile_dcf@1 and the returned steps, and surface any warnings.

輸入參數dcf必填other必填mappingtolerancesign_convention

calc_reconcile_cam

Tie out CAM reconciliations against another system's results

Reconcile FactLot's CAM reconciliation for one expense pool with another system's per-tenant results (Yardi or any other; parity is not claimed and is untested against a real export): give the calc_cam_reconciliation_batch input plus, per tenant, what the other system reported (share, gross-up, cap limit and reduction, admin fee, base-year or stop deduction, billed amount, estimates, balance; billed_amount required) and a tolerance. Returns per tenant and line FactLot's amount, the other amount, the difference and whether it is within tolerance, tenants missing on either side, and likely causes worded as hypotheses to check: a different pro rata share (and, when every share differs by one factor, the pool's denominator), or a FactLot rerun that matches the other system with lines left to the default controllable: true set uncontrollable, the cap's base year one year off, the other cap method, the other gross-up target or no gross-up, the admin fee before or after and within or outside the cap, or no fee on uncontrollable lines; and differing estimates paid. Deterministic: use this instead of doing the math yourself; cite formula calc.reconcile_cam@1 and the returned steps, and surface any warnings.

輸入參數cam必填other必填tolerance

calc_tx_unequal_appraisal

Texas unequal appraisal: median of adjusted comparables

Evidence calculation only: not an appraisal or an opinion of value, not legal or tax advice, and not a substitute for the advice of an attorney. The arithmetic of Tex. Tax Code §41.43(b)(3) and §42.26(a)(3), the subject's value against the median appraised value of a reasonable number of comparable properties appropriately adjusted. Takes 3–200 comparables chosen by the caller, each with its roll value and the caller's adjustments (percent, USD amount, or $/SF, each with a reason); optionally normalizes each comparable to value per SF of improvement or land area times the subject's area; applies percentages summed or compounded, then amounts; and returns every comparable's normalized and adjusted value, the sorted list, the median (for an even count, the mean of the two middle values), and the subject's value minus the median in USD (subject_minus_median) and as a fraction of the median (subject_minus_median_pct: 0.1554 means 15.54%, a decimal like every rate in FactLot, not 0.1554%), with the statutes cited. Warns on mixed value bases, §42.26(d) and the §23.231 limitation, comparables in another county, fewer than 5 comparables, total adjustments over 25%, and a comparable identical to the subject. It does not choose comparables, invent adjustments, or say whether to protest. Deterministic: use this instead of doing the math yourself; cite formula calc.tx_unequal_appraisal@1 and the returned steps, and surface any warnings.

輸入參數subject必填tax_year必填comparables必填normalize_byadjustment_combine

rules_tx_property_tax_protest_deadline

Texas property tax protest deadline

Deadline to file a Texas property tax protest with the appraisal review board: the later of May 15 or 30 days after the notice of appraised value was delivered, rolled past weekends and Texas legal holidays, plus a conservative file-by date (the last business day on or before the unadjusted deadline). Returns the statute citations, the rule's verification status and a disclaimer. Information about a statutory deadline: not legal or tax advice and not a substitute for the advice of an attorney. Verification status: verified. Cite rule rules.tx.property_tax_protest_deadline@2 and its statutes.

輸入參數tax_year必填notice_delivered_date

rules_tx_property_tax_protest_deadline_batch

Texas property tax protest deadlines (batch)

Texas property tax protest deadlines for many notices in one call (1–200 items, e.g. a consultant's client list): each item's id, tax year and, if known, notice delivery date. Each result is exactly what rules_tx_property_tax_protest_deadline returns for that item under rule rules.tx.property_tax_protest_deadline@2 (deadline, unadjusted deadline, governing basis, conservative file-by date, skipped days, the item's warnings), echoed with its id; an item with invalid input carries its error and the others are still answered. summary counts the items per deadline, earliest first, with the earliest and latest deadline. The statute citations, the rule's verification status and the disclaimer appear once (value.rule, value.disclaimer). A rules tool: never a registry lookup. Information about statutory deadlines: not legal or tax advice and not a substitute for the advice of an attorney; it does not say whether to protest. Verification status: verified. Cite rule rules.tx.property_tax_protest_deadline_batch@1 and its statutes.

輸入參數items必填

id_parcel

FactLot parcel ID

Deterministic FactLot ID for a parcel from state FIPS, county FIPS, and the assessor's parcel number (APN). The same parcel always yields the same ID, offline. Use it as the join key across systems. APNs that differ only in where a separator falls ("12-34", "1-234") get different IDs; in a county with a documented fixed-width format the variants of one APN converge (NYC BBL "3-1234-56" = "3012340056").

輸入參數apn必填state_fips必填county_fips必填

id_entity

FactLot legal-entity ID

Deterministic FactLot ID for a legal entity (LLC, LP, corporation, trust) from its registry jurisdiction and file number, or from its LEI (an LEI whose ISO 17442 check digits do not match is rejected).

輸入參數jurisdiction必填registry_number必填

id_space

FactLot space (suite) ID

FactLot ID for a suite or unit within a building, given the building's FactLot URN (from id_building). Suite designators are normalized: "Suite 100", "Ste 100" and "#100" agree, while "1-20" and "120" stay distinct.

輸入參數suite必填building_urn必填

id_building

FactLot building ID

Deterministic FactLot ID for a building from its street address: county FIPS, ZIP code, and street line. Every condominium unit, suite, and floor at the address gets the same building ID, offline. Pass it to id_space for a suite, or to registry_get to see the building's parcels.

輸入參數zip必填street必填state_fips必填county_fips必填

id_document

FactLot document ID

Content-addressed FactLot ID (SHA-256) for a document such as a lease, amendment, or estoppel.

輸入參數textcontent_base64

id_parse

Parse a FactLot ID

Validate a FactLot URN and return its kind, components, and short ID.

輸入參數urn必填

fact_validate

Validate a FactLot fact

Check one FactLot fact against the published fact schema (spec/schemas/fact.json): subject URN, dotted predicate, as_of date, provenance, optional rights; unknown fields are rejected at every level. Rules: every fact except a computed one cites at least one source (an inferred fact cites the evidence it was inferred from); a computed fact names its formula or cites a source; valid_from is not after valid_to; a source span does not end before it starts. For Ingest predicates (lease.expiration_date, lease.rentable_area_sf, lease.base_rent_schedule, ...) the value must have the predicate's shape and every source quote must state the value, by the same written-form rules as doc_verify_facts (a quote saying "2,500 square feet" does not support 1000). Not checked: that the quote is in the document, that the document or sha256 exists, that supersedes IDs exist, and quotes for other predicates; doc_verify_facts with the document's pages checks the quote. Returns { valid, issues }. Call before storing or sharing facts.

輸入參數fact必填

doc_verify_facts

Verify extracted document facts

Check values YOU extracted from a document against its text, deterministically; FactLot runs no model. Send the pages as text and one candidate per value: {predicate, value, quote, page}. Each candidate is checked in order: (1) the value's shape (Ingest predicates such as lease.expiration_date YYYY-MM-DD, lease.pro_rata_share in (0, 1], ordered lease.base_rent_schedule steps; any other dotted predicate needs a non-empty value); (2) the quote, at least 12 characters, is on the cited page, where only whitespace, line breaks, letter case and typographic quotes and dashes may differ (a word hyphenated across a line must keep its hyphen; a quote found on exactly one other page is accepted with the page corrected); (3) every number, date and party name in the value is written in the quote, in any common form: 1250000 matches "$1,250,000.00", 0.03 matches "3%" or "three percent", 2031-06-30 matches "June 30, 2031" or "6/30/2031"; text the lease states as written (a prohibited use, a carve-out, a protected use) is written in it as words, ignoring case, punctuation and line breaks; (4) a confidence you give below 0.8 holds it for review; (5) every other part of the value must be confirmed by the quote too: a true/false value, an enum or a summary not written in the quote holds the candidate for review, named in the reason. Verified means every part of the value was found in the quote. Returns verified (FactLot facts: method extracted, citing document_id, page, quote and character span, plus which value parts were checked and as what), needs_review (the quote is on the page but does not state the value: check consistency; low confidence: confidence; a part FactLot cannot confirm from the quote, such as a boolean: coverage) and rejected (wrong shape; quote missing, too short, or on several pages), each with a reason to act on. Not checked: meaning (a quote stating the number in another context passes), and whether the pages came from the file whose sha256 you give.

輸入參數as_of必填subjectdocument必填candidates必填

doc_abstract_lease

Lease abstract with amendments

Current-state lease abstract from a lease and its amendments, with amendment precedence, as of as_of. Give each document's pages with the candidates you extracted (checked exactly as doc_verify_facts checks them), or the facts doc_verify_facts already returned for it (without pages only the value against its quote is rechecked, marked quote_on_page: false). Documents may come in any order: give the lease role original and each amendment role amendment with its effective_date (without a role the lease is inferred only when that is unambiguous, otherwise it is an input error; two or more amendments need effective dates). The original applies first, then amendments by effective_date; a later document's value for a predicate controls, and the earlier one moves to history and is linked through supersedes. An amendment effective after as_of is pending: its values are listed under pending and pending_facts with a warning and do not control. A rent schedule restated from a later date keeps the earlier steps before it (carried_forward). Each field gives its value, the controlling document, page, quote and fact, the superseded history, conflicts (two different values from one document, or from two documents of the same rank), pending values and open_items (a candidate for that predicate in the controlling or a later document that needs review or was rejected, so the value may not be final). FactLot only orders what you extracted: it does not find terms you missed, and an amendment that changes a term without restating it ("extended by 24 months") needs the resulting value extracted with that sentence as its quote, which the quote check will hold for review if the date is not written there.

輸入參數as_of必填subjectdocuments必填

doc_compare

Compare asserted values with a lease

Compare values another document asserts (an estoppel, rent roll or offering memo, mapped by you to predicates) with verified lease facts from doc_abstract_lease or doc_verify_facts. Each asserted value comes back match, mismatch (with the differing fields), not_in_lease, or ambiguous_in_lease (two current lease facts disagree), with the controlling lease citation (document, page, quote). Values compare exactly as JSON: numbers by value, strings exactly (a name written differently is a mismatch), and for an object only the fields you assert. Facts another fact supersedes are ignored. When the lease fact is an extracted fact whose quote does not confirm part of its value (a true/false value, an enum), the result lists those parts in lease_not_checked. The lease facts must pass fact_validate; FactLot does not re-read the lease, so pass the facts its document tools returned.

輸入參數asserted必填lease_facts必填

doc_verify_claim

Verify a claim against a document

Check one claim against a document page: {predicate, value} (anything doc_verify_facts accepts) or a short claim sentence ({text} or a bare string), plus the verbatim quote and page it rests on. Returns supported (the quote is on the page and every checked number, date and name in the claim is written in it), contradicted (the quote is on the page and states other numbers or dates of the same kind, listed in quote_states), or unverifiable (the quote is not on the page, nothing in the claim can be checked, or the quote states no value of that kind), with the evidence (document_id, page, quote, span) and each part checked. Textual, not semantic: for a sentence only its numbers and dates are compared, never its meaning, and a quote that mentions the right number for a different term still supports it.

輸入參數page必填claim必填quote必填document必填

doc_spread_statement

Spread an operating statement

Spread a T-12, operating statement, budget or rent roll summary YOU read, onto FactLot's published chart of accounts (multifamily, commercial, or hotel after the USALI summary), deterministically; FactLot runs no model. Send the pages as text and one line per item: {label, amount, quote, page}, optionally your category, a period column, and for a subtotal the indexes of the lines it sums; give the statement's own totals (effective_gross_income, total_operating_expenses, net_operating_income, ebitda, ...) as lines with that total as category. Each line is checked: the quote is on the page (a quote under 12 characters, such as a short row, only where it stands as whole words), the amount (as a number, any common written form; (1,200) and -1,200 read as negative) and the label are written in it; a line that fails is excluded with the reason, and a stated total that does not foot names the lines left out. The label is mapped to the chart by keywords: your category is used when it is in the chart, and an exception flags it for review when the dictionary maps the label elsewhere; an ambiguous or unknown label without a category is excluded. Vacancy, concessions, credit loss and other contra lines are always subtracted. Returns per period the sections, the computed totals (EGI, operating expenses, NOI, capital items, net cash flow; for hotels departmental profit, GOP, EBITDA and NOI after the replacement reserve), whether each total and subtotal the statement states foots (within 0.5 per line added, or your tolerance), every line with its citation (document, page, quote, span) and status, statistics (units, occupancy, ADR), and exceptions to review. Not checked: whether the agent missed lines, and meaning beyond the written amount and label.

輸入參數lines必填perioddocument必填toleranceproperty_type必填statement_type

doc_check_use_conflict

Check a proposed use against exclusives

Check a proposed use (a description, plus an optional use category or 2022 NAICS code) against a center's verified lease.exclusive_use and lease.prohibited_uses facts (from doc_verify_facts or doc_abstract_lease; each must pass fact_validate). Deterministic and textual: a restriction is a potential conflict when it shares a use category with the proposed use (FactLot's published use-category vocabulary, matched on keywords, the category given and NAICS codes) or shares words with it (two or more, or every significant word of the restriction). Each hit is labelled "potential conflict — needs human review" and returns the controlling quote and citation, the categories and words that matched, and the exclusive's carve-outs, flagging those that mention the proposed use. FactLot does not interpret the lease, decide whether a carve-out applies, or give legal conclusions; an empty result does not mean there is no conflict. Superseded facts are ignored.

輸入參數facts必填proposed_use必填

doc_predicates

Lease predicate catalog

Look up the lease predicates doc_verify_facts and doc_abstract_lease know (lease.expiration_date, lease.base_rent_schedule, lease.go_dark, ...) before extracting: for each, its value shape as JSON Schema, one valid example with a quote that states it (and whether that example verifies), which parts of the value are checked against the quote and how (number, ratio, date, verbatim name, as-written words, a worded enum, a number inside free text), which count as checked only when the quote writes them out (summaries, some enums), and which always need review (true/false values and enums no wording confirms, such as a CAM cap method or a kick-out party) unless a person confirms them. Generated from the same tables the checks use. Give predicate for one, prefix (e.g. lease.renewal) for a group, or neither for all. Also returns notes on statuses, paths, human confirmation and the generic rules for any other dotted predicate. Reads no document.

輸入參數prefixpredicate

fact_package_create

Create a fact package

Bundle FactLot facts (each must pass fact_validate) into a fact package a counterparty can verify: canonical JSON (RFC 8785) of every fact, an RFC 6962 Merkle tree over the facts, the source documents the facts cite with their sha256 where known, and a digest over all of it. Returns the unsigned package, its digest, and signing_message, the exact text to sign. FactLot never holds private keys: to sign, the holder signs signing_message with their own Ed25519 key on their own machine (factlot.sign_fact_package in Python, signFactPackage in @factlot/tools, or fact_package_sign in the local MCP server). Deterministic: no clock time is added (pass created_at), and the same facts always give the same digest.

輸入參數facts必填titledocumentscreated_atcreated_by

fact_package_verify

Verify a fact package

Verify a fact package from fact_package_create: recompute every fact's hash, the Merkle root and the digest from the content (any changed fact, title, date or document list shows as a mismatch); check each fact against fact_validate; check the Ed25519 signature, against the public_key you pass (base64url, the signer's key you trust) or, without one, only against the key inside the package (which proves nothing about who signed); and, given the source documents' pages, check every quote is on its cited page. Returns valid plus each check's details, checks_run and checks_not_run (what was and was not checked), and values_not_checked: the parts of extracted facts' values that their quotes do not confirm (a true/false value, an enum, a summary), which do not change valid. Not checked: that the pages you pass are the original files (pass sha256 to tie them to the file hash), or what the facts mean.

輸入參數package必填documentspublic_key

lease_comp_validate

Validate a lease comp and derive its NER

Check a lease comparable one firm shares with others, as a FactLot fact with predicate lease.comp, and derive its net effective rent. The fact goes through fact_validate (schema, citations, rights), then the comp's own rules: shape (spec/schemas/fact.json LeaseComp: area, commencement, term or expiration, starting or current rent, escalation, free rent, TI, leasing commissions, expense basis, confirming party, verification), an expiration after commencement, a term that matches the dates, free rent within the term, no email, phone or ID number in the text. A comp names no person or company. With the default share profile it also needs the deal's starting rent, escalations, free rent, TI, property type, an expense basis other than unknown, and stated rights. When valid and a starting rent is given, ner.fact is a computed lease.net_effective_rent fact (formula calc.net_effective_rent@1, straight-line and discounted at discount_rate_annual, on the comp's own expense basis; no conversion between full service and net). Returns { valid, issues, warnings, ner }. Call before sharing a comp.

輸入參數fact必填profilediscount_rate_annual

registry_get

Get a registry record

Everything the FactLot Registry knows about a parcel, legal entity, or building: status, current cited facts (owner of record, situs address, property category, areas, values), ownership links, external IDs, and for a parcel the building it belongs to (condominium units roll up into one building). value_history (parcels) lists market and appraised value by tax year from every snapshot, newest first, each value cited; a tax year two snapshots value differently appears once per value. as_of gives the facts as they stood on a date. warnings flags area facts that look wrong (building area above 40 times the land area, a land area of 0); the facts themselves are as the source publishes them. A building record can carry debt.cmbs_loan facts (one per CMBS trust holding a note of its loan: balance, rate, maturity, payment status, servicer, special-servicing dates, NOI, DSCR) and an entity record can carry entity.parent facts (the SEC registrant that lists it as a subsidiary in Exhibit 21), each cited to its SEC filing. A miss says whether the county or entity registry is loaded. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

輸入參數urn必填as_ofinclude_history

registry_resolve_parcel

Resolve a parcel in the registry

Find a parcel's FactLot URN from state FIPS, county FIPS, and APN, if the registry holds it. A miss returns urn null with coverage: whether that county is loaded in this registry. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

輸入參數apn必填state_fips必填county_fips必填

registry_resolve_external

Resolve an external ID

Find the FactLot URN for an ID from another system, e.g. system "sdat_account" (a Maryland SDAT account number) or, where Texas is hosted, "hcad_account" (a Harris CAD account number). Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

輸入參數system必填external_id必填

registry_search_address

Search parcels by address

Find commercial parcels by situs address. Matches whole words of the street line (the part before the first comma), normalized: 'Street' = 'St', 'Northwest' = 'N.W.' = 'NW'; a suite, unit, '#' or floor is ignored. Give a house number ('1200 Main', '1200 Main St NW') or a street name with its type ('Main St'); a city or a part of a word alone matches nothing. No match returns coverage: what this registry holds. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

輸入參數limitquery必填

registry_search_entities

Search legal entities by name

Find registered business entities (LLCs, LPs, corporations) by name. Natural persons are not searchable. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

輸入參數limitquery必填

registry_owned_by

Parcels owned by an entity

Commercial parcels currently linked to a legal entity as owner of record (inferred links carry a confidence), each with the building it belongs to, plus a per-building summary so condominium units count once per building. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

輸入參數entity_urn必填

registry_coverage

What the registry holds

The counties (with parcel and building counts), entity registries, and crosswalk systems this FactLot Registry file holds, each with its sources and as-of dates. Call it before concluding that a parcel or entity does not exist: a miss outside these regions means not loaded, not absent. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

無需輸入參數。

registry_tx_equity_candidates

Texas unequal-appraisal candidates

Candidate comparable parcels for a Texas unequal-appraisal comparison (Tax Code §41.43(b)(3)), from one tax year of the subject's appraisal district roll (the newest year whose roll gives the subject a value, or tax_year), with every field of the subject and the candidates read from that year's roll only: same county and tax year, the same state property category code, improvement area within area_band of the subject's, year built within year_band years when both are known; parcels sharing the subject's neighborhood code first (when the roll gives one), then its ZIP code, then the rest of the county if fewer than min_matches. Each candidate and the subject are shaped for calc_tx_unequal_appraisal (id, value and value_basis, areas, year built, codes, citation of the value fact); the subject adds its value history by tax year. selection echoes the rule, the effective parameters, the tax year and roll sources used, and which tier each candidate came from; Each candidate's citation.document_id names its entry in sources, which gives that snapshot's license, attribution, ai_use and redistribution: relay them with the candidate. Candidates under FactLot's default rule, a design choice, not a legal standard; a person decides which, if any, to use. For evidence calculations only: FactLot does not represent property owners, file protests, or advise whether to protest. Not an appraisal or an opinion of value (Tex. Occ. Code §1103.003(1)); not legal or tax advice and not a substitute for the advice of an attorney. Never returns owner names, mailing addresses, or ownership facts. Do not look up the owners of candidate parcels; ownership is not needed for this comparison. Texas parcels only. Tarrant County is not served by the hosted registry while the publisher's terms for AI use are unclear. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

輸入參數apnurnlimittax_yeararea_bandyear_bandstate_fipscounty_fipsmin_matches

registry_tx_equity_candidates_batch

Texas unequal-appraisal candidates (batch)

registry_tx_equity_candidates for many subjects in one call (1–50, e.g. a consultant's client parcels): each subject's id (your label, echoed back) and its urn, or county_fips and apn, plus the rule parameters once for every subject (area_band, year_band, min_matches, limit, tax_year). Each entry of results is that subject's answer from registry_tx_equity_candidates (subject, candidates, selection, sources, warnings) or that subject's error (error, message, issues, and coverage on a miss), so one subject outside Texas, in Tarrant County, or not in the registry does not fail the others; the Texas-only and Tarrant checks apply to each subject. The selection rule and the notice appear once at the top (rule, notice) instead of in every answer; summary counts subjects, answered and errors. Candidates per subject only: this tool never runs calc_tx_unequal_appraisal and never picks comparables; a person decides, for each subject, which candidates (if any) to use, and only those go to calc_tx_unequal_appraisal. Relay each candidate's source rights from that subject's sources. For evidence calculations only: FactLot does not represent property owners, file protests, or advise whether to protest. Not an appraisal or an opinion of value (Tex. Occ. Code §1103.003(1)); not legal or tax advice and not a substitute for the advice of an attorney. Never returns owner names, mailing addresses, or ownership facts; do not look up the owners of candidate parcels. On the hosted API each answered subject counts as one registry lookup (a subject with an error is not counted). Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

輸入參數limitsubjects必填tax_yeararea_bandyear_bandmin_matches

fetch

Fetch a FactLot knowledge document

Fetch the full text of a FactLot knowledge document by the id returned from search. With a registry loaded, a registry fact's source document_id (fl:document:sha256-…) returns that source snapshot: publisher, dataset, URL, retrieval date, as-of date, licence, AI-use and redistribution rights, file name and size.

輸入參數id必填

schema_get

FactLot JSON Schemas

Return the FactLot data model (Fact, Provenance, SourceRef, Rights, Relationship) as JSON Schema.

無需輸入參數。

版本歷史

5
  1. v0.5.0最新Nov 7, 2026
  2. v0.3.0Nov 4, 2026
  3. v0.2.0Nov 4, 2026
  4. v0.1.1Nov 3, 2026
  5. v0.1.0Nov 3, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分