Browse the docs

Agent setup guide

Shipping Delay Notifier

Each shipped order is tracked with Shippo: delivery problems and missed promised dates get an apology with the carrier's new ETA, after your approval.

Available About 15 min to set up

What it does

Each shipped order is tracked with Shippo: delivery problems and missed promised dates get an apology with the carrier's new ETA, after your approval.

  • Starts when your store sends a shipped order: order number, customer, carrier, tracking number and promised delivery date.
  • Two days later checks Shippo: a delivery exception or a parcel returned to sender is caught at once; a delivered parcel ends the run.
  • Otherwise checks again the morning after the promised date: not delivered means late.
  • AI writes a short apology with the carrier's new estimated date and the next step from your policy.
  • Dates are worked out in code, never by the AI: days until or since each date, the window and business days are computed in your workflow's time zone, and records outside the window are skipped before the AI sees them.
  • Every email waits for your approval, is checked in code and is sent with replies to your inbox.

What it needs

  • A paid plan (agents run live on paid plans).
  • An AI provider key (Settings → AI Providers).
  • Shippo, connected in Settings → Integrations.
  • A store or tool that can post each shipped order to a webhook (Shopify Flow, a WooCommerce webhook, Zapier or a form).

What it doesn't do

  • It checks twice (after 2 days and after the promised date), not continuously.
  • New dates come only from the carrier's estimate; it never promises compensation beyond your policy.
  • It doesn't reship, refund or change orders, and nothing is sent without your approval.
  • Waits need Wait steps (migration 0062) in your workspace.

Availability and plans

Available

Its workflow is built and tested, and every app it needs is live. You can get it and set it up now.

Included free on the Enterprise plan; on other paid plans it's a one-time purchase per workspace (the price is on the Agents page). The Agents page in the app always shows its current status.

Before you start

  • A paid plan: agents run live, and the Free plan only runs Dry Runs.
  • An AI provider key (OpenAI, Anthropic, Google and more) in Settings → AI Providers. AI usage is billed by your provider.
  • These apps, connected in Settings → Integrations: Shippo.
  • A form, app or system that can send each new item to a webhook URL (the agent starts from a webhook).
  • About 15 minutes.

Set it up step by step

