Extracting data from QoE reports
An accounting firm prepares a quality of earnings report for the seller before a sale process, or for the buyer after a letter of intent. Each firm builds its own deck or memo. A private equity deal team and its lenders review one for every company that reaches diligence, downloaded from a virtual data room.
The deal team needs reported EBITDA, each adjustment with its rationale, adjusted EBITDA and the net working capital average. Adjusted EBITDA times the agreed multiple sets the price in the valuation model, and the working capital average sets the peg written into the purchase agreement.

What makes quality of earnings reports hard
Numbers in tables, reasons in prose
A QoE bridge pairs a ruled table of adjustments with written commentary, and each adjustment's rationale sits in the prose, apart from its amount.
One figure, several scales
Tables print whole dollars or thousands under a units header, while the findings prose rounds the same figures to shorthand such as $8.7M.
Fiscal years and a TTM column
The bridge runs several fiscal years and a trailing twelve months in adjacent columns, and a single add-back can appear in several of them.
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 quality of earnings report, end to end
About this document: A sample quality of earnings report published by QOE Prep, a CPA firm, covering a fictional fixed-wireless internet provider. Its 25 landscape pages are printed from a slide deck: key findings, the EBITDA bridge, revenue and vendor trends, net working capital, and proof of cash. Page 8 is the bridge slide, featured here. One marketing page of customer reviews was removed before publication, so the slide footer reads Page 9.
Processing objective: The objective is to walk the trailing twelve months from reported to adjusted EBITDA. The bridge prints four period columns, and the trailing column sits rightmost, beside a panel of commentary. One diligence add-back, a legal settlement, is picked out from the ten adjustment lines.
Demonstration fields: Reported EBITDA (TTM), Total management adjustments (TTM), Legal settlement add-back (TTM), Adjusted EBITDA (TTM), Adjusted EBITDA margin (TTM)
The document
4 of 25 pages
Page 1
Page 8shown below
Page 9
Page 16
Where each value came from

ebitda_bridge.periods[3].reported_ebitda
{
"value": 619882,
"page": 8,
"range": {
"end": 9254,
"start": 9247
},
"box": {
"xmin": 0.4805,
"ymin": 0.35363,
"xmax": 0.53373,
"ymax": 0.37044
}
}ebitda_bridge.periods[3].total_management_adjustments
{
"value": 820085,
"page": 8,
"range": {
"end": 9893,
"start": 9886
},
"box": {
"xmin": 0.48048,
"ymin": 0.48004,
"xmax": 0.53375,
"ymax": 0.49677
}
}ebitda_bridge.adjustments[9].ttm_amount
{
"value": 285000,
"page": 8,
"range": {
"end": 10651,
"start": 10644
},
"box": {
"xmin": 0.48046,
"ymin": 0.62282,
"xmax": 0.53376,
"ymax": 0.63853
}
}ebitda_bridge.periods[3].adjusted_ebitda
{
"value": 1654372,
"page": 8,
"range": {
"end": 10873,
"start": 10864
},
"box": {
"xmin": 0.48045,
"ymin": 0.65519,
"xmax": 0.53377,
"ymax": 0.67202
}
}ebitda_bridge.periods[3].adjusted_ebitda_margin_percent
{
"value": 20.1,
"page": 8,
"range": {
"end": 11126,
"start": 11121
},
"box": {
"xmin": 0.48044,
"ymin": 0.70509,
"xmax": 0.53377,
"ymax": 0.72286
}
}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.
