Retyping numbers that a computer already produced
The stock system prints its monthly valuation as a PDF. The payroll bureau sends a PDF summary. The franchise portal lets you download sales by site, but only as a PDF. Somebody in the office opens each one and types the figures into Excel, or copies and pastes and then spends ages fixing the columns that jumped.
It feels absurd because it is. A computer produced those numbers from a database, printed them into a document, and now a person is turning the document back into numbers.
Copy and paste rarely saves much. Tables in PDFs are really just words placed at positions on a page, so pasting them into Excel scatters values across the wrong cells, merges columns and drops the minus signs on credits. The person doing it ends up checking every line anyway.
Why the PDF is all you get
Older line-of-business systems were built when a printed report was the output. Many portals offer PDF downloads because it is the easiest thing for them to build. Some suppliers deliberately send PDFs because they do not want to support data exports.
Often, though, there is a better route nobody has asked about. The system may have a CSV export hidden in an admin menu, a reporting database that can be read directly, or an API that is available on request. We always check for those first, because extracting from a PDF is the fallback, not the first choice.
The cost of the retyping habit
- Staff time on a job that adds nothing
- Transposed digits and skipped lines that nobody catches until a total looks odd
- Data only available at month level because typing daily figures would be unbearable
- History that never gets captured, because nobody retypes old reports
- Delay between the report arriving and anyone being able to use it
The history point matters more than people expect. If the data had been captured all along, you could see trends across years. Instead, each month's PDF sits in a folder and is never looked at again.
How we turn PDF reports into data
- We check for a better source: hidden exports, a database we can read, a supplier API or an EDI feed. If one exists, we use it.
- If not, we collect a sample of the PDFs, including awkward ones such as reports that run over several pages or have subtotals mid-table.
- We build a parser for each report layout. Text-based PDFs are read directly; scanned ones go through OCR first. Where layouts vary, an AI model such as OpenAI or Anthropic Claude can pull out the fields, with strict structured output.
- Every extracted report is validated against itself: line items must add up to the printed totals, dates must fall in the reporting period, and required fields must be present.
- Reports that pass are loaded into a database, Google Sheets or your reporting tool. Reports that fail go to a review queue with the reason shown.
- We add a watch-folder or mailbox so new PDFs are picked up automatically as they arrive.
| PDF type | How it is read | Main risk |
|---|---|---|
| Generated by software, fixed layout | Direct text extraction | Layout changes after an upgrade |
| Generated, varying layouts | AI extraction with structured output | Occasional misread field |
| Scanned or photographed | OCR then extraction | Poor image quality |
The self-check against printed totals is what makes this safe. If the rows do not add up to the total on the page, the report is not loaded.
Numbers that arrive ready to use
The PDF still arrives, but nobody opens it to retype anything. The figures appear in the spreadsheet or dashboard, a person glances at the occasional report in the review queue, and old PDFs can be run through the same pipeline so years of history become usable.
If the source system is later replaced or its supplier offers an export, the pipeline is switched to that and everything downstream keeps working.
You probably need this if
- Someone retypes figures from PDF reports every week or month
- You have folders of old PDF reports nobody can analyse
- A supplier or portal will not give you a CSV
- Retyping errors have caused a wrong figure to reach a customer or manager