Order tags
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’sorders/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.
Pre-order plus exactly one of the other two.
Fulfilment state tags - minutes after creation, then on release
Pre-order: Hold- added by a background job within minutes, while Bloom holds fulfilment.Pre-order: Ship- replacesPre-order: Holdwhen the last hold on the order releases. That can be weeks after the order was placed.
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-ordersellingPlan.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.
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:Fulfilment hold - minutes after creation
Bloom places a hold on each pre-order fulfilment order:reason=UNKNOWN_DELIVERY_DATEhandle=bloom-preorder-hold-<orderId>-<fulfillmentOrderId>, orbloom-preorder-merged-…when Shopify merges fulfilment orders.
Klaviyo events
Sent to connected Klaviyo accounts for orders with a customer email. Each shows under Metrics in Klaviyo - use them to trigger flows or build segments. Every event carries anevent_handle that stays the same if the display name changes.
A release makes the order Unfulfilled - it doesn’t dispatch it. Word Pre-order Released emails as “preparing to ship”, not “shipped”. Holds you release yourself in Shopify admin don’t send the event.
Placed Pre-order properties
preorder_value- total of the pre-order lines, matching the event value.total_price- the whole order total.preorder_item_count- number of pre-order lines.preorder_quantity- units across the pre-order lines.all_items_preorder-truewhen every line is a pre-order.cart_message- your all-pre-order or mixed cart notice, whichever fits the order. Omitted when blank.items- each pre-order line, with product and variant IDs and titles, SKU, quantity, price, line total andships_message.order_id,order_number,order_name,currency.
Pre-ordered Product properties
product_id,variant_id,product_title,variant_title,skuquantity,price,line_totalships_message- the variant’s cart message. Omitted when none is set.order_id,order_number,order_name,currency
Pre-order Released properties
released_item_count- number of released lines.released_quantity- units across the released lines.items- each released line, with product and variant IDs and titles, and quantity.order_id,order_number,order_name.
Pre-order Item Released properties
product_id,variant_id,product_title,variant_title,quantityorder_id,order_number,order_name
Variant metafields - config, Flow only
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.
Related
- Updating pre-order info on existing orders - a Shopify Flow workflow built on the
Pre-ordertag - Order confirmation emails - Liquid using the line item properties
- Configure a pre-order product - where the messages and oversell limit are set
