OptionfierOptionfier

Import file reference

This is the field-by-field reference for Optionfier's import/export format: every Excel column, its JSON equivalent, accepted values, and what happens when you leave a cell blank. It assumes you've already read Importing and Exporting on the main docs page. If you're just backing up or moving your configuration between shops, start there instead.

Excel columns and JSON fields hold the same data; only the naming convention differs (column title vs. camelCase field). Leave an optional cell blank (or omit the field from JSON) to skip it:

"Required" means the field must be present on create rows; required fields on MERGE updates still fall back to the matched row's existing value if the file leaves them blank.

File-level Fields (JSON only)

Excel carries this information implicitly (shop and timestamp come from the workbook metadata on export). JSON has it as three top-level fields.

JSON fieldAccepted valuesDefaultNotes
version1N/ASchema version. Always 1 today.
exportedAtISO 8601 timestampN/AWhen the file was exported. Informational.
shopDomainyour-store.myshopify.comN/ASource shop. Informational: the importer writes into the current session's shop regardless.
groupsarray of option sets[]The root option-set array.

Option set fields

Each option-set row starts a new option set.

XLSX ColumnJSON fieldAccepted valuesDefault on createNotes
Group Handlehandlekebab-case slug, unique per shoprequiredThe anchor for MERGE matching. Handles are unique per shop.
CommandcommandMERGE, NEW, or blankMERGECase-insensitive. Any unknown value is treated as MERGE.
Group Namenameany textthe handle, if blankMerchant-facing display name.
Product IDproductIdShopify product GID (e.g. gid://shopify/Product/123)N/AConnects the option set to a product. The importer prefers GID over handle when both are set.
Product HandleproductHandleShopify product handle (e.g. custom-tshirt)N/ACross-store portability: used as a fallback when the GID doesn't resolve in this shop.
Group Enabledenabledtrue, falsetruefalse imports the option set as draft (won't render on the storefront).
Group Positionpositionnumber1.0Display order on the main admin list.
Inventory EngineinventoryEngineNATIVE_BUNDLES, INVENTORY_ONLYNATIVE_BUNDLESThe legacy value LINE_ITEM_PROPERTIES is still accepted so older files import: it is converted to NATIVE_BUNDLES with every option set in the group set to Text on order. See How Options Appear, and Who Tracks Inventory.
Include Parent In BundleincludeParentInBundletrue, falsefalseOnly honoured when Inventory Engine is NATIVE_BUNDLES.
Sold Out Entire GroupsoldOutEntireGrouptrue, falsetrueDisable add-to-cart when any option is fully sold out. A blank cell on a create row gets the database default, true; option sets created in the admin start at false.
Derive Parent InventoryderiveParentInventorytrue, falsefalseWhen enabled, the app derives the bundle parent product's stock level from its components and writes it to Shopify (opt-in).
Options Carrier IdoptionsCarrierIdblank, or parent-lineblankOnly applies to a standard Options group (not Bundles, Build a Box, or Inventory sync). Blank routes answers onto the order's bundle grouping (no separate line; they won't reach packing slips or Order Printer). parent-line puts them on the product's own order line instead.
N/AidOptionfier option-set IDN/AJSON only. Exports include it; the XLSX format intentionally omits it (option sets match by handle).

Option fields

XLSX ColumnJSON fieldAccepted valuesDefault on createNotes
Set IDidOptionfier option IDN/AUsed for MERGE matching within an option set. Blank → create a fresh option.
Set Handlehandlekebab-case slug, unique within the option setrequiredReferenced by visibility conditions in other options.
Set Commandcommandany stringN/AReserved for future use. Option-level commands are not read today; the option set's Command cascades to all children.
Set Label On CartlabelOnCartany textN/ARequired for NATIVE_BUNDLES and LINE_ITEM_PROPERTIES. INVENTORY_ONLY options can omit it.
Set Label On ProductlabelOnProductany textthe labelOnCartOptional override for the storefront display.
Set Enabledenabledtrue, falsetrueDisable an option without deleting it.
Set Positionpositionnumber1.0Order within the parent option set.
Set Requiredrequiredtrue, falsefalseWhen true, customers must fill in this field to add to cart.
Display On FrontenddisplayOptionsOnFrontendtrue, falsetrueWhen false, the option is hidden on the storefront.
Treat As Line Item PropertytreatAsLineItemPropertytrue, falsefalseThe Appears as setting: true is Text on order (the option shows as text on the parent line), false is Bundle items. Only honoured when Inventory Engine is NATIVE_BUNDLES. An INVENTORY_ONLY option set is always Text on order whatever this column says.
Collect Color ValuecollectColorValuetrue, falsefalseFor color-swatch sets: when true, the cart records the color's hex value next to the label (e.g. Medium (#8D6944)). Default records only the label.
Dropdown StyledropdownStylefancy, nativefancyOnly applies to Selectable options rendered as a dropdown. fancy is Optionfier's own styled dropdown; native is the browser's plain <select>.
Variant Image SizevariantImageSizesm, md, lg, or blankblank (off)Thumbnail size for a linked variant's image next to each choice. Blank turns the thumbnail off.
Variant Image PositionvariantImagePositionleading, trailingleadingWhich side of the choice label the variant thumbnail renders on.
Show Component PricingshowComponentPricingtrue, falsefalseShows the per-choice price next to each choice.
Show Component Pricing AlwaysshowComponentPricingAlwaystrue, falsefalseAlso show prices that equal the parent variant's price.
CSS Class EnabledcssClassEnabledtrue, falsefalseMaster toggle for the custom CSS class.
CSS ClasscssClassCSS class name""Custom class applied on the storefront.
Placeholder EnabledplaceholderEnabledtrue, falsefalseMaster toggle for placeholder text.
Placeholder TextplaceholderTextany textN/AGrey helper text shown when no selection.
N/AlowStockNoticeEnabledtrue, falsefalseJSON only, no XLSX column. Shows a "Only X left" notice on choices whose linked variant is running low.
N/AlowStockThresholdnumber or nullnullJSON only, no XLSX column. The stock level that triggers the low-stock notice.
N/AmaxPerLinenumber or nullnullJSON only, no XLSX column. The most units of this product one cart line may hold, whether or not this option's choices are picked; checkout refuses lines over the cap. An out-of-range value is clamped to a usable cap rather than rejecting the whole file.
Visibility Condition JSONvisibilityConditionJSON object or nullnullSee Visibility Condition JSON below.
Quantity By Source JSONquantityBySourceJSON object or nullnullConditional-quantity rule: how many units of the linked variant this option consumes, driven by another option's answer. Same rule shape as visibilityCondition.

Excel round-trips every field above except the three marked JSON only. An Excel export/import of an option set with low-stock notices, a threshold, or a per-line cap silently drops them. Use JSON if you need those fields to survive the round-trip.

Common choice fields

Every choice carries the fields below. The type-specific fields live in Option Config JSON in Excel and at the top level of the option object in JSON (see Option Types and Per-Type Fields next).

XLSX ColumnJSON fieldAccepted valuesDefault on createNotes
Option IDidOptionfier option IDN/AUsed for MERGE matching within a set. Blank → create a fresh option.
Option Typetypesee types table belowrequiredDetermines which per-type fields apply.
Option Variant Product IDvariantProductIdShopify product GID""Connected component product.
Option Variant Product HandlevariantProductHandleShopify product handleN/ADenormalised reference kept in sync by the products/update webhook.
Option Variant IDmatchingVariantIdShopify variant GID""Connected variant under the component product.
Option Price OverridevariantPriceOverridedecimal string (e.g. "12.99")nullCustom price for an option shown as Bundle items. Ignored under LINE_ITEM_PROPERTIES.
Option Quantityquantityinteger ≥ 11How many units of the connected variant this option consumes.
Option Inventory Management EnabledinventoryManagementEnabledtrue, falsefalsePer-option inventory tracking toggle.
Option Config JSON(top-level keys on the option)JSON blob{}XLSX-only; holds per-type fields without a dedicated column.

Option Types and Per-Type Fields

The Option Type value (or JSON type) is one of the following. Per-type fields below live in Option Config JSON in Excel and at the top level of the option object in JSON.

Option Type valueWhat it renders as
SelectableOptionDropdown, radio, pill buttons, or product grid (picked via displayAs)
CheckBoxOptionCheckbox, pill toggle, or switch
TextOptionText input (single- or multi-line)
NumberOptionNumeric input or slider
DateOptionDate picker
TimeOptionTime picker
FileOptionFile upload
ColorOptionPredefined color swatch
ImageSwatchOptionImage swatch
DynamicColorOptionCustomer-chosen hex color
LinkedVariantInventory link (for INVENTORY_ONLY inventory syncs; never shown on the storefront)
StaticContentOptionStructural content (heading, paragraph, divider, or spacer), collects no answer

SelectableOption (dropdown / radio / pill buttons)

XLSX Column / JSON keyAccepted valuesDefaultNotes
Option Value / optionValueany textrequiredThe choice text shown to customers.
Option Display As / displayAsdropdown, radio, buttons, griddropdownRender style. grid is the Product grid: a wrapping grid of image tiles. Keep the same value across every option in a set.
Option Selected By Default / selectedByDefaulttrue, falsefalsePre-select this option on page load. At most one per set.

CheckBoxOption

XLSX Column / JSON keyAccepted valuesDefaultNotes
Option Label / labelany textrequiredThe checkbox label shown to customers.
checkedByDefaulttrue, falserequiredStart checked when the page loads.
displayAscheckbox, buttons, switchcheckboxStandard checkbox, pill-button toggle, or an accessible switch.

TextOption

JSON keyAccepted valuesDefaultNotes
placeholderany textrequiredGrey helper text inside the field.
multiLinetrue, falserequiredSingle-line input vs. textarea.
validationTypenone, email, telephone, urlnonePattern applied to the input.
minLengthinteger ≥ 0 or nullnullMinimum character count.
maxLengthinteger ≥ 1 or nullnullMaximum character count.

NumberOption

JSON keyAccepted valuesDefaultNotes
placeholderany textrequiredGrey helper text inside the field.
minValuenumber or nullrequiredMinimum allowed value.
maxValuenumber or nullrequiredMaximum allowed value.
steppositive number1Increment step.
displayAsinput, sliderinputPlain numeric field, or a range slider using the same min/max/step.

DateOption

JSON keyAccepted valuesDefaultNotes
includeTimetrue, falsefalseCombine with a time picker.
minDateYYYY-MM-DD or nullrequiredFixed lower bound.
maxDateYYYY-MM-DD or nullrequiredFixed upper bound.
minDateRelative{ anchor, offsetDays } or nullnullRelative lower bound.
maxDateRelative{ anchor, offsetDays } or nullnullRelative upper bound.
specificDateRule{ mode, dates } or nullnullmode is "block" or "allow"; dates is an array of YYYY-MM-DD.
dateRangeRule{ mode, ranges } or nullnullranges is an array of { start, end } (each YYYY-MM-DD).
dayOfWeekRule{ mode, days } or nullnulldays is an array of integers 0-6 (0 = Sunday).

Anchors for relative dates: today, startOfMonth, endOfMonth, startOfNextMonth, endOfNextMonth. offsetDays is an integer, positive for future, negative for past.

TimeOption

JSON keyAccepted valuesDefaultNotes
minuteStepinteger 1-6015Minute granularity.
use24Hourtrue, falsefalse24-hour vs. 12-hour display.
minTimeHH:mm or nullrequiredFixed lower bound.
maxTimeHH:mm or nullrequiredFixed upper bound.
specificTimeRule{ mode, times } or nullnulltimes is an array of HH:mm.
timeRangeRule{ mode, ranges } or nullnullranges is an array of { start, end } (each HH:mm).

FileOption

JSON keyAccepted valuesDefaultNotes
acceptedTypesarray of MIME types or extensions (e.g. ["image/*", ".pdf"])requiredFile type restrictions.
maxSizeMBpositive numberrequiredMax per file. Subject to Shopify's 20 MB limit (1 GB for videos).

ColorOption (predefined swatches)

XLSX Column / JSON keyAccepted valuesDefaultNotes
Option Color Name / colorNameany textrequiredDisplay name for the swatch.
Option Color Value / colorValuehex string (e.g. #FF5733)requiredThe swatch color.

ImageSwatchOption

XLSX Column / JSON keyAccepted valuesDefaultNotes
Option Image URL / imageUrlURLrequiredSource image for the swatch.
N/A / optionNameany textrequiredDisplay name for the swatch. JSON only, no XLSX column.

DynamicColorOption (customer-chosen color)

No type-specific fields. Customers enter an arbitrary hex color at runtime.

LinkedVariant (inventory syncs)

JSON keyAccepted valuesDefaultNotes
scopeGLOBAL, PER_VARIANTGLOBALGLOBAL = deduct for every trigger variant; PER_VARIANT = deduct only for the specific trigger variant below.
triggerVariantIdShopify variant GID""Populated when scope is PER_VARIANT.
triggerProductIdShopify product GID""Populated when scope is PER_VARIANT.

LinkedVariant choices also use the common matchingVariantId, variantProductId, variantProductHandle, and quantity fields; those identify the variant being deducted.

StaticContentOption (heading, paragraph, divider, spacer)

JSON keyAccepted valuesDefaultNotes
kindheading, paragraph, divider, spacerrequiredWhich element this renders as.
textany textN/AHeading or paragraph copy. Unused on divider/spacer.
levelh2, h3, h4N/AHeading only. The semantic level rendered on the storefront.
sizesm, md, lgN/ADivider/spacer only. The vertical spacing scale.

Visibility Condition JSON

The Visibility Condition JSON cell (XLSX) or visibilityCondition field (JSON) holds an object with this shape:

{
  "action": "show",
  "logic": "and",
  "rules": [
    {
      "sourceOptionSetId": "set_abcd1234efgh",
      "operator": "equals",
      "value": "Large"
    }
  ]
}
KeyAccepted valuesDefaultNotes
actionshow, hideshowWhether the rule shows or hides this option.
logicand, orandCombiner across multiple rules.
rulesarray of rule objectsrequiredSee rule fields below.

Rule fields:

KeyAccepted valuesDefaultNotes
sourceOptionSetIdanother option's Set ID in the same option setrequiredThe option whose value drives this rule.
operatorequals, not_equalsequalsComparison.
valuestring or nullrequiredThe value to match against. null means "the source has any value" (useful with not_equals for "source is empty").

Fields Excluded from Export

A handful of DB fields are deliberately stripped during export and ignored on import. Including them in a hand-authored file has no effect: