Compare Leases Against a Master Template
Batch-check 200 leases against your standard template to find deviations.
Who is this for
Legal Team / Paralegal at a law firm or in-house legal department. You have a portfolio of leases and need to identify which ones deviate from your master template — without reading every clause of every document manually.
What you'll do
- Upload your master lease template as a reference document
- Batch-submit individual tenant leases for clause-by-clause comparison
- Receive a structured report of deviations per lease, triaged by severity
- Focus review time on leases that actually differ from standard terms
Submit lease comparisons
Open your master template once, then loop through each tenant lease and submit it for comparison. Tag each job with metadata so you can filter and group results later.
from curvestone import Agentimport globagent = Agent()# Upload master template oncemaster = open("master_lease_template.pdf", "rb")# Batch-submit leases for comparisonresults = []for lease_path in glob.glob("leases/*.pdf"):result = agent.check(case_type="lease_comparison",depth="comprehensive",documents=[master, open(lease_path, "rb")],reference=f"LEASE-{lease_path.split('/')[-1]}",metadata={"batch": "Q1-2026-portfolio-review"},)results.append(result)print(f"Submitted {len(results)} lease comparisons")
Batch API alternative
For large portfolios, you can also submit all jobs in a single call using the batch endpoint. This is more efficient and returns a batch ID you can poll for overall progress.
# Async batch submission (Python)results = await agent.check_batch(jobs=[{"case_type": "lease_comparison","depth": "comprehensive","documents": [master, open(f"leases/{f}", "rb")],"reference": f"LEASE-{f}","metadata": {"batch": "Q1-2026-portfolio-review"},}for f in lease_files])print(f"Batch ID: {results.batch_id}")print(f"Jobs queued: {results.total}")
Response
Each lease returns a structured comparison with clause-level findings. Here is a single lease result:
1{2 "id": "job_2mNx8kQpT1",3 "type": "check",4 "status": "completed",5 "triage": "amber",6 "reference": "LEASE-unit-42.pdf",7 "processing_time": "89s",8 "checks": [9 {10 "name": "Rent Escalation Clause",11 "triage": "red",12 "finding": "Non-standard escalation: 5% annual vs 3% template"13 },14 {15 "name": "Break Clause",16 "triage": "green"17 },18 {19 "name": "Repair Obligations",20 "triage": "amber",21 "finding": "Tenant repair scope broader than template — includes structural elements"22 },23 {24 "name": "Insurance Requirements",25 "triage": "green"26 },27 {28 "name": "Assignment & Subletting",29 "triage": "green"30 }31 ],32 "cost": "£6.00"33}
What happens
Clause-by-clause comparison
Each lease is compared against the master template at the clause level. The agent identifies the corresponding section in each document and flags deviations with a severity: green means the clause matches the template, amber indicates a minor deviation, and red signals a significant departure from standard terms.
Focus your review time
Instead of reading all 200 leases cover-to-cover, your legal team can filter for amber and red results and focus review time on the leases that actually differ from standard terms. Green leases can be approved in bulk.
Processing time
Individual leases typically complete in 60-120 seconds. For a portfolio of 200 leases, expect 3-4 hours total processing time as jobs run in parallel. Use webhooks to get notified as each lease completes rather than polling.