AI can pull prices out of supplier PDFs and spreadsheets well enough to save hours, but not well enough to import without checking. Ask it for a fixed set of columns, check the row count and totals with code, spot-check a sample against the original, compare it with last time's list, and preview every change before anything touches a live system.
A supplier price list is a messy document written for people. Prices sit in tables that run across pages, pack sizes hide in the product name, and the currency is mentioned once at the top. An AI assistant is good at reading that kind of mess. It's also good at producing a tidy result that looks right and isn't. The work is in catching the difference before it reaches your selling prices.
Can AI extract data from a PDF to Excel accurately?
Often, yes, for the parts of the job that are slow for a person: reading every row, lining up product codes with descriptions, and turning a scanned or laid-out table into rows and columns. The trouble is that a mistake doesn't look like a mistake. A price that has slipped one row looks exactly like a correct price. A missing page leaves no gap. So treat the AI's output as a first draft of the data, the same way you'd treat a first draft of an email: useful, quick, and not finished until someone has checked it.
The checks below don't depend on which assistant or tool you use. They depend on the output being structured, and on numbers being checked by code rather than by eye.
What goes wrong when AI reads a price list
- Shifted columns. When a table wraps across pages, or a row has a merged cell, values can land in the column next door. The cost price becomes the retail price, or every price below a certain row moves up by one.
- Units versus pack sizes. A list might price a case of twelve, a single unit, or both. If the AI picks the wrong one, your cost per unit is out by a factor of twelve, and nothing in the output will warn you.
- Currency. Many lists state the currency once, in a header or a footnote. A model reading row by row can miss it, especially when a supplier sends lists in more than one currency.
- Tax-inclusive or tax-exclusive. Some lists show prices before tax, some after, and some show both in neighbouring columns. Mixing them up quietly changes your margin on every line.
- Missing or invented rows. A page can be skipped, or a heading row read as a product. Either way the count is wrong, and you won't see it by scrolling.
Ask for structured output with fixed columns
Don't ask the AI to "turn this into a spreadsheet". Tell it exactly which columns you want, in which order, and what each one means. For example: supplier code, description, pack size, unit, price per pack, currency, and whether the price includes tax. Ask for one row per product and nothing else in the file.
Fixed columns do two things. They force the AI to make a decision about pack size, currency and tax for every row, rather than leaving it vague. And they give you something code can check. Where the list doesn't say, tell the AI to leave the cell empty rather than guess. An empty cell is a question you can answer; a guessed value is a mistake you have to find.
How to get an AI PDF to Excel table you can actually check
Ask for a plain CSV, not a formatted workbook, so a script can read it. Ask the AI to add a column for the page number each row came from, so you can find it again in the original. If the list has section totals or a stated number of lines, ask it to report those separately, as they appear in the document, so you have something to compare against.
Check row counts and totals with code, not by eye
Use a tool or code for any arithmetic. That's a rule we follow everywhere, and it matters most here, because the whole point is to catch errors a person scanning the file would miss. A short script, or a formula in a separate sheet, can answer the questions that matter in seconds:
- Does the number of rows match the number of products in the original?
- Is every supplier code unique, and is every price a number?
- Do the prices in each section add up to any totals the supplier printed?
- Is the currency column the same on every row? Is the tax column filled in on every row?
- Are there prices of zero, or prices wildly out of line with the rest of the list?
If an AI assistant does the checking, ask it to run code and show you the output, not to tell you the totals from memory. Show where every number came from. "It looks about right" isn't a check.
Spot-check a sample against the original
Code catches rows that are missing or malformed. It can't catch a price that is a valid number in the wrong row. For that, pick a handful of rows and compare them with the original document by hand. Don't only pick from the top: take some from the first page, some from the last, and some from anywhere the layout changes, such as a page break in the middle of a table or a section with a different column layout. Those are the places where columns shift.
If one sample row is wrong, don't fix that row and carry on. Assume the rows near it are wrong too, find where the error started, and re-run that section.
Compare against last time's list
The most useful check is often the simplest: line this list up against the previous one by supplier code, and work out the change on every line with code. Then sort by the size of the change and read the biggest movements first. A real price rise usually looks consistent across a range. A reading error usually looks like one product doubling or a whole column dropping by the same strange amount.
The comparison also shows you what's new and what's gone. New codes might be new products, or a code read wrongly. Missing codes might be discontinued lines, or a skipped page. Either way, they're worth a look before you import anything. If you're deciding how often to do this, our guide to how often to review wholesale prices covers when a supplier change should trigger a review.
Never import straight into a live system
Any write to a live system should be preview-then-confirm. Before a single price changes in your inventory, store or marketplace, produce a preview of exactly what will change: the product, the old value and the new value. Show it to the person who owns pricing, and only make the change after a clear yes from them.
Bulk changes should start small. Update one product first and check it in the system, then a small batch, then the rest, with a check between each step. If you're importing by file, the traps in the file itself still apply: read our notes on price import CSV pitfalls and on bulk price updates by CSV versus a grid before the AI's output goes anywhere near an upload.
A routine you can repeat with every new list
- Ask the AI for a CSV with your fixed columns, a page number on every row, and empty cells where the list doesn't say.
- Run the code checks: row count, unique codes, numeric prices, one currency, tax column filled, totals matching.
- Spot-check rows from the start, the end and every layout change against the original.
- Compare with last time's list by code, and review the biggest changes, the new codes and the missing ones.
- Preview the changes in your own system, get a yes from whoever owns pricing, and apply them in small batches.
None of this needs specialist software. It needs a fixed format, a script you keep, and the discipline to run it every time, including on the lists that look simple. If you're also using AI for catalogue copy, the same approach applies there: see AI product descriptions that don't make things up.
Let AI do the reading. Let code do the checking. Keep the decision to change a live price with a person.