Sensible is the extraction layer under your property underwriting workflow: schema-validated and traceable to the source page, so your deal team can trust the data without checking it by hand.
| Unit · ends | Monthly | Annual |
|---|---|---|
| 101 · 03/31/2025 | 2,150.00 | 25,800.00 |
| 102 · 11/30/2024 | 2,095.00 | 25,140.00 |
| 201 · 06/30/2025 | 2,875.00 | 34,500.00 |
| 202 · 01/31/2025 | 2,940.00 | 35,280.00 |
| 301 · 09/30/2024 | 3,010.00 | 36,120.00 |
| Move-in charge | Due | Amount |
|---|---|---|
| First month's rent | 02/01/2024 | 2,940.00 |
| Security deposit | 01/12/2024 | 2,940.00 |
| Loan costs | Section | Amount |
|---|---|---|
| Origination charges | A | 4,660.00 |
| Services not shopped for | B | 707.00 |
| Services shopped for | C | 1,845.00 |
| Total other costs | I | 5,519.05 |
Hover a field to trace it to the source. Sample data; output is illustrative.
Per field
LLM or deterministic method
Per document
pricing, whatever the page count
SOC 2 + HIPAA
SOC 2 Type II · BAA on Enterprise
No credit card
14-day free trial
Trusted by teams turning documents into production data






Units, rents and lease dates land somewhere different in each system’s export. You choose the extraction method for each field, and each value comes back typed and traced to its page.
Property-management exports and lender packets name the same column Monthly, Scheduled rent or Contract rent, and put totals above or below the table. Layout methods take the fixed columns and an LLM method reads the rest.
Unit PH1 is a string, 0202 is easy to coerce to a number, and the lease end 01/31/2025 has to become a date. Units stay strings, dates become ISO 8601 and amounts become currency, with the printed text kept as source.
Do the units add up to the total? Does rent times 12 equal annual rent? If the annual total reads 156,480.00 where the units sum to 156,840.00, the 360.00 gap comes back as a validation error and the roll can be held for review.
A unit on the rent roll has to match the lease and the closing disclosure that name it. Sensible returns the unit and address clean, down to PH1 and 0202, so your underwriting platform can match the three.
Grouped the way underwriters ask for them. Each field comes back typed, keeps the text as printed, and can point to where it sits on the page.
property_namestringproperty_addressstringas_of_datedatesource.prepared_datedatemanagement_companystringproperty_idstringreport_numberstringreport_pagestringunit_rangestringunitstringunit_typestringlease_enddatesq_ftnumbermonthly_rentcurrencysource.annual_rentcurrencysource.tenant_namestringlease_startdatetotal_sq_ftnumbertotal_monthly_rentcurrencytotal_annual_rentcurrencytotal_unitsnumberoccupied_unitsnumbervacant_unitsnumberoccupancy_ratenumbertotal_market_rentcurrencyFive stages, and values can carry the page and polygon they came from all the way through.
PDF, scan, spreadsheet export or email attachment. Any source, no pre-sorting.
Document type identified (rent roll, lease, closing disclosure, inspection report) before extraction runs.
You pick the method for each field: an LLM where layouts vary, a layout or anchor method where the position holds.
Calculation checks run on the output: unit rents to totals, monthly rent times 12 to annual rent. Failures are flagged for review.
Typed JSON, with page and polygon per value when verbosity is set, sent by webhook or pulled by API.
Webhook or API into your underwriting platform or loan origination system. NOI and debt service calculations happen there. Sensible hands over data you can load; it doesn’t run those steps.
Getting a rent off a PDF is the easy part. The question your underwriting team asks is whether it’s the right rent, so Sensible checks each rent roll the way an analyst would. When a check fails, the field is flagged and can be routed for review instead of flowing into your model.
We don’t publish a flat accuracy percentage. Accuracy depends on document quality and configuration, and a single number hides both.
Sensible
Solutions engineers write the SenseML configs from your samples, adjust them when formats change, and help with integration work. You get the same engine as self-serve, with the configuration work done for you.
Engineers review your samples and pick the right method.
SenseML configs written from your samples.
Same engine as self-serve, ready for production.
Configs updated when formats shift or new edge cases appear.
Help with custom integration into your downstream systems.
The extraction logic is written out in SenseML rather than buried in prompts, so a new format can be added and reviewed.
Property-management exports · Owner and asset-manager reports · Lender and servicer packets · Title and escrow documents · Offering packages · Spreadsheet rent rolls
Rent rolls · Leases · Closing disclosures · Loan applications (1003) · Appraisals and title reports · Offering memorandums
Term, rent, deposit, escalations and options, read from the clause wherever it sits.
Findings, severity ratings and cost items. Inspect-It 1st uses Sensible for these.
Multi-document packets are split and classified before extraction against your schema.
PDF (native or scanned) · Excel and CSV exports · Word (DOC / DOCX) · JPEG / PNG · TIFF · Email bodies and attachments
Scope, system formats, checks, leases, and where Sensible stops and your underwriting stack starts.
No. Sensible is the extraction layer. It reads the rent roll, the lease and the closing disclosure, and captures the fields that feed underwriting (unit, rent, lease dates, loan terms) in a consistent, schema-validated shape. The underwriting logic itself, including NOI and debt service, lives downstream in your own models or underwriting platform.
Not as a built-in feature. Sensible’s validation rules run against one document at a time, and comparing a lease to the rent roll row it belongs to needs two documents.
What Sensible does give you is clean fields on each: unit, address, monthly rent and lease dates, extracted the same way each time. Comparing them belongs in your underwriting platform or your own models. If you want that wired in as part of the pipeline, our managed-services team can help with the integration.
Sensible prices per document, not per token, so cost is predictable at 500 documents a month or 50,000. One extraction result counts as one document, whatever its page count. A packet that Sensible splits into several documents counts each one. Enterprise plans add volume tiers; see pricing or talk to our team for a volume quote.
Computed checks confirm that unit rents sum to the total, that monthly rent times 12 equals annual rent, and that lease ends fall after the as-of date. A failed check is flagged and can be routed to human review. Results come back by webhook or API, or as Excel or CSV.
Accuracy depends on document quality and configuration, so we don’t quote a single flat number. What we can tell you is how the output is checked: schema enforcement and calculation validation, so weak extractions are flagged instead of passed through silently. The best way to know is to run your own rent rolls, including the worst exports, through it.
Sensible holds a SOC 2 Type II report from an independent audit, and data is encrypted in transit and at rest. HIPAA is available on Enterprise with a signed BAA. Custom data retention is also on Enterprise, so talk to our team about the retention you need.