Verify risky COD orders on WhatsApp before you pack them

A morning queue that ranks pending and unpaid orders by value, shows each buyer's return history, and queues WhatsApp confirmations before anything ships.

App
HeyyShopifyGoogle SheetsOperationsSalesData SyncNotifications & Alerts
PromptCreate

Build me an app my fulfilment team opens every morning to verify risky cash on delivery and unpaid Shopify orders over WhatsApp before anything gets packed. The point is to catch bad orders before we spend money shipping them, so it has to be fast to work through and it has to leave an audit trail outside the app.

The main surface is a verification queue. Build it from Shopify "List Orders" filtered to orders that are pending or unpaid, sorted biggest order value first. Each row shows the order number, the order total, the line items, the buyer's phone number, a simple read on how complete the shipping address looks (flag a missing street number, a missing postcode, or an address that is too short to be real), and how many hours the order has been waiting since it was placed.

Selecting a row opens a side panel with the buyer's past behaviour, pulled with Shopify "Get Customer Orders" for that customer and Shopify "Get Order" for detail on individual past orders. Show prior order count, how many were cancelled, how many were refunded, and the total value they actually kept. That history is what tells the team whether this is a repeat returner or a good customer.

Each row has a "Verify on WhatsApp" button. Important: Heyy has no direct send message operation, so do not try to send anything. Outreach is queued by calling Heyy "Create Contact" with the buyer's phone number, attaching the confirmation label, and writing the order number, the line items and the order total into custom contact attributes. Creating that contact with that label is what fires the pre approved WhatsApp template automation inside Heyy. Those custom fields are defined once with Heyy "Create Contact Attribute", so include a one time setup step that creates the attributes if they are missing and remembers their external ids. Attributes are referenced by external id, not by display name.

Each row should also show which template will render, read with Heyy "List Message Templates", and which connected number it will send from, read with Heyy "List Channels". The team wants to see what the buyer is about to receive before pressing the button.

Each row also has a "Check this buyer" button that kicks off a background agent. The agent reads that customer's Shopify order history with "Get Customer Orders" and "Get Order", judges address quality and repeat return risk, and writes back onto the card a short verdict, a recommended action (verify, call first, or cancel), and a one line personalisation the WhatsApp template can render. Store the agent output in the app so the card displays it and so the "Verify on WhatsApp" handler can pass the personalisation through into the contact attributes.

Every outcome (verified, still waiting, cancelled) is logged to a Google Sheet with "Append Values" and kept current with "Update Values", so ops keeps a dated audit trail outside the app. Each sheet row carries the date, order number, order total, payment method, outcome, and the agent verdict when there is one.

Rules to bake in. Orders the team already handled today must drop out of the queue, so persist per order handling state with its date in the app's own store. Heyy has no list contacts read, so anything the app shows about a person comes from Shopify or the app's own store, never from Heyy. Give the team filters for minimum order value, payment method, and whether the phone number looks valid. Put a simple daily counter at the top showing orders verified versus orders cancelled today, so the saving on returned shipments is visible.

What does this prompt do?

  • Builds a morning verification queue of every pending or unpaid order, biggest value first, with the order total, items, phone number, address quality and how long each one has been waiting
  • Shows the buyer's past behaviour beside each order, including prior cancellations and refunds, so your team can spot repeat returners before packing anything
  • Queues a WhatsApp confirmation for any order with one click, using your pre approved template and your connected business number
  • Runs a background check on any buyer that writes back a short verdict, a recommended action and a personal line for the message
  • Logs every outcome to a dated Google Sheet and keeps a running count of orders verified versus cancelled today

What do I need to use this?

  • A Shopify store with orders that need verifying before dispatch
  • A Heyy account with WhatsApp connected, a confirmation label, and a pre approved message template already set up
  • A Google account and a spreadsheet to keep the daily audit trail in

How can I customize it?

  • Change the order value threshold so only orders above a certain amount need verifying, and filter by payment method or whether the phone number looks valid
  • Adjust what counts as a risky buyer, such as how many past cancellations or refunds trigger a warning
  • Swap which message template and which connected number the confirmations go out from
  • Change what gets written to the audit sheet, or point it at a different spreadsheet per team

FAQs

Does this send the WhatsApp message itself?
Not directly. The app hands the order over to your messaging platform with the right label and details attached, and your existing pre approved WhatsApp template goes out automatically from there. That keeps every message inside the templates WhatsApp has already approved for your business.
Why is this built on pending and unpaid orders rather than abandoned carts?
Abandoned carts are people who never ordered. This is about orders you already have and are about to spend money shipping, which is where cash on delivery losses actually happen. The queue pulls orders that are still pending or unpaid so you confirm real buyer intent before packing.
Will an order I already dealt with show up again tomorrow?
No. Once you mark an order verified, still waiting, or cancelled, it drops out of the queue for the day and the outcome is written to your audit sheet with the date.
Can the whole team use it at once?
Yes. It is a shared queue, so anyone on fulfilment can open it in the morning and work through the same list, and the daily counter at the top shows the team's combined progress.
What does the buyer check actually look at?
It reads that customer's order history in your store, judges how complete and plausible the shipping address is, weighs how often they have cancelled or returned before, then writes a short verdict and a recommended action onto the order card.

Related templates

Call overdue Xero customers with an AI collections agent

Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.

LiveKit
Xero
Deepgram
+2
Agentic Task
Local listing health board for every location you manage

See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.

Local Business Data
Google Sheets
App
Let support send one-off Loops emails without an engineer

Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.

Loops.so
Stripe
Google Sheets
App
Stop cold emails to anyone with a live deal in Pipedrive

Every night at 2am, pull the contacts on your open and won deals and block them from your cold outreach before the next send goes out.

Mailshake
Pipedrive
Google Sheets
Deterministic Code
iMessage campaign console with pre-flight checks and delivery board

Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.

LoopMessage
Google Sheets
HubSpot
App
LinkedIn Ads budget pacing dashboard for every client account

See every LinkedIn ad account's spend against the budget you committed to, catch overspend early, and rebalance without rebuilding a spreadsheet.

LinkedIn Ads
Google Sheets
Slack Bot
App

Stop shipping orders that were never going to be accepted.

Verify risky cash on delivery and unpaid orders over WhatsApp in one morning pass, and watch your returned shipments drop.