Can AI Read Emailed Orders Into a Wholesaler's System?

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Can AI Read Emailed Orders Into a Wholesaler's System?
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Can AI Read Emailed Orders Into a Wholesaler's System?

Yes. AI can read emailed orders, whether typed in the email, attached as PDFs or sent as spreadsheets, and turn them into draft sales orders with the customer, products, quantities and delivery date. For most small wholesalers those drafts should go to a review queue rather than straight into the system, until matching to your product codes proves reliable.

The reading is the easy part; current models pull fields out of an email very well. What decides whether it works for you is matching: turning "2 x chips 10kg, usual milk, the good vinegar" into three specific product codes. That depends on how consistently your customers describe things, which is why the same technology is close to hands-off for one wholesaler and a daily headache for another.

Follow me on Instagram@sagnikteaches

The five jobs hidden inside "reading an order"

  1. Recognise it's an order. The orders inbox also gets invoices, complaints and "can you deliver earlier on Friday?" An AI step classifies each email first.
  2. Extract the fields. Customer, delivery date, delivery address if different, PO number, and each line's description and quantity. This works well from email text, typed PDFs and spreadsheets.
  3. Match lines to your products. The customer's words become your product codes and units. This is where errors come from.
  4. Validate. Does the customer exist in your system? Is the product active? Is the quantity plausible (40 cases rather than 4)? Is the delivery day one you serve?
  5. Post it. Create the order in your system through an API or a CSV import, or hand a person a ready-to-check draft.

Tools differ mostly in how they handle steps 3 and 5. For the difference between AI extraction and older template-based OCR, see AI document extraction versus traditional OCR.

Connect on LinkedInSagnik Bhattacharya

Step 1 fails in a way that is easy to miss. A restaurant emails: "The chips 10kg were defrosted when they arrived, can you credit 2 bags please." It names a product and a quantity, so a loose classification treats it as an order, and the next morning the customer who just complained receives two more bags of chips. Tell the classifier that an order must ask for goods to be delivered, and route anything mentioning a credit, refund, damage or a missing item to a person instead. Then test it on a week of real inbox mail, complaints included, before any draft reaches the review queue.

Subscribe on YouTube@codingliquids

Step 4 is only as good as the rules you write down. For the catering wholesaler below, they might read: delivery days Monday to Saturday; any product code marked inactive is flagged; any quantity more than three times the customer's usual amount is flagged; any customer on credit hold is flagged; any order after the 4am cut-off goes to the next delivery day with a note. In the first week, a kitchen asked for "Sunday" delivery. The Sunday rule caught it, and a quick call confirmed they meant Monday, a day the firm serves.

It depends on six things, with rough thresholds

FactorFavours automationMakes it harder
VolumeOver about 30 emailed orders a day, when keying takes hoursUnder about 10 a day; setup rarely pays back
Repeat customersMost orders from regulars who describe things the same way each timeMany one-off buyers with new wording
FormatsSystem-generated PDF purchase orders; your own order formFree-text emails, photos of handwritten sheets
CatalogueClear product names; few near-identical linesMany variants (sizes, brands, pack counts) that differ by one word
Your systemHas an API or a sales order import templateNo import route, so someone still types it in
Cost of an errorAmbient goods; mistakes fixed on the next runChilled or made-to-order goods, where a wrong line wastes stock

Two or three factors on the right-hand side don't rule automation out. They mean you'll keep a person reviewing every draft for longer, which still saves most of the typing.

A catering, an electrical and a drinks wholesaler compared

A catering supplies wholesaler gets 60 to 90 orders a night from restaurant kitchens, mostly typed on phones after service: "2 chips 10kg, 1 rapeseed 20L, usual dairy, NO cream this wk." The reading is fine; the shorthand and the standing orders are the challenge. The answer here is yes, with a per-customer alias table and a morning review queue, because the orders arrive overnight and the review can happen before picking starts.

An electrical wholesaler receives PDF purchase orders from contractors' own systems, each using the contractor's part numbers and descriptions: "Cable 2.5mm T&E grey 100m." The PDFs are clean and consistent per customer, so extraction is reliable. The work is a cross-reference table from each contractor's codes to yours, built once from past orders. The answer is yes, and close to hands-off for the biggest accounts once the table is complete.

