Order Desk
AI order entry for a nut and bolt wholesaler
- A nut and bolt wholesaler. Client work, so they aren't named.
- 11 May 2026
- A customer's order email, often with a PDF purchase order
- A draft quote or order in MYOB, once the desk has approved every line
- About 18,000 items
The Order Desk reads customer order emails for a nut and bolt wholesaler and turns them into draft orders in MYOB. Someone on the sales desk approves every line before anything reaches the accounts.

Screenshot with invented data. Every customer, person, order and part code is made up.
- Reads the email and any PDF purchase orders, and pulls out the customer, the PO number, and each line with its quantity.
- Matches each line against an 18,000-item catalogue in two stages: a search builds a shortlist of 80, then Claude picks one or says there’s no match, with a one-sentence reason.
- Queues the order for review, with the pick, a confidence score, the reasoning and some alternatives on every line.
- Writes the approved draft into MYOB as a quote or an order, after checking the PO hasn’t been sent already.
Every correction the desk makes is kept and feeds the next tuning round.
It’s an internal tool, so there’s no public link, and the client isn’t named.
Stack
- Claude
- Reads the email and any PDFs into a structured order, then picks each line from the shortlist or says there's no match.
- OpenAI embeddings
- Turns every catalogue description and every order line into a vector, so a search can build the shortlist.
- Microsoft Graph
- Reads the order emails out of the desk's mailbox. Read-only.
- FastAPI
- The review queue the desk works in.
- SQLite
- Holds the queue, the catalogue and every correction the desk makes.
- MYOB API
- Takes the approved draft as a quote or an order. Prices and delivery are still edited in MYOB.
Build log
-
A long order failed with an error that pointed at the PDF. The PDF was fine. The model had run out of room to finish its answer. It now says so, and tries again with more room.
-
Handwritten counter dockets can be scanned in as a stack. Each docket lands in the queue as its own order. Each is read more than once, and where the reads disagree the order says what to check against the paper.
-
The matcher now writes its reasoning before its pick. It had been choosing a part, then explaining why a different one was right. Read →
-
When a customer quotes the wholesaler's own part code, an exact match now skips the AI. Exact only, because one character out is a different part.
-
The "no match" answers pointed at a hole in the catalogue export I'd been given. The business sent the missing 139 items and they went in.
-
Approving an order now puts a real draft into MYOB. The first two went through. The duplicate check stopped an earlier try, because that purchase order was already in the books. Read →
-
The two-stage matcher is wired in behind a review queue. Each line gets approved, swapped for an alternative, or marked no match. It gets 27 of 31 graded lines.
-
Started. The first plan had the AI writing drafts straight into MYOB. By that night there was a review step in the middle, and it had read 14 of 14 real order emails.
Writing
- Let it think before it answers → The order desk picked the wrong U-bolt, then wrote a neat explanation of why a different one was right. The fix was swapping two fields.
- An order desk that's allowed to say "I don't know" → A week building an AI order desk for a nut and bolt wholesaler, and why the most useful thing it learned was to refuse.