Multifamily Rent Rolls and T12s In. Standardized JSON Out.
One API call returns the same JSON every time, checked against the document's own totals. For developers and SaaS companies.
| Unit | Type | Resident | Lease end | Rent |
|---|---|---|---|---|
| 101 | A1 | Rivera, Jordan | 06/30/2027 | 1,450 |
| 102 | B2 | Chen, Avery | 02/28/2027 | 1,895 |
| 103 | A1 | Okafor, Sam | 11/30/2026 | 1,460 |
| Total · 3 units | 4,805 | |||
{
"rows": [
{ "unit_num": "101", "rent_total": "1450", … },
{ "unit_num": "102", "rent_total": "1895", … },
{ "unit_num": "103", "rent_total": "1460", … }
],
"report": { "status": "ok" }
}
Every Document Comes Back in the Same Shape
Rent rolls and T12s look different in every property management system. The API reads the layout, pulls out the data, and returns it in one fixed schema your code can rely on.
-
Rent roll
One Object Per Unit
Every row of the rent roll comes back with the same field names. Dates are in one format and money is a plain number.
{ "unit_num": "101", "unit_type": "A1", "occupancy": "OCC", "tenant": "Rivera, Jordan", "lease_end": "2027-06-30", "rent_total": "1450" } -
T12
Categorized Monthly Line Items
Each account line gets a standard category, its twelve monthly values, and the total the statement itself prints.
{ "label": "6300 Salaries", "canonical_label": "Payroll", "values": ["18400", "18400", …], "total": "224800", "document_total": "224800" }
Run It on Your Own Rent Roll or T12
See what comes back for your file before you write any code.
A Tested Solution You Don't Have to Build
- One schema
One Schema for Every Source
Yardi, RealPage, Entrata, AppFolio and others all come back in the same fields, so you write your integration once.
- Validation
Checked Before It Reaches You
Each result is compared with the totals the document prints. It comes back marked ok or needs review, with the reason.
- One endpoint
One Endpoint for Both
Send any file to one endpoint and it works out whether it is a rent roll or a T12.
- Billing
You Pay Only for Results
A file that can't be read is not billed. Every document that is read is counted.
- AI agents
Works With AI Assistants
Call the same extraction from Claude, ChatGPT or your own AI agent, on the same account.
Start Building
Endpoints for rent rolls and T12s, the full response schema, and examples you can copy in cURL, Python and JavaScript.
curl -X POST \
https://data.quickdata.ai/v1/extract \
-H "Authorization: Bearer $QD_KEY" \
-F "file=@rent_roll.xlsx"
Response · 200 OK
{
"rows": [ one object per unit ],
"unit_mix": { totals by unit type },
"report": { "status": "ok", checks }
}
Questions About Integrating It?
Talk to David about your volume, your systems or a deeper integration.

The API, Answered.
What does the rent roll and T12 API return?
Standardized JSON. A multifamily rent roll comes back as one object per unit with the same field names every time, plus a unit mix summary. A T12 comes back as categorized monthly line items, each with its twelve monthly values and the total the statement prints. Both include a report that says whether the result matched the document's own totals.
Do I need separate endpoints for rent rolls and T12s?
No. Send any file to one endpoint and it works out whether it is a rent roll or a T12.
Which file formats does the API accept?
Excel (xlsx, xls), CSV and PDF, up to 25 MB, from Yardi, RealPage, Entrata, AppFolio and other property management systems. Every source comes back in the same schema, so you write your integration once.
How is the API priced?
Your first 20 documents are free. After that it is $99 a month for 100 documents, and $1 per document after that. A credit card is required to sign up, and billing starts only after your first 20 documents.
Am I billed for a file the API can't read?
No. A file that can't be read is not billed. Every document that is read is counted.
How do I know a result is right before I use it?
Each result is compared with the totals the document prints. It comes back marked ok or needs review, with the reason, so your code can decide what to do with it.
Can I call the API from Claude, ChatGPT or my own AI agent?
Yes. You can call the same extraction from Claude, ChatGPT or your own AI agent, on the same account.
Who is the API for?
Developers at companies with their own software or database, and commercial real estate software providers that want tested rent roll and T12 extraction in their own product instead of building and maintaining it themselves.
How accurate is the extraction?
99.3% accurate, measured on real multifamily rent rolls and T12s in Excel, CSV and PDF.
What happens to the files I send?
Your file is read to produce your result, and QuickData stores nothing of it when it reads cleanly: not the file, not the result. A file that can't be read, or whose result needs review, is saved as an anonymized copy (residents' names, ids, emails and phone numbers replaced) so our team can fix the cause; it is deleted when that is done, and after 30 days at the latest. Your data is never sold or shared with marketers. Text from it goes to our AI processing providers to help read it, and neither may train on it: one reads every document and keeps nothing, and the other checks some documents when the first is unsure or the result doesn't match the document's totals, and deletes what it receives within 30 days. Details are in our privacy policy.