CWILL Tracking Events and Triggers Overview

This article explains the shipment events CWILL Tracking can send, what each event means, when it is triggered, and how to configure it. You can send these events to Klaviyo, Omnisend, Zapier, Shopify Flow, and Shopify Email to automate your post-purchase experience.

Five events are available: Shipment status update, Shipment sub-status update, Post-purchase EDD expired, Shipment transit delay, and Shipment stalled. The first three are simple on/off events. Shipment transit delay and Shipment stalled are rule-based: you decide which shipments each rule covers and how many days should pass before an event is sent.

Plan requirement: CWILL Tracking events require the Professional plan or above.


Where to find these settings

Shipment status update

Shipment sub-status update

Post-purchase EDD expired

Shipment transit delay

Shipment stalled

Using Rule ID in your integrations


Where to find these settings

Go to CWILL Tracking admin → Integration → click the CWILL Tracking events button → set up the events you want to send




Shipment status update

When it's triggered

Triggered when the shipment status changes (e.g., from "In transit" to "Out for delivery").

Shipment statusDescription
Info receivedThe carrier received a shipping request and is about to pick up the shipment
In transitThe shipment is on its way
Out for deliveryThe shipment is out for delivery
Ready for pickupThe shipment is available for the customer to collect from a pickup location
DeliveredThe shipment has been delivered successfully
ExceptionThe shipment encounters shipping exceptions, such as damaged, lost, or returned
Failed attemptThe carrier attempted delivery but failed due to some reasons
ExpiredTracking details have not been updated for 30 days


How often it's sent

Once per status, per shipment. If a shipment returns to a status it has already reported, no event is sent the second time.

Example: a shipment reaches Out for delivery, then Failed attempt, then Out for delivery again. The first two send an event. The return to Out for delivery does not, because that status was already reported for this shipment.


Which shipments it applies to

All shipments, whether they were created before or after you turned this event on. Only status changes that happen from that point forward are sent; changes that already happened are not sent retroactively.


How to set it up

Turn on Shipment status update. There is nothing else to configure. Every status in the table above is included, and this event never has a Rule ID.


Example workflow in Klaviyo
  • Trigger: CWILL Tracking - Shipment status update
  • Filter: shipment_status equals Delivered
  • Send: A thank-you email, optionally with a discount code for the next order




Shipment sub-status update

When it's triggered

Triggered when the shipment sub-status changes (e.g., from "Picked up by carrier" to "Arrived at sorting facility").

IconShipment statusShipment sub-statusDescription
Info ReceivedInfo receivedInfo receivedThe carrier received a shipping request and is about to pick up the shipment
In TransitIn transitIn transitThe shipment is on its way
Picked up by carrierThe carrier has collected the shipment from the sender
Arrived at sorting facilityThe shipment has arrived at a hub or sorting center
Customs clearance completedCustoms clearance completed
Departed from airportThe shipment has left the airport and is en route to the next destination
Arrived at destination countryThe shipment has arrived at the destination country
Arrived at local facilityThe shipment has arrived at a local distribution center
Out for DeliveryOut for deliveryOut for deliveryThe shipment is out for delivery
Contacted before final deliveryThe customer is contacted before the final delivery
Ready for pickupReady for pickupReady for pickupThe shipment is available for the customer to collect from a pickup location
DeliveredDeliveredDeliveredShipment delivered successfully
Picked up by customerShipment picked up by the customer
Signed by customerShipment delivered and signed by the customer
Delivered to doorstepThe shipment was left at the doorstep or with the neighbor
ExceptionExceptionExceptionOther exceptions
UnclaimedThe shipment is unclaimed
Retained by customsThe shipment was retained by customs
Shipment damaged or lostThe shipment was damaged or lost
Shipment canceledThe shipment was canceled
Refused by customerThe customer has refused to accept the shipment
Returned to senderThe shipment has been successfully returned to the sender
Returning to senderThe shipment is being returned to the sender
Failed AttemptFailed attemptFailed attemptThe carrier attempted delivery but failed due to some reasons
Invalid addressThe delivery failed due to address-related issues
Customer not availableThe delivery failed because the customer was not available
Failed to contactThe delivery failed because the customer was unable to contact
ExpiredExpiredExpiredTracking details have not been updated for 30 days

