AutoQuote · quote generator
Live capability demo
Document automation · Python + python-docx

Type a part number. Get a finished Word quote in seconds.

A working demo of the tool from your brief: it searches an archive of past quotes, finds the most recent one matching each part number, pulls the product description, specs, price and image, and drops it all into your Word template.

Running on a synthetic archive of 2,547 quotes across 10 product lines — so you can click it right now. Your real 2,500+ files would stay 100% local on your PC.

Past quotes indexed
2,547
searched on every run
Time per quote
~20 sec
down from ~30 min
Product lines
10
valves · fittings · motors…
Output
.docx
editable, one click

Build a quote

Fill in the customer details, list your part number(s), and generate. This is the exact flow from your brief — steps 1 → 5.

Try one:
PREVIEW · synthetic data
Meridian Industrial Supply
1450 Foundry Road · Akron, OH 44310
sales@meridian-supply.example · (330) 555-0142
↑ your letterhead drops in here
QUOTATION
Quote #Q-07436
DateJuly 15, 2026
PREPARED FOR
Regina Alvarez · Northland Fabrication
Item & descriptionQty Unit priceAmount
2" Full-Port Stainless Steel Ball Valve
BV-2000-SS 2" Full-Port Stainless Steel Ball Valve
Full-port two-piece ball valve, 316 stainless body and ball, PTFE seats, blowout-proof stem. Rated 1000 WOG / 150 PSI saturated steam. Lever handle with locking device and NPT threaded ends.
Size: 2" NPTBody / Ball: 316 SSSeat: PTFEPressure: 1000 WOG
⤷ extracted from quote Q-04396 (2026-06-01) — most recent of 233 matching quotes
2 ea $153.88 $307.76
2.5" Bourdon Pressure Gauge, 0–160 PSI
PG-63-160 2.5" Bourdon Pressure Gauge, 0–160 PSI
Dry Bourdon-tube gauge, 2.5" 304 SS case, brass internals, 1/4" NPT lower mount. Dual PSI/kPa scale, ±1.5% accuracy per ASME B40.100 Grade B.
Dial: 2.5"Range: 0–160 PSIConnection: 1/4" NPT LMAccuracy: ±1.5%
⤷ extracted from quote Q-04509 (2026-06-13) — most recent of 244 matching quotes
4 ea $19.85 $79.40
Pressure Transmitter 0–300 PSI, 4–20 mA
PT-4260-IS Pressure Transmitter 0–300 PSI, 4–20 mA
Two-wire loop-powered pressure transmitter, 316L wetted parts, 4–20 mA output, ±0.25% FS accuracy. Intrinsically-safe rated with DIN 43650 electrical.
Range: 0–300 PSIOutput: 4–20 mAAccuracy: ±0.25% FSWetted: 316L SS
⤷ extracted from quote Q-03130 (2026-06-20) — most recent of 293 matching quotes
1 ea $208.58 $208.58
Subtotal$595.74
TOTAL (USD)$595.74

Quotation valid for 30 days · Prices FOB shipping point · Lead time confirmed at order.

What I'd build for you

The demo above is the core. The production tool wraps it for your real archive:

Index your 2,500+ quotes once
A one-time pass reads every PDF & Word file and builds a fast searchable index of part numbers, dates, prices and image locations.
Most-recent match, every time
Enter a part number → it returns the newest quote containing it, even when the same part appears across dozens of past files.
Pulls the product image over
The product photo embedded in the old quote is extracted and placed into the new one — not just the text.
Your exact Word layout
I rebuild your attached template so output is a clean, editable .docx that matches what you send today — nothing to reformat.
Runs 100% local
A simple window on your Windows PC (or a local browser page). No cloud, no upload — your pricing never leaves the office.
Fuzzy + multi-part quotes
Typos get near-match suggestions; multiple part numbers build a single multi-line quote with a running total.
How the production version works — and the exact stack

The demo runs a real search-and-extract on a synthetic CSV so it loads instantly. For your archive, the same pipeline reads your actual files:

1 · Index
pdfplumber · python-docx
Read all 2,500+ PDF/Word files once; capture part #, date, price, specs.
2 · Match
rapidfuzz
Find the most-recent quote for each entered part number.
3 · Extract
PyMuPDF (images)
Pull description, price and the product image out of that file.
4 · Generate
python-docx / ReportLab
Render your Word template — customer details + line items + image.

Packaging

Delivered as a one-double-click Windows app (PyInstaller) or a local Streamlit page — your choice. No install headaches, nothing to host.

The synthetic archive this demo searches

⬇ Download the 2,547-row archive.csv   the tool finds the newest row per part number, exactly as it would across your real files.

This is the tool from your brief — already working.

Send me your example quote and I’ll match your template exactly. Happy to do a quick screen-share first.