Use caseWorkflow automationDocument AI
Customer orders from email, PDF and WhatsApp, entered into the ERP without retyping
Reads customer orders from email, PDF, Excel and WhatsApp, maps their part numbers to your SKUs, checks price and stock, and creates the ERP sales order.
A blueprint, not a client story. The business described is illustrative; the architecture, integrations and trade-offs are real, and this is how I would build it. By Ergini, .
The short version
An order entry workflow for distributors and wholesalers whose customers order by email, PDF, Excel form and WhatsApp. It reads each order, maps the customer's part numbers and descriptions to your item codes, converts units, checks the price against the customer's terms and the stock, and creates the sales order through the ERP's API: SAP Business One, NetSuite, Business Central or Odoo. Lines it is unsure about go to an inside sales rep, and every correction becomes a new mapping.
- Best for
- Distributors and wholesalers taking a few hundred orders a day by email, PDF and WhatsApp, with a small inside sales team keying them in.
- Connects to
- Outlook and Microsoft 365, WhatsApp Business Platform, SAP Business One, NetSuite, Excel order forms, EDI for the largest customers
- The AI does
- Reads orders in any layout and language, pulls out every line with the text it came from, and shortlists catalog items when a part number is unknown.
- People do
- Confirm new part numbers, price mismatches, substitutions and first orders to new addresses, and teach the system with every correction.
- Built as
- AI Workflow Automation, usually $15K - $30K
The first hours of every inside sales day
Say you run an industrial parts distributor near Stuttgart: fasteners, seals, hydraulic fittings and workshop consumables for about 1,400 active customers. Around 250 orders arrive on a normal day. The two automotive suppliers among your customers send EDI. Everyone else sends something a person has to read.
Machine builders email PDF purchase orders printed from their own ERP, with their material numbers instead of yours. Mid-sized workshops fill in an Excel form you sent them years ago and have modified since. Small customers type 'same as last time but 200 more M8 washers' into an email. Site foremen photograph a handwritten list and send it on WhatsApp. Customers in Austria, Alsace and Moravia send the same mix in their own languages. Six inside sales reps key all of it into SAP Business One, and until they have, they are not selling anything.
WizCommerce, which sells order entry software to distributors, puts manual entry at about 20 minutes and $10 to $12 per order. That is a vendor's figure, so check it against your own: time ten orders across your channels and multiply. What that number leaves out is the error: a box of 200 entered as 200 boxes, a price keyed from last year's list, an order entered twice because it arrived at two addresses.
One purchase order, taken apart line by line
The model read the PDF. Every call after that is ordinary code checking what it read against the ERP.
orders@ mailbox, Tuesday 07:12, PDF order in German
Purchasing, machine builder · Email, in German
Good morning, please find our order 4500231877 attached. Please confirm the delivery date. J. Keller, Purchasing
- extract_order(file: "BE_4500231877.pdf")customer PO 4500231877 / requested 16 Sep / ship-to 'Werk 2' / 4 lines, each with its source text
- resolve_customer(sender: "j.keller@...", ship_to: "Werk 2")C20417 / known contact / ship-to address 2 already on file
- check_duplicate(customer: "C20417", po: "4500231877")no order with this PO number / same PDF also in a rep's inbox at 07:13, linked and skipped
- match_line(1, part: "100-4471", text: "Zylinderschraube DIN 912 M8x30 8.8 verz.")cross-reference hit / 912-0830-ZN / exact
- convert_unit(line: 1, qty: 5, unit: "PAK")PAK is 200 pcs for this item / 1,000 pcs / priced per 100
- match_line(2, part: "100-5520", text: "O-Ring 32x3 NBR70")no cross-reference / catalog match OR-32X3-NBR70 on dimensions and material / new for this customer, rep needed
- check_prices(customer: "C20417", lines: 4)lines 1, 2 and 4 match special prices / line 3: PO says EUR 2.10, price list EUR 2.35, no special price on file
- check_stock(lines: 4)lines 1 to 3 in stock / line 4: 160 of 200 available, 40 due in on 19 Sep
Review queue · Rep's screen
PO 4500231877, C20417: held, 2 of 4 lines need you. Line 2: new part number 100-5520, proposed OR-32X3-NBR70. Line 3: customer price EUR 2.10 against list EUR 2.35. Line 4 can ship 160 now and 40 on 19 Sep.
- Rep confirms line 2 and accepts the price. Draft becomes sales order 24811.
From the orders@ inbox to a sales order in SAP Business One
Two steps use a model: reading the order, and shortlisting items for text it has never seen. Customer identity, prices, stock, duplicates and the write into the ERP are code, because each of them commits the business to something.
01 Trigger · Microsoft Graph, WhatsApp Cloud API
An order arrives on any channel
An email to orders@ or to a rep, a WhatsApp photo, PDF or voice note, an Excel attachment. Graph change notifications and WhatsApp webhooks start the flow within seconds. EDI orders never enter it. If orders@ receives everything else too, a shared inbox agent sorts it first.
02 Plain code · SAP Business One Service Layer
Identify the customer and screen for duplicates
The sender's address or verified phone number is matched to a business partner. The email's Message-ID, a hash of every attachment and the customer's PO number are checked against everything received in the last few weeks, across every mailbox.
03 AI model · Structured output
Read the order into a fixed schema
A vision-capable model reads PDFs, scans and photos; voice notes are transcribed and Excel is parsed as a table first. The output follows a strict JSON schema: PO number, dates, ship-to, and per line the part number, description, quantity, unit and price, each with its source text.
04 Plain code
Resolve every line against the ERP
Cross-reference table, then the customer's history, then a normalized match on norm and dimensions. Units convert through the ERP's unit-of-measure groups. Prices are checked against special prices, stock against on-hand minus committed, the account against credit holds.
05 AI model
Shortlist items for text nobody recognizes
Only when every lookup comes back empty. A semantic search over the catalog returns candidates and the model ranks them with a reason for each. A shortlist is never accepted without a person.
06 Decision
Can this order go straight in?
Rules decide per line and per order. The model's confidence is one input, never the deciding one.
- Every line matched from the table or history, prices agree, stock is there, account open then create the order and confirm it
- A line that is new, fuzzy, repriced or short, or a new delivery address then hold the order and queue only those lines for a rep
- A likely duplicate, an unknown sender or a credit hold then stop and hand the whole order to a rep
07 Person
A rep settles the flagged lines
The queue shows the source document beside the proposed order, with flagged lines highlighted next to the text they came from. A fix can be saved as a new cross-reference for that customer, stamped with the rep's name and the date.
08 System · Service Layer Orders or Drafts
Write the order once, and only once
The order carries the customer's PO number in NumAtCard and the source message ID in a user-defined field. If the call times out, code searches for that ID before trying again, so a retry can never create a second order.
09 Result
Confirm in the customer's own thread
The confirmation goes back as a reply to the original email or WhatsApp message, in the customer's language, with the ERP order number, confirmed dates and any partial delivery.
How a customer's line finds your item number
Most order entry mistakes are not reading errors. They are matching errors: the model reads '100-5520' perfectly and still cannot know which O-ring the customer means. So matching runs as a ladder, most certain rung first.
| Rung | What is compared | Example | What happens |
|---|---|---|---|
| 1. Cross-reference table | The customer's own part number, for that customer only | 100-4471 from C20417 is 912-0830-ZN | Accepted. SAP Business One already has a home for this, the Business Partner Catalog Numbers. |
| 2. The customer's history | Description and quantity against what this customer has bought before | 'Zyl.Schr. M8x30' from a customer who buys one M8x30 item every month | Accepted when exactly one item in their history fits |
| 3. Normalized catalog match | Norm, dimensions, grade, material and finish, after code has normalized 'M8 x 30', 'verz.' and 'zinc plated' | 'DIN 912 M8x30 8.8 verzinkt' is 912-0830-ZN | Accepted only when every attribute matches; one difference sends it to a rep |
| 4. Semantic search | The meaning of free text, against catalog descriptions in every language you sell in | 'the black seal for the 32 pump' | Shown to a rep as a shortlist, never accepted on its own |
| 5. Nothing plausible | No rung above found a candidate | A part number from a competitor's catalog | The order is held and the line goes to a rep |
Units, repeats, substitutes and double orders
These cases decide whether the reps trust the queue, or quietly go back to checking everything.
'Same as last week, plus 200 washers'
The model marks the order as a reference to an earlier one and extracts only the changes; it never guesses what 'last week' contained. Code fetches the customer's recent orders from the ERP, applies the changes and shows a rep the result, because 'last' can mean last delivered, last ordered or last for this site.
A box, a case, a piece, or 100 pieces
Fasteners are priced per 100, seals by the piece and consumables by the case, and customers write whatever their own system prints. Units convert only through the ERP's unit-of-measure groups, never through the model's arithmetic. When a unit is missing or ambiguous, the customer's last orders for that item decide; when those disagree, a rep does.
Discontinued items and substitutions
Nothing is substituted automatically, even when the ERP lists a successor item. The system proposes the successor with the reason, and the rep decides whether to ask the customer first. Anything substituted is named in the confirmation, so the goods receipt holds no surprises.
The same order, twice
Customers send the PDF to orders@ and to their rep, or email it and then send a WhatsApp photo of the printout. Identical Message-IDs are caught across mailboxes, a repeated PO number in the ERP, and the photo by a fingerprint of customer, items and quantities. Suspected duplicates are held side by side, never dropped silently.
A timeout in the middle of a write
When the Service Layer call times out, the order may or may not exist. Blind retries are how a distributor ships the same order twice. Code looks the order up by the source ID stored on it before trying again, and every line carries the message and line number it came from, so a half-finished write is completed rather than repeated.
Where the reps still decide
The reps stop typing; they do not stop deciding. This split is what keeps the ERP clean.
The AI model
Read PDFs, Excel forms, email text, photos and voice notes
Layouts and languages vary without end, and reading them is what the model is good at.
Extract each line with the text it came from
The source text lets a rep check a line in seconds instead of rereading the whole PDF.
Shortlist catalog items for unknown descriptions
Useful as a shortlist, never trusted as an answer.
Plain code
Identify the customer and catch duplicates
Addresses, phone numbers and PO numbers are exact matches, not judgement calls.
Cross-references, unit conversion, price and stock checks
The ERP holds the truth, and code reads it the same way every time.
Post the order and the confirmation exactly once
Idempotency is a property of the code, and it gets tested like one.
A person
New part numbers, price mismatches and substitutions
Each is a commercial decision, and each answer teaches the cross-reference table.
New customers, new delivery addresses and credit holds
This is where fraud and bad debt usually start.
Switching it on one customer at a time
Autonomy is granted per customer rather than for the whole order book, and it can be withdrawn per customer too.
| Stage | What happens | Earned when |
|---|---|---|
| Shadow | Orders are read and matched in the background while reps work as usual, and the system compares its version with what the rep keyed. | Line-level agreement is high for your biggest customers, and every disagreement has an explanation. |
| Drafts | Orders land in SAP Business One as drafts. A rep fixes flagged lines and adds each one, and every fix is recorded. | A customer's orders go through for several weeks with no edits beyond the flagged lines. |
| Straight through, per customer | Clean orders from that customer become sales orders without anyone touching them. A flagged line still stops the order. | It stays on while a weekly sample audit finds no errors. One wrong line puts that customer back on drafts. |
Choco, Conexiom, EDI or a build: which one fits your order book?
Buy first if a product fits your segment. Food-service distributors should look at Choco, which runs order and voice agents built for restaurant ordering and reports 95% order accuracy (the vendor's own figure). WizCommerce, Y Meadows and Conexiom sell order entry automation to distributors and manufacturers. And for the few customers who send hundreds of standard orders a month, EDI is still right: the order is structured at the source and needs no model at all.
A build wins where those products stop. SAP Business One has no native order entry agent and no official MCP server, and older or heavily customized ERPs rarely have a connector worth the name. Catalogs with per-100 pricing, norm-based descriptions and customer-specific units need matching logic that is yours. So do customers who write in German, Czech and French in the same week, or who order by WhatsApp photo.
The usual shape is a hybrid: EDI for the largest customers, a product if one fits, and an AI workflow automation build for the long tail of email, Excel and WhatsApp orders. If the ERP is so old it has no API at all, the last step becomes a file import or a screen-level agent with a person watching. Once orders flow cleanly, the same lookups can answer delivery questions in a customer portal.
How you would know it is working
A blueprint has no results to report, so here is what I would measure from the first week instead, on your own data.
- Touchless order rate
- Orders created without any human edit that were not corrected later, per customer and per channel. The 'not corrected later' part catches errors found at picking.
- Line accuracy on audit
- A weekly random sample of straight-through orders, checked line by line against the source document by a rep.
- Receipt to order time
- Minutes from message arrival to a sales order in the ERP, and the share of orders entered before the truck cut-off.
- Cross-reference coverage
- The share of lines matched on the first rung. It should climb every week as rep corrections accumulate.
What a build like this costs
This is built as AI Workflow Automation, which runs $3.5K - $60K overall. A build like this one usually lands in the multi-step workflow tier: $15K - $30K, 3-5 weeks. The first working version runs on your real data well before the end of that window.
What it costs to run
Model costs are a few cents per order, more for multi-page scans read as images, so at 250 orders a day expect tens to a few hundred dollars a month. WhatsApp replies inside the 24-hour window after a customer's message are free. Hosting the queue and the ERP connector is a small fixed monthly cost.
What moves the price
- How many channels and formats: email PDFs are the baseline, while Excel forms, WhatsApp photos of handwritten lists and voice notes each add work
- The ERP and where it runs: an on-premise SAP Business One behind a firewall needs a secure connector, a cloud NetSuite does not
- Catalog size and mess: norm-based descriptions, per-100 pricing and customer-specific units need more matching rules
- How much order history exists to seed the cross-reference table, and how much pricing logic there is to check against
Who this is for
- Distributors whose customers email PDF purchase orders printed from their own ERP, full of their own material numbers
- Wholesalers with a WhatsApp number that foremen, mechanics or chefs already use to order
- Companies on SAP Business One, Business Central, NetSuite or Odoo with no order entry connector that fits
- Inside sales teams who spend the first hours of every day typing instead of selling, in three or four languages
Questions people ask about this
Can AI read purchase orders and enter them into SAP Business One?
Yes. The model reads the PDF, Excel file or photo into a fixed structure, and ordinary code creates the order through SAP Business One's Service Layer, its official REST API. I would start by writing drafts that a rep adds in the normal client, then let clean orders from trusted customers go straight in. When B1 runs on-premise or at a partner, the Service Layer needs a secure connector.
How do I automate order processing from email?
Watch the order mailboxes through Microsoft Graph or the Gmail API, extract each order into a strict schema, resolve every line against your ERP with code, and create the order through the ERP's API. Reading the email is the easy part. Mapping customer part numbers and units to your items is the real work, so store and reuse every rep correction.
What happens when a customer's part number is not in our system?
The line is held, not guessed. The system searches your catalog by description, norm and dimensions and shows a rep the best candidates with the reasons. When the rep picks one, it is saved as a cross-reference for that customer, so the same part number matches automatically next time. Nothing is ever substituted without a person deciding.
Do we still need EDI if AI can read our customers' PDFs?
For your largest customers, usually yes. EDI orders arrive structured, which makes them cheaper and more reliable than any reading step. AI order entry is for everyone else: the customers who will never set up EDI with you and keep sending PDFs, spreadsheets and WhatsApp messages. Both feed the same ERP and share the same duplicate checks.
How long does AI order entry take to build, and what does it cost?
A first version on real orders usually takes a few weeks, starting with email PDFs and one ERP. The price depends mostly on the number of channels, how the ERP is hosted and how messy the catalog is; the usual range is shown on this page. Running costs are a few cents per order.
Sources