The Usualby Nexus Logic Systems
Purchase orders · Accuracy

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
  1. How PO reading goes wrong
  2. Reading is easy. Proving is the job
  3. The 14 checks
  4. When an order can be placed with no one
  5. A ten-document test for any tool
  6. How The Usual runs these checks
  7. FAQ

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:

  1. 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.
  2. 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.

What can be proved, by kind of document
DocumentText to check againstSafe to order without a person?
PDF from a purchasing systemThe PDF's text layerYes, when every check passes
Excel or CSVThe cells themselves (no AI needed)Yes, when every check passes
Order typed in the emailThe email's textYes, when every check passes
Scanned PDFNoneNo: a person checks every line
Phone photo of a printed PONoneNo: 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

01The line's text is in the documentIts words appear in the PDF's or email's own text, in order. A line the reader invented has nowhere to be found.
02The item code stands on its own"SKU" inside "SKU-7" is not a match. The code must be a whole word of that line.
03Price and total are on that lineWritten the same way, and never the quantity's own number. A total of 40.00 is not the 40 in "M8 x 40".
04The quantity can be provedQuantity times unit price comes to the line total, or the quantity sits next to the unit (500 EA), or it is the line's only whole number.
05The lines add upThe line totals come to the PO's own subtotal. If they don't, a line may be missing, often at a page break.
06Header fields are realA PO number, date or total that can't be found in the document is dropped, with a note, rather than kept.

Against the account

07The sender is verifiedThe email passed DMARC and comes from a known contact of exactly one company location. Otherwise the account is suggested, not assumed.
08Prices are yours, not the PO'sEach line is priced by Shopify from the account's catalog. A PO price that differs is flagged, not used.

Against your orders and stock

09Not a PO you already haveThe PO number hasn't been received from this account, or used on an order, recently.
10Not the same file againAn identical file sent a second time is recognised as a resend.
11Not a revision"REV 2", a change order, or a reference to an original PO is held for review, never added as a new order.
12The delivery date makes senseNot already passed, and not ambiguous: 01/02/2025 can be January or February.
13The unit is the one you sellA line in cases, boxes or kilos is flagged for the quantity to be checked. Nothing is converted silently.
14The account and stock can take itItems in stock, no overdue invoices if you hold credit, and your minimum order met.

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 these, and look for this
SendA good tool
3 real PDFs from your best customersDrafts with every line confirmed, at the account's prices
The same PDF againRecognised 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 sellThat line unmatched or suggested, never guessed
A PO in casesThe unit flagged for checking
A scanned PDFRead, and held for you to check every line
A phone photo of a printed PORead, and held for you to check every line
A PO from an address you don't knowThe 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.

Sources

  1. Shopify Help Center: Creating B2B orders using draft orders
  2. Shopify Help Center: Payment terms
  3. RFC 7489: Domain-based Message Authentication, Reporting, and Conformance (DMARC)
  4. Anthropic documentation: Vision (image input limits)
  5. The Usual on the Shopify App Store