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

Extracting data from Schedule E forms

Individuals reporting rental real estate income on Schedule E attach it to Form 1040, using an IRS layout with three property columns. Lenders may request returns as PDFs or scans when applicants use rental income to qualify; the required history varies by loan program.

Underwriting needs each property's rents, expenses, depreciation, mortgage interest and net income. A rental income worksheet such as Fannie Mae Form 1038 adds the noncash and financing costs back to arrive at qualifying rental income.

Page 1 of a sample Schedule E, with extracted values outlined
6,619Markdown characters
208parse blocks
40fields extracted
The problem

What makes Schedule E forms hard

Three property columns

Amounts sit in property columns A to C beside one shared list of labels, so each value belongs to a row and a column.

Totals repeat below

Rents and net income or loss carry down into the summary lines at the foot of the page, beside the property columns.

Add-backs scattered by line

The expenses a lender adds back, such as depreciation, mortgage interest and taxes, sit on separate lines among fifteen expense rows.

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 E, end to end

About this document: Page 1 of a completed Schedule E for a single-family rental, from a mortgage insurer's lender training course on calculating rental income. One portrait page: Part I with a full year of rents and expenses in property column A, and the summary block below. Page 1 is featured. The filer and property are teaching placeholders.

Processing objective: The objective is to read the figures a rental income calculation starts from: what the property took in and the expenses a lender adds back. Those add-backs return to the net rental income printed at the foot of the column.

Demonstration fields: Rents received (line 3), Mortgage interest (line 12), Taxes (line 16), Depreciation (line 18), Net rental income (line 21)

The document

1 page
  • Page 1 of the sample Schedule EPage 1shown below

Where each value came from

Page 1 of the sample Schedule E, with every featured field outlined
Rents received (line 3)properties[0].rents_received
73,900
The region of the sample Schedule E containing Rents received (line 3), with the extracted value outlined
extraction_metadata["properties[0].rents_received"]
{
  "value": 73900,
  "page": 1,
  "range": {
    "end": 2174,
    "start": 2167
  },
  "box": {
    "xmin": 0.51796,
    "ymin": 0.39393,
    "xmax": 0.6591,
    "ymax": 0.40908
  }
}
Mortgage interest (line 12)properties[0].expenses.mortgage_interest
19,332
The region of the sample Schedule E containing Mortgage interest (line 12), with the extracted value outlined
extraction_metadata["properties[0].expenses.mortgage_interest"]
{
  "value": 19332,
  "page": 1,
  "range": {
    "end": 3450,
    "start": 3443
  },
  "box": {
    "xmin": 0.51792,
    "ymin": 0.54532,
    "xmax": 0.65911,
    "ymax": 0.5607
  }
}
Taxes (line 16)properties[0].expenses.taxes
10,344
The region of the sample Schedule E containing Taxes (line 16), with the extracted value outlined
extraction_metadata["properties[0].expenses.taxes"]
{
  "value": 10344,
  "page": 1,
  "range": {
    "end": 3929,
    "start": 3922
  },
  "box": {
    "xmin": 0.5179,
    "ymin": 0.60603,
    "xmax": 0.65912,
    "ymax": 0.62114
  }
}
Depreciation (line 18)properties[0].expenses.depreciation_or_depletion
3,661
The region of the sample Schedule E containing Depreciation (line 18), with the extracted value outlined
extraction_metadata["properties[0].expenses.depreciation_or_depletion"]
{
  "value": 3661,
  "page": 1,
  "range": {
    "end": 4193,
    "start": 4187
  },
  "box": {
    "xmin": 0.51789,
    "ymin": 0.63618,
    "xmax": 0.65912,
    "ymax": 0.65153
  }
}
Net rental income (line 21)properties[0].income_or_loss
31,185
The region of the sample Schedule E containing Net rental income (line 21), with the extracted value outlined
extraction_metadata["properties[0].income_or_loss"]
{
  "value": 31185,
  "page": 1,
  "range": {
    "end": 4731,
    "start": 4724
  },
  "box": {
    "xmin": 0.51786,
    "ymin": 0.68178,
    "xmax": 0.65913,
    "ymax": 0.72717
  }
}

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 E processing highlights

Rents received by property
Expenses by numbered line
Depreciation and mortgage interest
Net income or loss
Property columns A to C
Fair rental and personal days
Property address and type
Summary lines 23 to 26
Trailing-period amounts
Labels that change by year
Native PDFs and scans
Bounding box for every value
FAQs

Questions, answered

Yes. Define the properties as an array in your schema. Each property comes back as its own entry, with its rents and expenses read from its own column and grounded to the cell on each line.

Yes. Describe depreciation, mortgage interest, taxes and insurance as fields alongside rents and net income. Each comes back as a number from its own line, ready for the worksheet's arithmetic.

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 line 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 cell that printed it.

Start extracting Schedule E data

Reliable, structured outputs with full traceability in minutes