The moment it happens
Get an email when an EasyPost tracker reports a problem
The moment a parcel fails, is sent back or errors, you hear about it and can contact the customer first.
- Runs
- The moment it happens
- Apps
- EasyPost
- AI
- Not needed
- Access
- production key
Send this to your assistant
Create a ClickRuntime automation: when an EasyPost tracker changes to failure, return_to_sender or error, email me the tracking code, carrier and the latest tracking detail.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Most packages arrive without any attention, but a few do not: an address that cannot be found, a package held at customs, a failed delivery attempt or a parcel returned to sender. The customer does not know yet, and neither do you, until they email asking where their order is, often days after the problem started. By then the carrier's window to fix it may have closed, and what could have been a quick call is now a refund and an unhappy review.
When EasyPost sends a tracking update, the automation checks the status and, if the shipment has failed, been returned or hit another exception, alerts you with the tracking number and details. You can contact the customer and the carrier first, while the package can still be saved.
Online sellers, fulfillment teams and customer support leads will find it reduces the surprise.
What you get out of it
Fix delivery problems before the customer asks
Reaching out to a customer to correct an address, with the problem already identified, turns a failure into good service. It is much better than answering an angry email that arrives after days of silence.
Packages recovered while still possible
A parcel with a bad address can often be redirected if you act within a day or two. Waiting for the customer to notice usually means it is on its way back to you.
Support spends less time on where is my order
When you already know about the exception, support can reply quickly with a plan. The number of vague where is my package tickets falls as problems are handled proactively, and agents spend their time on real fixes.
Chargebacks and bad reviews avoided
A customer who is told early and offered a replacement is far less likely to dispute the charge. Proactive handling is cheaper than a chargeback fee and a lost customer.
Carrier performance becomes visible
A steady stream of alerts for one carrier or route shows where problems cluster. That is evidence you can use when choosing carriers, adding insurance or negotiating service levels with an account manager.
How it works
What happens, step by step
When an EasyPost tracker is updated, EasyPost tells ClickRuntime straight away.
ClickRuntime only acts if the parcel has failed delivery, is being returned to sender, or has an error.
You get an email with the tracking number, the carrier and the latest tracking message, so you can contact the customer first.
Before it runs live
- Connect EasyPost
- 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 EasyPost steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, notify
BAD = ("failure", "return_to_sender", "error")
@on_event
def handle(event):
body = event.json or {}
if body.get("description") != "tracker.updated":
return {"skipped": True}
t = body["result"]
if t["status"] not in BAD:
return {"status": t["status"]}
last = (t.get("tracking_details") or [{}])[-1]
notify.email_me(f"Tracking {t['status'].replace('_', ' ')}: {t['tracking_code']}",
f"Carrier: {t['carrier']}\nLatest: {last.get('message', 'no detail')} ({last.get('datetime', '')})")
return {"tracker": t["id"]}FAQ
Common questions
Which statuses count as a problem?
How quickly will I hear about an exception?
Does it work for every carrier?
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
See what you spent on EasyPost labels today
Every evening you get the number of labels bought and what they cost in total.
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 “Get an email when an EasyPost tracker reports a problem” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
