WooCommerce Product CSV Builder & Checker
A simple product sheet in, WooCommerce import rows out — or a CSV checked and fixed.
Try before you buy.
- Free preview: the summary and the problem counts for your whole file, with the first rows of the new CSV, of its problems and of the changes (up to 10 each).
- Locked until you unlock it: download.
- Unlock: Premium pass, ₹799 for 30 days or ₹249 for 1 week, a one-time payment that never renews. Unlock: Premium pass, $19.99 for 30 days or $7.99 for 1 week, a one-time payment that never renews.
Ways to unlock shows how to get the full result.
Printing this result is locked in the free preview.
1. Your sheet or WooCommerce CSV
2. Your store
WooCommerce → Settings → Products (units) and Settings → General (the decimal separator). Column headings such as “Weight (kg)” map only when the unit is the store’s.
3. Columns and options
What each column of your sheet is used as. An option holds a list (“S, M, L”) and every combination becomes a variation; an attribute is shown on the product without making variations.
| Column | Example | Use as | Attribute or meta name |
|---|
3. What to fix
4. Files
5. Result
The new file
Products made
Problems
Changes
| Row | Column | Before | After | Change |
|---|
Locked in the free preview. Opens the ways to unlock this result.
Locked in the free preview. Batch runs unlock with a pass.
Locked in the free preview. Query results unlock with a pass.
About the WooCommerce Product CSV Builder & Checker
A product with 3 sizes and 2 colours is 7 rows in a WooCommerce import file: a variable product that lists every value of its attributes, then a variation for each combination that names its parent’s SKU and carries its own price, stock and attribute values. Here you keep a simple sheet instead — one row per product, with Size, Colour or any option column holding a list such as “S, M, L”, or one row per variant — and the builder writes those rows for WooCommerce’s built-in Product CSV Importer: “Attribute 1 name / value(s) / visible / global” columns, categories as “Parent > Child”, comma-separated image links, 1/0 flags, SKUs for every variation, and weights converted to your store’s unit.
The checker opens a WooCommerce product CSV before you import it and lists what the importer would trip over — duplicate SKUs, variations whose parent is missing or comes after them, variation values the parent does not list (the importer skips those), sale prices above the regular price, http:// and broken image links, decimal commas, “yes” or “no” in 1/0 columns, an empty “In stock?” (out of stock when the row has no Stock number), text saved in the wrong encoding and columns the importer does not know — each with an automatic fix and a change log. Large catalogues split into files that keep each variable product with its variations. Everything runs in your browser; MySmartCoPilot is not affiliated with or endorsed by WooCommerce.
How to use it
- Choose your sheet or WooCommerce CSV (CSV, TSV, Excel or OpenDocument), or paste the rows. Try a simple sheet and Try a CSV with mistakes show both ways of working; the simple-sheet template downloads with or without a pass.
- Set your store’s weight and dimension units and its decimal separator (WooCommerce → Settings → General and Products), so the columns map and prices read as your store expects.
- The page tells a simple sheet (Build) from a WooCommerce CSV (Check and fix); switch if it guessed wrong. To build, check what each column is used as (an option such as Size makes variations). To check, choose the fixes (all safe ones are on) and what happens to unknown columns.
- If the catalogue is large, choose how to split it: a number of rows or a size per file. A variable product always stays in one file with its variations.
- Press Build the CSV or Check the file and look at the preview, the problems left and the change log. Without a pass the result stays a free preview with its first rows; the files unlock with a Premium pass.
- In WordPress, open Products → Import, choose the file, tick “Update existing products” only when you are updating products already in the store, check the column mapping and run the import.
Examples
Linen Shirt · SKU LS · Price 34.00 · Stock 10 · Size: S, M, L · Colour: White, Sage
A variable product “Linen Shirt” (SKU LS, Attribute 1 Size: S, M, L; Attribute 2 Colour: White, Sage) and 6 variations: LS-S-WHITE “Linen Shirt - S, White”, LS-S-SAGE, LS-M-WHITE… each with Parent LS, 34.00 and a stock of 10
Two rows named “Wool Beanie”: SKU WB-RED, Colour Red, stock 6; SKU WB-NAVY, Colour Navy, stock 0
A variable product WOOL-BEANIE with Colour: Red, Navy, and the two variations keeping their own SKUs; the navy one “In stock?” 0
A variation above its parent, Published “yes”, a price “45,00”, a variation value L the parent does not list, a sale price above the regular price
Parent moved above its variations · 1 · 45.00 · L added to the parent’s values · the sale price removed — every change in the change log
Common uses
- A shop owner listing a new range from a supplier’s price list without typing a row per variation.
- An agency moving a client’s catalogue from a spreadsheet into WooCommerce.
- Checking an export before re-importing it after editing prices or stock in a spreadsheet.
- Cutting a big catalogue into files the store’s host can import one at a time.
What the builder writes
- Simple and variable products: a product without options is a simple product. Option columns make a variable product: its row lists every value (“S, M, L”), and every combination becomes a variation, the first option outermost (S/White, S/Sage, M/White…). An option a row leaves empty means “any” for that variation, as in WooCommerce.
- Rows of one product: rows with the same Parent SKU, or the same name, are one product, so a sheet with one row per variant works, and a row without a name continues the product above it.
- SKUs: a row that makes one variation keeps its SKU; a row that makes several gets SKUs from the pattern (the parent SKU and the values: LS-S-WHITE). A parent without an SKU gets one from its name. Repeated SKUs get -2, -3.
- Names: variations are named like WooCommerce’s own sample file: “Linen Shirt - S, White”.
- Attributes: each option becomes “Attribute N name”, “value(s)”, “visible” 1 and “global” (1 when you use the store’s global attributes from Products → Attributes, else 0); other columns can be attributes that are shown but make no variations, or meta data.
- Values: prices as plain numbers in your store’s decimal format, weights and sizes converted from the sheet’s unit (a “Weight (g)” column) to the store’s, categories as “Clothing > Shirts”, tags and images separated by commas, http:// links made https://, Published 1 (or -1 for drafts) and “In stock?” always filled in.
- Columns: in WooCommerce’s own order, and only those with values, so an update import does not empty fields you never filled.
What the checker finds, and the fixes
- Headings WooCommerce does not map by itself: “Price” is “Regular price”, “Image” is “Images”, “Attribute 1 values” is “Attribute 1 value(s)”, a “Weight (lbs)” column in a kg store (converted). Unknown columns are kept, removed or kept as meta data, as you choose.
- Values the importer misreads: “yes”, “no” or “true” in 1/0 columns (the importer is sure only of 1 and 0: in “In stock?” any word but “backorder”, “no” included, imports as in stock), Published words (1 publish, 0 private, -1 draft; a word such as “yes” imports as private), Type words, prices with a decimal comma, a currency sign or thousands separators, stock that is not a whole number, dates that are not YYYY-MM-DD, “/” or “»” between category levels, “|” between attribute values (WooCommerce’s own screens use it, a CSV must use commas).
- An empty “In stock?”: imported as out of stock when the row has no Stock number (with one, the store works the status out from the stock); filled with 1, or 0 when the stock is 0.
- GTIN, UPC, EAN, or ISBN: the importer does not map this column by itself, so the checker reminds you to choose it on the column mapping screen.
- Images: http:// links, spaces, missing https://, semicolons between links, the same link twice; links that cannot work (a web page, not a link) are listed and removed.
- Products: duplicate SKUs, a parent that is not a variable product, a parent row below its variations (moved up), variation attribute names or values the parent does not list (added to the parent: otherwise the importer skips them), two variations with the same values, variations without a price, sale prices that are not below the regular price.
- The file: encodings other than UTF-8, semicolon delimiters, Excel’s “sep=” line, text saved in the wrong encoding (“Café” for “Café”), control characters and empty or repeated rows.
A variation whose parent is not in the file is listed; the fix that adds a parent row for it is off unless you switch it on, because the parent may already be in your store.
Importing the file
WooCommerce’s Product CSV Importer and Exporter is under Products → Import. Keep each variable product’s row above its variations, as the builder and the fixer write them: when an import makes no variations, WooCommerce’s document says to check that order first. To turn a product already in your store from simple into variable, WooCommerce 11.1 and later do it in one import with Update existing products ticked when the parent row comes first; earlier versions take two imports, the parent row with Update existing products and then the variations without it. With Update existing products, rows match products by ID or SKU, and a non-blank Images cell replaces the whole gallery. The importer downloads image links when your store can reach them: links on your own Media Library or a public host work best. Check the column mapping screen once: a column you renamed or added as meta data is mapped there, and the “GTIN, UPC, EAN, or ISBN” column starts on “Do not import” until you choose its field. The columns and their values are described in the Product CSV Import Schema, and WooCommerce’s own sample products file shows a variable product with its variations.
Large catalogues
WooCommerce’s document advises splitting large files into smaller batches: how much one import can take depends on your host’s upload limit, memory and time limit. Choose a number of rows or a size per file; each file starts with the heading row, and a variable product is never cut from its variations (one bigger than the limit gets a file of its own, with a note).
Limitations
- No store connection: the tool does not read your store or create products; you import the file yourself in WordPress.
- Products only: orders, customers and reviews are not made here, and converting another shop system’s export into WooCommerce’s columns is not part of this tool.
- Values only WooCommerce knows are not checked: that a category, tax class or shipping class exists, or that an image link answers.
- Files up to 60 MB and 200,000 rows are read in this browser; a row can make up to 1,000 variations.
- Excel files are read from their first sheet; every file written is UTF-8 CSV with commas.
Privacy
On this device; its files download once
Everything happens in your browser. What you enter or open here is not uploaded or stored by MySmartCoPilot. The spreadsheet reader and the ZIP writer load from this site the first time you need them. Your sheets and files stay on your device and are never uploaded.
Frequently asked questions
What do I get without a pass?
Without a pass, WooCommerce Product CSV Builder & Checker shows the summary and the problem counts for your whole file, with the first rows of the new CSV, of its problems and of the changes (up to 10 each). Until you unlock it, the result can’t be downloaded. A Premium or Ultimate pass, a one-time payment that never renews, unlocks the full result. The pricing page lists the passes and their prices.
Is my file uploaded?
No. The sheet is read, built or checked and the new file written in your browser. Nothing is sent to MySmartCoPilot, to WooCommerce or anyone else.
Will WooCommerce accept the file?
The rows follow WooCommerce’s import columns and pass the same checks as the checker, and the page shows that check. WooCommerce can still refuse what only it knows about, such as an image it cannot download. Import a few products first and look at them in your store.
Should the attributes be global?
Use global attributes (Products → Attributes) when the same Size or Colour is shared by many products and used in filters; tick “Use the store’s global attributes” and keep the names exactly as in your store. Otherwise the attributes are the product’s own (global 0), which needs no setup.
Why is “In stock?” always filled in?
WooCommerce reads an empty “In stock?” as out of stock for a product without a Stock number (with one, the store works the status out from the stock). The builder writes 1, or 0 for a stock of 0, so every row says it; the checker fills in empty cells the same way.
Does it change products that are already in my store?
Only when you import the file with “Update existing products” ticked: then rows with the SKU or ID of an existing product update it. The builder writes only the columns you filled, so the others keep their values.
Is this tool made by WooCommerce?
No. MySmartCoPilot is not affiliated with or endorsed by WooCommerce. WooCommerce is named only to describe the files its importer reads; the rules come from its public documentation and source code.