Estimates Data Extractor
Reports in. A clean spreadsheet out.
Upload a research report as a PDF and get its numbers back as a standardised Excel file.
Demo may take about 30 seconds to wake up.
- Type
- Enterprise tool
- Built for
- Morningstar, Inc.
- Role
- Design, parsing logic, backend, interface and deployment
- Stack
- Python, Flask, pdfplumber, PyMuPDF, Camelot, pandas, openpyxl, Groq, Docker


The need
Analysts who follow many research reports copy the same kinds of numbers out of PDFs into spreadsheets, by hand, every week. It is slow, it is boring, and one slipped decimal travels into every model built on top of it.
What we built
A drag-and-drop tool with one parser per report layout that returns a standardised Excel file.

Drop a report, pick its layout
Drag a PDF onto the page or paste a link to one. Choose which report layout it is, and start. Progress and elapsed time show while it works.

One parser per layout
Each report layout has its own processor that knows where every table and number sits. The live demo handles 15 layouts, and adding another means adding one file.

Same report, same columns, every time
Values are mapped onto a fixed set of data points, so the spreadsheet always has the same shape and can feed straight into a model or a database.

AI where rules can't reach
A shared base class can call Llama 3.3 70B at low temperature with strict JSON parsing and automatic retry, for layouts too irregular for rules.

Honest about its limits
The interface keeps a standing reminder to check output against the source file, because a layout change in a new report can move a number.

Try it
Press extract. Watch it read a messy, hand-corrected invoice, check the arithmetic and flag the one line a person should look at.
Try an extraction
A fictional invoice. The extractor reads it, checks the maths, and flags what a person should look at.
Sahyadri Hardware Stores
Plumbing, sanitary and paints, Kothrud, Pune
Tax invoice No. 0417, Date 12/9/26
| Particulars | Qty | Rate | Amt |
|---|---|---|---|
| PVC pipe 1" (6 m) | 12 | 185 | 2220 |
| Elbow ½" | 9 | 405 | |
| Ball valve 1" | 6 | 240 | 1440 |
| Teflon tape | 25 | 12 | 300 |
Total ₹ 5150.7
| Item | Qty | Rate | Amount |
|---|---|---|---|
| PVC pipe 1" (6 m) | |||
| Elbow ½" | |||
| Ball valve 1" | |||
| Teflon tape | |||
| GST 18% | |||
| Total | |||
- Every line: quantity × rate equals amount
- Subtotal 4,365.00 matches the sum of lines
- GST 18% recomputed: 785.70
- Line 2 quantity was corrected by hand (40 to 45). Sent to review.
How it works
Report in
PDF upload or link
Pick layout
15 supported
Read tables
pdfplumber
Map fields
Fixed data points
Write Excel
Standard columns
Download
From Reports
The idea that transfers to your documents
Your documents are not broker reports. They might be supplier invoices, bank statements, lab reports or delivery challans. The method is the same:
- Learn the layout once. Each document type gets a parser that knows where things are, so the same file always gives the same answer.
- Map to your columns. The output matches the sheet your team already uses, down to the column names and number formats.
- Check before you trust. Totals are recomputed, formats validated, and anything uncertain is flagged for a person to review.
- Use AI only where it earns its place. Irregular layouts go to a language model that must return structured data, and that data is checked like everything else.
Why rules first
A language model can read almost anything, but it can also read the same page two slightly different ways. For numbers that feed a financial model, repeatable beats clever. So fixed layouts get exact parsers, and the model is a fallback with tight constraints, not the default.
Tech specs
- Input
- PDF reports, uploaded or by link
- Output
- Standardised Excel workbook
- Layouts
- 15 report layouts in the live demo, one processor each
- Parsing
- pdfplumber, with PyMuPDF and Camelot available
- AI fallback
- Llama 3.3 70B on Groq, JSON-only output, retry and key rotation
- Jobs
- Background processing with progress and timing
- Backend
- Python and Flask
- Hosting
- Docker on Hugging Face Spaces
- Built for
- Morningstar, Inc.
- Demo data
- Shown here with publicly available documents only
Want something like this for your business?
Tell us what eats your team's week. You'll get a written scope with a fixed price and timeline before any work starts.
7WEVS