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

Extracting data from Form 10-Ks

Thousands of public companies file a 10-K with the SEC each year, and the form fixes the order of its numbered items. The tables and prose inside each item follow the company's own design. A buy-side analyst covering a sector downloads dozens of peer 10-Ks from EDGAR each year, as HTML or a PDF rendering.

An analyst needs revenue, operating income, net income and diluted EPS for each year shown, plus total assets and operating cash flow. Those figures load into a comparable company model, which calculates margins and growth across peers for the valuation.

Page 51 of a sample Form 10-K, with extracted values outlined
394,827Markdown characters
3,487parse blocks
74fields extracted
The problem

What makes Form 10-Ks hard

Financial tables inside long prose

The statements sit in Item 8, dozens of pages into a filing whose business description and risk factors run as continuous prose.

Each figure appears more than once

MD&A restates the cash flow totals and segment results in its own summary tables, pages before the audited statements print the same figures.

Scale stated once per table

A line under each statement title, such as "In millions, except per share data", sets the scale for every amount printed below it.

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 Form 10-K, end to end

About this document: NVIDIA Corporation's annual report on Form 10-K, 93 portrait pages in the PDF rendering served from its investor relations site. It carries the SEC cover page, Parts I to IV with the audited consolidated statements and notes, the signatures, and the filed exhibits. Page 51 is the Consolidated Statements of Income, with three fiscal years in adjacent columns.

Processing objective: The objective is to follow one fiscal year down the income statement, from the top line to earnings per share. The current year sits in the leftmost of three columns, and its amounts are printed in millions except per-share data. Each value grounds to its own cell in that column.

Demonstration fields: Revenue, Gross profit, Operating income, Net income, Diluted EPS

The document

4 of 93 pages
  • Page 1 of the sample Form 10-KPage 1
  • Page 51 of the sample Form 10-KPage 51shown below
  • Page 53 of the sample Form 10-KPage 53
  • Page 55 of the sample Form 10-KPage 55

Where each value came from

Page 51 of the sample Form 10-K, with every featured field outlined
Revenueincome_statement[0].revenue
215,938
The region of the sample Form 10-K containing Revenue, with the extracted value outlined
extraction_metadata["income_statement[0].revenue"]
{
  "value": 215938,
  "page": 51,
  "range": {
    "end": 251721,
    "start": 251712
  },
  "box": {
    "xmin": 0.58301,
    "ymin": 0.15311,
    "xmax": 0.70893,
    "ymax": 0.1676
  }
}
Gross profitincome_statement[0].gross_profit
153,463
The region of the sample Form 10-K containing Gross profit, with the extracted value outlined
extraction_metadata["income_statement[0].gross_profit"]
{
  "value": 153463,
  "page": 51,
  "range": {
    "end": 251882,
    "start": 251875
  },
  "box": {
    "xmin": 0.583,
    "ymin": 0.18159,
    "xmax": 0.70892,
    "ymax": 0.19576
  }
}
Operating incomeincome_statement[0].operating_income
130,387
The region of the sample Form 10-K containing Operating income, with the extracted value outlined
extraction_metadata["income_statement[0].operating_income"]
{
  "value": 130387,
  "page": 51,
  "range": {
    "end": 252281,
    "start": 252274
  },
  "box": {
    "xmin": 0.58295,
    "ymin": 0.25208,
    "xmax": 0.7089,
    "ymax": 0.26687
  }
}
Net incomeincome_statement[0].net_income
120,067
The region of the sample Form 10-K containing Net income, with the extracted value outlined
extraction_metadata["income_statement[0].net_income"]
{
  "value": 120067,
  "page": 51,
  "range": {
    "end": 252838,
    "start": 252829
  },
  "box": {
    "xmin": 0.58289,
    "ymin": 0.3514,
    "xmax": 0.70888,
    "ymax": 0.36636
  }
}
Diluted EPSincome_statement[0].diluted_eps
4.9
The region of the sample Form 10-K containing Diluted EPS, with the extracted value outlined
extraction_metadata["income_statement[0].diluted_eps"]
{
  "value": 4.9,
  "page": 51,
  "range": {
    "end": 253098,
    "start": 253092
  },
  "box": {
    "xmin": 0.58286,
    "ymin": 0.41107,
    "xmax": 0.70886,
    "ymax": 0.42608
  }
}

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

Form 10-K processing highlights

Cover page facts
Filer status check boxes
Multi-year income statements
One entry per fiscal year
Balance sheet and cash flow
Amounts in millions as printed
Headcount and auditor from prose
Reportable segments
Dates normalized to ISO
Every occurrence of a figure
Filings of hundreds of pages
Bounding box for every value
FAQs

Questions, answered

Yes. Define the income statement as an array with a fiscal year end on each entry. Each year column comes back as its own entry, so the current year and the prior years stay apart, with every amount grounded to its own column.

Yes. Type the well-known seasoned issuer and shell company questions as booleans, and the filer category as a string. Each check box comes back as true or false, and the filer category as the ticked label, such as large accelerated filer.

It grounds to both. A value's grounding can hold several ranges, one for each place the figure appears in the parsed Markdown. A cash flow total printed in the MD&A summary and again in the audited statement points to both pages.

Yes. Submit long filings as a Parse Job, which accepts PDFs of up to 6,000 pages and returns Markdown for the whole document. Extraction then runs on that Markdown at any length.

Start extracting Form 10-K data

Reliable, structured outputs with full traceability in minutes