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

Extracting data from shop drawings

Fabricators and subcontractors draw shop drawings to show exactly how they will build their part of a project, each in its own CAD standards and title block. They pass through the general contractor to the architect and engineer for review, dozens to hundreds per project, as PDF submittals in a project management portal.

Submittal tracking needs the project, the sheet number and revision, the reviewer's stamp status, and the fabrication schedule rows. A submittal log in a construction management platform records each review outcome, and the fabricator releases approved schedules to the shop floor.

Page 1 of a sample Shop Drawing, with extracted values outlined
27,459Markdown characters
1,092parse blocks
212fields extracted
The problem

What makes shop drawings hard

Several stamps on one sheet

The architect, engineer and contractor each stamp the same sheet, each ticking its own outcome such as Reviewed or Reviewed as Noted.

Sparse fabrication schedules

A fabrication schedule, such as a bar list, runs to many narrow columns, and each row fills only those its shape uses.

Small type on large sheets

Large-format CAD sheets set title blocks and schedules in small type, often plotted as vector strokes the PDF stores as geometry.

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 shop drawing, end to end

About this document: A reinforcing steel shop drawing submittal for a school music room addition in Ottawa, drawn by AGF Steel Ottawa. The general contractor posted it with the project's returned submittals. Its two landscape CAD sheets cover the footings and the foundation, each with a bar list, review stamps and a title block. Page 1 is featured. Individuals' names and contact details were replaced with stand-ins.

Processing objective: The objective is to log the submittal: which job and contract the sheet belongs to, and how the structural engineer ruled on it. The first bar list row shows what the fabricator will cut. Each value grounds to its own cell on the sheet.

Demonstration fields: Project, Fabricator contract number, Engineer review status, Bar quantity (first bar list row), Bar mark (first bar list row)

The document

2 of 2 pages
  • Page 1 of the sample Shop DrawingPage 1shown below
  • Page 2 of the sample Shop DrawingPage 2

Where each value came from

Page 1 of the sample Shop Drawing, with every featured field outlined
Projectproject_name
TURNBULL SCHOOL MUSIC ROOM ADDITION
The region of the sample Shop Drawing containing Project, with the extracted value outlined
extraction_metadata["project_name"]
{
  "value": "TURNBULL SCHOOL MUSIC ROOM ADDITION",
  "page": 1,
  "range": {
    "end": 11982,
    "start": 11936
  },
  "box": {
    "xmin": 0.87406,
    "ymin": 0.83079,
    "xmax": 0.98264,
    "ymax": 0.85698
  }
}
Fabricator contract numberfabricator.contract_number
CP9667F
The region of the sample Shop Drawing containing Fabricator contract number, with the extracted value outlined
extraction_metadata["fabricator.contract_number"]
{
  "value": "CP9667F",
  "page": 1,
  "range": {
    "end": 12475,
    "start": 12452
  },
  "box": {
    "xmin": 0.91784,
    "ymin": 0.94887,
    "xmax": 0.95076,
    "ymax": 0.97501
  }
}
Engineer review statussheets[0].engineer_review.status
REVIEWED AS NOTED
The region of the sample Shop Drawing containing Engineer review status, with the extracted value outlined
extraction_metadata["sheets[0].engineer_review.status"]
{
  "value": "REVIEWED AS NOTED",
  "page": 1,
  "range": {
    "end": 7983,
    "start": 7930
  },
  "box": {
    "xmin": 0.85282,
    "ymin": 0.7809,
    "xmax": 0.89469,
    "ymax": 0.80408
  }
}
Bar quantity (first bar list row)sheets[0].bar_list[0].quantity
32
The region of the sample Shop Drawing containing Bar quantity (first bar list row), with the extracted value outlined
extraction_metadata["sheets[0].bar_list[0].quantity"]
{
  "value": 32,
  "page": 1,
  "range": {
    "end": 2405,
    "start": 2403
  },
  "box": {
    "xmin": 0.42643,
    "ymin": 0.69303,
    "xmax": 0.44137,
    "ymax": 0.708
  }
}
Bar mark (first bar list row)sheets[0].bar_list[0].bar_mark
A5
The region of the sample Shop Drawing containing Bar mark (first bar list row), with the extracted value outlined
extraction_metadata["sheets[0].bar_list[0].bar_mark"]
{
  "value": "A5",
  "page": 1,
  "range": {
    "end": 2437,
    "start": 2435
  },
  "box": {
    "xmin": 0.47306,
    "ymin": 0.69303,
    "xmax": 0.5005,
    "ymax": 0.708
  }
}

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

Shop Drawing processing highlights

Title block fields
Sheet numbers and revisions
Revision block history
Review stamp outcomes
Checked stamp options
Bar lists and bending schedules
Sparse schedule columns
Bend dimensions by column
Large-format CAD sheets
Text plotted as vector strokes
Plans and elevations as figures
Bounding box for every value
FAQs

Questions, answered

Yes. Parsing labels each stamp as an attestation and transcribes its text, with each checkbox option marked checked or unchecked. A field for the review status comes back as the option ticked on each reviewer's stamp.

Yes. Define the schedule as an array with a field per column. Each row comes back as its own entry, every dimension lands in the column it is printed under, and blank cells return as null.

Yes. Parsing works from the rendered page. Title blocks and schedules plotted as outlined text read the same way as selectable text, and their cells ground to their own boxes.

Parsing classifies each plan and elevation as a diagram and writes its callouts into a description. A callout value can be extracted from that description, grounded to the drawing it sits in.

A value quoted from the document carries the character range it came from in the parsed Markdown. The Ground API maps that range to a page and a bounding box, so a reviewer sees each value in the cell or stamp that printed it.

Start extracting shop drawing data

Reliable, structured outputs with full traceability in minutes