
Payment chasing is exactly the sort of job automation should be good at.
Wait 24 hours. If still unpaid, send a reminder. Check again at 3 days. Then 7 days. Stop immediately if payment arrives.
Simple.
Until you ask Shopify what “unpaid” actually means.
The dangerous shortcut
A tempting rule is: if an order is not fully paid, chase it.
That can be wrong.
An order might involve a deposit, a part payment, a legitimate credit arrangement, a payment in transit, or another state that is not the same thing as “this customer has ignored us”.
What we built
The flow checks payment state at defined intervals and uses tags to stop repeat messaging. There is also a manual escape hatch for orders that should never enter the chase.
The routing into GHL distinguishes overdue, not-due and paid events rather than flattening everything into one boolean.
What went wrong
Testing exposed that a seemingly sensible condition around fully paid was too crude. Search/tag logic also needed to be exact; a small query mistake can mean the workflow sees the wrong set of orders.
During testing we found real overdue orders, which was useful proof that the process mattered, but also proof that this was not a place to guess.
What worked
The final design is less aggressive and more accurate. It follows up when it should, stops when it should, and gives us explicit controls for exceptions.
The lesson
Automation should remove repetitive judgement, not remove judgement entirely.
If a workflow can annoy a customer, “close enough” logic is not close enough.
Steal the idea, not the secrets
Want to build your own version?
This is the public build brief: enough architecture to get moving, without the production-specific wiring that took the painful bit to discover.
Build an automated unpaid-order follow-up workflow.
Requirements:
- Start when an order is created in a payment state that may require follow-up.
- Wait 24 hours, then re-check the live payment status before doing anything.
- Repeat the same check at 3 days and 7 days.
- Stop immediately when payment is received.
- Distinguish genuinely overdue orders from deposits, part payments, credit terms and payments still in transit.
- Add a manual do-not-chase override.
- Prevent duplicate reminders.
- Log which reminder was sent and why.
- Route paid, overdue and not-yet-due states separately.
- Make all customer-facing messages easy to edit without changing the workflow.
Do not base the workflow on one simplistic boolean. Treat payment state as business logic that must be re-validated at every step.