Extracting data from roof certifications
Licensed inspectors, roofers and engineers complete a roof certification when a property insurer, most often in Florida, asks for proof of an older roof's condition. Citizens Property Insurance publishes one form, and inspection software prints its own versions. Underwriters receive thousands at binding and renewal, uploaded by agents as PDFs or scans.
Underwriting needs the covering material, the roof age, the last permit date, the overall condition and any visible damage. The underwriting system checks those against the carrier's roof age and remaining life rules, and decides whether to bind, renew or require replacement.

What makes roof certifications hard
The answers are checkboxes
The condition rating and the damage and leak questions are marked boxes, with Satisfactory and Unsatisfactory printed side by side.
Two roof columns, one often empty
The form gives the predominant and secondary roofs a column each, and on a single-roof home the second column holds only printed labels.
Roof age is stated three ways
The form records roof age in years, the last permit date and any update date, and each can point to a different install year.
Parse, extract, verify
Parse
Parse turns the document into reading-order Markdown and a hierarchy of blocks (text, tables, figures), and grounds each block to its exact location on the page.
Extract
You define the fields in a JSON schema, and Extract returns their values in a consistent, structured format, each linked back to where it appears in the Markdown.
Verify
Each value links back to where it appears, down to the character range in the Markdown, and the page and bounding box in the source document, so every result can be verified.
One roof certification, end to end
About this document: A completed roof inspection form for a Florida home, produced with an inspection software vendor's Citizens roof form library. Three scanned portrait pages: the property header and roof section, the comments and the inspector's certification, then four roof photographs. Page 1 is featured. Every identifying detail was replaced with stand-ins.
Processing objective: The objective is to read the predominant roof the way an underwriter does, checking its age and condition against the carrier's rules. The condition and damage answers are checked boxes. Each value grounds to its own line of the form.
Demonstration fields: Roof covering material, Roof age in years, Date of last roofing permit, Overall condition, Visible damage checked
The document
3 of 3 pages
Page 1shown below
Page 2
Page 3
Where each value came from

predominant_roof.covering_material
{
"value": "Asphalt shingles",
"page": 1,
"range": {
"end": 1138,
"start": 1103
},
"box": {
"xmin": 0.06426,
"ymin": 0.41342,
"xmax": 0.32737,
"ymax": 0.43004
}
}predominant_roof.roof_age_years
{
"value": 30,
"page": 1,
"range": {
"end": 1165,
"start": 1139
},
"box": {
"xmin": 0.06448,
"ymin": 0.43404,
"xmax": 0.25645,
"ymax": 0.45002
}
}predominant_roof.last_permit_date
{
"value": "2011",
"page": 1,
"range": {
"end": 1237,
"start": 1204
},
"box": {
"xmin": 0.06475,
"ymin": 0.47063,
"xmax": 0.30136,
"ymax": 0.48848
}
}predominant_roof.overall_condition
{
"value": "Satisfactory",
"page": 1,
"range": {
"end": 1388,
"start": 1372
},
"box": {
"xmin": 0.0779,
"ymin": 0.60735,
"xmax": 0.17168,
"ymax": 0.62236
}
}predominant_roof.visible_damage[0]
{
"value": "Visible hail damage",
"page": 1,
"range": {
"end": 1696,
"start": 1673
},
"box": {
"xmin": 0.0786,
"ymin": 0.7926,
"xmax": 0.21738,
"ymax": 0.80618
}
}How to try it yourself
Everything on this page is reproducible. The sample, its schema, and the Parse and Extract API outputs are published. You can repeat the same two calls from whichever surface you already build on.
- Claude Skilldescribe the job; the agent writes it
- CLIno code at all
- MCPexpose ADE docs as an agent tool
- REST APIany language
- Pythonlandingai-ade
- TypeScriptlandingai-ade
Documents into data
Accurate
The best accuracy on the difficult documents other tools get wrong, such as messy scans, complicated tables, checkboxes and handwriting.
Auditable
Every answer cites its sources. Values come back with an audit trail (page, bounding box, character range) so a human can review them.
Agentic
Applies multi-step reasoning, and plans before it acts. Handles documents it has never seen before and adapts to variations.
API-first
Composable APIs that drop into any tech stack and can be called from anywhere. Easy to build on and embed in your pipelines and products.
Affordable
Cost-competitive rates with complete price transparency. Spend controls before you run, and every job reports its exact cost.
Enterprise-grade
Built for production and scale from day one. Fully observable and monitored, running securely in our cloud or yours.
Built for high-volume, high-throughput production
- Zero data retention
- Priority rate limits
- Enhanced support
- VPC and on-prem deployment
Available on Team and Enterprise plans. VPC and on-prem deployment require an Enterprise plan.
