*** September 2026 Major Release ***Read and watch
Document type

Extracting data from IRA statements

An individual retirement account is held at a custodian and often sold through an adviser, so the statement carries several firms and each custodian formats its own. A mortgage underwriter reads one to count reserves. Large lenders see thousands a quarter, arriving as portal downloads and scans.

An underwriter needs the account holder, the account number, the statement date and the account value. A loan origination system counts the value toward reserves, and a beneficiary review reads the same statement for who inherits.

Page 1 of a sample IRA Statement, with extracted values outlined
43,547Markdown characters
519parse blocks
92fields extracted
The problem

What makes IRA statements hard

Three firms on one statement

The broker-dealer, the clearing firm carrying the account and the advisory firm all appear, and each has to be told from the others.

Beneficiaries carry their own fields

Each designated beneficiary has an allocation, a relationship and a primary or contingent status that workplace plans never print.

Activity is split by tax year

A contribution counts toward the current year or the prior one, and the statement reports the two on separate lines.

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 IRA statement, end to end

About this document: A Commonwealth Financial Network statement for a rollover IRA, ten landscape pages. A summary and asset allocation, then holdings with estimated yield and income, activity split by tax year, and designated beneficiaries with their allocations. Page 1 is featured. Personal details were replaced before publication.

Processing objective: The objective is to read what a lender checks: whose account it is, where it is held, when the statement was cut and what it was worth. The statement date is returned as an ISO date, taken from the period the statement covers.

Demonstration fields: Account holder, Account number, Statement date, Account value, Provider

The document

4 of 10 pages
  • Page 1 of the sample IRA StatementPage 1shown below
  • Page 2 of the sample IRA StatementPage 2
  • Page 3 of the sample IRA StatementPage 3
  • Page 5 of the sample IRA StatementPage 5

Where each value came from

Page 1 of the sample IRA Statement, with every featured field outlined
Account holderaccount_holder
JOHN Q SAMPLE
The region of the sample IRA Statement containing Account holder, with the extracted value outlined
extraction_metadata["account_holder"]
{
  "value": "JOHN Q SAMPLE",
  "page": 1,
  "range": {
    "end": 912,
    "start": 867
  },
  "box": {
    "xmin": 0.48332,
    "ymin": 0.37851,
    "xmax": 0.76078,
    "ymax": 0.39771
  }
}
Account numberaccount_number
B19-187999
The region of the sample IRA Statement containing Account number, with the extracted value outlined
extraction_metadata["account_number"]
{
  "value": "B19-187999",
  "page": 1,
  "range": {
    "end": 940,
    "start": 913
  },
  "box": {
    "xmin": 0.48341,
    "ymin": 0.39839,
    "xmax": 0.64058,
    "ymax": 0.41866
  }
}
Statement dateperiod_end_date
2025-09-30
The region of the sample IRA Statement containing Statement date, with the extracted value outlined

Printed on the page as STATEMENT FOR THE PERIOD SEPTEMBER 1, 2025 TO SEPTEMBER 30, 2025, normalized on extraction.

extraction_metadata["period_end_date"]
{
  "value": "2025-09-30",
  "page": 1,
  "range": {
    "end": 866,
    "start": 801
  },
  "box": {
    "xmin": 0.48466,
    "ymin": 0.3423,
    "xmax": 0.91053,
    "ymax": 0.36519
  }
}
Account valueending_value
164,145.49
The region of the sample IRA Statement containing Account value, with the extracted value outlined
extraction_metadata["ending_value"]
{
  "value": 164145.49,
  "page": 1,
  "range": {
    "end": 1079,
    "start": 1068
  },
  "box": {
    "xmin": 0.71937,
    "ymin": 0.51302,
    "xmax": 0.93418,
    "ymax": 0.54377
  }
}
Providerbroker_dealer
Commonwealth Financial Network
The region of the sample IRA Statement containing Provider, with the extracted value outlined
extraction_metadata["broker_dealer"]
{
  "value": "Commonwealth Financial Network",
  "page": 1,
  "range": {
    "end": 58,
    "start": 28
  },
  "box": {
    "xmin": 0.0611,
    "ymin": 0.09422,
    "xmax": 0.25073,
    "ymax": 0.10687
  }
}

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.

Compare plans
Capabilities

IRA Statement processing highlights

Every custodian's layout
Landscape brokerage pages
Holdings with estimated yield
Beneficiaries and allocations
Primary and contingent status
Contributions by tax year
Distributions and rollovers
Multi-line security descriptions
Broker, clearing and advisory firms
Dates normalized to ISO
Bounding box for every value
Zero data retention available
FAQs

Questions, answered

Yes. Model each firm as its own field and the broker-dealer, the clearing firm and the advisory firm come back separately, so the name at the top of the page never stands in for all three.

Yes. Define the beneficiaries as an array and each comes back with its allocation, relationship and primary or contingent status, however many the account carries and whatever order the statement prints them in.

No. A schema names the fields you want. Where they sit on the statement is not part of it, so one schema reads a custodian it has never seen.

Every value comes back with its page, a bounding box and the character range in the parsed Markdown. The box can be drawn onto the page image, so a reviewer sees the row it was read from.

An IRA statement carries an account holder, an account number, a full holdings list and named beneficiaries. A schema can ask for the totals alone. Accounts are available with zero data retention, alongside SOC 2 Type II, GDPR and HIPAA compliance.

Start extracting IRA statement data

Reliable, structured outputs with full traceability in minutes