Keep your prices in a spreadsheet, have a formula pick the price for each requested line, and give the AI only the result to put into a reply. Never ask it to remember or calculate prices. Save its output as a draft, approve every quote before it goes out, and test the setup on ten past RFQs first.
Wrong quotes rarely come from a model being careless with words. They come from a model being asked to be a price database. When a request says "2,000 of the 9 inch clamshells", the model will cheerfully pick a price from whichever column looks closest. The fix is structural: the sheet decides the number, the AI writes around it, and a person presses send.
What an RFQ reply has to contain
A request for quotation (RFQ) is a buyer asking for a price on named items and quantities, often by email, often with several lines and a date they need the goods. Before any AI is involved, decide what a complete reply holds, because the draft will only be as complete as the template you give it.
- A line for every item requested, using the buyer's own wording and your product code side by side.
- Quantity, unit price at that quantity, and line total.
- The price break the quantity landed on, and the next break up, so the buyer can see what a larger order would do.
- Availability: in stock, on order with a date, or not supplied.
- Delivery cost and lead time.
- Tax handling stated plainly (prices include or exclude tax).
- How long the quote stays valid.
- One sentence on what happens next: how to accept, to whom, and by when.
Write that checklist into your reply template. When something is missing from the draft, you will notice because you know what a full reply looks like.
Price breaks as a table, not a paragraph
Price breaks are the quantity tiers at which the unit price drops. They are the part most likely to go wrong in an AI draft because the logic has edges: does 500 units get the 500 price or the 250 price? Settle that in a table so there is nothing to interpret.
Take an illustrative wholesaler of catering disposables. One line in the price list looks like this:
| Code | Description | From qty | Unit price |
|---|---|---|---|
| CL-09 | 9 inch clamshell, kraft, pack of 1 | 1 | $0.190 |
| CL-09 | 9 inch clamshell, kraft, pack of 1 | 500 | $0.172 |
| CL-09 | 9 inch clamshell, kraft, pack of 1 | 2000 | $0.155 |
| CL-09 | 9 inch clamshell, kraft, pack of 1 | 10000 | $0.141 |
The "From qty" column means the price applies from that quantity upwards. A buyer asking for 2,000 gets $0.155, so the line is 2,000 × $0.155 = $310.00. A buyer asking for 1,999 gets $0.172, giving $343.83 (rounded from 1,999 × 0.172 = 343.828), which is more than the 2,000 line. That odd outcome is real and common, and a good reply spots it: "At 2,000 units the price drops to $0.155, bringing the line to $310.00, which is less than 1,999 units would cost." The sheet can detect it with one formula; the AI can then phrase it politely.
Making the sheet find the price
In Excel or Google Sheets, XLOOKUP with its match mode set to −1 returns the exact match or the next smaller item, which is exactly "from qty" behaviour. For a product code and quantity entered in a quote sheet, you have two steps: filter the table to that product, then look up the quantity in the filtered "From qty" column. With the price list in columns A to D (code, description, from qty, unit price), a product code in F2 and a quantity in G2, one formula does both in current Excel and in Google Sheets: =IFERROR(XLOOKUP(G2, FILTER($C$2:$C$500, $A$2:$A$500=F2), FILTER($D$2:$D$500, $A$2:$A$500=F2), "NO MATCH", -1), "NO MATCH"). For CL-09 it returns $0.172 at 1,999 units and $0.155 at 2,000, and an unknown code returns NO MATCH instead of a guess. If your sheet is organised with one row per product and columns for each break (Qty1, Qty500, Qty2000, Qty10000), the equivalent is an IFS or a nested comparison. Which you choose matters less than that it is written once, tested, and not redone by the AI each time.
Whatever method you use, add two check columns: "break applied" (the From qty value that was used) and "next break" (the next tier and its price). They feed the AI's wording and help you spot an error at a glance.

