Take a live AI-guided product tour with Lando.Launch AI demo
Document type

Extracting data from audited financial statements

A CPA firm audits an organization's annual statements and signs an opinion in front of them. Layouts vary by audit firm, and a nonprofit's balance sheet ends in net assets. Lenders collect one from each borrower every year, and buyers request several years of them in diligence, as emailed PDFs or data room downloads.

A credit analyst needs the opinion type, total assets, total liabilities, operating cash flow and the year's net income or change in net assets. Spreading software loads them into the lender's financial template, which tests covenant ratios against the loan agreement.

Page 7 of a sample Audited Financial Statements, with extracted values outlined
56,488Markdown characters
816parse blocks
139fields extracted
The problem

What makes audited financial statements hard

The opinion is written in prose

The opinion type, accounting framework and report date sit inside the auditor's letter, set in paragraphs beneath a letterhead and above the firm's signature.

Each entity type reports differently

A company's balance sheet closes on shareholders' equity, a nonprofit's on net assets split by donor restriction, a government's on net position.

Two years side by side

Comparative statements print the current and prior year in adjacent columns of similar figures, with the year-end date printed once above each column.

How it works

Parse, extract, verify

1

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.

2

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.

3

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.

Worked example

One audited financial statement, end to end

About this document: The audited financial statements of Family First, Inc., a Florida nonprofit, as posted publicly by the Florida Auditor General. Its 27 pages hold the independent auditor's report, the four basic statements, the notes, and a Single Audit section of award schedules and compliance reports. Page 7 is the statement of financial position, featured here. Page 9 is a landscape statement of functional expenses.

Processing objective: The objective is to show the balance sheet closing. The assets side builds from cash to a total, and the liabilities side builds to a matching total that includes net assets. Both land on $15,689,274, boxed on two different lines of the same page.

Demonstration fields: Cash and cash equivalents, Total current assets, Total assets, Total liabilities, Total liabilities and net assets

The document

4 of 27 pages
  • Page 4 of the sample Audited Financial StatementsPage 4
  • Page 7 of the sample Audited Financial StatementsPage 7shown below
  • Page 9 of the sample Audited Financial StatementsPage 9
  • Page 20 of the sample Audited Financial StatementsPage 20

Where each value came from

Page 7 of the sample Audited Financial Statements, with every featured field outlined
Cash and cash equivalentsstatement_of_financial_position.cash_and_cash_equivalents
14,021,341
The region of the sample Audited Financial Statements containing Cash and cash equivalents, with the extracted value outlined
extraction_metadata["statement_of_financial_position.cash_and_cash_equivalents"]
{
  "value": 14021341,
  "page": 7,
  "range": {
    "end": 8861,
    "start": 8849
  },
  "box": {
    "xmin": 0.54405,
    "ymin": 0.27425,
    "xmax": 0.90509,
    "ymax": 0.29341
  }
}
Total current assetsstatement_of_financial_position.total_current_assets
15,252,147
The region of the sample Audited Financial Statements containing Total current assets, with the extracted value outlined
extraction_metadata["statement_of_financial_position.total_current_assets"]
{
  "value": 15252147,
  "page": 7,
  "range": {
    "end": 9112,
    "start": 9102
  },
  "box": {
    "xmin": 0.54361,
    "ymin": 0.34793,
    "xmax": 0.90525,
    "ymax": 0.3746
  }
}
Total assetsstatement_of_financial_position.total_assets
15,689,274
The region of the sample Audited Financial Statements containing Total assets, with the extracted value outlined
extraction_metadata["statement_of_financial_position.total_assets"]
{
  "value": 15689274,
  "page": 7,
  "range": {
    "end": 9325,
    "start": 9313
  },
  "box": {
    "xmin": 0.54317,
    "ymin": 0.4286,
    "xmax": 0.90542,
    "ymax": 0.45472
  }
}
Total liabilitiesstatement_of_financial_position.total_liabilities
1,758,660
The region of the sample Audited Financial Statements containing Total liabilities, with the extracted value outlined
extraction_metadata["statement_of_financial_position.total_liabilities"]
{
  "value": 1758660,
  "page": 7,
  "range": {
    "end": 9799,
    "start": 9790
  },
  "box": {
    "xmin": 0.77372,
    "ymin": 0.66307,
    "xmax": 0.90712,
    "ymax": 0.69052
  }
}
Total liabilities and net assetsstatement_of_financial_position.total_liabilities_and_net_assets
15,689,274
The region of the sample Audited Financial Statements containing Total liabilities and net assets, with the extracted value outlined
extraction_metadata["statement_of_financial_position.total_liabilities_and_net_assets"]
{
  "value": 15689274,
  "page": 7,
  "range": {
    "end": 9946,
    "start": 9934
  },
  "box": {
    "xmin": 0.77377,
    "ymin": 0.72551,
    "xmax": 0.90709,
    "ymax": 0.75115
  }
}

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
Why LandingAI?

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.

Compare plans
Capabilities

Audited Financial Statement processing highlights

Balance sheet line items
Income and activity statements
Cash flow subtotals
Opinion type and framework
Audit firm and report date
Net assets by restriction
Single Audit award schedules
Findings summary as booleans
Landscape and portrait pages
Notes to the statements
No per-firm templates
Bounding box for every value
FAQs

Questions, answered

Yes. Define the opinion and the auditor's details as schema fields. They are read from the auditor's letter, including a firm name printed in a letterhead image. The opinion type can come back as a category such as unmodified.

Yes. Describe shareholders' equity and net assets as separate fields in one schema. A field the document does not report comes back null, so a company's statements leave the net asset fields empty and a nonprofit's leave equity empty.

Yes. Define the awards as an array in your schema. Each program comes back as its own entry with its grantor, CFDA or CSFA number, contract number and expenditures, alongside the schedule's federal and state totals.

Each extracted value carries the character ranges it was quoted from in the parsed Markdown. The Ground API turns those ranges into a page number and a bounding box, so a reviewer sees each total in the cell that printed it.

Start extracting audited financial statement data

Reliable, structured outputs with full traceability in minutes