Lending & Real EstatePOST /v1/extract?template=contract

Pull the terms out of a commercial lease

Supported Formats: Commercial Leases, Agreements for Lease, MSAs & Service Contracts, Deeds of Variation
Core Verification Mechanisms: Template Extraction · Table Parsing · Heading-Path Chunking · Evidence Grounding
Need copy-paste code with sandbox testing?Open Developer Playbook (cURL / Python / MCP) →

The problem

A lease portfolio is a filing cabinet full of answers nobody can query. The rent review mechanism, the break date, whether the option was ever exercised — each answer exists, in a different clause, in a different document, in a different format.

So the work gets done twice: once by an analyst reading the lease into a spreadsheet, and again by whoever does not trust the spreadsheet.

How Stipple helps

Send the lease and get structured fields back — parties, term, commencement, rent and review mechanism, options, break rights — alongside any schedule parsed as a table rather than flattened into prose.

Every value carries grounding: the page and text it was read from. That is what lets an analyst check a number in seconds instead of re-reading the clause, and what makes the output safe to load into a system of record.

bash
curl -X POST "https://www.stipple.sh/v1/extract?template=contract&options=grounding,chunks" \
  -F "file=@lease.pdf"
# → { "fields": { "commencement_date": { "value": "2024-07-01", "grounding": {...} },
#     "rent_review_mechanism": { "value": "CPI + 1.0%", ... } }, "tables": [...] }

Load a portfolio once, then query it. The chunked output also drops straight into a RAG index, so the lease answers questions rather than sitting in a folder.

Questions

How accurate is the extraction?
We have not benchmarked it, and we will not quote a number we have not measured. Extraction accuracy varies enormously with document quality — a born-digital lease and a scanned 1990s counterpart are different problems. What we do instead is return grounding on every field, so you can verify any value against the source text yourself rather than trusting a percentage. Run it on your own leases in the sandbox before you commit.
What happens with a clause the template does not cover?
Ask for it. The contract template is a starting set of fields, not a fixed schema — you can pass your own field definitions with the question you want answered for each. Anything the document does not support comes back empty rather than guessed, which is the behaviour you want when the answer is going into a rent roll.