Convert KiCad BOM & CPL files for JLCPCB

Convert KiCad BOM and position files into JLCPCB-compatible BOM and CPL files directly in your browser.

Your PCB files are processed locally in your browser and are not uploaded. This page has no backend, no accounts, and no file storage — everything below runs in JavaScript on your own computer. You can disconnect from the internet after this page has loaded and the tool will keep working.

The converter

1. KiCad BOM (CSV)

Drag & drop your KiCad BOM CSV here, or click to choose a file.

2. KiCad position / pick-and-place file (CSV)

Drag & drop your KiCad .pos CSV here, or click to choose a file.

KiCad's export dialog lets you choose mm or inches, and that choice isn't recorded inside the CSV file itself — this tool cannot detect it automatically, so please confirm it here.

Matches JLCPCB's own documented BOM example format (e.g. "R201, R20, C100, U1" on one line). Uncheck for one row per component.

How to convert KiCad files for JLCPCB

  1. Export two files from KiCad: a BOM (Bill of Materials) CSV and a position/pick-and-place CSV. See the sections below for exact steps.
  2. Upload both files above. Nothing leaves your browser — parsing happens entirely in JavaScript on your device.
  3. Confirm the column mapping. This tool auto-detects KiCad's standard column names (Reference, Value, Footprint, PosX, PosY, Rot, Side, and common variants). If a column is ambiguous, you'll be asked to confirm it rather than have it guessed silently.
  4. Review the warnings and preview. The tool checks for missing designators, mismatched designators between the two files, unrecognized layer values, and malformed coordinates.
  5. Download the converted BOM and CPL files and upload them to JLCPCB's SMT assembly order flow, where you should still check the visual placement preview before ordering.

How to export a BOM from KiCad 9/10

KiCad 9 and 10 generate the BOM from the Symbol Fields Table, which replaced the older Python BOM plugin system.

  1. Open the Schematic Editor.
  2. Go to Tools → Symbol Fields Table (or Export Bill of Materials, depending on your exact version).
  3. Make sure the fields you need are shown as columns — typically Reference, Value, Footprint, and, if you've added it, a part-number field such as LCSC Part # or MPN.
  4. Switch to the Export tab, choose CSV, and export the file.

If you're on an older KiCad release using the legacy BOM plugin dialog, the same general idea applies — just make sure Reference, Value, and Footprint are included as columns in the exported CSV.

How to export a position / pick-and-place file

  1. Open the PCB Editor.
  2. Go to File → Fabrication Outputs → Component Placement (.pos, .gbr)…
  3. Set Format to CSV.
  4. Set Units to Millimeters — this matches what JLCPCB requires, and lets you skip the unit-conversion step in this tool.
  5. Export the file.

KiCad's native export produces columns named Ref, Val, Package, PosX, PosY, Rot, and Side, with Side values of top/bottom. This tool recognizes those column names automatically.

JLCPCB BOM column requirements

Per JLCPCB's own documentation, a BOM file needs:

ColumnMeaningRequired?
CommentComponent value/spec, e.g. "100nF 50V" or "10k"Required
DesignatorReference designator(s), e.g. "R1" or "R1,R2" for a grouped rowRequired
FootprintPackage/footprint, e.g. "0603", "SOIC-8"Required
LCSC Part # / MPNPart identifier for automatic sourcingStrongly recommended — JLCPCB's own pages aren't fully consistent about whether this is required or optional, so include one if you have it

Accepted file formats: .csv, .xls, or .xlsx (this tool outputs .csv).

JLCPCB CPL column requirements

Per JLCPCB's Pick & Place documentation, a CPL file needs:

ColumnMeaningNotes
DesignatorComponent reference, e.g. "C1"One row per physical component
Mid X / Mid YGeometric center of the componentMillimeters — JLCPCB requires metric units
LayerWhich side of the board"Top" or "Bottom"
RotationComponent rotation in degreesPositive values are counter-clockwise, per JLCPCB's documentation

A note on rotation: JLCPCB does not publish a universal rotation correction table, and neither does KiCad — the "zero degree" reference orientation can differ by footprint library. This tool passes rotation values through unchanged rather than guessing at a correction. Always check the visual placement preview JLCPCB shows during order review before confirming.

Common BOM/CPL upload errors

  • Designator mismatch — a component listed in the BOM doesn't appear in the CPL, or vice versa. Often caused by editing one file (e.g. deleting a part) without regenerating the other.
  • Wrong coordinate units — exporting the position file in inches when JLCPCB expects millimeters (or the reverse assumption).
  • Missing part identifiers — no LCSC part number or manufacturer part number, which can slow down or block automatic sourcing.
  • Unrecognized layer/side values — anything other than Top/Bottom (or T/B) in the layer column.
  • Duplicate designators — the same reference designator appearing twice, usually from a manual edit or merge error.
  • Mismatched origin — the (0,0) coordinate in the CPL doesn't line up with the Gerber files' origin, which shifts every component in the placement preview.

BOM vs CPL: what's the difference?

The BOM (Bill of Materials) lists what goes on the board: every component's value, footprint, and part number, used for sourcing and stocking parts.

The CPL (Component Placement List) — also called the pick-and-place file, position file, or centroid file — lists where each component physically sits on the board: its X/Y coordinates, which side, and its rotation, used by the assembly machine to place parts.

Both files reference the same designators, which is why the two must stay in sync.

FAQ

What's the difference between a JLCPCB BOM and CPL file?

The BOM lists which components go on the board (value, footprint, part number). The CPL/position file lists where each one sits (X/Y coordinates, side, rotation). See the section above for details.

Do I need to install a KiCad plugin to export files for JLCPCB?

No. KiCad 9/10's built-in BOM export (Symbol Fields Table) and position-file export (File → Fabrication Outputs → Component Placement) are enough. Third-party plugins exist and can add convenience features, but this tool works from KiCad's native exports.

Does JLCPCB require millimeters or inches for the position file?

Millimeters. JLCPCB's Pick & Place documentation explicitly states the required unit is metric (mm). If your KiCad export used inches, select "Inches" in this tool's units dropdown and it will convert for you.

Will this tool fix incorrect component rotations automatically?

No. Neither JLCPCB nor KiCad publish a universal rotation-correction rule — the correct "zero degree" orientation can vary by footprint library, and JLCPCB's own guidance treats this as something to check visually in their placement preview, not something to auto-correct. This tool copies rotation values through unchanged rather than guessing.

Is my PCB design data uploaded anywhere?

No. This tool has no backend and makes no network requests with your file data. Parsing and conversion happen entirely in your browser's JavaScript engine.

Does this tool work with KiCad 8?

Yes — KiCad 8's BOM and position-file exports use the same core column names this tool recognizes (Reference/Value/Footprint, and Ref/PosX/PosY/Rot/Side). If your column names differ, use the manual mapping option shown after upload.

What if my BOM and CPL have different designators?

The tool will flag any designator that appears in one file but not the other after conversion, so you can fix the source files in KiCad and re-export before ordering.