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

Extracting data from high school transcripts

Each district prints its own transcript, with its own grading scale, and sends it as a counselor upload or eTranscript. College admissions offices read one per applicant and a final copy for each enrolling student. Scholarship programs, employers, military recruiters and auto insurers ask for them too, as a phone scan of an unofficial copy.

Admissions needs each course's mark and credits, and the average for every term. A reader uses them to recalculate the applicant's GPA on the college's own scale and to rate course rigor. An insurer checks the same averages against its good student discount threshold.

Page 1 of a sample High School Transcript, with extracted values outlined
10,226Markdown characters
468parse blocks
557fields extracted
The problem

What makes high school transcripts hard

Every district sets its own scale

One district prints numeric marks out of 100 with a percentage average. Another prints letter grades and a weighted GPA on a 5.0 scale.

Terms run across columns

Transcripts stack several terms in each column, so a term that starts at the foot of one column finishes at the top of the next.

Symbols carry course status

An asterisk beside a grade or course code flags a weighted course or an unaveraged mark, and a footer key defines each symbol.

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 high school transcript, end to end

About this document: An unofficial student copy of a New York City Department of Education transcript. The first of its two pages was processed: one portrait page, photographed slightly askew and read from the image alone. Eight terms run newest first in two columns, each closing with its credit totals and average. The student's identifying details and the counselor's name were replaced with stand-ins.

Processing objective: The objective is to read one term as a single record where it breaks across two columns. Its heading and six courses sit at the foot of the left column. The seventh course and the term's totals continue at the top of the right column, and all of them return in one term entry.

Demonstration fields: Term year, Course carried to the next column, Mark, Term credits averaged, Term average

The document

1 page
  • Page 1 of the sample High School TranscriptPage 1shown below

Where each value came from

Page 1 of the sample High School Transcript, with every featured field outlined
Term yearterms[4].year
2,020
The region of the sample High School Transcript containing Term year, with the extracted value outlined
extraction_metadata["terms[4].year"]
{
  "value": 2020,
  "page": 1,
  "range": {
    "end": 4763,
    "start": 4749
  },
  "box": {
    "xmin": 0.01116,
    "ymin": 0.80899,
    "xmax": 0.13085,
    "ymax": 0.82717
  }
}
Course carried to the next columnterms[4].courses[6].course_title
CHEMISTRY TERM 2
The region of the sample High School Transcript containing Course carried to the next column, with the extracted value outlined
extraction_metadata["terms[4].courses[6].course_title"]
{
  "value": "CHEMISTRY TERM 2",
  "page": 1,
  "range": {
    "end": 6214,
    "start": 6198
  },
  "box": {
    "xmin": 0.62414,
    "ymin": 0.21547,
    "xmax": 0.77622,
    "ymax": 0.23997
  }
}
Markterms[4].courses[6].actual_mark
73
The region of the sample High School Transcript containing Mark, with the extracted value outlined
extraction_metadata["terms[4].courses[6].actual_mark"]
{
  "value": "73",
  "page": 1,
  "range": {
    "end": 6225,
    "start": 6223
  },
  "box": {
    "xmin": 0.77619,
    "ymin": 0.21517,
    "xmax": 0.82626,
    "ymax": 0.23848
  }
}
Term credits averagedterms[4].term_credits_averaged
7
The region of the sample High School Transcript containing Term credits averaged, with the extracted value outlined
extraction_metadata["terms[4].term_credits_averaged"]
{
  "value": 7,
  "page": 1,
  "range": {
    "end": 6465,
    "start": 6438
  },
  "box": {
    "xmin": 0.77614,
    "ymin": 0.25347,
    "xmax": 0.94669,
    "ymax": 0.27258
  }
}
Term averageterms[4].term_average
75.43
The region of the sample High School Transcript containing Term average, with the extracted value outlined
extraction_metadata["terms[4].term_average"]
{
  "value": 75.43,
  "page": 1,
  "range": {
    "end": 6408,
    "start": 6392
  },
  "box": {
    "xmin": 0.48115,
    "ymin": 0.25683,
    "xmax": 0.6241,
    "ymax": 0.27538
  }
}

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

High School Transcript processing highlights

Every course in every term
Marks and numeric equivalents
Credits attempted and earned
Term and cumulative averages
Terms split across columns
Letter and percentage grades
School and course codes
Student record header
Phone scans and photos
Nested term and course arrays
Bounding box for every value
Zero data retention available
FAQs

Questions, answered

No. A schema names the fields you want and describes each one in plain language. Extraction reads the parsed page for meaning, so one schema covers a district that prints numeric marks and one that prints letter grades.

Yes. Model the terms as an array, with a nested array of courses inside each term. Each term returns with its courses and totals, and a term that continues into the next column comes back as one entry.

Yes. Scanned pages go through DPT-3 Pro, the default parse model, which reads the page image directly. A phone photo of an unofficial copy parses from its pixels, and its coordinates map back onto the photo.

Every extracted value carries the character ranges it was quoted from in the parsed Markdown. The Ground API maps each range to a page and a bounding box, so a reviewer sees the printed mark beside the number a GPA recalculation used.

A transcript is a FERPA education record, carrying the student's identifiers and home address. A schema can ask for the coursework and leave those fields out. With zero data retention enabled, documents are deleted when processing finishes and results once they are delivered.

Start extracting high school transcript data

Reliable, structured outputs with full traceability in minutes