Can you trust AI to read purchase orders? The checks that keep wrong orders out of Shopify
AI can read a purchase order in seconds. The risk isn't the reading: it's an invented line, a misread quantity or a duplicate PO turning into a real order nobody checked. This guide sets out how PO reading fails, the 14 checks that catch it, when an order can be placed without a person, and a test you can run on any tool with your own documents.
The short answer
- Reading isn't the hard part. Proving is. Every line an AI reads should be checked against the document's own text by separate code. A line that can't be found there isn't trusted.
- PDFs from purchasing systems, spreadsheets and emailed text can be proved. Scans and photos can't, so a person should check every line.
- Fourteen checks cover the document, the account and your orders: text, codes, prices, quantities, totals, sender, catalog prices, duplicates, revisions, dates, units and stock.
- Place an order with no one checking only when nothing is left to check: a verified sender, every line matched by code and proved, no warnings, and payment terms on the account.
Disclosure: Nexus Logic Systems makes The Usual, which runs the checks described here. The checklist is written so you can hold any tool to it, including ours.
On this page
How purchase-order reading goes wrong
AI models read documents well. They read them so fluently that the errors are hard to see: the output is tidy, well formatted and confident whether it is right or not. These are the failures that matter for wholesale orders, and each one comes up in real purchase orders:
- A line that isn't on the PO, or the same line read twice.
- The right line with the wrong number: 18 read as 13, or the quantity and unit price swapped.
- A code found inside a longer code, so the line is matched to the wrong product.
- A line missed entirely, often the one that wraps across a page break.
- The right PO for the wrong account, because the sender was guessed from a name.
- The same PO entered twice, or a revised PO entered as an extra order.
- Cases entered as single items.
- A scan or photo read wrongly, with nothing to check it against.
Retyping has its own errors, so the question isn't whether AI is perfect. It's whether every error is caught before it becomes an order. A tool that reads well and checks nothing is worse than a careful person, because nobody looks at its work.
Reading is easy. Proving is the job
Most purchase orders that wholesale buyers email are PDFs produced by a purchasing or accounting system. Those PDFs contain a text layer: the actual characters, which can be extracted without any AI. That makes a two-step design possible:
- The AI transcribes. It returns each line with the text it read it from, values as written, and an empty value where it isn't sure. It never fills a gap with a guess.
- Code proves. Separate code, which knows nothing about the AI, looks for each line in the document's text: its words, its code, its price, its total and its quantity. Only a line found there is confirmed.
This is called grounding. It turns "the AI says so" into "the document says so". When the two disagree, the line is held for a person, with the reason.
| Document | Text to check against | Safe to order without a person? |
|---|---|---|
| PDF from a purchasing system | The PDF's text layer | Yes, when every check passes |
| Excel or CSV | The cells themselves (no AI needed) | Yes, when every check passes |
| Order typed in the email | The email's text | Yes, when every check passes |
| Scanned PDF | None | No: a person checks every line |
| Phone photo of a printed PO | None | No: a person checks every line |
The 14 checks a purchase-order reader should run
Use this as a checklist when you evaluate any tool, including ours. A good tool runs each check, and when one fails it says which, on which line, in plain words.
Against the document
Against the account
Against your orders and stock
And one rule for matching products
When a line has no code you sell, the product can be found by its name, but only if exactly one product fits every word and every size on the line ("1 kg" is never "2 kg"). Even then, a person should confirm it the first time. After that, the buyer's own wording can be remembered for that account, so their next PO matches without asking.
When can a purchase order be placed with no one checking?
Only when there is nothing left to check. Our rule, which we suggest you hold any tool to, needs all of these at once:
- The sender is verified (DMARC passed, a known contact of one location).
- Every line was matched by its code, not by its name and not picked by hand.
- Every line was proved by the document's text. That rules out scans and photos.
- None of the 14 checks raised anything.
- The account has payment terms, so the order is placed on terms rather than charged.
Anything else becomes a draft order for review. Expect a new buyer's first POs to need a look: once you confirm their codes and wording, they are remembered for that account, so the same buyer's next POs need less.
A ten-document test for any purchase-order tool
Don't judge a PO tool on its demo. Send it ten documents of your own and score it on one number: wrong lines that were not flagged. Anything above zero is a problem, however good the rest looks.
| Send | A good tool |
|---|---|
| 3 real PDFs from your best customers | Drafts with every line confirmed, at the account's prices |
| The same PDF again | Recognised as a duplicate, not a second order |
| A revised PO ("REV 2") | Held as a revision of the original |
| A PO with a code you don't sell | That line unmatched or suggested, never guessed |
| A PO in cases | The unit flagged for checking |
| A scanned PDF | Read, and held for you to check every line |
| A phone photo of a printed PO | Read, and held for you to check every line |
| A PO from an address you don't know | The account suggested from the PO's names, not assumed |
Score the results honestly: lines right, lines held with a reason, lines wrong without a flag. The first two are the tool doing its job.
How The Usual runs these checks
We built The Usual around this design, and every check above is one it runs on each purchase order. A few specifics:
- Grounding is done locally, from the PDF's own text, by code separate from the AI. Each line shows whether the document confirmed it.
- Duplicates: a PO number already received from that location, or already on a Shopify order in the last 60 days, and the same file within 30 days.
- Scans and photos are read but never drafted or placed by themselves. Every line is marked for you to check.
- Name matches are shown as "Matched by name — check it" until you confirm them; the buyer's wording is then remembered for that company.
- Creating the draft by itself is on by default, and happens only when nothing could make the order wrong: no unmatched or unproved line, a settled account, no possible duplicate or revision, not a scan or photo. Warnings such as stock or a price difference are shown with the draft. Placing on payment terms is off by default, needs a paid plan, and needs no warning of any kind.
To see the full flow from email to draft, read turning an emailed purchase order into a Shopify draft order.
Frequently asked questions
How accurate is AI at reading purchase orders?
There is no single number: it depends on the documents, the model and how results are checked. The figure that matters is not how many lines are read right, but how many wrong lines get through without being flagged. That should be zero. A tool earns it by proving each line against the document's own text, and by holding anything it can't prove for a person to check.
Is OCR enough to automate purchase-order entry?
No. OCR or an AI model turns a page into text and fields, but it can still misread a digit or invent a line, and it says nothing about the account, your prices, stock or duplicates. Automation needs a second layer that verifies what was read and checks it against your store before an order is created.
What does it mean to ground a purchase-order line?
Grounding means proving a line read by AI against the document's own text, with code that doesn't depend on the AI. For a PDF produced by a purchasing system, the text layer can be extracted locally, and each line's text, item code, price, total and quantity can be looked for in it. A line that can't be found is not trusted.
Can AI place wholesale orders automatically?
It can, but only under strict conditions: a verified sender, every line matched by its item code and proved by the document, the account's own prices and payment terms, and no warning of any kind. Anything less should become a draft order for a person to review. In The Usual, automatic placing is off by default and only available on paid plans.
Why does the sender's email address matter?
Because it decides which account the order is for, and an email's From address can be forged. DMARC is the check receiving mail servers use to confirm a message really comes from the domain it claims. Only a PO whose sender passed DMARC and is a known contact of exactly one company location should be tied to that account without asking.
Should I accept photos of purchase orders?
Yes, but treat them as review-only. A photo has no text layer, so nothing read from it can be proved by code. The Usual reads JPEG, PNG, WebP and GIF photos and marks every line “Photo: check it”; the PO is never drafted or placed by itself.
What should happen when a buyer resends the same PO?
It should be recognised as the same order and held, not entered twice. The Usual flags a PO number already received from that location or already on a Shopify order in the last 60 days, and the same file received in the last 30 days.