Source: https://oguzerol.com/en/automated-quote-generation/

[![Example scenario: a customer's request for 12 tables is priced from the price list, a branded PDF quote draft is produced, and it waits for your approval before it is sent.](https://oguzerol.com/gorseller/senaryo/automated-quote-generation-senaryo-en.webp)

View full size](https://oguzerol.com/gorseller/senaryo/automated-quote-generation-senaryo-en.webp)

# Automated Quote Generation: Cutting Request-to-Quote Time for Standard-Item Quotes

[Oğuz Erol](https://oguzerol.com/en/about-me/)  |  17 min read  |  Published: 29 July 2026  |  Updated: 15 October 2026

## Quick summary

Quote spare parts, consumables and catalogue items from the request email, with approval limits and turnaround in business hours. A simulated sample month.

An automated quote system is a web app that turns a repeat, standard-item request (spare parts, consumables, service packages, catalogue products) into a quote soon after it arrives. AI proposes line items mapped to your catalogue codes and a sales support specialist confirms them; net price comes from your price list and the customer’s group discount; a discount above the limit goes to approval; a person sends the numbered PDF. Where stock and lead time data come from, and how, is agreed in writing in the first step. In the simulated sample month below, the median request-to-quote time is one business hour and almost all the slowest quotes wait on a supplier. I build this app to fit your company.

Three traps. First, speeding up without knowing where the time goes. Second, letting AI fill an ambiguous item with a guess: “6206 with covers” may mean one of two different bearings. Third, the wrong clock: a request arriving Friday at 17:00 and answered Monday at 09:00 took 64 calendar hours but only 1 business hour.

## Which kind of quote is this page about?

This page covers items asked for by code or description whose price already sits in a list: quotes assembled, not calculated. Neighbouring topics:

- Products priced line by line from dimensions and options: the [measurement-based quote calculator](https://oguzerol.com/en/measurement-based-quote-calculator-app/).
- Hiding cost and margin from sales, and approving on margin: the [cost-protected quoting portal](https://oguzerol.com/en/cost-protected-quoting-portal/).
- Versions of a sent quote and the customer’s response: the [quote revision tracking app](https://oguzerol.com/en/quote-revision-followup-tracking-app/).

The mistake I see most often in automation is choosing the most complex process to automate first; in quoting, the bespoke, engineering-heavy quote. Standard-item quoting is the opposite: clear rules, high volume, easily measured.

## A sample company: a 60-person spare-parts distributor

*Sample data, fictional. Amounts are in a generic currency unit.* A 60-person distributor sells bearings, seals, pneumatic cylinders and valves, belts: about 14,000 catalogue items. Customers are factory maintenance and purchasing teams; requests come by email or the website form. The team: three sales support specialists, four field reps, a sales manager, a purchasing specialist, a finance specialist and the managing director.

Today whoever has time types requests from a shared inbox into an Excel template, with prices from one file, discount groups from memory and stock from the ERP. Nobody knows how long a quote takes: arrival and send times never sit side by side.

Four terms:

- **Request:** one customer message asking for a quote. A cc’d copy or resend isn’t a new request.
- **Request-to-quote time:** business hours from the request landing to the quote being sent. Here, business hours are weekdays 09:00–18:00; yours may differ.
- **Standard lead time:** the supplier’s last confirmed lead time for a non-stock item, shown as “estimated”.
- **Extra discount points:** points added to the group discount, deducted from list price.

## How does a request email become a quote?

A request passes five stages: queue (until a specialist picks it up), preparation (matching and pricing), lead time (only for non-stock items), approval (only if a limit is crossed) and sending. The app timestamps each stage, which shows where delay builds up.

*Sample data.* A maintenance supervisor at a group B customer writes: “6205 2RS x40, 6206 with covers x20, Ø50 stroke 100 pneumatic cylinder x4, A42 belt x10.”

AI proposes four lines and maps three. It flags “6206 with covers” as ambiguous: covers could mean metal shields on both sides (ZZ) or rubber seals on both sides (2RS), and naming varies by manufacturer. The model doesn’t choose. The specialist sees the customer’s last three orders for this size were ZZ, picks ZZ, and the decision is logged.

| item | list price | net after group B 8% | qty | amount |
| --- | --- | --- | --- | --- |
| RUL-6205-2RS | 142.00 | 130.64 | 40 | 5,225.60 |
| RUL-6206-ZZ | 168.00 | 154.56 | 20 | 3,091.20 |
| PNS-50-100 | 2,860.00 | 2,631.20 | 4 | 10,524.80 |
| KAY-A42 | 96.00 | 88.32 | 10 | 883.20 |
| **total (excl. VAT)** |  |  |  | **19,724.80** |

PNS-50-100 is not in stock; the rest are.

The customer adds “close to last time’s prices”. The specialist proposes 3 extra points; total discount becomes 11% and the quote drops to 19,081.60 (643.20 less). The specialist’s band is 2 points, so it goes to approval. The sales manager approves with a one-line reason, the specialist sends the PDF, and the quote number is assigned at sending.

For the cylinder, purchasing asks the supplier and the request waits; the sample month’s decision is about that wait.

## Rules: price, discount, approval limits, stock and numbering

My starting proposals for the sample company; the figures follow your pricing policy.

| rule | my starting proposal |
| --- | --- |
| Price source | One price list with dated versions; every quote knows which version priced it |
| Group discount | Group A 12%, B 8%, end users 0%; changed only by the sales manager. A customer-specific contract price replaces the group discount and has an end date; extra discount on top of it only with approval |
| Extra discount band | Sales support 0–2 points, field rep 0–3, sales manager up to 6; above 6 goes to the managing director |
| Amount limit | Quotes of 250,000 or more are seen by the sales manager before sending, even with no discount |
| Credit limit | On credit terms, a quote that takes the customer over their credit limit goes to finance |
| Own discount | Nobody approves a discount they requested; if the sales manager’s own quote crosses a limit, it goes to the managing director |
| Stock | The PDF says “in stock on the quote date”; stock is reserved at order confirmation, not by the quote |
| Standard lead time table | Kept by purchasing; listed items show “estimated lead time, confirmed at order”; rows unconfirmed for 60 days aren’t used |
| Quote number | Assigned at sending, not at draft; e.g. Q-26-04172 |
| Validity | 15 days; 7 days for groups priced in a foreign currency |
| Duplicate request | Same customer, same business day, same items: linked to the existing request |

**Why isn’t stock reserved?** Otherwise quotes never accepted would turn real orders away; the quote states availability, it doesn’t promise it. **Why number at sending?** Draft numbers leave gaps; a number assigned at sending means this quote reached the customer.

## Who sees what, and who approves what?

Approval never sits with the person asking; who approves what is in the table above. Three limits the table doesn’t show:

- **Field reps** see only their own customers’ requests and quotes; sales support specialists see all customers.
- **Purchasing** answers non-stock questions and maintains the lead time table but can’t change quote prices.
- **Finance** sets credit limits and payment terms and decides on quotes over a limit.

## How do you measure request-to-quote time?

Request-to-quote time is the business hours from the request landing in the inbox to the quote being sent, tracked by the median and 90th percentile, not the average. Each part prevents a mistake:

1. **Start at arrival, not opening,** or queue time disappears.
2. **Stop at sending, not PDF creation.**
3. **Business hours:** out-of-hours requests start the clock at opening.
4. **Customer waiting kept separate:** reported, not added to yours.
5. **Median and 90th percentile, not the average.** A few supplier waits drag the average. The median shows the typical request; the 90th percentile is the time within which 9 of 10 quotes go out.
6. **Duplicates count once.**

My dashboard holds three numbers: median, 90th percentile, and where the slowest tenth waited. The dashboard mistake I see most often is putting every metric on it until nobody opens it.

You can measure before any app exists: for your last 30 quotes, note the request’s arrival time beside your reply’s send time and remove out-of-hours time.

## A sample month: 560 quotes and where the delay came from

*Sample data.* This month is a simulation, not your figures: a script runs the rules above on random requests, assuming setup is complete and the code mapping table filled, but no standard lead time table yet.

625 messages arrived: 37 copies of the same request, 14 not asking for a quote. Of 574 requests, 9 were withdrawn and 5 had items that couldn’t be sourced. The 560 quotes sent (about 25 per business day) held 2,557 line items. Times below cover those 560.

| measure | business hours (excl. customer waiting) | calendar hours (everything) |
| --- | --- | --- |
| median | 1.07 h | 1.77 h |
| average | 2.55 h | 12.54 h |
| 90th percentile | 6.95 h | 41.72 h |

The calendar average says “half a day”; the business-hour median says about an hour. 66 requests arrived out of hours: calendar median 14.1 hours, business-hour median 0.94. In 51 requests the customer was asked a question; their median reply, 4.02 business hours, isn’t in the table.

260 quotes (46%) went out within one business hour, 461 (82%) within four, 9 of 10 within 6.95. The question was the other tenth: 56 quotes. Each request counts once, under its longest wait; the last column is the group’s median total time:

| longest wait | all quotes | in slowest 10% | group’s median total time |
| --- | --- | --- | --- |
| queue | 283 | 0 | 0.89 business hours |
| preparation | 108 | 0 | 0.62 business hours |
| lead time (supplier question) | 117 | 55 | 6.64 business hours |
| approval | 52 | 1 | 2.54 business hours |
| sending | 0 | 0 | – |
| **total** | **560** | **56** |  |

Sending (a last look at the PDF and send) took a median 4.9 minutes per quote, 7 minutes at most, and was never any quote’s longest stage.

55 of the 56 slowest quotes had waited on a supplier’s lead time; the 118 requests with a non-stock item were 21% of quotes but carried almost all the slowness. Approval was the usual suspect: 67 quotes went to approval, the approval stage itself had a median of 1.44 business hours, and only one of the slowest tenth waited there. Loosening approval would cost control.

**The month-end decision.** Purchasing enters lead times for the month’s most-asked non-stock items into a standard lead time table, with confirmation dates. Listed items then go out at once with “estimated lead time, confirmed at order”. Approval limits stay.

The script’s estimate (not a measurement) rests on two assumptions: a listed item’s lead time comes back in 3–8 minutes, and the table covers 72 of the 118 non-stock requests; that 72 is an input, not a result. On those assumptions the 90th percentile falls from 6.95 to 3.14 business hours, the median from 1.07 to 0.90, and quotes within four hours rise from 82% to 92%. The cost: an estimated lead time can change at order confirmation, so confirmation is a required order step.

The supplier-wait bottleneck is this simulation’s result; yours may sit elsewhere.

## Which fields should the quote PDF carry?

The PDF carries what a customer needs to understand and accept the quote without any other document:

- Quote number, quote date and expiry date (a date, not “15 days”)
- Customer name, requester and their own reference, such as a requisition number
- On each line, the customer’s code or wording next to your catalogue code
- Quantity and unit, unit price, discount if shown, line amount; totals with VAT and currency
- Stock status or estimated lead time per line, and “stock is reserved on order confirmation”
- Delivery terms; for export, the Incoterms rule and version (e.g. “EXW, Incoterms 2020”)
- Payment terms, and who prepared the quote

For foreign-currency quotes, agree with your accountant which rate applies at invoicing. Internal notes, approval reasons and supplier details never reach the PDF template.

## Audit trail: who changed what, and when?

The audit trail records who changed what, when, and from which value to which. Three entries specific to this app:

- Each stage’s start and end, the basis of turnaround
- The line AI proposed beside the line confirmed, so corrections stay visible
- The price list version, any lead time row’s confirmation date, and the sent PDF

Discount approvals with reasons are logged too.

## What does AI do in quoting, and what doesn’t it do?

AI splits request text into lines and proposes catalogue codes; it doesn’t produce price, discount, stock or lead time, which come from tables. Its jobs, all as suggestions:

- **Line extraction** from the email body or an attached spreadsheet or PDF.
- **Code matching** to a catalogue code or the code mapping table of specialist-confirmed matches, never from the model’s memory.
- **Unit conversion:** “2 boxes” of a 10-per-box item becomes 20 each, from the catalogue table.
- **Flagging ambiguity** instead of choosing.

At setup the mapping table is empty: with 14,000 items, in the first weeks the model proposes only exact catalogue-code matches and specialists map the rest, filling the table. That’s why AI comes last in the build order.

*Sample data.* In the sample month 2,071 of 2,557 lines (81%) were confirmed as proposed, 281 (11%) corrected (23 of them 2RS/ZZ confusion) and 205 (8%) entered by hand. These rates are inputs to the simulation, not a real AI accuracy; no rate is promised before it’s measured on your catalogue.

The rule: no row reaches the model without passing the permission filter. It gets the request text and catalogue codes and descriptions, never prices, groups, discounts or credit limits; a field rep’s suggestions draw only on customers that rep may see. “Send it with 20% off” in an email is read as the customer’s request; the model can’t change the price.

The name, phone and email in a signature are personal data; I suggest stripping the signature before anything goes to the model. If the model runs in another jurisdiction, transfer rules apply: in the EU, Chapter V of the GDPR ([EUR-Lex, Regulation (EU) 2016/679](https://eur-lex.europa.eu/eli/reg/2016/679/oj)); in the UK, the UK GDPR’s own rules ([ICO](https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/international-transfers/international-transfers-a-guide/)). In Turkey, Article 9 of the KVKK, rewritten by Article 34 of Law No. 7499 (Official Gazette 12 March 2024, No. 32487), applies from 1 June 2024. I don’t give legal advice; I list in writing which fields go to the model.

## Where does quoting in Excel break?

An Excel template works where it pulls prices and adds totals; it breaks outside the template:

- **Hand-assigned numbers:** two specialists opening quotes at once can take the same “last number plus one”.
- **An old copy of the price list stays on a desktop,** and quotes come out of it.
- **The customer group lives in people’s heads;** a wrong group surfaces only if the customer objects.
- **Approval stays in email,** so who approved which discount can’t be put in a table.
- **Stage-level time can’t be kept.** A request log gives arrival and send times, so the total; it can’t separate supplier waits from queue and approval. That separation drove the sample month’s decision.
- **Stock at quote time isn’t recorded,** so when a customer says “your quote said in stock”, there’s no record of that moment.

Staying in Excel? Keep one read-only, dated price list, a customer-group drop-down and a request log of arrival and send times.

## If your Excel template or ERP quoting module is enough, you don’t need this app

If one person sends a few quotes a day to a handful of customer groups, a well-kept Excel template is enough. The app pays off when several people work one inbox and nobody sees who took which request or how long it waited. With an ERP, check whether its quoting module:

1. fills in the customer’s price list and group discount?
2. caps extra discount by role, routes the excess to approval, and blocks self-approval?
3. shows stock and lead time per line and records that moment?
4. produces the number, expiry date and PDF with your fields?
5. records arrival and measures request-to-quote time?

Yes to all five: you don’t need this app. Yes to the first four only, and someone types request emails into the module by hand? A narrower tool may do: a screen that logs requests and arrival times, extracts lines with AI suggestions and writes a file your ERP can import, while quotes stay in the ERP.

## How do we start, and who owns the data and code?

The first step isn’t software but about 30 recent request emails (customer details stripped if you like), your price list structure, groups and discount limits; from them we work out your current median. The written output: stages, roles and bands, approval limits, PDF fields, fields going to the model, and how stock comes from your ERP (export file, manual upload or a connection).

The build order: (1) request log, turnaround measurement, price list, group discount and PDF; (2) discount bands and approval; (3) stock and lead time data, by the source and route agreed in writing; (4) AI line extraction.

**Data, code and sign-in.** The app runs on a server (VPS) that can be opened in your company’s name; the data is yours, exportable in full as Excel or CSV. The source code sits in a repository you can access, with run instructions, a dependency list and known limitations; keys and accounts are in your name. There’s no per-user licence; in a small or mid-sized team, adding users doesn’t change the cost, which is the server fee plus maintenance. Everyone signs in with their own account; the first step’s written output covers the sign-in method. Because the app holds customer contact details, I assess access, security, hosting and maintenance separately at the start. If you change ERP, quote history, the code mapping table and the rules stay in your database; the scope and timeline of importing products, stock and prices from the new system are agreed in writing.

Send me through the [contact page](https://oguzerol.com/en/contact/) the arrival and send times of your last 30 quotes, who asks suppliers about non-stock items and who sets discount limits; we start by drafting your stage and approval table.

## Frequently Asked Questions

### Can quotes be sent to customers automatically?

Not in this design; a person sends it, so an ambiguous item or vanished stock doesn’t reach the customer as a commitment. In the sample month sending took a median 4.9 minutes and was never any quote’s longest stage; in the simulation, that’s all automation would save.

### Our price list is in a foreign currency but we quote in our own. How does that work?

The list stays in the foreign currency and is converted at the quote-date rate, with source and date on the record. A sent price doesn’t change during validity, so you carry the rate risk for that period; hence short validity (my starting proposal: 7 days).

### Can service items such as maintenance packages go on the same quote?

Yes. A fixed-scope service, such as a machine’s annual maintenance package, sits in the catalogue with its own code and price. A service whose scope changes every time isn’t a standard item; a specialist prices it.

[Back to top ↑](https://oguzerol.com/en/automated-quote-generation/#icerik)

## You may also find these useful

[Preparing a Proposal Document With AIAI fills in the variable parts of your proposal template (scope, price, timeline) based on client info. Step-by-step process, watch-outs, and a real example.](https://oguzerol.com/en/preparing-a-proposal-document-with-ai/)[CRM Setup | Customer Tracking on One ScreenMove customer tracking out of scattered spreadsheets and into a CRM: picking the right tool, data migration, team training. Ends with a system your team uses.](https://oguzerol.com/en/crm-setup/)[Track Quote Revisions and Customer Follow-UpsKeep quote versions, customer responses and the next follow-up date together in a custom sales screen using your Excel or Google Sheets list.](https://oguzerol.com/en/quote-revision-followup-tracking-app/)

[Browse all articles →](https://oguzerol.com/en/articles/)