Get the agent first (buy it, or it's already yours when your plan includes it), then in Agents → My agents press “Set up this agent”. That creates the agent's workflow in your workspace (it counts towards your plan's workflow limit) and opens the canvas with a setup checklist above it. Each item links to the exact place to go and ticks itself off when it's done.

1. Connect your AI provider

The AI steps run on your own key (OpenAI, Anthropic, Google and more). Add one in Settings → AI Providers.

2. Connect Shippo

Connect Shippo with a live API key (Settings → Integrations → Shippo).

3. Set your time zone

Open “Check the promised date” and “Work out the new ETA” and enter your time zone.

SettingWhat to enterIn step
Your time zoneYour shop's time zone as an IANA name (e.g. America/Chicago), so “today” and the promised date are judged locally.“Check the promised date”
Your time zone (ETA, same one)The same time zone, for the new ETA.“Work out the new ETA”

4. Pick your Shippo account

Open both tracking steps and pick your Shippo account.

SettingWhat to enterIn step
Shippo accountThe Shippo account your labels are bought with. Pick your connected Shippo account.“Track the parcel”
Shippo account (second check, same one)The same Shippo account. Pick your connected Shippo account.“Track the parcel again”

5. Describe your policy

Open “Write the apology and new ETA” and replace the placeholder, then enter the Reply-to on “Email the customer”.

SettingWhat to enterIn step
Your delay policyReplace the placeholder with your shop, tone, what you offer when a parcel is late or lost, what happens when it's returned, your support email and sign-off. It starts as “[DESCRIBE YOUR SHOP, YOUR TONE, WHAT YOU OFFER WHEN A PARCEL IS LATE OR LOST (E.G. RESHIP AFTER 10 DAYS, REFUND OPTIONS) IN YOUR OWN WORDS, WHAT TO DO WHEN A PARCEL IS RETURNED TO SENDER, YOUR SUPPORT EMAIL AND YOUR SIGN-OFF]” until you replace it.“Write the apology and new ETA”
Your inbox (replies)Customers' replies come back to this address.“Email the customer”

6. Test it with Dry Run

Press Dry Run: the agent runs on sample data with no messages sent and nothing written to your apps.

7. Switch the trigger on

Open the trigger, switch the webhook on and have your store post each shipped order to its URL (with the secret).

How it works

The agent is a normal workflow with 20 steps (1 AI step, with a person approving in Reviews). You can open, edit and monitor it like any other workflow.

  • Order shipped — Starts when your form or app sends data to the agent's webhook URL. Starts when your store (Shopify Flow, a WooCommerce webhook, Zapier or a form) sends a shipped order: order_number, customer_name, customer_email, carrier (Shippo token, e.g. usps), tracking_number, promised_date, items (optional).
  • Check the promised date — Step. In code, not AI: the promised delivery date must be readable and between today and 28 days ahead (in your time zone), and the second tracking check is set for the morning after it.
  • Promised date OK? — Decision: picks the branch to follow. Orders without a readable promised date in the next 28 days aren't watched.
  • Not watched — Kept in the run history. Branch: No usable date. The promised date was missing, unreadable, past or more than 28 days ahead.
  • Wait 2 days — Waits 2 days. Branch: Watch. Gives the carrier two days to scan the parcel before the first check.
  • Track the parcel — Shippo: Track a shipment. Reads the current tracking status and estimated delivery from Shippo.
  • Problem already? — Decision: picks the branch to follow. In code, from Shippo's status: FAILURE (a delivery problem) or RETURNED (on its way back) needs the customer told now; DELIVERED is done; anything else is checked again after the promised date.
  • Delivered — Kept in the run history. Branch: Delivered. Delivered before the first check: nothing to do.
  • Wait until the day after the promised date — Waits until a date taken from the data (at most 30 days). Branch: In transit. Waits until 10:00 the morning after the promised delivery date (worked out in code).
  • Track the parcel again — Shippo: Track a shipment. Reads the tracking status and estimated delivery from Shippo again.
  • Delivered on time? — Decision: picks the branch to follow. In code: DELIVERED is fine; anything else after the promised date means it's late.
  • Delivered on time — Kept in the run history. Branch: Delivered. Nothing to do.
  • Work out the new ETA — Step. Branch: Exception / Late. In code: the carrier's estimated delivery date in long form and how many days away it is, so the AI never does date math.
  • Write the apology and new ETA — AI step (runs on your AI provider key). AI writes a short, sincere apology with the carrier's new estimated date (from code) and the next step from your policy.
  • Approve the delay email — A person approves or rejects it in Reviews (the run waits). The email waits in Reviews: check the dates and next step, edit it and approve. Reject to send nothing.
  • Check before sending — Step. Branch: Approved. In code: still marked to send, one valid customer email, a subject and body with no placeholders.
  • Send it? — Decision: picks the branch to follow. Passes: emailed. Otherwise held, with the reason in the run history.
  • Held: not sent — Kept in the run history. Branch: Held. Set to not send, no valid email, or the email was incomplete.
  • Email the customer — Sends an email from your workspace's sender. Branch: Send. Sends the approved email from your workspace's sender, with replies to your inbox.
  • Delay email sent — Kept in the run history. The run history keeps the tracking checks and the email.

Test it with Dry Run

Press Dry Run in the canvas. The agent runs on the sample data stored on its trigger (the “Sample data for Dry Run” box), so you can check every step's output before anything is live. Edit the sample to match the fields your own form or app sends.

Sample data fields

order_number, customer_name, customer_email, carrier, tracking_number, promised_date, items.

  • Nothing is sent or written: app actions, emails and Slack posts are simulated, and AI steps don't call your AI provider.
  • Approval steps use the Dry Run decision you pick in the step's settings (approved, rejected or timeout), so you can try each branch.
  • Wait steps don't wait: they report how long they would wait and the run goes on.

Go live

  • Open the trigger, switch the webhook on and have your store post each shipped order to its URL (with the secret).
  • The webhook is protected by a secret: send it in the header shown in the Activation panel (requests without it are refused with 403). Each request starts one run.
  • The setup checklist adds a “paid plan” item before activation: live runs need a paid plan (the Free plan only runs Dry Runs).
  • When every checklist item is done and the trigger is on, the checklist says “Live — this agent is running”. Follow its runs in the workflow's History tab and in Analytics → Agents.

Questions

Why does my store send the order instead of Shippo starting it?

Shippo's tracking trigger follows one tracking number, and labels don't carry the customer's email, so the order data comes from your store: Shopify Flow, a WooCommerce webhook, Zapier or a form can post it when an order ships.

When does it check?

Two days after shipping (for exceptions and returns) and the morning after the promised date (for late parcels). It doesn't watch in between.

Does Shippo charge for tracking?

Tracking is included for labels bought on Shippo; Shippo charges per number for other labels. Check your Shippo plan.

Troubleshooting

  • “No AI provider connected” or a rejected key: connect or fix the key in Settings → AI Providers, then press Test there.
  • A checklist item stays unticked: the setting is still empty or still contains its placeholder text. Open the step from the checklist and fill it in.
  • An app step fails with “Needs reconnect”: the account's access was revoked or expired. Reconnect it in Settings → Integrations.
  • Nothing happens when your form sends data: check the webhook is switched on and the request carries the secret header (403 means it's missing or wrong).
  • A run shows as paused: it's waiting for someone in Reviews to approve or reject it.
  • A run shows “Waiting until …” in History: that's a Wait step; it continues on its own (it can be cancelled through the API).
  • A step failed: open the run in History and check that step in the Trace tab for the error and what it received.

Generated from the agent's own workflow, so it always matches what the agent does. Last updated .