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

Extracting data from Schedule K-1 forms

Every partnership issues a Schedule K-1 to each partner after filing its return, printed by its tax software on that year's IRS layout. Tax preparers, fund administrators and lenders read them in bulk each season, as PDFs from investor portals or scans of mailed copies.

Preparers need ordinary business income, guaranteed payments, distributions and each coded amount. Tax software carries those onto the partner's return, and a lender's cash flow analysis uses them to calculate the income a partner qualifies on.

Page 1 of a sample Schedule K-1, with extracted values outlined
6,245Markdown characters
158parse blocks
64fields extracted
The problem

What makes Schedule K-1 forms hard

Code letters beside amounts

Boxes 11 and 13 to 21 pair a code letter with an amount, and one box can hold several coded rows.

Three parts in two columns

The partnership and partner details run down the left, and the partner's share of each line runs down the right, on the same page.

Beginning and ending matrices

Profit, loss and capital shares print as beginning and ending percentages, beside a capital account that rolls forward line by line.

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 Schedule K-1, end to end

About this document: The first partner's Schedule K-1 from an IRS e-file test scenario for a partnership return, published so tax software vendors can check their output. One portrait page: the partnership and partner on the left, the partner's share of each line on the right. Page 1 is featured. Every value is IRS test data.

Processing objective: The objective is to read the partner's headline income and follow the capital account through the year. The beginning balance plus other increases less withdrawals gives the ending balance. Each figure grounds to its own amount cell.

Demonstration fields: Ordinary business income (box 1), Beginning capital account (item L), Other increase (item L), Withdrawals and distributions (item L), Ending capital account (item L)

The document

1 page
  • Page 1 of the sample Schedule K-1Page 1shown below

Where each value came from

Page 1 of the sample Schedule K-1, with every featured field outlined
Ordinary business income (box 1)income.ordinary_business_income
8,068,141
The region of the sample Schedule K-1 containing Ordinary business income (box 1), with the extracted value outlined
extraction_metadata["income.ordinary_business_income"]
{
  "value": 8068141,
  "page": 1,
  "range": {
    "end": 4018,
    "start": 3974
  },
  "box": {
    "xmin": 0.54152,
    "ymin": 0.09097,
    "xmax": 0.72965,
    "ymax": 0.12128
  }
}
Beginning capital account (item L)partner.capital_account.beginning
4,488,892
The region of the sample Schedule K-1 containing Beginning capital account (item L), with the extracted value outlined
extraction_metadata["partner.capital_account.beginning"]
{
  "value": 4488892,
  "page": 1,
  "range": {
    "end": 2729,
    "start": 2720
  },
  "box": {
    "xmin": 0.31793,
    "ymin": 0.78872,
    "xmax": 0.50594,
    "ymax": 0.80412
  }
}
Other increase (item L)partner.capital_account.other_increase_decrease
12,143,540
The region of the sample Schedule K-1 containing Other increase (item L), with the extracted value outlined
extraction_metadata["partner.capital_account.other_increase_decrease"]
{
  "value": 12143540,
  "page": 1,
  "range": {
    "end": 3058,
    "start": 3041
  },
  "box": {
    "xmin": 0.3179,
    "ymin": 0.83416,
    "xmax": 0.50594,
    "ymax": 0.84978
  }
}
Withdrawals and distributions (item L)partner.capital_account.withdrawals_and_distributions
7,514,031
The region of the sample Schedule K-1 containing Withdrawals and distributions (item L), with the extracted value outlined
extraction_metadata["partner.capital_account.withdrawals_and_distributions"]
{
  "value": 7514031,
  "page": 1,
  "range": {
    "end": 3169,
    "start": 3158
  },
  "box": {
    "xmin": 0.31789,
    "ymin": 0.84946,
    "xmax": 0.50594,
    "ymax": 0.86454
  }
}
Ending capital account (item L)partner.capital_account.ending
9,118,401
The region of the sample Schedule K-1 containing Ending capital account (item L), with the extracted value outlined
extraction_metadata["partner.capital_account.ending"]
{
  "value": 9118401,
  "page": 1,
  "range": {
    "end": 3267,
    "start": 3258
  },
  "box": {
    "xmin": 0.31788,
    "ymin": 0.86432,
    "xmax": 0.50594,
    "ymax": 0.87866
  }
}

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

Schedule K-1 processing highlights

Ordinary business income
Coded box amounts
Code letter and amount pairs
Guaranteed payments and distributions
Profit, loss and capital shares
Liabilities by type
Capital account roll-forward
Partner type checkboxes
Partnership and partner details
Labels that change by year
Native PDFs and scans
Bounding box for every value
FAQs

Questions, answered

Yes. Define each coded box as an array of code and amount pairs in your schema. Every row comes back with its code letter and its amount together, for as many rows as the box holds.

Yes. Describe the beginning balance, contributions, increases, withdrawals and ending balance as fields. Each comes back as a number grounded to its own cell, so the roll-forward can be checked against its total.

Yes. Describe each field by what it means, and use x-alternativeNames to list the other labels it may appear under. That helps extraction locate a value whose wording or box number changed in a later revision.

Every extracted value carries the character range it was quoted from in the parsed Markdown. The Ground API maps that range to a page and a bounding box, so a reviewer sees each amount in the box that printed it.

Start extracting Schedule K-1 data

Reliable, structured outputs with full traceability in minutes