Skip to main content

Shipping Exceptions & Alerts

Sometimes shipments don't go as planned. A package might sit at the carrier for days without moving, get stuck in transit, or fail to deliver entirely. Onward's exception detection system monitors for these situations and automatically alerts you (and your customers) through Klaviyo — often before the customer even realizes there's an issue.


What Are Shipping Exceptions?

Shipping exceptions are situations where a shipment may have a problem, even if the carrier hasn't reported an explicit error. Onward detects these by monitoring how long it's been since the last tracking update and comparing that against configurable thresholds.

When an exception is detected, Onward pushes an event to Klaviyo so you can trigger an automated flow — like a proactive "We're looking into your shipment" email.


The Four Exception Types

1. Fulfillment Stalled

A shipping label was created, but the carrier has never picked up the package.

Threshold: Fires after 4 business days without a carrier pickup event.

What it means: The package may still be sitting at the warehouse or drop-off location. Either the merchant hasn't dropped it off, or the carrier hasn't scanned it yet.

Suggested Klaviyo flow:

  • Proactive email to the customer: "Your order is being prepared — we expect it to ship soon."

  • Internal alert to your operations team to investigate the delay.


2. Shipment Stalled

A shipment that was moving has stopped updating — no new tracking events for several business days.

Thresholds:

  • Domestic: 3 business days without a tracking update.

  • International: 5 business days without a tracking update.

What it means: The package may be sitting at a sorting facility, stuck in customs (international), or experiencing a carrier-side delay that hasn't been formally reported.

Important: This exception is suppressed if the shipment has already been flagged as "stuck" (see below) or if the carrier has already reported a "delayed" status — avoiding redundant alerts.

Suggested Klaviyo flow:

  • Email to the customer: "Your shipment hasn't had a tracking update in a few days. We're monitoring it and will keep you posted."


3. Shipment Stuck in Transit

A shipment has been without tracking updates for a prolonged period — significantly longer than a typical delay.

Thresholds:

  • Domestic: 7 business days without a tracking update.

  • International: 20 business days without a tracking update.

What it means: The package is likely stuck somewhere in the carrier's network. This could indicate a lost package, a routing error, or a severe logistical issue.

Suggested Klaviyo flow:

  • Email to the customer: "We noticed your shipment has been delayed longer than expected. Here's what we're doing about it." Include a link to file a claim if the order has Onward shipping protection.

  • Internal escalation to investigate with the carrier.


4. Attempted Delivery

The carrier attempted to deliver the package but couldn't complete the delivery.

Threshold: Fires immediately when the carrier reports the attempt. Has a 24-hour cooldown — if the carrier attempts delivery again within 24 hours, a new alert is not sent (to avoid spamming the customer).

What it means: The carrier tried to deliver but ran into an issue — typically no one was home, the address was inaccessible, or additional information was needed.

Suggested Klaviyo flow:

  • Email/SMS to the customer: "The carrier tried to deliver your package but couldn't reach you. Here's what to do next." Include carrier contact info and any pickup instructions.


How Exception Detection Works

Business Day Calculation

Exception thresholds are measured in business days (Monday through Friday), not calendar days. This avoids false alerts over weekends when carriers may not provide updates.

The calculation uses the merchant's local timezone to determine business days accurately.

Once Per Package

Each exception type fires only once per package (except attempted delivery, which uses a 24-hour cooldown). This means:

  • A package won't trigger "Stalled" twice.

  • Once "Stuck" fires, "Stalled" is suppressed (since "Stuck" is the more severe alert).

  • A "Delayed" carrier status also suppresses "Stalled" — the carrier has already reported the delay.

Exclusions

Exceptions are not fired for:

  • Packages that have already been delivered.

  • Orders that have been refunded.

  • Cancelled fulfillments.

  • Shipments older than 30 days (to avoid alerting on very old data).


Exception Thresholds Summary

Exception

Domestic

International

Fires

Fulfillment Stalled

4 business days

4 business days

Once per package

Shipment Stalled

3 business days

5 business days

Once per package

Shipment Stuck

7 business days

20 business days

Once per package

Attempted Delivery

Immediately

Immediately

24-hour cooldown


Setting Up Exception Flows in Klaviyo

Each exception type is a separate Klaviyo event. To build a flow:

  1. Go to Flows in Klaviyo.

  2. Create a new flow with a Metric Triggered trigger.

  3. Search for the exception event name (e.g., "Onward Shipment Stalled").

  4. Build your flow — email, SMS, or internal notification.

Useful Properties for Exception Flows

  • {{ event.exception_type }} — The type of exception.

  • {{ event.days_since_last_update }} — How many business days since the last tracking update.

  • {{ event.tracking_url }} — Link to the carrier's tracking page.

  • {{ event.track_page_url }} — Link to your branded tracking page.

  • {{ event.protected }} — Whether the order has Onward shipping protection (useful for conditional messaging — e.g., "Don't worry, your order is protected!").

Did this answer your question?