Skip to main content

Bulk import via CSV

Every per-product pre-order setting is a standard EAV product attribute, so you don't need a custom importer — Magento's native Products import handles them as ordinary CSV columns. This is the fastest way to launch a whole category of pre-orders at once.

Download the template

preorder-import-template.csv — a ready-to-edit CSV with the correct headers and three example rows. Replace the SKUs with your own and re-import.

The five per-product columns

CSV columnTypeRequired?Notes
skutextYes — the row identityStandard Magento import key. Must match an existing product's SKU.
preorder_enabled1 / 0Yes, to turn pre-order onThe one field that actually makes a product a pre-order. 1 = Yes, 0 = No.
preorder_available_fromdate (YYYY-MM-DD)Recommended"Available From" — the expected availability date. Powers the {{availability_date}} placeholder in messages and emails.
preorder_available_todate (YYYY-MM-DD)OptionalPre-order window end. Leave blank for an open-ended window.
preorder_max_qtydecimalOptionalMaximum units per order. Leave blank for unlimited.
preorder_messagetextOptionalMessage shown on the product page. Store-view scope. Use {{availability_date}} for the dynamic date.

Only sku and preorder_enabled are functionally required. The rest are optional — omit the columns entirely, or leave the cells blank, and the product keeps its existing values.

Deposit is NOT a per-product column

The deposit percentage / fixed amount is global config, set once under Stores → Configuration → Byte8 → Pre-Order → Payment Settings (with optional per-customer overrides — see Customer overrides). There is no preorder_deposit_* product attribute, so do not add a deposit column to this CSV — it will be ignored on import.

Sample CSV

sku,preorder_enabled,preorder_available_from,preorder_available_to,preorder_max_qty,preorder_message
24-MB01,1,2026-09-01,,5,"Reserve yours — ships {{availability_date}}"
24-WB04,1,2026-10-15,2026-10-01,,"Pre-order now — limited first batch"
24-UG06,1,2026-08-01,,,"Back in stock {{availability_date}}"

Step by step

  1. (Recommended) Export first to get valid headers. Go to System → Data Transfer → Export, Entity Type Products, and export. The resulting CSV already contains the preorder_* columns for a couple of products with the exact header spelling — the safest starting point, since it also carries the other columns Magento expects. Edit only the pre-order columns and delete rows you're not changing.
  2. Prepare the CSV. Fill in the columns from the table above. Keep sku as the first column. Wrap any message containing a comma in double quotes. Save as UTF-8 CSV.
  3. Import. Go to System → Data Transfer → Import:
    • Entity Type: Products
    • Import Behavior: Add/Update
    • File to Import: your CSV
  4. Check Data. Click Check Data — Magento validates the file and reports the number of rows it will create/update. Fix any errors it lists before proceeding.
  5. Import. Click Import. A success banner confirms the entities processed.
  6. Reindex + flush cache. Pre-order attributes are used in product listing, so refresh indexes and full-page cache:
    bin/magento indexer:reindex
    bin/magento cache:flush

Notes & gotchas

  • Scope. preorder_enabled, preorder_available_from, preorder_available_to, and preorder_max_qty are website-scoped; preorder_message is store-view-scoped. To set store-view-specific values, include the store_view_code column on additional rows for the same SKU (standard Magento import behaviour).
  • Dates. Use YYYY-MM-DD. Magento parses these against the store locale on import — ISO format is the least ambiguous.
  • Blank vs. omitted. An omitted column leaves existing values untouched. A blank cell on an included column clears that value. Use this deliberately — e.g. include preorder_max_qty with a blank cell to reset a product back to unlimited.
  • Enabling only, no date. Setting preorder_enabled=1 with no preorder_available_from still works — the storefront just won't show an expected date. This mirrors the product-grid Apply Pre-Order mass action (see Mass actions).
  • Configurable / bundle / grouped. The attributes apply to simple,configurable,bundle,grouped products. For configurables, set preorder_enabled on the parent; eligibility for the chosen child is resolved at add-to-cart.
  • Mass actions — toggle preorder_enabled on the product grid without a CSV.
  • Quick start — the per-product fields set manually in the admin product editor.
  • Payments configuration — where the deposit (global) is configured.
  • Customer overrides — per-customer deposit overrides, imported the same way against the customer entity.