The Complete Excel Course with AI Integration
From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.
By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner
Buy nowThe flow, in five steps
- Extract the request. Paste the buyer's email into the assistant and ask it to turn the request into a table: buyer's wording, quantity, unit, any date mentioned. It extracts; it does not price.
- Match to codes. You, or the assistant with your product list as reference, propose a code per line. This is the step where ambiguity bites, so lines the assistant is unsure about must be marked "unmatched", never guessed.
- Price in the sheet. Enter codes and quantities into your quote sheet. Formulas return unit price, line total, break applied, next break and stock status.
- Draft the reply. Paste the sheet's result back to the assistant with your reply template and rules, and ask for the email.
- Approve and send. Someone reads every figure against the sheet and sends it from the mailbox, not from the assistant.
Steps 1 and 4 are where AI helps. Step 3 is where accuracy lives. Step 5 is where accountability lives, and it is the stage people drop first when they get busy.
The extraction prompt, and what comes back
Below is an email from a customer asking for a quote. Turn it into a table with these columns: line number, the customer's own wording for the item, quantity as a number, unit as stated (each, pack, case, box), any date or delivery requirement. Do not suggest prices or product codes. If a quantity is unclear, write UNCLEAR in that cell and add a note under the table. List any questions the customer asked that are not about price.
[paste email]
An illustrative email might read: "Hi, can you quote 2,000 of the 9 inch kraft boxes, a case of the 8oz soup pots with lids and 500 napkins, white. We need delivery by the 14th. Do you do an account?" The assistant returns three lines: 2,000 kraft boxes (unit each); "case of 8oz soup pots with lids" with quantity UNCLEAR, because a case could be 500 or 1,000 depending on your packing; and 500 white napkins with unit UNCLEAR, because a buyer might mean 500 packs. It also lists the question "Do you do an account?" apart from the table.
That is the value of the step: two of the three lines were silently ambiguous, and an assistant asked straight for a quote would have chosen an interpretation without telling you.
The drafting prompt with the rules built in
You write quote reply emails for a catering disposables wholesaler. Use ONLY the figures in the table below. Never calculate, round, estimate or recall a price yourself. If a line says NO MATCH or CHECK, do not give a price for it; say we will confirm it separately.
Reply structure: greeting using [first name]; a table with code, description, quantity, unit price, line total, availability; delivery cost and lead time from the figures given; for each line, one sentence naming the next price break if one is given; quote valid for 14 days; how to accept (reply to this email with a purchase order number); sign off as [your name].
Tone: brief, courteous, no sales language. Prices exclude sales tax; say so once.
Table:
[paste sheet rows]
Delivery: $18 flat, dispatched in 2 working days.
Customer questions: Do you do an account? (Answer: we offer 30-day accounts after a credit check; ask them to request a form.)
A good illustrative output opens with two sentences, shows a table with the clamshell line at 2,000 × $0.155 = $310.00, notes that 10,000 units would bring the price to $0.141, and states for the other two lines that quantities need confirming. It handles the account question in a single sentence. What you edit: the AI may open with "we're thrilled to quote", which you cut, and it may restate "prices exclude tax" three times, which you reduce to one.
Approval before sending: what the reviewer checks
The approval step is a short checklist, not a read-through. The reviewer, who might be you, does this with the sheet open beside the draft.
- Every unit price in the email matches the sheet, character for character.
- Every line total equals quantity × unit price. Pick two lines and multiply them.
- The grand total, if shown, equals the sum of line totals.
- Any line the sheet marked NO MATCH or CHECK is not priced in the email.
- The delivery cost and date match your current rule, not a number remembered from last month.
- The validity period is stated and correct.
- The recipient is the right person. Drafts with the previous customer's name in the greeting are an old, avoidable embarrassment.
- Nothing was promised that the sheet does not support: stock dates, credit terms, discounts.
Set the mailbox so the assistant's output lands as a draft, never as a sent message. In most mail apps you paste it into a draft and send it yourself. If you later connect automation, make the "create draft" action the only permitted one.
Testing on ten past RFQs before trusting it
This is the part that makes the system defensible. Pull ten past RFQs from your inbox, with the quotes that went out at the time, and run each through the five steps. Compare the new draft with the old reply.
Choose the ten deliberately:
- Three ordinary requests with two or three clear lines.
- One that lands exactly on a price break boundary (say 500 or 2,000 units).
- One that sits just below a break, where the next tier would be cheaper in total.
- One for a product you have discontinued or renamed.
- One with a vague description ("those small tubs") that cannot be matched.
- One with a quantity above your ceiling, where you would normally negotiate.
- One that mixes a request for a quote with a complaint or other question.
Score each draft on four things: price correct, line total correct, unmatched lines handled without a guessed price, and tone acceptable without editing. A reasonable bar for going live is every price and every total right on all ten, with unmatched lines flagged on every one that should be. Not nine out of ten. A wrong price on one in ten quotes is far too many.
Reading the results
When a test fails, find which step it failed in. If the sheet returned the wrong price, fix the lookup. If the extraction misread "case", add a rule to your product list ("case of soup pots = 500") and rerun it. If the draft changed a figure, tighten the prompt: "copy figures exactly as shown; never alter digits". If all prices were right but the tone was off, that is the cheapest failure to fix, and it needs only an example reply in the prompt.
Keep the ten requests in a folder as your regression set. Whenever you change the price list, the prompt or the model, rerun them. A model update can change behaviour overnight, and a set you can rerun in half an hour is what catches it.
Five requests that need different handling
- The above-the-top-break request. A buyer asks for 40,000 clamshells. The sheet returns the $0.141 break, but your list was built for orders up to about 20,000 and larger volumes are negotiated. The rule: give each product a ceiling quantity in its own column, and any quantity above the ceiling returns "CHECK", and the draft says "For this volume we'll quote separately and come back to you by [day]". It never quotes the top-break price for a larger volume as if that were the end of it.
- The discontinued item. A repeat customer asks for a lid you stopped stocking. The sheet marks the code "discontinued, replaced by LD-12". The draft names the replacement and states its price from its own row, but flags that the size differs. You approve this one because a substitution is a commercial decision.
- The mixed email. Alongside the RFQ the buyer says last month's delivery arrived short. The draft handles only the quote and your template ends with "I'll reply separately about your delivery." You deal with the complaint yourself.
- The buyer with a contract price. A named customer has a negotiated price. The sheet has a customer column and looks up the contracted price first. If the AI is used without that column, it will quote the public list. This is why customer-specific pricing lives in the sheet.
- The request in a PDF or spreadsheet attachment. Large buyers send their own form. The assistant can read the attachment and extract the lines, but check the extraction line by line, because a column shifted by one is easy to miss. Reply on their form if they require it, filling it from your sheet.
A price break boundary that slipped through
An illustrative failure: a wholesaler tested the setup on easy requests and went live. A buyer asked for 500 units, and the draft quoted the 1-unit price, $0.190. The cause was a lookup that compared the quantity with "From qty" using "greater than" instead of "greater than or equal to", so exactly 500 missed the tier. On 500 units the difference is $9.00, and the buyer noticed because a competitor had quoted $0.172. Nothing about the email was wrong; the sheet was. One boundary case in the test set would have caught it. This is why the test set includes quantities that land exactly on a break.
Figuring out whether it saves time
Measure a week of manual replies. Say a four-person wholesaler receives 25 RFQs a week and each takes 12 minutes to read, price, type and check, which is 300 minutes, or 5 hours. With the flow above, extraction takes about 1 minute, entering codes and quantities 3 minutes, drafting 1 minute and approval 3 minutes, so roughly 8 minutes. That saves around 4 minutes a request, about 100 minutes a week (1 hour 40). Not transformational, which is the honest figure. The gain is more in consistency: every reply has the same fields, the next-break nudge appears every time, and nobody forgets the validity date.
The bigger gain is often speed of response. A buyer comparing three quotes can act on the first clear one that arrives. If your replies move from "tomorrow" to "within the hour", that matters more than the minutes saved.
When to connect it to the rest of your systems
Once ten tests pass and a month of live drafts has gone well, you could automate parts of the flow: monitor a quotes mailbox, extract lines, look up prices through a script or integration, create the draft. The approval step stays. Before building anything, decide which stage hurts most. If it is data entry, look at tools that read emails into your system; the tutorial on reading emailed orders into a wholesaler's system covers that route. If it is pricing logic, the comparison in a chat assistant or a dedicated app for pricing wholesale goods helps you choose.
Once a quote is accepted, log it so follow-ups are not forgotten. The approach in updating your CRM automatically after sales calls works for quotes as well, because the CRM needs the same facts: customer, value, date, next step.
It also helps to keep the list itself clean. If you are still building a trade list, a layout that answers the common buyer questions is in the wholesale price list template for food makers, and the logic of a sheet with cost, margin and break columns carries over to any product type. If a supplier's costs rise, the quote sheet is the only place you need to change prices, which is the other reason to keep them out of the AI's reach.
What goes in the written rules for staff
If more than one person will use this, write a one-page procedure: where the price list lives and who can edit it, where drafts are created, who approves, what counts as "simple enough to approve in two minutes" and what must go to a manager (a quote over a set value, a new customer, anything with a CHECK line). Keep a note of the tool and model in use and the date you last ran the test set. This is dull, but it is what stops the system from decaying as people change roles. If you want help setting that up around the tools you already have, that is what my AI implementation consultation is for; start at the contact page.
Questions wholesalers ask about AI-drafted quote replies
Can AI send RFQ replies without anyone checking?
Not safely. A quote is an offer a buyer can accept, so a wrong price becomes your problem. Let AI create drafts, and have a person approve each one. Once the draft accuracy has been tested on past requests, you can relax the review for simple repeat requests, but keep it for new customers and large totals.
Should I paste my whole price list into the chat?
Only for a small test. For daily use, keep the list in a spreadsheet, have a formula pick the price, and give the AI only the result for each line. That way the model never has to find or calculate a price, which removes the commonest cause of wrong quotes.
How many past RFQs should I test on?
Ten is a workable start, as long as they include awkward ones: an item you no longer stock, a quantity above your top price break, a vague product description and a request for something you do not sell. Add every new failure to the test set so it grows.
What if the buyer asks for a product we do not list?
The draft should say you cannot quote it from the standard list and offer a next step, such as a call or a sourced quote, not guess. Give the model an explicit rule for unmatched lines and test it, because models fill gaps with plausible-looking prices if you leave one.
Do I need an API or an automation tool for this?
No. A chat assistant, a spreadsheet and a drafts folder will do for dozens of requests a week. Automation becomes worth considering when requests are frequent and uniform, but build the manual version first, since it shows you which rules the automation will need.
Further reads
- Machine Shop Quote Template: AI Turns RFQ Emails Into Draft Quotes — The same RFQ-to-quote idea for made-to-order work.
- How to Compare Supplier Quotes Side by Side With AI — Compare the quotes you receive from your own suppliers.
- AI for Coffee Roasters: Batch Logs, Wholesale Orders, Labels — Wholesale orders handled by a small producer.
- AI Supplier Management: Track Prices, Lead Times, and Risk — Track the supplier prices that feed your own price list.
- How to Use AI in a Bakery Business: Wholesale and Standing Orders — Repeat wholesale orders for a producer with weekly buyers.
- AI Dropshipping Product Finder: Check Demand and Supplier Risk First — A product shortlist is only a start; use this evidence sheet to reject weak demand, thin margin and unreliable suppliers.
- AI Freight Quoting: Turn Customer Emails Into Draft Quotes — A practical email-to-draft-quote workflow with rate validity, surcharges, margin rules and approval controls.
- AI for Technical Sales: Answer Spec Questions From Your Datasheets — Build an internal spec-answer routine with versioned datasheets, cited replies, abstentions and a 30-question accuracy test.
- Line Sheet Template: Turn a Product Export Into a Wholesale PDF With AI — Export your products, let AI add wholesale prices, MOQs and case packs in a sheet, then check the maths and produce a PDF buyers trust.
- How to Use AI in a Machine Shop: Five Jobs Beyond Quoting — RFQ triage, work instructions and inspection paperwork costed in hours and dollars, plus scheduling notes and customer updates for a 12-person shop.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: Microsoft Support and Google Docs Editors Help pages for XLOOKUP and FILTER; the reader's own price list and past RFQs.