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.
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 column | Type | Required? | Notes |
|---|---|---|---|
sku | text | Yes — the row identity | Standard Magento import key. Must match an existing product's SKU. |
preorder_enabled | 1 / 0 | Yes, to turn pre-order on | The one field that actually makes a product a pre-order. 1 = Yes, 0 = No. |
preorder_available_from | date (YYYY-MM-DD) | Recommended | "Available From" — the expected availability date. Powers the {{availability_date}} placeholder in messages and emails. |
preorder_available_to | date (YYYY-MM-DD) | Optional | Pre-order window end. Leave blank for an open-ended window. |
preorder_max_qty | decimal | Optional | Maximum units per order. Leave blank for unlimited. |
preorder_message | text | Optional | Message 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.
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
- (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. - Prepare the CSV. Fill in the columns from the table above. Keep
skuas the first column. Wrap any message containing a comma in double quotes. Save as UTF-8 CSV. - Import. Go to System → Data Transfer → Import:
- Entity Type: Products
- Import Behavior: Add/Update
- File to Import: your CSV
- 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.
- Import. Click Import. A success banner confirms the entities processed.
- 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, andpreorder_max_qtyare website-scoped;preorder_messageis store-view-scoped. To set store-view-specific values, include thestore_view_codecolumn 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_qtywith a blank cell to reset a product back to unlimited. - Enabling only, no date. Setting
preorder_enabled=1with nopreorder_available_fromstill 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,groupedproducts. For configurables, setpreorder_enabledon the parent; eligibility for the chosen child is resolved at add-to-cart.
Related
- Mass actions — toggle
preorder_enabledon 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.