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

Extracting data from employment offer letters

Every hire starts with an offer letter, and no two employers write one the same way. What counts as compensation differs by country: an Indian letter breaks out HRA and provident fund, a US one states base and bonus. Onboarding and background-check teams handle thousands, as emailed PDFs and scans of the signed copy.

Onboarding needs the designation, the start date, the place of posting and the compensation. An HR information system opens the employee record from those, payroll seeds the salary structure, and an immigration filing quotes the title and the figure.

Page 1 of a sample Employment Offer Letter, with extracted values outlined
11,090Markdown characters
131parse blocks
75fields extracted
The problem

What makes employment offer letters hard

The terms are sentences

Designation, joining date and pay are each stated in prose: a sentence beginning "Your Date of Joining will be" is the whole field.

Salary structures have no standard

An Indian letter itemizes HRA, provident fund and professional tax. A letter from another country uses an entirely local vocabulary for the same idea.

Quantities written as words

Probation runs "Six months", retirement comes at "Fifty-eight years", and pay is given in figures and again in words.

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 employment offer letter, end to end

About this document: An offer letter from Aerial Telecom Solutions, an Indian telecom services company, for a Technical Manager post. Five portrait pages exported from Word, with a logo, a watermark and a branded footer throughout. Pages 1 to 4 are the letter and its terms; page 5 is Annexure I, the salary breakdown. This is a real letter, and the candidate's name, address and the signatory's signature were removed before publication.

Processing objective: The objective is to lift the terms of the offer from the letter that states them. Each of the five values sits inside a sentence of running prose. The box covers that sentence, so a reviewer reads the commitment in the employer's own words.

Demonstration fields: Designation, Place of posting, Date of joining, Annual cost to company (Rs.), Letter date

The document

4 of 5 pages
  • Page 1 of the sample Employment Offer LetterPage 1shown below
  • Page 2 of the sample Employment Offer LetterPage 2
  • Page 3 of the sample Employment Offer LetterPage 3
  • Page 5 of the sample Employment Offer LetterPage 5

Where each value came from

Page 1 of the sample Employment Offer Letter, with every featured field outlined
Designationoffer.designation
Technical Manager
The region of the sample Employment Offer Letter containing Designation, with the extracted value outlined
extraction_metadata["offer.designation"]
{
  "value": "Technical Manager",
  "page": 1,
  "range": {
    "end": 390,
    "start": 300
  },
  "box": {
    "xmin": 0.07867,
    "ymin": 0.42146,
    "xmax": 0.72851,
    "ymax": 0.43759
  }
}
Place of postingoffer.place_of_posting
Jalandhar
The region of the sample Employment Offer Letter containing Place of posting, with the extracted value outlined
extraction_metadata["offer.place_of_posting"]
{
  "value": "Jalandhar",
  "page": 1,
  "range": {
    "end": 701,
    "start": 653
  },
  "box": {
    "xmin": 0.07839,
    "ymin": 0.56679,
    "xmax": 0.43017,
    "ymax": 0.58559
  }
}
Date of joiningoffer.date_of_joining
07-Apr-2025
The region of the sample Employment Offer Letter containing Date of joining, with the extracted value outlined
extraction_metadata["offer.date_of_joining"]
{
  "value": "07-Apr-2025",
  "page": 1,
  "range": {
    "end": 744,
    "start": 703
  },
  "box": {
    "xmin": 0.0787,
    "ymin": 0.60157,
    "xmax": 0.38177,
    "ymax": 0.61734
  }
}
Annual cost to company (Rs.)offer.annual_ctc
565,008
The region of the sample Employment Offer Letter containing Annual cost to company (Rs.), with the extracted value outlined
extraction_metadata["offer.annual_ctc"]
{
  "value": 565008,
  "page": 1,
  "range": {
    "end": 976,
    "start": 842
  },
  "box": {
    "xmin": 0.07634,
    "ymin": 0.70109,
    "xmax": 0.88886,
    "ymax": 0.73538
  }
}
Letter dateletter_date
20-Mar-2025
The region of the sample Employment Offer Letter containing Letter date, with the extracted value outlined
extraction_metadata["letter_date"]
{
  "value": "20-Mar-2025",
  "page": 1,
  "range": {
    "end": 65,
    "start": 53
  },
  "box": {
    "xmin": 0.77902,
    "ymin": 0.12629,
    "xmax": 0.87747,
    "ymax": 0.13747
  }
}

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

Employment Offer Letter processing highlights

Terms stated in prose
Designation and place of posting
Start and probation dates
Annual cost to company
Salary annexure tables
Employer and employee contributions
Notice period and retirement age
Amounts in figures and words
Multi-page letters with annexures
Logos, watermarks and footers
Scans of signed returns
Bounding box for every value
FAQs

Questions, answered

Yes. A schema names the field and extraction finds it in the prose. A joining date stated in a sentence returns as a date, with that sentence as the grounding a reviewer can read.

Yes. Define the components as an array and each line returns with its section, its monthly amount and its annual amount. A line name that appears twice, once as an employee deduction and once as an employer contribution, lands in the right section.

They come back as numbers. A probation period given as six months returns as 6. An amount written in figures and again in words returns once, in the type your schema asks for.

Every value comes back with its page, a bounding box and the character range in the parsed Markdown. On a letter the box covers the sentence stating the term, so a dispute over notice or pay is settled by reading the line.

An offer letter carries a candidate's name and home address before they are an employee. A schema can ask for the terms and leave the person out. Accounts are available with zero data retention, alongside SOC 2 Type II, GDPR and HIPAA compliance.

Start extracting employment offer letter data

Reliable, structured outputs with full traceability in minutes