The moment it happens
Be warned when an AfterShip parcel is stuck
When a delivery attempt fails or a carrier flags an exception, you find out first and can reach the customer.
- Runs
- The moment it happens
- Apps
- AfterShip
- AI
- Not needed
- Access
- API key
Send this to your assistant
Create a ClickRuntime automation: when an AfterShip tracking moves to Exception or AttemptFail, email me the order number, tracking number, carrier and the checkpoint message.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
When a parcel gets an exception, such as damaged in transit, held at customs or delivery failed, every hour counts. A customer who ordered a gift for a birthday on Saturday needs to hear on Wednesday that it is stuck, not on Saturday when it is too late. Support teams that wait for AfterShip's dashboard to be checked, or for the customer to email, give up the one window in which a refund, reship or call to the carrier still fixes the problem.
AfterShip sends a webhook when a tracking changes. The automation checks the tag and, when it is an exception or a failed attempt, alerts your team with the tracking number, carrier and last checkpoint message. Other updates are ignored.
It is useful for stores selling time-sensitive goods, high-value items or international orders.
What you get out of it
Customers hear from you first
A short message saying you know about the delay and are fixing it builds trust. Customers forgive problems far more easily when you tell them before they ask. Being early with bad news is a service in itself.
Refunds and reships are faster
The sooner you know a parcel is damaged or lost, the sooner a replacement can ship. That can turn a ruined delivery into a recovered sale. Replacement orders sent within a day feel like care, not compensation.
Carrier claims are filed on time
Many carriers set strict deadlines for damage and loss claims. An alert that arrives when the exception occurs leaves plenty of time to collect evidence and file. Missing a claim window can mean absorbing the whole loss yourself.
High-value orders get special attention
You can limit alerts to orders above a value, so the team's attention goes to the shipments where a failure costs the most. A single threshold turns a flood of alerts into a short, valuable list.
Customs problems are fixed in time
An international parcel held for missing information needs a fast reply. The alert gives the team the checkpoint text so they know what the customs authority wants. Waiting a week for the customer to complain can mean the parcel is already sent back.
How it works
What happens, step by step
When a parcel's tracking changes in AfterShip, AfterShip tells ClickRuntime straight away.
ClickRuntime only acts if a delivery attempt failed or the carrier flagged an exception.
You get an email with the order number, tracking number, carrier and the latest checkpoint message.
Before it runs live
- Connect AfterShip
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other AfterShip steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, notify
@on_event
def handle(event):
t = (event.json or {}).get("msg") or {}
if t.get("tag") not in ("Exception", "AttemptFail"):
return {"tag": t.get("tag")}
checkpoint = (t.get("checkpoints") or [{}])[-1]
notify.email_me(f"{t['tag']}: order {t.get('order_id') or '-'}",
f"Tracking: {t['tracking_number']} ({t['slug']})\nCheckpoint: {checkpoint.get('message', 'no message')}")
return {"tracking": t["tracking_number"]}FAQ
Common questions
What counts as an exception in AfterShip?
Will I get an alert for every repeated update on the same parcel?
Can the alert go to the customer too?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Start the day with your delivery status counts
Each morning you see how many trackings are delivered, in transit or in exception.
See how it worksPost new orders and sign-ups to Slack
When something happens in your shop, app or form, the details land in the right channel straight away.
See how it worksBook appointments only when you're free
Booking requests are accepted only for free slots within your hours, and land on your calendar with the attendee.
See how it worksKeep exploring
Set up “Be warned when an AfterShip parcel is stuck” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.