Yes, AI can read a wholesaler's PDF invoice, pull out each line, compare the new unit cost with your old one and apply your markup rules in a spreadsheet, so nobody re-keys every line. You still check the lines add up to the printed subtotal, review big movements, and approve the file before it replaces your price book.
The reason to bother is margin drift. A price book that is three months old quotes today's jobs at last quarter's costs. Re-keying a fifty-line invoice takes a morning nobody has, so it gets skipped. With a flow that reads the invoice, proposes the changes and highlights what moved, the same update takes about fifteen minutes plus checking, and it happens monthly rather than never.
The flow in five moves
- Extract the lines from the invoice PDF into a table: code, description, quantity, unit, unit price, line total.
- Prove the extraction by adding the line totals and comparing with the invoice subtotal.
- Match each code to your price book and calculate the change in cost.
- Apply markup rules to get a proposed sell price, and flag movements above your threshold.
- A person reviews flagged lines and approves, and the new book replaces the old with a dated copy kept.
Moves 1 and 3 to 4 are where AI and a spreadsheet save the time. Moves 2 and 5 are the guardrails, and they are cheap. A tutorial on AI invoice processing for supplier bills covers the bookkeeping side of reading invoices; here the destination is your price list, not your accounts.
A worked invoice: six lines, one trap
An illustration. A three-van plumbing firm receives a wholesaler invoice with six lines. All prices are in USD and are made up for the example.
| Code | Description | Qty | Unit | Unit price | Line total |
|---|---|---|---|---|---|
| CU15-3 | 15 mm copper tube, 3 m length | 20 | each | 12.54 | 250.80 |
| EL15 | 15 mm elbow, end feed | 100 | each | 0.62 | 62.00 |
| IV22 | 22 mm isolating valve | 10 | each | 4.10 | 41.00 |
| MX-B2 | Basin mixer tap | 4 | each | 68.00 | 272.00 |
| CYL150 | Cylinder 150 L | 1 | each | 412.00 | 412.00 |
| PTFE10 | PTFE tape | 2 | pack of 10 | 7.80 | 15.60 |
The invoice prints a subtotal of 1,053.40, a delivery charge of 18.00 and a total of 1,071.40.
Moves 1 and 2: extract the lines and prove the arithmetic
Attached is a supplier invoice PDF. Extract every line item into CSV with these columns:
code, description, quantity, unit_of_measure, unit_price, line_total.
Then: (1) recompute quantity x unit_price for each line and list any line where it differs from line_total;
(2) add all line_total values and compare with the printed subtotal; (3) list anything you could not read.
Do not guess a digit you cannot read: write UNREADABLE. Exclude delivery and total lines from the table.
On a clean digital PDF the model returns a six-row CSV, reports that all products match their line totals (20 x 12.54 is 250.80, 100 x 0.62 is 62.00, and so on), and adds the six totals to 1,053.40, equal to the printed subtotal. If one digit had been misread, say 0.62 as 0.82, the line product would not match the line total, and the model would flag it. Those two checks, line arithmetic and subtotal, catch most extraction errors without anyone looking at the PDF. Claude reads PDFs up to 1,000 pages, which is far beyond any invoice, and handles visual layout up to 100 pages; a photographed invoice is a different matter and gets less reliable output.

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 nowMove 3: compare with your old costs
Your price book is a spreadsheet with a row per item: code, description, unit, cost, markup, sell price. Paste the extracted CSV into a second sheet and look up each code. The comparison formula, in Excel or Sheets:
=XLOOKUP(A2, PriceBook!A:A, PriceBook!D:D, "NEW CODE") (old cost)
=IFERROR((E2-G2)/G2, "n/a") (change in cost)
If you use an older spreadsheet version without XLOOKUP, use VLOOKUP with an exact match. A lookup that returns NEW CODE tells you the invoice contains something not in your book; that is a decision for a person, not a row to auto-create.
For the sample invoice the old costs were 11.40 (copper tube), 0.55 (elbow), 4.10 (valve), 72.00 (mixer), 389.00 (cylinder) and 0.65 (tape, per single roll). The changes work out as follows.
| Code | Old cost | New cost | Change | Flag at 8% threshold |
|---|---|---|---|---|
| CU15-3 | 11.40 | 12.54 | +10.0% | Yes: review |
| EL15 | 0.55 | 0.62 | +12.7% | Yes: review |
| IV22 | 4.10 | 4.10 | 0.0% | No |
| MX-B2 | 72.00 | 68.00 | -5.6% | No |
| CYL150 | 389.00 | 412.00 | +5.9% | No |
| PTFE10 | 0.65 per roll | 0.78 per roll | +20.0% | Yes: unit mismatch |
The tape line is the trap. The old book holds the cost per roll; the invoice sells packs of ten at 7.80, so each roll costs 0.78, not 7.80. A naive comparison of 7.80 against 0.65 shows a rise of 1,100 per cent and a nonsense sell price. Even with the right conversion the movement is 20 per cent, large for tape, so it is flagged for a person to look at. A real check would be to compare against the previous invoice: perhaps the old price was simply stale.
Move 4: apply markup rules in the spreadsheet
Plumbing price books often use a banded markup because low-cost items carry a higher percentage. The rules below are illustrative; use your own.
| Cost band (per unit) | Markup on cost |
|---|---|
| Under 5.00 | 100% |
| 5.00 to 24.99 | 60% |
| 25.00 to 99.99 | 40% |
| 100.00 and over | 30% |
The sell price is cost times one plus the markup, rounded up to the next 10 cents. In a spreadsheet:
=CEILING(ROUND(H2*(1+LOOKUP(H2,{0,5,25,100},{1,0.6,0.4,0.3})),2),0.1)
Here H2 holds the new cost per base unit, after any pack conversion, so the tape is marked up per roll rather than per pack. The ROUND inside CEILING stops tiny floating-point remainders from pushing a price that should land exactly on a 10-cent step up to the next one. Applied to the sample invoice:
| Code | New cost | Markup | Proposed sell | Old sell |
|---|---|---|---|---|
| CU15-3 | 12.54 | 60% | 20.10 | 18.30 |
| EL15 | 0.62 | 100% | 1.30 | 1.10 |
| IV22 | 4.10 | 100% | 8.20 | 8.20 |
| MX-B2 | 68.00 | 40% | 95.20 | 100.80 |
| CYL150 | 412.00 | 30% | 535.60 | 505.70 |
| PTFE10 (per roll) | 0.78 | 100% | 1.60 | 1.30 |
You can ask the assistant to write this formula and explain it, which is a good use of it, but test the formula yourself on three rows by hand before you trust it across a thousand.
Move 5: review what moved, then approve
The reviewer's job is short: look at the flagged lines, decide whether each movement is real, and approve or hold. The copper rise of 10 per cent looks plausible for a commodity-linked item. The elbow rise of 12.7 per cent is only seven cents on a part that costs pennies, so check the previous invoice and approve it if the cost really moved. The tape movement needs the unit fix. The mixer tap fell, and a price drop could mean the supplier switched brands, which brings us to the cases below.
Five invoice situations that break a naive update
Unit of measure changes
As with the tape, an item sold by the box, length or pack on the invoice but held per each in your book makes a nonsense comparison. Ask the extraction to add a column "units per pack" where the description states it ("pack of 10", "box of 50", "3 m length"), and compare costs per base unit. If the invoice does not state it, the model should write UNKNOWN, not infer it.
Discounts and rebates on separate lines
Some wholesalers print a trade discount as a separate negative line or as a percentage at the bottom. If you ignore it, every cost is overstated by the discount. Decide which you use: list price or net price. Book net price for margin purposes, and make the extraction prompt say "apply any line-level discount to the unit price and show both".
Credit notes
A credit note has negative quantities. It should never update costs. Add a rule to the prompt: "If this document is a credit note, say so and stop."
Substitutions
If the invoice code differs from the one you ordered, the supplier substituted a product. That could be a different brand with different performance, so the price comparison is not like for like. A line that returns NEW CODE with a near-identical description is the signal; a person decides whether to add it or reject the substitution.
Photographed invoices
A phone photo taken on a van seat produces curved text and shadows. Models can read many of these, but the subtotal check will fail more often. If it fails, retake the photo flat or ask the supplier for a PDF, or for their price list export, which is cleaner still.
A short sum: what a stale book costs
Illustratively, say a firm buys $3,000 of materials a month and sells materials at an average 50 per cent markup. If costs rise 6 per cent across the board and the book is not updated for three months, costs are $180 a month higher than the book assumes. At a 50 per cent markup the matching sell value is $270 a month, so roughly $810 of revenue goes unrecovered over the quarter before the update catches up. The real figure depends on your mix, but it shows why the fifteen-minute monthly update beats the quarterly morning that never happens.
Handling a long invoice and a repeat supplier
Real wholesaler invoices run to several pages and eighty lines. Extraction works the same way, but split the job: upload the whole PDF, then check the extracted line count against the count on the invoice. If the invoice says 82 lines and the table has 79, three lines were skipped, usually where a page break splits a row. Ask the model to list the codes it extracted in order, and look for a gap in the sequence.
For a supplier you buy from every week, save the extraction prompt, the column names and the markup table in one note, and reuse it each time. The only thing that changes is the PDF. After three or four invoices you will know that supplier's quirks: whether it prints net or list prices, whether lengths are priced per metre or per 3 m piece, and whether it adds a surcharge line. Write those quirks into the prompt as rules, such as "this supplier prices copper tube per length of 3 m; convert to per metre".
A before and after of one price book row
To show what a finished update looks like on the sheet, here is a single row, illustrative. Before: code CU15-3, description "15 mm copper tube 3 m", unit each, cost 11.40, markup 60%, sell 18.30, last updated 2026-08-04. After: same code and description, unit each, cost 12.54, markup 60%, sell 20.10, last updated 2026-11-01, source "wholesaler invoice 1043, line 1", change flag "+10.0%, approved". The extra two columns, source and change flag, are what make the book auditable. When a customer asks why a tube costs more than in August, the answer sits in the row.
Prices you should not update automatically
Some prices are promises. A maintenance plan priced for twelve months, a fixed quote still open for acceptance, or a contract with a property manager that fixes materials rates for a year should not move because the book moved. Add a column "locked until" to the price book and have the update skip any row with a date in the future, listing it for the reviewer instead. The same applies to items you deliberately sell at a loss to win work, such as a basic tap; a "manual" flag in the markup column tells the formula to leave the sell price alone.
Using the supplier's own price list instead of invoices
Invoices show what you paid for what you bought, so they miss items you did not order this month. If your wholesaler publishes a price list as a spreadsheet or CSV, that is a cleaner source, and no PDF reading is needed. Upload it, ask the assistant to match codes to your book and apply the same comparison and markup steps, and you have a complete refresh rather than a partial one. Use invoices to catch what you actually paid, including your negotiated discount, and the list to refresh the rest. A price list is a promise about list prices; an invoice is evidence of your price. Keep both views straight and label the source in the book.
Linking the price book to quotes and van stock
A price book is only useful if it is the source for the other documents. Quotes pull sell prices from it, job costing pulls costs, and the van stock list uses costs to decide what is worth carrying. Our tutorial on a worked 30-task flat-rate price list built with AI shows how materials costs feed task prices, and van stock reorder levels from job history uses the same item codes. If your invoices go into accounting software too, QuickBooks job costing with AI-sorted bills describes how the bill side lines up.
An older tutorial on this site, how to clean messy data, helps when your existing price book has duplicate codes or inconsistent units, which is common after years of manual entry. Clean the book first; matching a clean invoice to a messy list gives messy results.
Approval and version control in a small firm
Treat each update as a dated release. Save the old price book as "PriceBook 2026-10" and the new one as "PriceBook 2026-11", with the invoice PDFs in a folder for that month. Keep a one-line change log: which invoices, how many lines changed, who approved. If a customer queries a quote, you can show which prices were live when it was written. A cloud spreadsheet with version history does this nearly for free; the habit matters more than the tool.
A checklist to use each month:
- Remove account numbers and customer references from the invoice before upload.
- Extract with the arithmetic checks switched on, and stop if the subtotal does not match.
- Resolve every UNREADABLE, NEW CODE and unit mismatch by hand.
- Review movements beyond your threshold, and check any price fall for a substitution.
- Apply markup rules, test three rows by hand, then approve.
- Save the old and new versions with the change log, and publish the new prices to quotes.
On cost, a business plan for the assistant is about $20 to $25 per seat a month on ChatGPT Business, with Claude Team also needing two seats, and for a small firm one person doing this monthly may not even need that: an individual plan is enough if the invoices carry no customer data and you switch off the setting that lets the provider use your chats for model training. If you want a second pair of eyes on the set-up, that is the sort of job my AI implementation consultation covers; get in touch if you want to map it with someone.
The test of whether this is working is plain: in three months, are your sell prices within a few per cent of what you would charge if you re-keyed every line? If so, the update has paid for itself. If not, look at which step is leaking, and it will nearly always be units, discounts or a skipped approval.
Questions about updating a price book with AI
How often should a plumbing price book be updated?
Update on a fixed rhythm, such as monthly, and straight away when a wholesaler announces a change in a material that makes up a large share of your jobs, such as copper or a water heater range. Waiting until a job looks unprofitable means weeks of under-priced quotes.
Will AI misread numbers on a PDF invoice?
Occasionally, especially on scanned or photographed invoices and with small digits. That is why every extraction is checked by adding the lines and comparing with the printed subtotal. A clean digital PDF reads far better than a phone photo of a crumpled sheet.
Should the price book change automatically when an invoice arrives?
Not without a person. Let the assistant propose new costs and sell prices, flag the big movements, and have a person approve the file before it replaces the old one. Automatic overwrites turn a single misread line into a wrong price on every quote.
Can I paste supplier invoices into ChatGPT or Claude?
Yes, but remove account numbers and anything that identifies your customers if the invoice references a job. Use a business plan that does not train on your content by default, and keep the original PDF with the updated spreadsheet so you can trace any figure.
Further reads
- How to Price Handyman Jobs: A Price Book Built With ChatGPT — Build a price book from scratch with ChatGPT.
- AI in Hospitality Management: Catch Supplier Price Creep on Invoices — Spot supplier price creep on invoices in another trade.
- How to Match Supplier Invoices to Purchase Orders Automatically — Match invoices to purchase orders before you update costs.
- How to Use AI in a Plumbing Business: A 30-Day Setup Plan — Fit price book upkeep into a wider AI rollout.
- How Much to Charge for a Service Call: Build the Fee From Your Costs — Build the call-out fee from costs outside the book.
- AI Tools for a Grocery Store: Supplier Invoices and Shelf Prices — One week of supplier invoices in a one-shop grocery: read them with AI, check the totals, flag cost changes and set shelf prices that hold your margin.
- Construction Estimating With AI: Turn Supplier Quotes Into a Rate Sheet — Turn supplier quote PDFs into checked rates for your estimates: the extraction prompt, unit traps, five tests, an addenda log and a scope-gap review.
- Plumbers AI: Turn Supplier Price Lists Into a Parts Markup Sheet — A worked example: clean a merchant price list export with AI, apply banded markup by formula, and spot-check the sheet before it feeds your quotes.
- Plumbing Price Increase Letter: Raise Call-Out and Hourly Rates Clearly — One plumbing firm's price letter, built from the numbers up: domestic and landlord versions, what stays fixed, AI drafting and four complaint replies.
- Best AI for Plumbing Questions: A Ten-Question Test for Plumbers — A ten-question test plumbers can run on ChatGPT, Claude and Gemini, with a scoring sheet and the checks to make before acting on any answer.
- Best AI Tool for Pricing Wholesale Goods: Chat Assistant or App? — Chat assistant plus a sheet, an inventory-system price list, or pricing software: the right pick depends mostly on how many SKUs you carry.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: Anthropic's PDF support documentation and vendor pricing pages for ChatGPT and Claude (checked 1 Nov 2026). The invoice, prices and markup bands in the example are illustrative; use your own wholesaler's documents.