Skip to main content

Shopify events and variables

The complete reference for what fires an automation and what data you can put in a template.

Who can do this

  • Developer
  • Owner
  • Admin
  • Agent

Before you start

  • A connected Shopify store.
  • A checkout that captures the customer's phone number. Without one there is no number to message and events go nowhere.

Triggers

Boldally listens to these Shopify webhooks. They are registered automatically on install; there is nothing to configure in Shopify.

Shopify eventAutomation triggerFires when
orders/createOrder placedA customer places a new order
orders/paidOrder paidPayment is captured
orders/fulfilledOrder fulfilledThe whole order is marked fulfilled
orders/partially_fulfilledOrder partially fulfilledPart of the order ships
orders/editedOrder editedThe order's contents are edited
orders/cancelledOrder cancelledThe order is cancelled
refunds/createOrder refundedA refund is issued
fulfillments/createShipment createdA shipment is created and tracking added
fulfillments/updateShipment updatedCarrier status changes. Only sends on out for delivery and delivered; an automation can be scoped to one of them.
checkouts/create, checkouts/updateAbandoned checkoutA checkout is started but not completed. Sent after your chosen delay, and cancelled if the order comes through.

Which variable groups each trigger exposes

TriggerGroups available
Order placed / paid / fulfilled / partially fulfilled / edited / cancelledCustomer, Order, Shipping address, Items, Shipping method, Discount, Shipping carrier
Order refundedAll of the above, plus Refund
Shipment created / updatedAll order groups, plus Shipment
Abandoned checkoutCustomer, Checkout

The groups

Customer

VariableExample
First namePriya
Last nameSharma
Full namePriya Sharma
Emailpriya@example.com
Phone+919876543210
Lifetime orders7
Lifetime spend12,499.00
Tagsvip, repeat

Order

VariableExample
Order number#1042
Order number (numeric)1042
Order status linkhttps://shop.example.com/…/orders/abc
Total1,299.00
Subtotal1,199.00
Items total999.00
Tax100.00
Total discounts150.00
CurrencyINR
Payment statuspaid
Payment methodCash on Delivery (COD)
Fulfillment statusfulfilled
Order noteLeave at door
Order tagsprepaid, festive
Cancel reasoncustomer
Sourceweb

Shipping address

VariableExample
Recipient namePriya Sharma
Recipient first namePriya
Recipient last nameSharma
Recipient phone+919876543210
CompanyAcme Co.
Address line 112 MG Road
Address line 2Apt 3B
CityBengaluru
State / provinceKarnataka
CountryIndia
Postal code560001

Items

First item fields refer to the first product on the order. To list every product, use Combine.

VariableExample
Number of items3
First item nameCotton T-Shirt
First item variantLarge / Black
First item quantity2
First item SKUTSHIRT-L-BLK
First item price999.00
First item brandJELLICO

Shipping method

VariableExample
Shipping methodStandard
Shipping cost0.00

Discount

VariableExample
Discount codeWELCOME20
Discount amount200.00

Shipping carrier

These describe the first shipment only. If an order can ship in more than one box, use Combine → Shipments instead, or the customer gets one tracking number for a parcel that arrived in three.

VariableExample
Tracking numberAWB123456789
CarrierDelhivery
Tracking URLhttps://track.example.com/AWB123

Shipment

Shipment created and Shipment updated only.

VariableExample
Statusdelivered
Tracking numberAWB123456789
CarrierDelhivery
Tracking URLhttps://track.example.com/AWB123

Refund

Order refunded only.

VariableExample
Refund amount299.00
CurrencyINR
Refund noteItem out of stock

Checkout

Abandoned checkout only.

VariableExample
Recovery linkhttps://shop.example.com/cart/c/abc123
Cart total1,299.00
Cart subtotal1,199.00
CurrencyINR
Number of items2
First item nameCotton T-Shirt
First item quantity1
First item SKUTSHIRT-L-BLK
Discount codeWELCOME20

Combine a list into one variable

Instead of "first item", collapse a whole list into a single variable, for a receipt-style line:

2× Cotton T-Shirt · 998.00, 1× Baseball Cap · 299.00

What can be combined, by trigger:

ListAvailable onExample
ProductsAll order and checkout triggers2× Cotton T-Shirt · 998.00
ShipmentsOrder fulfilled, partially fulfilled, Shipment created, Shipment updatedDelhivery AWB123456, BlueDart AWB998877
Items in this shipmentShipment created, Shipment updated2× Cotton T-Shirt, 1× Baseball Cap
Refunded itemsOrder refunded1× Baseball Cap
Discount codesAll order and checkout triggersWELCOME20 200.00, FREESHIP 50.00
Checkout notesAll order triggersAlternate phone: +919812345678
TaxesAll order triggersCGST 9% 45.00, SGST 9% 45.00

Per product you can include: quantity, name, variant, line total, unit price, brand, SKU.

:::note Unit price vs line total Unit price is what one costs (499.00). Line total is what the customer actually paid for that line: price × quantity, minus any discount on it (998.00). Line total is the default, because it is the one that adds up to the order's subtotal. :::

Styles

StyleResult
Comma2× Cotton T-Shirt, 1× Baseball Cap
Bullet2× Cotton T-Shirt · 1× Baseball Cap
Dash2× Cotton T-Shirt — 1× Baseball Cap
Bulleted• 2× Cotton T-Shirt • 1× Baseball Cap
Numbered1) 2× Cotton T-Shirt 2) 1× Baseball Cap

You can cap the list with Max items, which appends +N more.

:::info Why lists are always on one line WhatsApp does not allow a line break inside a variable; Meta rejects the message outright. A variable that could add line breaks would let a template be rearranged after approval, so the rule protects the approval. Addresses are the exception, because they have a fixed number of lines. :::

Addresses

A variable cannot contain a line break, so a multiline address is built one line per placeholder:

Ship to:
{{2}}
{{3}}
{{4}}
PlaceholderPickRenders
{{2}}Line 1, street12 MG Road, Apt 3B
{{3}}Line 2, city, state, PINBengaluru, Karnataka 560001
{{4}}Line 3, countryIndia

Or pick Full address (one line) for a single variable: 12 MG Road, Apt 3B, Bengaluru, Karnataka 560001, India.

Blank parts are cleaned up rather than leaving stray punctuation, so an order with no "Apt 3B" renders 12 MG Road, not 12 MG Road,.

:::caution Orders with no shipping address Digital products and POS sales have no address, and every address line falls back to a dash. If that is possible in your store, put a condition on Address line 1 before the message and send a different template when it is empty. :::

Checking a binding before you go live

Two tools, in this order:

  1. Variable inspector on SettingsIntegrationsShopify shows what each variable resolves to for your store.
  2. Test mode on the automation, with a test-contact tag, runs the whole thing against a real order without messaging customers. See testing automations.
Automations
Building the automation these variables feed.
Template variables
How placeholders and parameters fit together.