Bloom marks every pre-order with tags, line item properties, order attributes, a note block, and a fulfilment hold. Use them to build Shopify Flow workflows, customise notification emails, or filter orders in admin.
Timing matters. Some data is in the order from the moment it exists; some arrives seconds or minutes later. Each section below says when.
Bloom writes four order tags. The first pair describes what’s in the order and never changes. The second pair tracks fulfilment state and changes over time. All four are plain Shopify order tags - filter by them in admin or match on them in Flow.
Content tags - seconds after creation
Added when Shopify’s orders/create webhook fires, usually within seconds:
Pre-order - the order contains at least one pre-order line.
Pre-order: All items - every line is a pre-order.
Pre-order: Some items - a mix of pre-order and in-stock lines.
Every pre-order order gets Pre-order plus exactly one of the other two.
Pre-order: Hold - added by a background job within minutes, while Bloom holds fulfilment.
Pre-order: Ship - replaces Pre-order: Hold when the last hold on the order releases. That can be weeks after the order was placed.
An Order created Flow trigger fires before any of these tags exist. To catch pre-orders at creation time, check the line item properties or selling plan below instead.
Line item data - at creation
Present on every pre-order line from the moment the order exists. Safe for any trigger, including Order created.
Selling plan
Every pre-order line is sold on Bloom’s selling plan:
sellingPlan.name = Pre-order
sellingPlan.sellingPlanId = gid://shopify/SellingPlan/<id> - the ID differs per shop, so match on the name.
Line item properties
_bloom_preorder = true - on every pre-order line. The most reliable creation-time check.
_bloom_preorder_message = the variant’s pre-order message, plain text. Absent when no message is set.
- Cart line label (default
Ships) = the same message, keyed by your Cart line label setting. This is the customer-visible copy - Shopify renders it in cart, checkout, and emails, while underscore-prefixed properties stay hidden.
See Order confirmation emails for a working Liquid example using these properties.
Order attributes - at creation
_bloom_bis = <productId>:<variantId> - only on orders attributed to a Notify Me sign-up. Either side can be empty. Use it to measure which back-in-stock notifications convert.
Order note - seconds after creation
Bloom appends a block to the order note, between fixed markers:
▼▼ Pre-order [Bloom] ▼▼
<header message>
<update lines>
▲▲ Pre-order [Bloom] ▲▲
Bloom only ever rewrites what’s between the markers - anything you write outside them stays put. Update lines are appended when you change pre-order info on existing orders.
Fulfilment hold - minutes after creation
Bloom places a hold on each pre-order fulfilment order:
reason = UNKNOWN_DELIVERY_DATE
handle = bloom-preorder-hold-<orderId>-<fulfillmentOrderId>, or bloom-preorder-merged-… when Shopify merges fulfilment orders.
These aren’t order data - they’re Bloom’s per-variant settings, and they exist before any order is placed. Read them in Shopify Flow conditions; they’re not readable from Liquid email templates.
$app:preorder:
enabled (boolean) - pre-order is on for the variant.
message (string) - the PDP message.
message_cart (string) - the cart message.
available_at (datetime) - the expected availability date.
oversell_limit (integer, ≥ 0) - how far inventory can go negative.
$app:notifyMe:
disabled (boolean) - Notify Me is off for the variant.
button_message, header_message, message (strings) - the widget copy.
schedule (datetime) - when Notify Me flips on automatically.