Note: The Fulfilled and Unfulfilled sub-statuses are not included in this event. If you need fulfillment data, use Shopify's native events instead, which are more accurate.


How often it's sent

Once per sub-status, per shipment. If a shipment returns to a sub-status it has already reported, no event is sent the second time.


Which shipments it applies to

All shipments, whether they were created before or after you turned this event on. Only sub-status changes that happen from that point forward are sent; changes that already happened are not sent retroactively.


How to set it up

Turn on Shipment sub-status update. Every sub-status in the table above is included, and this event never has a Rule ID.


Example workflow in Klaviyo
  • Trigger: CWILL Tracking - Shipment sub-status update
  • Filter: shipment_substatus equals Returning to sender
  • Send: An email telling the customer the parcel is heading back




Post-purchase EDD expired

When it's triggered

Triggered when the estimated delivery date (EDD) has passed, and the shipment is not marked as delivered.

  • Post-purchase EDD must be turned on for this event to work. If the feature is off, no shipment has an EDD to expire.
  • If a shipment has more than one EDD source, the latest end date decides whether the EDD has expired.
  • Shipments that are already delivered never trigger this event.


How often it's sent

Once per shipment. If the EDD is later updated and expires again, no second event is sent.


Which shipments it applies to

Only shipments whose order was created after you turned this event on. If you turn the event off and back on, the most recent time you turned it on becomes the new starting point, and shipments from orders created before that time no longer qualify.


How to set it up

Turn on Post-purchase EDD expired. Make sure Post-purchase EDD itself is also turned on. This event never has a Rule ID.


Example workflow in Klaviyo
  • Trigger: CWILL Tracking - Post-purchase EDD expired
  • Filter: None
  • Send: An apology email that acknowledges the delay and links to the tracking page




Shipment transit delay

When it's triggered

Triggered when a shipment remains undelivered after reaching the predefined number of transit days.

Transit timeThe number of days since the carrier picked up the shipment
  • A shipment triggers the event when its transit time is greater than or equal to a Day(s) threshold in the rule it matches.
  • Shipments that are already delivered never trigger this event.


How rules work

Before you create anything, the rule list already contains one rule covering All carriers, All locations, and All destinations. That is your baseline: turn the event on and every undelivered shipment triggers the event once its transit time reaches the threshold set there.

Add a rule when part of your shipping needs a different threshold. Each rule targets a combination of three conditions and one or more day thresholds:

  • Carrier - one, several, or all carriers
  • Location - one, several, or all Shopify locations the order ships from
  • Destination - one, several, or all destination countries, and the provinces or states within them
  • Day(s) - one or more thresholds, such as 15d and 22d

As soon as you add your first rule, the baseline rule is renamed Other conditions and covers only what your specific rules don't: "all carriers, locations, and destinations not specifically configured will be assigned here." You can edit it, or disable it if you only want events for the combinations you have built rules for. It can never be deleted. While  Other conditions is enabled, any carrier or location added later is covered by it until you build a rule for that combination.

Rules never overlap. Once a combination is used by one rule, it is unavailable to the others, so options already taken appear disabled while you build a new rule. Every shipment therefore matches exactly one rule, and you never have to think about which rule wins.

Every rule, including Other conditions, has its own Rule ID. See "Using Rule ID in your integrations" below.


How often it's sent

Once per Day(s) threshold in the matched rule, per shipment. A shipment never triggers the same threshold twice.