Building that cross-reference is a one-off job worth sizing before you start. Say the twelve biggest contractors each ordered about 150 distinct parts last year: roughly 1,800 rows. Because past invoices hold both the contractor's part number (from their PO) and the code you actually shipped, an AI step can draft most of the table from a year of matched orders. A person then checks each row at around ten seconds apiece, which is about five hours, spread over a week. After that, the table only needs updating when a contractor orders something new.

A drinks distributor sends customers a spreadsheet order form with its own product codes already in it. Customers fill in quantities and email it back. Here the answer is that AI is barely needed: a simple automation that reads the spreadsheet columns does the job more predictably, and AI only helps with the notes customers type in the margins ("swap the lager for the 4% if out of stock"). Where you can make customers use your codes, rules beat AI.

The matching problem, and the alias table that fixes most of it

An alias table is a simple list of how each customer describes each product, mapped to your code. You build the first version from past orders, and it grows every time a reviewer corrects a match. An illustrative extract:

CustomerTheir wordingYour codeUnit
Restaurant R-014chips 10kgFZ-CH-1010Bag
Restaurant R-014the good vinegarDR-VN-05055L
Anyrapeseed 20LOL-RS-2000Drum
Cafe C-022usual dairyStanding order SO-114n/a

Then the extraction prompt tells the AI to use the table first and flag anything it can't match, rather than guess:

Extract this customer order as JSON with: customer, delivery_date,
po_number, and lines (their_wording, quantity, matched_code,
confidence HIGH/LOW, reason).
Match each line using the alias table first, then the product list.
If no exact alias exists, or two products could fit, set
matched_code to null and confidence to LOW.
Never invent a product code. Flag any line that contradicts a
standing order (for example "no cream").

An illustrative output for an email from restaurant R-014:

