EngineeringJuly 10, 2026 · 7 min read

What it takes to read a handwritten care note

Care runs on documents that traditional OCR cannot read: handwritten notes, signed PDFs, scanned forms. I tested eight extraction engines to see which can, and what it costs to run one at scale.

The documents care actually runs on

A care organisation runs on paper long after it has gone digital. A nurse's handwritten event note, a tablet-signed consent form, a scanned referral, a photographed medication chart, a spreadsheet of supports. When that content lands in our platform, something has to turn the pixels into text before anyone, or any agent, can search it, cite it, or reason over it. This is called optical character recognition, or OCR.

In an earlier role at Deloitte, I ran millions of financial documents through traditional OCR engines which are built for clean, printed pages laid out the same way every time. On these types of documents OCR is basically a solved problem, able to accurately extract printed text into something an AI agent can work with.

Care documents are the opposite of that. They are handwritten, rotated, signed over, photographed at an angle, laid out as forms and tables, scribbled in a hurry. When the OCR cannot read them the content becomes invisible and the agent cannot answer from it or point back to it. While traditional OCR engines have gotten better at handwriting recognition over time, they can still struggle with recognising the structure of a document. Think about a chart full of medications and doses; these can't just be extracted as a slab of text, they need to be kept in their proper place so an agent is working with the truth.

8Extraction engines I tested head to head
~350Pages across three open document sets
0.31 → 0.68Hard-document pass rate, legacy OCR to modern VLM
~12xCost spread between two capable models

What were the options and how did I test them?

I tested eight engines across four kinds: the OCR we run today, a couple of other managed OCR services, general vision-language models (a large frontier one and a smaller, cheaper one), and open models small enough to self-host.

Every page is turned into an image at the same resolution, and every engine gets the same prompt: return the page as clean markdown. The main measure is content recall: of the words on the page, how many did the engine actually get? A word it misses or mangles is a word the agent cannot find later. Alongside that I looked at whether tables kept their structure, whether the engine invented text that was not there, how often it failed outright, cost per thousand pages, and how fast it runs.

The documents are three public datasets: business documents with known transcriptions, deliberately hard and degraded PDFs, and photographed handwritten notes.

What I found

On clean printed text there is barely a gap between old and new, which was expected. On the hard, degraded PDFs the legacy engine gets about a third of what the modern models get, and it returns no table structure at all: the numbers come out as one flat run of text with the rows and columns gone. That is the medication-chart problem from earlier, the values are there but not which dose lines up with which time. Both vision-language models handle what the legacy engine cannot.

MeasureLegacy OCRFrontier VLMEfficient VLM
Hard, degraded PDFs (pass rate)0.310.680.66
Table structure (cell F1)0.000.790.69
Handwriting (content recall)0.860.870.87
Relative cost per 1,000 pages1x~16x~1.3x

~350 pages, three open document sets, single shared prompt. Higher is better except cost.

The handwriting result surprised me

I expected handwriting to be the legacy engine's worst category, but it wasn't. On clean, photographed handwriting it held up close to the modern models. Where it failed is the degraded, rotated, signed-over, form-and-table pages, which is what a real care record actually looks like.

The bigger surprise was the smaller, cheaper model beating the frontier one on handwriting. When I read the pages I could see why: the frontier model sometimes decides a scrap of text at the edge of the page is not worth transcribing, and the reference counts it, so being more literal scored better here.

The best model is not automatically the right one

The most capable model in the table costs about twelve times as much per page as the cheaper one, and the lead it buys is mostly table structure and a couple of points of recall. Extraction runs on every document a customer uploads, and we meter that cost back to them, so a twelve-times multiple is the difference between switching it on for everyone and rationing it.

Throughput matters just as much, and it is easy to miss. If the extraction model shares capacity with the live product, a big backfill of old documents can slow down the agent someone is typing to right now. A model on its own separate capacity does not. So I was not looking for the highest score. I was looking for the cheapest model that clears the bar and runs on capacity that does not come out of the product's budget.

How I think about the choice

Extraction is not one model, it is a pipeline of tasks. Spreadsheets get read directly, because a grid of cells does not turn into a page image sensibly. Everything else, including digital PDFs and Office files, is turned into page images and read by one vision-language model in a single call that returns the clean text and the tags the record needs, and it runs in-region so the data never leaves the customer's jurisdiction. I picked the model that clears the bar on the hard documents and is cheap and fast enough to run on everything, not just the easy pages.

Because we keep the extracted text instead of throwing it away, it is also something a person can see and fix. When the agent cites a document, you can open the page it read, and if it got a word wrong you can correct it, with the original sitting alongside. For care records that is as important as the score: the people using the information can see where it came from.

Limitations

These are open datasets, not care documents, so they calibrate the method more than they settle it, and real care records are messier and more varied. The ground truth is imperfect too, especially on handwriting: I corrected fifty of those transcriptions by hand and they still carry errors, which drags every engine's score down and makes the best ones look worse than they are. The metric has an edge as well: content recall counts a near-miss as a full miss, which is the right call for search, since a word that is slightly wrong will not be found, but it is harsher than a character-level score. And this is a snapshot. The models move fast, so I treat it as a test I can rerun, not a final answer.


Method and figures from my own extraction evaluation, run over three openly licensed document sets with one shared prompt.

Contact us

We're here to help you

Our dedicated team is here to ensure you feel completely confident using Minikai.

Sales

Our team is ready to chat about how Minikai fits your needs, from pricing and plans to a live demo.

Start the conversation

Help Desk

Whether you need a quick answer, help resolving an issue, or want to share valuable feedback.