BOM Cleaner: part number matching and MPN normalisation for messy BOM lists
BOM Cleaner reads part numbers out of the lines your ERP actually exports - a brand prefix glued to a code, a code buried in prose, two codes on one line - and matches them against the Automa.Net catalogue of parts from 9000+ manufacturers. Every row comes back with a confidence score and the reason behind it.
- Catalogued parts
- 10.5M+
- Lines matched
- 4.8 M
- Auto-matched
- 66.8%
- Per 1,000 lines
- 30 s

Before and after
Three lines that break ordinary matching
A part list is not dirty because someone was careless. It is written the way procurement, maintenance and five different suppliers each write. Here are three of the shapes that defeat a plain lookup - a line carrying only a description, a type code where the ordering number should be, a manufacturer the catalogue files under a different name - and the record each one comes back as.
- Manufacturer:
- –
- Part number:
- –
- Short text:
- Ersatzlüfter für S7-400 Baugruppenträger

- Manufacturer:
- Siemens
- Part number:
- 6ES7408-1TA00-6AA0
- Short text:
- SIMATIC S7-400, spare fan for rack
- EAN
- 4025515069249
- Lifecycle
- Active
- Net weight
- 0.21 kg
- Manufacturer:
- ABB
- Part number:
- CR-M024DC2
- Short text:
- Relais 4 Stk

- Manufacturer:
- ABB
- Part number:
- 1SVR405611R1000
- Type code:
- CR-M024DC2
- Short text:
- Pluggable interface relay 2 c/o, 24 V DC
- EAN
- 4013614497223
- Net weight
- 0.033 kg
- Manufacturer:
- Telemecanique
- Part number:
- GV2ME10
- Short text:
- Motorschutzschalter 3 Stk

- Manufacturer:
- Schneider Electric
- Part number:
- GV2ME10
- Type code:
- TeSys Deca
- Short text:
- Manual starter and motor protector
- EAN
- 3389110290899
- Net weight
- 0.26 kg
What goes in, what comes back
Your sheet, returned with more on it
No template, no cleaning up first. You point at the columns that hold part numbers and the rest of the sheet is left alone.
- Files
- CSV or XLSX. Delimiters, quoting and the byte order mark Excel hides in "CSV UTF-8" are detected for you.
- Columns you point at
- One or more MPN columns, brand columns if you have them. A bare code or a code buried in a description - same pass. Every other column travels through untouched.
- The manufacturer's own spelling
- Codes and brands come back as the manufacturer writes them, not as your file happened to. That is what makes five suppliers' lists comparable.
- The catalogue record behind it
- Description, EAN, lifecycle, weight and packaging arrive with the match, next to its confidence and the reason for it.
How a file moves through it
Rules first. Then the lines that hide the code.
The order is the design. A line the deterministic pass already answered is never touched again, and a code read out of surrounding text has to appear in your line character for character before it counts.
- Import
Upload and map
Headers are read and rows counted before matching starts.
- Matching
Deterministic pass
Codes are normalised, then looked up as main MPNs, alternative MPNs, designation codes and - only as a last resort - through search. Each route carries its own weight into the score.
- Code extraction
Codes buried in the text
Lines the rules left unmatched have their code read out of the description around it. Whatever is read is checked back against the original text before it reaches matching.
- Review
Work the flagged rows, export
Open the matcher, filter to what needs a decision, correct in place and export a corrected XLSX - or just the codes that found nothing.
Inside the matcher

Every row, with its verdict on it
Filter by status, or by the specific reason a row was not settled. Search across MPN, brand and product. Correct in place; the row is rescored as you do.

Why it was not auto-matched
Thirty diagnostic codes under two headings a reviewer actually reads: what blocked the match, and what pulled the confidence down. No guessing what the tool was thinking.
Where the answers come from
Manufacturer data, not a best guess
A match is worth exactly as much as the record behind it. Every answer here comes from a manufacturer record in the catalogue, and the row names the one it used.
- Built on manufacturers' own data
- The catalogue is assembled from manufacturer data across 9000+ brands - part numbers, designations and attributes as the manufacturer publishes them.
- Nothing is invented
- A code only counts when it appears in your line character for character. Nothing is repaired, completed or pulled from anywhere else - a line with nothing to read comes back unmatched.
- Every match names the route that found it
- A main manufacturer part number, an alternative code, a designation code or the search fallback - the row says which route settled it, and each one carries its own weight into the score.
Before you upload
Not every list is worth running
Some files pay for themselves on the first run. Others have nothing on them to match. Here is where the line falls, so you can tell which one you are holding.
Worth running
- An ERP, CMMS or supplier export with part numbers somewhere in it, however they happen to be written
- Lists you process repeatedly - incoming RFQs, supplier catalogues, stock takes, onboarding a new source
- Data that has to be standardised before it enters an ERP, a marketplace or a pricing engine
- Work where somebody has to be able to say afterwards why a given line was matched the way it was
- Files where part of the list is expected to fail, and the failures matter as much as the matches
Not worth running
- Lists carrying only your own internal ERP numbers. With no manufacturer code anywhere on the line there is nothing for the catalogue to look up
- Lines carrying only a quantity and a price - there is nothing on them to match
- Codes under six characters with no brand beside them. Too little signal to accept a match without guessing
Bring one export you would normally clean by hand
The first run tells you more than any specification will: how much of your list the catalogue already knows, and what shape the rest is in.