{"customer": "Restaurant R-014", "delivery_date": "2026-09-29",
 "lines": [
  {"their_wording": "2 chips 10kg", "quantity": 2,
   "matched_code": "FZ-CH-1010", "confidence": "HIGH"},
  {"their_wording": "1 rapeseed 20L", "quantity": 1,
   "matched_code": "OL-RS-2000", "confidence": "HIGH"},
  {"their_wording": "usual dairy, NO cream this wk", "quantity": null,
   "matched_code": null, "confidence": "LOW",
   "reason": "Standing order includes double cream; customer
   excludes cream this week"}]}

The reviewer sees two green lines and one flagged line, opens the standing order, removes the cream and approves. That takes seconds instead of the minutes it took to type the whole order. The mistake to avoid is letting the model "helpfully" pick the nearest product for a vague line; a wrong code that looks confident is worse than a blank one. If your product list itself is inconsistent, with duplicate names and old codes, tidy it first; cleaning messy data covers the spreadsheet side.

Getting orders into your system: four routes

  • CSV import. Many inventory systems accept a sales order template. Unleashed, for example, imports sales orders from its own CSV template and creates them in "Parked" status; the customer must already exist as a customer record, order numbers must be unique, and the import creates new orders only. A parked status suits a review step well.
  • API. If your system has an API, an automation tool (Zapier, Make) or a developer can create orders directly. This is the most hands-off route and needs the strongest validation.
  • A dedicated parser. Tools such as Parseur read emails and attachments and send structured data onward. Its list prices start at $49 a month billed monthly for 100 pages, with 1,000 pages at $129 and a free tier of 20 pages; an email counts as one credit and a PDF counts per page. You'd still build the matching step.
  • Order automation platforms. Products such as Conexiom are built for manufacturers and distributors converting emailed purchase orders into sales orders in ERP systems. They suit larger volumes; ask for pricing and a trial on your own documents.

Run the parser sum on your own mix before choosing a plan. For the illustrative wholesaler below, 1,760 orders a month might split into 70% typed in the email body (1,232 credits) and 30% PDFs averaging two pages (1,056 credits): about 2,300 a month in all. That is well over the 1,000 pages in the $129 plan, so check the next tier on Parseur's pricing page, and weigh it against reading the attachments with an API model inside your automation instead.

Whatever the route, the orders inbox is now connected to software, so check access and permissions first. AI triage for shared inboxes covers separating orders from everything else that lands there.

An illustrative catering wholesaler at 80 orders a day

Imagine a catering supplies wholesaler taking about 80 emailed orders a night, around 1,760 a month, averaging nine lines. Keying each takes about four minutes including lookups, so two staff spend about 5.3 hours every morning on entry before picking can start.

After two months of building the alias table and running a review queue:

  • About 70% of orders arrive with every line matched HIGH; review takes under a minute each: about 56 minutes.
  • About 25% have one or two flagged lines: three minutes each, about an hour.
  • About 5% are messy (photos, long notes) and are still keyed by hand: about 16 minutes.

That's around 2.2 hours instead of 5.3, and picking starts earlier. The AI cost itself is small: through an API, a cheap model tier such as gpt-6-luna is priced at $0.10 per million input tokens and $0.50 per million output tokens, so even at a few thousand tokens per order, 1,760 orders cost a dollar or two a month. The real costs are the automation platform (check the task or credit tier your volume needs on Zapier's or Make's pricing pages, as 1,760 orders with several steps each will exceed entry plans), a parser subscription if you use one, and the setup time, which is mostly the alias table.

These percentages are illustrative. Yours depend on the factors in the table above, which is why a two-week trial on real orders beats any estimate.

What trips up emailed-order reading in the first month

Most early errors come from the email around the order rather than the order itself. Expect these, and add a rule or a check for each as it appears:

  • Reply chains. A customer replies to last week's confirmation with "same again plus 2 mayo," and the old order sits quoted underneath. Without an instruction to read only the newest message, the model extracts both. Tell it to ignore quoted text and to treat "same again" as a reference to the previous order.
  • Units. "6 x cola" could mean six cans or six cases. Put the default unit per product in the alias table, and flag any quantity that is more than about three times the customer's usual amount.
  • Two sites, one email. A restaurant group orders for two kitchens in one message. The extraction must split it into two orders with different delivery addresses, or the whole lot turns up at one door.
  • Amendments. "Sorry, make that 3 not 2" arrives 40 minutes after the first email. The automation needs to recognise it as a change to an existing draft, not a new order.

Each of these is easy to handle once you've seen it, which is another reason to run the review queue for a month before trusting anything to post on its own.

Automate, keep a review queue, or leave it alone

  • Leave it if you take fewer than about ten emailed orders a day, or if most customers could simply be moved to an online order form or your own spreadsheet. Changing the input is cheaper than reading it cleverly.
  • Review queue for most wholesalers: AI drafts every order, a person approves each one, and every correction goes into the alias table. Run it this way for at least a month, and indefinitely for chilled or high-value goods.
  • Auto-post only for specific customers whose orders have matched fully for several weeks, with validation rules (known customer, active products, plausible quantities, served delivery day) and a daily exceptions report.

Track two numbers from day one: the share of lines matched correctly without edits, and the minutes of review per order. When the first passes about 95% for a customer and stays there, that customer is a candidate for auto-posting. For the supplier side of the same problem, automating purchase orders and supplier emails uses the same review-first approach, and turning PDFs and scans into usable data covers the extraction step in more depth.

A filled-in weekly log keeps that honest. Illustrative figures for the catering wholesaler: week 1, 81% of lines matched without edits and 1.9 minutes of review per order; week 4, 93% and 0.8 minutes. By customer, restaurant R-014 sat at 98% for three weeks running, which makes it a candidate for auto-posting. Cafe C-022 stayed at 85%, and the log showed why: nearly every order carried a free-text note ("smaller tomatoes if you have them") that needed a person. The fix there isn't a better prompt. It's a notes field on the order form, so the note stays attached to the order instead of being read as a product line.

Emailed order questions from wholesalers

What about customers who just write "usual order"?

Keep a standing order for each regular customer in your system or a sheet, and let the AI recognise phrases like "usual" or "same as last week" and pull that list into the draft. Always flag these for review, because the customer may have changed something in a later line, such as "usual but no cream."

Can AI read handwritten order sheets or photos of them?

Often, if the handwriting is reasonably clear and the photo is sharp, but error rates are higher than for typed emails. Treat every handwritten order as needing review, and give the customers who send them a simple printed or online order form. Fixing the input usually beats trying to read bad input better.

Should the AI apply customer-specific prices?

No. Prices should come from your system's price lists and customer agreements once the order is created, not from anything the AI reads or works out. If a customer quotes a price in their email, have the AI flag the difference for a person to check rather than use it.

Further reads

Sources: Parseur pricing page; Unleashed support pages (import sales orders); Conexiom product pages; OpenAI API pricing as listed on the fact sheet.

Want emailed orders keyed in for you?

On a 1:1 call we'll look at a week of your real orders, check how your system accepts imports, and decide whether a review queue, a parser or a dedicated order tool fits your volume.

Book a 1:1 call with me