Example: a rule is set to 15d and 22d. When transit time reaches 15 days, an event is sent. When it reaches 22 days, a second event is sent. Transit time counts up from pickup and never resets, so a shipment moves through the thresholds of a rule in one direction only.


Which shipments it applies to

Shipments whose order was created after both of the following, whichever happened later:

  • the time you turned Shipment transit delay on
  • the time the matching rule was created

Editing a rule does not change its starting point; only creating one does. For Other conditions, the starting point is the time you turned the event on, or the last time you re-enabled the rule, whichever is later. If you turn the event off and back on, the most recent time counts.


How to set it up
  1. Click Add rule. Choose the carriers, locations, and destinations you want to target. Options already used by another rule are disabled.
  2. Enter one or more Day(s) thresholds. Each threshold must be larger than the one before it.
  3. Save the rule, then repeat for any other combination you want to treat differently.
  4. Edit Other conditions to set the threshold for everything else.
  5. Turn on Shipment transit delay.


Configuration examples

A. USPS within the United States

Carrier: USPS / Location: your US warehouse / Destination: United States / Day(s): 8d

Domestic ground service usually delivers within a few days, so a short threshold catches problems early without false alarms.

B. YunExpress to Europe, escalating

Carrier: YunExpress / Location: your international warehouse / Destination: Germany, France, Spain, Italy / Day(s): 15d, 22d

Cross-border lines take longer and vary more, so two thresholds let you change your message as the delay grows. At 15 days you reassure the customer the package is still moving. At 22 days you reach out with real support, before the customer opens a ticket.

C. Everything else

Other conditions / Day(s): 20d

A deliberately loose threshold so unusual routes are still caught without flooding you with alerts.


Example workflows in Klaviyo

Each event carries the Rule ID of the rule that sent it and the shipment's transit_time, so you can build one flow per threshold and change your message as the delay grows.

Using the YunExpress rule from example B above, set to 15d and 22d with Rule ID 68PCTN7K:

Reassurance at 15 days

  • Trigger: CWILL Tracking - Shipment transit delay
  • Filter: rule_id equals 68PCTN7K AND transit_time equals 15
  • Send: A "still on its way" email naming the carrier, linking to the tracking page

Proactive support at 22 days

  • Trigger: CWILL Tracking - Shipment transit delay
  • Filter: rule_id equals 68PCTN7K AND transit_time equals 22
  • Send: An apology that acknowledges the delay, with a direct reply-to for support

If you later change a threshold in the rule, update the matching value in your flow filters so they keep firing.




Shipment stalled

When it's triggered

Triggered when a shipment shows no tracking updates after reaching the predefined number of days.

Residence timeThe number of days since the last tracking info update
  • A shipment triggers the event when its residence time is greater than or equal to a Day(s) threshold in the rule it matches.
  • Shipments that are already delivered never trigger this event.


How rules work

Before you create anything, the rule list already contains one rule covering All status and All carriers. That is your baseline: turn the event on and every undelivered shipment triggers the event once it has gone without a tracking update for the number of days set there.

Add a rule when a particular status or carrier needs different timing. Each rule targets a combination of two conditions and one or more day thresholds:

  • Status - one, several, or all shipment statuses. You can also select individual sub-statuses, shown as "In transit (6 of 7 sub-status)"
  • Carrier - one, several, or all carriers
  • Day(s) - one or more thresholds, such as 3d, 8d, and 14d

As soon as you add your first rule, the baseline rule becomes Other conditions and covers "all status and carriers not specifically configured." You can edit it, or disable it if you only want events for the combinations you have built rules for. It can never be deleted. While Other conditions is enabled, any carrier added later is covered by it until you build a rule for it.

Rules never overlap. Once a combination is used by one rule, it is unavailable to the others, so options already taken appear disabled while you build a new rule. Every shipment therefore matches exactly one rule, and you never have to think about which rule wins.

Every rule, including Other conditions, has its own Rule ID. See "Using Rule ID in your integrations" below.


How often it's sent

