Work · Industrial supply and engineering

Every supplier gets asked at once, and the replies come back as one comparable quote.

A request for a price on a single industrial part arrives by email before seven in the morning. Someone has to work out who makes it, work out which of thousands of suppliers stocks it, write to each of them, wait, chase the ones who go quiet, read every reply including the ones that arrive as a PDF, and turn all of it into one price with a margin on it. In one measured three month stretch that inbox took 5,678 emails and 3,141 of them were requests for a quote.

Client
A supply and engineering firm serving a Fortune 100 manufacturer
Our part in it
Jon Dallas, lead developer, inside the consultancy the client engaged
When
2026
The size of the problem

The catalogue one person was expected to hold in their head.

4,014Manufacturers in the catalogue
2,620Suppliers the system can ask
60,000Parts on the books
86Emails on an average working day

Manufacturers and suppliers are counted from the catalogue the system runs on. The parts figure is the company's own, stated in a planning meeting. The daily average is measured across 65 working days of the live inbox, 4 January to 4 April 2026, and the busiest single day in that window took 177.

What we built

A quote desk that reads the inbox, does the legwork, and stops at every point where a person should decide. Claude classifies each email as a request, a supplier reply, a purchase order, a shipping notice or something to ignore. It reads the parts out of the request, matches each one to a manufacturer through an exact name, then a list of known aliases, then a fuzzy search, and works out which suppliers are worth asking. It drafts one email per supplier, combining several parts into a single message so nobody gets four emails in a morning, and it strips the customer's identity out before anything goes out.

Nothing sends without somebody pressing send. That was a design rule from the first day, because the system this replaced had lost the sales team's trust, and one of them had gone back to keeping the whole thing in a spreadsheet of their own.

The chasing is where the time actually went. Quiet suppliers are followed up on day three, five and seven, capped so nobody is pestered, with a rule that pads over the weekend so a reminder lands on a Wednesday morning rather than a Saturday. Every pending chase cancels itself the moment that supplier replies, which is the direct fix for a previous system that kept sending duplicates and damaged the relationships it was meant to manage.

The rule that shaped everything else: a deterministic shell around a probabilistic core. Claude handles reading, matching, drafting and judgement. Ordinary code handles the pricing arithmetic, the lead time calculation, the status of a quote, who is allowed to do what, and the guard that stops anything sending itself. Nothing that has to be exactly right is left to a model.

One request goes out to every plausible supplier at once. The replies come back into one place and are read into a single comparison, which is the step that used to be a morning of copying numbers between emails.
Step by step

How a request for a price becomes a quote, without anyone retyping a number.

Step by step

Each stage below is what the system does on its own. Where a person has to decide, the stage says so, and those are the only points at which anything leaves the building.

Shared inbox
Tosales@
SubjectRequest for quotation, 4 line items

Please quote the following for delivery to the Lima plant.

Material 58502001, seal kit, qty 4.

Material 39886727, gearbox, qty 1.

Material 31511534, drive belt, qty 12.

Arrived 06:52. Read by the system at 06:54.
Stage 1

The request lands in the shared inbox

A cron job on Railway pulls the shared mailbox through Microsoft Graph, the Microsoft API for reading company email, every couple of minutes. Nothing is forwarded and nobody changes their habits: the request arrives exactly where it always arrived.

The system has a start date, so on its first run it does not chew through five thousand historical emails looking for work that was finished months ago.

  • Microsoft Graph
  • Railway cron
1 of 9
See it running

The delivered system, recorded

A workflow running, start to finish. The file is read, the tasks are written against real people, and the chasing happens on WhatsApp.
The system's own technical reference, which the sales team reads as onboarding and which ships with the application.
The delivered system. The system's own technical reference, which the sales team reads as onboarding and which ships with the application.

What happened once it was running

It runs against the live inbox with the inside sales team using it, in a deliberate soft launch rather than a switch thrown for everyone at once. The work that used to be a morning of writing to suppliers and copying numbers out of their replies now arrives as a drafted set of emails and a filled comparison, with a person deciding twice and the system doing the rest.

45Tools the assistant can call
207Automated tests, run on every change
548Formula columns in the build this replaced
$0.47AI cost of one round of enquiries
Counted from the delivered system, August 2026

The tool and test counts are counted from the source. The cost is the client's own measured figure for one round of enquiries. The build this replaced had reached 548 formula columns across 26 tables and became unusable at around thirty live quotes, which is the comparison that matters and is recorded in the project's own technical notes.

Why this page is short

Every figure on this page traces to something we measured.

This page once carried claims that described the work inaccurately. They came down in an audit of our own copy, and each one went back up only when its numbers could be traced to something measured. A case study you cannot check is worth nothing to you, and one that turns out to be wrong costs us more than it ever earned.