For platforms & data teams
Already have an extractor? Add the validation layer.
RentRollIQ's validation registry encodes 43 institutional underwriting rules — mixed-basis NOI conflation, mislabeled rent-only EGI, dropped-line-item extraction artifacts, synthesized rent rolls treated as ground truth — as a callable API. You keep your extraction pipeline; we run the rules and return typed, per-check findings your UI can render.
One endpoint, two modes
POST /v1/validate accepts either a source PDF (we run the full pipeline) or your already-extracted JSON (we run only the validation registry — the common integration path). Checks that lack the artifacts you supplied are skipped, not errored: send only a rent roll and you get the rent-roll-applicable subset.
curl -sS https://api.rentrolliq.com/v1/validate \ -H "X-API-Key: <your-partner-key>" \ -H "Content-Type: application/json" \ -d @extraction.json | jq '.summary'
{
"checks_run": 10,
"checks_passed": 3,
"checks_info": 3,
"checks_warned": 2,
"checks_failed": 1,
"checks_skipped": 1,
"overall_status": "fail",
"headline_concern": "Cap rate variance 118 bps > 75 bps tolerance."
}Every result row carries check_id, status, a human-readable message, the affected fields, and a structured data block with the underlying math — plus page citations where the source discloses them.
43 checks, regression-pinned
Each check is pinned against a 22-fixture corpus of real broker OMs across 5 asset classes, so a model or prompt change that breaks a rule is caught the day it happens. The full machine-readable catalog ships at GET /v1/checks.
Income statement
NOI reconciliation with opex-basis classification, cap-rate basis checks, monthly×12 tie-outs, capex-reclass hygiene.
noi_reconciliationcap_rate_reconciliationcap_rate_basis_reconciliationopex_year_over_year_sanitycapex_reclassified_from_opexExtraction QA
Separates a broken extraction from a bad deal: non-positive NOI, impossible expense ratios, dropped income lines caught via GRM × asking cross-checks.
extraction_artifact_screenextractor_failedsynthetic_rent_rollocr_recovery_inferencesRent roll
Internal consistency, unit-count reconciliation that respects commercial/garage classifications, banked rent, non-arms-length leases.
rent_roll_internal_consistencyunit_count_reconciliationbanked_rent_aggregationnon_arms_length_leases_detectedCross-document
Broker-headline KPI cross-checks, cross-property consistency, jurisdiction and property-tax basis checks, material disclosures.
broker_headline_consistencycross_property_consistencyjurisdiction_consistencyproperty_tax_basis_conflationmaterial_disclosures_detectedLatency and integration
| Mode | Typical latency | Use case |
|---|---|---|
| JSON (validation only) | <500 ms | You keep your extractor; we run the rules. The common partner path. |
| PDF (full pipeline) | ~30–180 s | Section discovery → extraction → validation, end to end. |
- • Per-key token-bucket rate limiting; typed Pydantic request/response shapes; the OpenAPI spec is generated from the route handlers and pinned by tests.
- • Registry versioning on every response, with an
X-Registry-Versionpin header so an upgrade never surprises your CI. - • Two-week integration target behind an existing extraction stack.