Auto-correct address typos and hold the orders you can't fix

By General Input

Every weekday morning, harmless address typos get fixed on unshipped orders, and anything undeliverable is held while the customer confirms it.

Integrations

  • Shippo
  • Shopify
  • Gmail
  • Slack Bot

Type

Agentic Task

Categories

  • Operations
  • Customer Support

Every weekday morning on a cron schedule, check the shipping address on every order I am about to ship, and either fix it or flag it before anyone buys a label. Bad addresses cost twice, once for the wasted label and again for the reship, so I want them caught while the order is still sitting with us.

Start with Shopify List Orders to pull orders that are paid but not yet fulfilled. Skip anything already fulfilled, cancelled, or unpaid, so we are never revalidating shipping history on every run.

For each of those orders, run the shipping address through Shippo Validate Address.

Treat the results as two clearly different outcomes, because the right action is different for each.

First outcome: Shippo returns a clean correction that only normalizes formatting, meaning the parcel still arrives at exactly the same door. Examples are abbreviating or expanding a street suffix, fixing casing, adding the ZIP+4 extension, correcting a misspelled city, or filling in a state that the postal code already implies. Apply these with Shopify Update Order, writing the corrected shipping address back, and in the same update append a short note to the order recording precisely what changed, for example "Address auto-corrected 2026-08-11: city HOUSTEN to Houston, ZIP 77002 to 77002-1234". Never silently change an address without leaving that note.

Second outcome: the address is genuinely undeliverable or ambiguous. This covers a missing apartment or suite number on a multi-unit building, a street the carrier cannot find, a mismatch between the city and the postal code, or any result where Shippo is not confident enough to correct it. Do not modify the address. Instead use Shopify Update Order to add a tag such as address-review so the order is visibly on hold, plus a note explaining exactly what Shippo objected to and the date it was held. Recording the hold date in the note matters, because tags alone do not carry a timestamp and later runs need it to work out how long an order has been stuck.

For each held order, use Gmail Send a Message to email the customer a short, friendly note. Greet them by name, tell them their order is ready to go and we want to be sure it reaches them, say plainly what looks wrong (for example "we could not find an apartment or unit number"), show the address we currently have on file, and ask them to reply with the correct version. Keep it to a few sentences, warm and apologetic in tone, with no blame and no shipping jargon.

Before sending any email, check the order's existing tags and notes first. If an earlier run already emailed this customer about this order, do not email again. Just carry the order forward as still waiting. Exactly one customer email per order, no matter how many mornings it stays unresolved.

Finish with a single Slack Bot Send a Message digest to the fulfillment channel, covering three things: how many addresses were auto-corrected with a one line list of what changed, which orders are on hold waiting for a customer reply, and, called out as its own separate section, any order that has been held for more than two days so nothing quietly stalls. If a held order is well past two days, say so plainly and suggest someone call the customer. If nothing needed attention at all, still post a short all clear so the team knows the check actually ran.

Related prompts

Explore more prompts
Win back LiveChat visitors whose chats went unansweredA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seats