Once per Day(s) threshold in the matched rule, per shipment. A shipment never triggers the same threshold twice.

Residence time resets every time a new tracking update arrives, and the count starts over. A threshold the shipment has already triggered does not trigger again after the reset; the higher thresholds simply take longer to reach.

Example: a rule is set to 3d, 8d, and 14d. A shipment goes quiet and triggers 3d on day three, then 8d on day eight. On day ten the carrier scans it, and residence time starts over. The shipment must now stay quiet until residence time reaches 14 before 14d triggers, and 3d and 8d never trigger again.


Which shipments it applies to

Shipments whose order was created after both of the following, whichever happened later:

  • the time you turned Shipment stalled on
  • the time the matching rule was created

Editing a rule does not change its starting point; only creating one does. For Other conditions, the starting point is the time you turned the event on, or the last time you re-enabled the rule, whichever is later. If you turn the event off and back on, the most recent time counts.


How to set it up
  1. Click Add rule. Choose the statuses and carriers you want to target. Options already used by another rule are disabled.
  2. Enter one or more Day(s) thresholds. Each threshold must be larger than the one before it.
  3. Save the rule, then repeat for any other combination you want to treat differently.
  4. Edit Other conditions to set the threshold for everything else.
  5. Turn on Shipment stalled.


Configuration examples

A. Uncollected La Poste pickups, escalating reminders

Status: Ready for pickup / Carrier: La Poste / Day(s): 3d, 8d, 14d

Carriers return uncollected parcels to the sender at their own cutoff, so escalating reminders give customers several chances to collect before you are left with a return to process and refund.

B. Everything else

Other conditions / Day(s): 5d

A single threshold that covers every other status and carrier, so a shipment going quiet anywhere in your operation still reaches you.


Example workflows in Klaviyo

Each event carries the Rule ID of the rule that sent it and the shipment's residence_time. Using the La Poste rule from example A above, set to 3d, 8d, and 14d with Rule ID C2FK2JNK, three escalating messages come from one rule:

First reminder

  • Trigger: CWILL Tracking - Shipment stalled
  • Filter: rule_id equals C2FK2JNK AND residence_time equals 3
  • Send: A friendly note with the pickup location

Second reminder

  • Trigger: CWILL Tracking - Shipment stalled
  • Filter: rule_id equals C2FK2JNK AND residence_time equals 8
  • Send: A reminder that names the collection deadline

Final notice

  • Trigger: CWILL Tracking - Shipment stalled
  • Filter: rule_id equals C2FK2JNK AND residence_time equals 14
  • Send: A warning that the carrier will return the parcel

The residence_time value is what tells the three flows apart.

If you later change a threshold in the rule, update the matching value in your flow filters so they keep firing.




Using Rule ID in your integrations

Every rule for Shipment transit delay and Shipment stalled has a Rule ID, a short code such as 68PCTN7K, shown in the first column of the rule list. It is included with every event that rule sends. Your own Rule IDs will be different.

Rule ID saves you from rebuilding your rules a second time. Without it, a rule covering YunExpress shipments from your international warehouse to four destination countries would have to be recreated as a long list of conditions inside your automation tool, and kept in sync every time you changed it. With Rule ID, you filter on one value and the targeting stays in CWILL Tracking, where you manage it. When you change which conditions a rule covers, its Rule ID does not change, so your automation keeps working without edits.

To use it, copy the Rule ID from the rule list, then add a filter in your automation tool that matches it. In Klaviyo it arrives as rule_id and works as a trigger filter. The equivalent field is available in every integration that receives these events.

Pair rule_id with transit_time or residence_time when you want a different message at each threshold of the same rule; see the Klaviyo examples above.

Shipment status update, Shipment sub-status update, and Post-purchase EDD expired do not use rules, so their Rule ID is always empty.



Need help? Feel free to contact us via online chat or email, our world-class 24/7 support team is always glad to help you 🧐