Qelv

A prototype we built for wholesale order desks. September to December 2025.

Order emails that turn themselves into quotations

An order arrives as an email, and somebody reads it, checks stock, retypes the lines into a quotation and remembers to reserve the stock. This prototype reads the email, matches the lines to a catalogue, reserves the stock, drafts the quotation and logs every decision it made.

Wholesale distribution. Automate.

Order intake in figures

  • 3quantities per stock item: on hand, available and reserved
  • 5screens in the hosted demo, from the inbox to the audit trail
The email processing screen: a list of incoming threads on the left, each with a state and a time, and a paste box with parse and upload controls on the right
A capture of the prototype, sample data.

The situation

An order arrives as an email. Somebody reads it, opens the stock system, checks what is available, retypes the lines into a quotation and remembers to reserve the stock. Wholesale order desks do this all day, and every prospect asking about automating it wanted to see the reading step working before believing it. So we built the whole desk, and left a log of what it decided.

What we built

  • A parser that takes the body of an order email, or an attachment, and returns a customer, a reference, a requested date and a set of lines
  • Line matching against a product catalogue, so a customer's own wording resolves to a stock item or is handed back as unmatched
  • Stock kept as three separate quantities, on hand, available and reserved, so an order can reserve without pretending it has shipped
  • Quotations generated from the parsed lines, each with one state and one available action
  • An audit trail that logs the parse, the quote and the reservation, including the ones that failed
  • An in-browser version of the reading step on this page, so a visitor can paste a sample order and watch it parse

The screens

Sample data.Captures of the prototype on sample data.

Email processing

The inbox side. Threads on the left each carry a state (new, parsed, processing) and, once parsed, the order they produced. On the right is the box an operator pastes a message into, and the control that takes an attachment instead.

The email processing screen: a list of incoming threads on the left, each with a state and a time, and a paste box with parse and upload controls on the right
Threads on the left, the parser on the right.

Email processing

What changed

The reading step, the part every prospect wanted to see before believing it, runs in the hosted demo and in the browser on this page. An order email becomes order lines, reserved stock and a quotation without anyone retyping it.

Try it

Sample data.Three invented order emails from fictional customers at example.com, and a five item catalogue held in this page. The parse runs in your browser and nothing is sent anywhere.

The message

Load one of the invented messages, or paste one of your own. Real text is fine: it stays in this tab.

  • A clean order. Everything the parser wants, in the shape it wants it.
  • A forwarded thread. Three quantity shapes, one item that is out of stock, one line nobody can read.
  • No order in it. A complaint, not a purchase order. Nothing should be drafted from it.

Headers are skipped. A line beginning with a dash is treated as an order line, and one that cannot be read is reported rather than guessed at.

3 lines read, 0 for a person, quotation QUO-0812 drafted

What the system would do

Sample data.

The header it read

Customer
Priya Raman
Reply address
priya.raman@example.com
Company
Harbour Row Supplies
Reference
PO-40812
Requested date
12 Sep 2025

The lines it read

Sample data.
Sample data. Order lines read from the message, with the quantity, the catalogue price and what the system would do with each.
ItemQtyLineWhat happens
Widget A (WID-A-001)12$300.0012 reserved against this order
Widget C (WID-C-003)30$1,050.0030 reserved against this order
Connector kit (CNK-D-004)6$75.006 reserved against this order

Quotation subtotal $1,425.00 at catalogue prices, on every line that matched an item, including the ones there is no stock for. Availability is the column beside it, not a reason to leave a line off a quote. Sample figures.

What it would write to the audit trail

  • EMAIL_PARSED on the incoming message
  • QUOTE_DRAFTED on QUO-0812, 3 lines
  • STOCK_RESERVED on WID-A-001, 12 of 125 available
  • STOCK_RESERVED on WID-C-003, 30 of 65 available
  • STOCK_RESERVED on CNK-D-004, 6 of 40 available

What a person still has to deal with

Nothing on this message. That is what a clean order looks like, and it is the minority of them.

The parser reads order lines and nothing else. An instruction written in prose, such as asking for whatever is in stock, is left for a person by design rather than acted on.

Read next

Where to next

Have a problem in this shape?

Say so in a few sentences. The reply comes from the person who built this one.

We reply within two business days. If it is a fit, you get a one-page note on what to do first, before any sales call.