Why clean it
A BOM straight out of CAD isn't ready for your assembler
The bill of materials is what an SMT assembly house uses to buy parts, load feeders and decide what goes where on the board. But every EDA tool exports it differently: KiCad uses Reference, Value and Footprint columns; Altium puts the value in 'Comment' and prepends a few lines of project info; Eagle exports semicolon-separated files. Multi-sheet schematics list the same 100 nF capacitor once per sheet, designators show up as ranges like 'R1-R4', do-not-populate parts are mixed in, and some lines have no manufacturer part number at all. Send that as-is and the assembler has to come back with questions — delaying your quote — or, worse, places a part with the wrong rating.
The standard
What a 'good' assembly BOM looks like
| Column | Meaning | Example | Why it matters |
|---|---|---|---|
| Designator | Every reference on the board | C1,C2,C4,C5 | Must match the pick-and-place (CPL) file one-to-one |
| Qty | Count on that line | 4 | Must equal the number of designators |
| Value / Comment | Value or part name | 100nF 16V X7R | What a human reviews |
| Footprint | Package | 0402, SOT-23-5 | Same value in a different size is a different part |
| MPN | Manufacturer part number | CL05B104KO5NNNC | The only unambiguous purchasing key — rating, dielectric, tolerance |
| Manufacturer | Maker | Samsung | Avoids part-number collisions between vendors |
| DNP flag | Not fitted | DNP | Omit it and the part gets placed; delete the line and the CPL won't match |
How it works
What this tool does
- Delimiter detection: picks the separator (tab, comma or semicolon) whose count outside quotes is consistent across lines, so Altium and Eagle BOMs with commas inside the designator field split correctly.
- Header detection: the row among the first 20 with the most header words (Designator, Reference, Qty, Footprint…) wins, so Altium's project-info preamble is skipped automatically.
- Column mapping: falls back to Comment when there's no Value column, recognises 'Manufacturer Part Number 1' as MPN and 'LCSC Part #' as the LCSC number, and ignores distributor columns such as Digi-Key or Mouser part numbers. You can override any mapping on screen.
- Designator expansion: 'R1-R4', 'R1 - R4' and 'C1, C2 C3' are expanded to individual references (ranges only when the prefix matches). The table re-compresses them for display; exports list them individually.
- Merging: lines with the same value, footprint and MPN are merged and their designators and quantities combined. Values are compared numerically, so 100n, 0.1uF and 100nF — or 4k7 and 4.7k — match. DNP lines never merge with fitted ones.
- Validation: duplicate designators, qty ≠ designator count, missing designators, missing MPN, missing footprint, one value/footprint with several MPNs, one MPN with different values or footprints, and DNP parts.
- Export: cleaned CSV (with a UTF-8 BOM so Excel shows non-ASCII text correctly), JLCPCB-format CSV, or tab-separated copy for pasting into Excel.
Walking through the sample
Load the 'KiCad BOM' sample and a ten-line BOM becomes nine. C1, C2, C5 and C4 — all 100n 0402 with the same MPN, listed separately because they sit on different sheets — merge into one line of four. R3 appears both inside the 'R1-R4' range and on its own 1 kΩ line, so it's flagged as a duplicate designator. The LED line says qty 3 but lists only D1 and D2, and has no MPN, so it gets both a qty mismatch and a missing-MPN warning. R5 matches the other 10 kΩ resistors on value and footprint but has a different MPN, raising 'several MPNs for one value' — check whether that's deliberate (say, a precision part) or a slip. R6 (0 Ω, DNP) stays in the cleaned BOM marked DNP and is dropped from the JLCPCB file.
JLCPCB format
Comment · Designator · Footprint · LCSC Part #
JLCPCB's assembly BOM needs just four columns: Comment (value or part name), Designator (every reference, comma-separated), Footprint (package) and LCSC Part # (the C-prefixed LCSC number). Matching is done on the LCSC number, so blank entries have to be picked by hand after upload. The tool removes DNP lines from the JLCPCB file — leaving them in gets them placed — and strips KiCad library prefixes such as 'Resistor_SMD:' from footprints. Remember that the designators in your CPL file must match the BOM exactly.
Pitfalls
Common mistakes
- Treating value + footprint as the same part: a 100 nF 0402 at 6.3 V and at 50 V, or in X7R and Y5V, are different parts. That's why MPN is part of the merge key — and why a blank MPN lets the assembler pick for you.
- Letting Excel mangle part numbers: opening and re-saving a CSV in Excel can turn '1E3'-style part numbers into 1000 or strip leading zeros. Feed the original CSV straight into this tool, or format the column as Text in Excel.
- Deleting DNP parts from the BOM: they're still in the pick-and-place file, so the assembler asks about 'missing' parts. Keep the line and mark it DNP.
- Submitting range notation: people read 'R1-R4', but many assembly systems treat it as a single name. Export individual designators.
- Forgetting polarity: for diodes, electrolytics and ICs, confirm the CPL rotation matches the silkscreen polarity mark.
In practice
Tips from KEMI's assembly line
The BOMs that get the fastest SMT quotes have every MPN filled in and a second-source alternative noted for hard-to-get parts. For passives a full spec like '0402 100nF 16V X7R ±10%' is enough for us to substitute a well-stocked equivalent, but connectors, ICs and inductors always need an MPN. Mark customer-supplied parts as consigned, and allow a few extra pieces for 0402-and-smaller passives to cover placement losses. Once your BOM is clean, the button below the results sends the file straight to our parts and SMT quote console.
