What moves: products, variants, prices, stock, SKUs, descriptions and SEO fields where both platforms have them. What does not: customers, orders, reviews, gift card balances, blog posts, pages and URL redirects are not in a product export, so CatalogHop does not convert them.
1. Export your products from Square
- In your Square Dashboard, open Items & services (it may be called Items & menus or Items & inventory), then Items, then Item library.
- Clear any search or filter first: the export only includes the items you are viewing. Click Actions, then Export Library, and choose All items.
- Choose CSV, not Excel. Square suggests Excel, but this converter reads the CSV file.
- Upload the file as it was downloaded. Opening it in a spreadsheet and saving again can change SKUs and the order of rows.
What to know about the Square file
- The Square export has no images, so no images move. Add pictures in the new store after import. Every converted file says so.
- Rows with the same Item Name next to each other become one product, and each row becomes a variation. Square writes no item number, so the converter looks for where a new item starts. In Square's export, columns such as Shipping Enabled and Pickup Enabled are filled only on the first row of each item. A later row with them filled starts a new product. So does a row with a different description, or a variation name the item already has.
- When two products end up with the same name, the converter names them so you can check them. If the file has none of those columns, or has them filled on every row (as after a fill-down in a spreadsheet), it groups by name only and tells you which products were joined from several rows.
- Option Name 1 and Option Value 1 become the product option. When an item has several variations but no option, or some option values are missing or repeated, the option is named "Variation" and each variation name is its value. Option Name 2 and higher are read the same way, but we have not seen a real export with them.
- Stock comes from the Current Quantity column of the first location in the file where the variation is switched on, and the note names the location used. A stock count with a fraction (items sold by weight) is rounded toward zero, and those variations are named. Stock at other locations, location prices and locations where an item is switched off are not carried over, and the converter counts them for you.
- A blank or "Variable" price has no price to carry over. Shopify rejects products without a price, so those items are left out of Shopify files and listed; WooCommerce imports them without a price.
- Online Sale Price is not described anywhere in Square's help. When it is lower than the Price, the file carries the sale price with the Price as the compare-at price, and every such variation is listed so you can change it. When it is not lower, the Price is kept and you are told.
- Square Online visibility "visible" publishes the product. "hidden", "unavailable", archived items and any unclear value become drafts, with a note, so nothing hidden is published by mistake. What "unavailable" showed shoppers is not documented by Square.
- Not carried over, and listed when present: modifier sets, taxes, units such as sold by weight, vendor details, stock alerts and the pickup, delivery and shipping switches. Digital, Service, Event and Donation items become products without shipping; the items inside a Bundle are not linked.
- The weight unit is taken from the column name, such as Weight (lb) or Weight (kg).
- Built from Square's help pages and the layout of real Square exports published on GitHub. Square publishes no sample export. It was not tested by importing into a live store.
What the WooCommerce file gets
- The column labels of WooCommerce's built-in importer (checked against WooCommerce 11.2.2), so columns map automatically.
- Variable products with their variations, each variation linked to the parent by SKU. A parent SKU is made from the URL handle when the source has none.
- Weights converted to your WooCommerce weight unit, with the matching column label such as Weight (kg).
- Repeated SKUs left blank on the later rows, because WooCommerce rejects duplicate SKUs.
- Products hidden from the online store written with catalog visibility hidden, and products that need no shipping written as virtual.
- Attributes as product-level (not global) attributes.
2. Before and after
Before: the Square item library CSV
Token,Item Name,Variation Name,SKU,Description,Categories,Reporting Category,SEO Title,SEO Description,Permalink,GTIN,Square Online Item ... TKNMUGSMALL0000000000001,Speckled Mug,Small,MUG-S,<p>Hand-thrown <strong>stoneware</strong> mug.</p>,"Kitchen > Mugs, Gifts",Kitchen > Mu... TKNMUGLARGE000000000002,Speckled Mug,Large,MUG-L,,"Kitchen > Mugs, Gifts",Kitchen > Mugs,,,,,visible,Physical good,1,,,,,,,28.00,,N,,,,,S... TKNCANDLE00000000000003,Cedar Candle,Regular,CANDLE-CEDAR,"Soy wax candle. Burns for about 40 hours.",Home,Home,,,/cedar-candle,,visible,Physical good,0.5,,,Y,N,N,Y,18.00,15.00,N,,N,,N,,,,,,Y,20,,,,,Y,,,,,19.00,N,Y
After: woocommerce-products.csv
| Type | SKU | Name | Published | Is featured? | Visibility in catalog | Description | Tax status | In stock? | Stock | Backorders allowed? | Weight (kg) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| variable | speckled-mug | Speckled Mug | 1 | 0 | visible | <p>Hand-thrown <strong>stoneware</strong> mug.</p> | taxable | ||||
| variation | MUG-S | Speckled Mug - Small | 1 | taxable | 1 | 12 | 0 | 0.3402 | |||
| variation | MUG-L | Speckled Mug - Large | 1 | taxable | 1 | 5 | 0 | 0.4536 | |||
| simple | CANDLE-CEDAR | Cedar Candle | 1 | 0 | visible | <p>Soy wax candle.</p><p>Burns for about 40 hours.</p> | taxable | 1 | 20 | 0 | 0.2268 |
| variable | logo-tee | Logo Tee | 1 | 0 | visible | <p>Cotton tee with our logo.</p> | taxable | ||||
| variation | TEE-S | Logo Tee - Small | 1 | taxable | 1 | 0 | 0.1814 |
12 of 25 columns shown (empty columns hidden, 9 more with data).
What the converter reported for this sample
5 products read, 5 written.
- Check this: "Cedar Candle", variation CANDLE-CEDAR: Online Sale Price 15.00, Price 18.00. Square does not document this column; its name suggests the sale applied on Square Online only, while 18.00 applied in person. The file carries 15.00 with 18.00 as the compare-at price. Change it in the new store if the sale should not continue.
- Not carried over: Square item library exports contain no images, so no images were carried over. Add product images in the new store after import.
- Check this: 1 item has a variable price (Price blank or "Variable") in Square: "Pottery Class". It has no price in the file. Shopify rejects products without a price, so it is left out of Shopify files; WooCommerce imports it without a price. Set a price in the new store.
- Check this: 1 archived item was converted as a draft (hidden): "Old Bowl". Delete it in the new store if it is not wanted.
- Check this: 1 item uses Square modifier sets (Gift Wrap). Modifiers are add-on choices with their own prices; Shopify and WooCommerce product CSVs have no place for them, so they were not carried over.
- Not carried over: Square tax settings (the "Tax - ..." columns) were not carried over. Set up taxes in the new store.
- Check this: This export has 2 locations (Main Street Shop, Market Stall). Stock was taken from the first location where each variation is switched on ("Main Street Shop" for 4 variations); 1 item also has stock at other locations, which was not added. Set stock per location in the new store.
- Check this: 1 variation has a location price different from its Price. Only the Price column was carried over.
- And 7 more.
Sample products made up for this page, laid out exactly like a real Square export. The "after" file and the notes were produced from it by the same converter this page runs.
3. Import into WooCommerce
- In WordPress, go to Products, then All Products, and click Import.
- Choose woocommerce-products.csv and click Continue.
- On the column mapping screen, check that each column is matched. If the weight column is not matched, pick Weight for it.
- Click Run the importer. WooCommerce shows a count of imported, skipped and failed products at the end.
Before you import everything
- Vendor and barcodes are not written: core WooCommerce has no vendor column, and the barcode (GTIN) column does not map automatically in 11.2.
- Weight column labels other than Weight (lbs) are taken from WooCommerce's source code rather than a sample file. If yours is not matched on the mapping screen, match it by hand.
- Images are imported by WooCommerce downloading each link, so the links must be public.
- Import a handful of products first, open them in your store and check variants, prices, stock and images. Then import the rest.
Already have a WooCommerce CSV that fails? Use the WooCommerce CSV checker.
Questions
- Why are my Square product images missing?
- The Square item library export has no image column, so there are no images to carry over. Add images in WooCommerce after import.
- Do Square modifiers move to WooCommerce?
- No. Modifiers are add-on choices with their own prices, and WooCommerce's product CSV has no place for them. The converter counts the items that use modifier sets so you can set them up again, for example with a product add-ons plugin.
- Was this tested by importing into a live WooCommerce store?
- No. It follows the layout of real Square exports and WooCommerce's import code. Check the file with the WooCommerce CSV checker, then import a few products first.
- Is my file uploaded anywhere?
- No. The page reads the file with your browser and converts it there. The only thing the site records is an anonymous count: which converter was used, a rough row count, and whether it worked. The privacy page lists every field.
- Will the import definitely work?
- Nobody can promise that from a file alone. The converter follows each importer's documented rules, leaves out products that would be rejected and tells you about them, and does not check the WooCommerce file before download, so run it through the WooCommerce CSV checker on this site. Import a few products first, look at them in your store, then import the rest.