Purchase order OCR API that returns structured data
VioPO reads purchase orders from PDFs, scans and photos and returns the order number, addresses, lines and totals as JSON, not a page of loose text.
Opening soon VioPO is not open yet. Join the waitlist and we will email you once when it opens. Join the waitlist
OCR turns a picture of a page into text. For a purchase order that is only half the job. You still need to know which number is the order number, which address is for delivery, and which column holds the quantity. VioPO does both halves in one call and returns the order as structured JSON.
Why plain OCR is not enough for orders
Run a typical order through an OCR engine and you get the characters in reading order. The table comes out as rows of words with the column boundaries lost. "Deliver to" and "Invoice to" boxes printed side by side are often read across, so the two addresses come out interleaved. Then someone writes rules to find each field, and those rules only work for the layout they were written for.
VioPO uses a vision language model instead. It looks at the page image, sees the table and the boxes, and reads each value with its label. When a PDF has a text layer, the model gets that too, so the characters are exact.
What you get back
One JSON object with the same keys for every order:
- the header: order number, date, currency, delivery date, payment terms, quote reference;
- buyer and supplier, with VAT numbers and contacts when printed;
- delivery and invoice addresses, split into lines, town, postcode and country code;
- every line: part numbers, description, quantity, unit, price, discount, tax rate and amount;
- the totals;
- checks that the figures add up, and warnings for anything that could not be read.
The docs list every field.
Scans and photos
Orders that arrive as scans or phone photos have no text layer, so everything depends on the image. VioPO straightens the orientation, flattens transparency and reads the page at a size the model handles well. Clear scans read well. Very faint, skewed or handwritten pages are harder, which is why the arithmetic checks matter: a misread digit in a price usually shows up as a line that does not add up.
See it on a sample order
VioPO is not open yet. The example output shows what it returned for three sample orders, including a scanned form with no text layer. To hear when you can send your own, join the waitlist. The Free plan at launch reads 50 pages a month.
Updated