Skip to Help content

Update a product catalog in bulk

Import, export, and bulk edit products

Outcome: Update a product catalog in bulk while preserving identifiers and inventory rules.

Choose the right bulk tool

  • Use Bulk Add to paste a simple list of new products.
  • Use CSV Import to create detailed new product records with variants and supported catalog fields.
  • Select products in the builder to move, sort, publish, unpublish, change common limits, or delete them together.
  • Use CSV Export to download the current catalog as a reusable starting file or audit copy.

Product CSV Import adds records. It does not match or update existing products by ID.

Paste a simple product list

  1. Select the Products block.
  2. Open + Add → Bulk Add (paste list).
  3. Put one product on each line using Product Name - $29.99, Product Name, 29.99, or Product Name | Description | Category | $29.99.
  4. Preview the detected names and prices, then choose Add Products.
  5. Review the new products and save the form.

Each line becomes one product with one variant. A line without a price creates an explicit $0 option, so review every detected amount before saving.

Export before a large catalog change

CSV → Export catalogue as CSV writes one row per option and includes the current product order. The filename is {form-title}-products-{YYYY-MM-DD}.csv. Descriptions with line breaks and the complete product photo gallery are quoted in the CSV.

The export includes these importable product fields:

  • product_name, description, size_label, category, required and fixed-quantity flags, tags, and publish or visibility dates.
  • Single-link fields plus the complete product_links JSON and public menu label.
  • Sold-goal settings, featured image URL, and product_images gallery JSON.
  • Product unit cost, sale price and dates, and product bulk tiers when the current user's permission allows those private costs.

Option fields include label, regular price, option unit cost, local stock, low-stock threshold, Max/Order, sale price and dates, and bulk tiers.

On a shared-inventory form, writable stock and low-alert cells are blank. Extra read-only columns identify inventory mode, item, SKU, current effective QOH, and shared low-stock threshold.

Import a product CSV safely

  1. Download the blank template or export a catalog as a starting point.
  2. Keep a product name and an explicit option price on every imported product. Use 0 only when the option is intentionally free.
  3. Repeat the same product metadata on rows that should become variants of one product.
  4. Save current builder changes before importing, review the confirmation, and import.
  5. Reload and inspect the added products before publishing them.

The importer groups rows with the same complete product identity. Same-name rows with different descriptions, categories, visibility, images, or other product metadata become different products. A later same-name row containing only option fields attaches to the most recent matching product group. Keeping repeated metadata identical is the safest spreadsheet workflow.

Product CSV has no update-by-ID behavior. Re-importing an export creates another catalog with new IDs and can duplicate every product. It also cannot recreate an exported product that has no option price: add an explicit price, including 0 for free, before importing that row.

Use current CSV field formats

  • product_name and option price are the essential fields. Option label may be blank.
  • Boolean fields such as required, fixed_qty, show_sold_goal, and unpublished accept values such as 1, yes, or true.
  • Date fields accept Unix seconds, Unix milliseconds, ISO dates, and common spreadsheet dates. Use ISO date-times with a timezone for predictable results; an unparseable optional date is treated as blank.
  • product_images accepts a JSON array of up to eight image objects. When remote image URLs are found, the builder offers to re-host them; failed re-hosts keep their original URLs.
  • product_links accepts the complete links JSON. The simpler product_url and product_url_label fields describe the first link.
  • product_url accepts a complete http:// or https:// URL or a bare domain such as www.example.com; EZFormz normalizes the buyer-facing link.
  • Bulk tiers accept JSON or shorthand such as 5:10%,10:20%, 10:5$ for $5 off each, and option-only 10:25$total for $25 off the complete variant line.
  • The catalog database write is all-or-nothing and may expand each row into several writes. If EZFormz reports more than 400 catalog writes, split the file into smaller imports. Remote images are re-hosted before that catalog write, so an uploaded image can remain in the account even when the later catalog import is rejected.

For shared inventory, remove the stock, stock_quantity, and low_stock_threshold columns from the file, even when their cells are blank. Manage those values in Inventory. Imported shared-inventory products are forced unpublished until they are linked, priced, reviewed, and explicitly published.

Change existing products together

Search or filter the catalog, select product cards, and use the bulk bar. Current actions include:

  • Move to an existing or new category, or back to Uncategorized.
  • Set or clear local stock and Low Alert.
  • Set or clear Max/Order.
  • Mark required or optional.
  • Publish or unpublish.
  • Delete the selected products.

Variant-level actions apply to every variant inside each selected product and show a confirmation when several products are affected. Shared QOH and low alerts remain owned by Inventory, so those local-stock bulk actions are blocked on a shared form.

Use Sort for manual, name, price, or stock order, and for manual or alphabetical category order. The selected sort rearranges the saved catalog; it is not merely a temporary screen filter.

For the stock models, see Manage inventory and stock.