// Case study

Nine catalogs of locked-up PDF pricing, turned into one searchable database.

A quoting team was reading repair prices out of PDF catalogs by hand, one part number at a time. I wrote a parser that reads those catalogs the way a person does — and turned them into roughly 9,400 clean, priced, searchable line items.

Client build · 2 wksAviation & turbine repairPython + web app

One catalog line, before and after — illustrative sample, real figures redacted

What a PDF actually gives you
CF6-80C2   HPT STG 1 BLADE
  SHROUD   REPAIR
1250-4471-001    WELD RPR /
  RECOAT
       LIST      4,812.00
  NET                (30%)
What the pipeline gives you
engine
CF6-80C2
component
HPT Stage 1 Blade Shroud
part_number
1250-4471-001
repair_type
Weld Repair / Recoat
list_price
4812.00
md_price
3368.40auto −30%
// The problem

The pricing existed. It just wasn't usable.

This client quotes component repairs against manufacturer catalogs covering nine engine families. Every one of those catalogs was a PDF.

PDFs are built to be printed, not queried. There's no table underneath — just text placed at coordinates. A single repair line routinely wraps across three or four visual rows, continues onto the next page, and drops its heading along the way. That's fine for a person holding a printout, and useless to a computer.

So the work was manual. Find the catalog, find the engine family, find the part number, read across for the repair type, read the list price, apply the contract discount by hand, and type it into a quote. Repeated across nine catalogs, with no way to search across them, no way to compare, and a fresh chance to fat-finger a price on every quote.

// The build

A parser that keeps its place in the document.

The problem isn't reading text off a page — plenty of tools do that. The problem is knowing what the text means once the layout falls apart. So I built a state-machine parser: it moves through the document holding onto context, so it still knows which engine family and which component a line belongs to after that line has wrapped, broken across a page, or lost its header.

01

Read the page

pdfplumber pulls raw positioned text out of every page of every catalog, preserving the ordering that layout implies.

Extract
02

Hold the context

A Python state machine tracks engine family, component, and repair context across wrapped lines and page breaks, and reassembles fragments into whole records.

Parse
03

Enforce a schema

Every record maps to a fixed schema — part number, repair type, list price — with contract pricing calculated automatically, not typed.

Normalize
04

Make it searchable

A formatter reshapes the master dataset into the long format the front end needs, feeding a web app the quoting team searches directly.

Serve
// Scope

What came out the other side.

9
Engine families parsed end to end
~9,400
Structured line items in the master dataset
0
Discounts calculated by hand
Coverage
CF6-50CF6-80CCF6-80ECFM56 variants
Schema
Part number, repair type, component, engine family, list price, and a contract price column calculated at a fixed 30% discount.
Stack
Python and pdfplumber for extraction and parsing, CSV as the durable master format, and a separate formatter producing the long-format feed for the application layer.
Front end
Searchable web application filtering by part number, repair type, and engine family.
Repeatability
New or revised catalogs run back through the same pipeline. Updating pricing is a re-run, not a rebuild.
Auditability
Every row traces back to its source catalog, so a quoted price can be checked against the document it came from.
// Where this applies

Every industry has pricing trapped in documents.

The engine families are specific to aviation. The problem isn't. Any business quoting from supplier PDFs, scanned rate sheets, or printed catalogs has the same bottleneck — and the same pipeline solves it.

Parts distribution & MRO

Manufacturer catalogs and repair schedules consolidated into one searchable source with contract pricing applied automatically.

Industrial & equipment supply

Vendor price books normalized across suppliers so quotes can be compared without opening six documents.

Healthcare & medical supply

Fee schedules and contracted rate sheets converted into structured data that billing and procurement can actually query.

Construction & trade supply

Takeoff and material pricing pulled out of supplier PDFs and kept current as price books change.

Sitting on data you can't search?

Send me one sample document and a description of what you wish you could ask it. You'll get a straight answer on whether it's worth building — free either way.