What happened
Scripts ran on Shopify Plus at checkout. They handled the logic the discount editor could not: tiered pricing, customer-specific rates, hiding a payment method, bundling rules, shipping overrides. Shopify retired them and replaced them with Functions.
If you migrated everything, you are fine. If any rule was left behind, it is not throwing an error. It is doing nothing.
That distinction is the whole problem. A broken app shows a broken page. A retired Script shows a working checkout at the wrong price.
A customer who pays full price because their credit did not apply has no way of knowing. The cart looked normal. The total was a number. They complete the order and move on, and so does every customer after them.
Find the ones that are still broken
You are looking for rules that used to fire and no longer do. Work backwards from orders, not from the rule list.
- 01Write down what should always happen. One line each. "Orders over $100 ship free." "Wholesale customers get 20% off." "Code SPRING takes 15% off the Spring collection." You cannot check a rule you have not stated.
- 02Pull orders from before and after 30 June. Export orders with their discount and shipping lines. Two months either side is enough to see a pattern.
- 03Count how often each rule fired. A rule that applied to 12% of orders in May and 0% in July did not get less popular. It stopped running.
- 04Check the shipping lines too. Free shipping that starts charging is the same failure wearing different clothes, and it is easier to miss because the order total still looks plausible.
- 05Look for the opposite as well. Migration can over-apply. A discount landing on ten products when it should land on one costs more than a discount that never fires.
What a broken rule looks like on a real order
Take one order that qualified and read it against the rule you wrote down.
Two of those lines come from the order. Two come from the rule. Nothing in Shopify puts them side by side for you, which is why this is slow to do by hand and why it stays broken for weeks.
Fixing it is the easy half
Most Scripts patterns have a Function equivalent, and there are apps that cover the common ones without a developer. Rebuilding a rule is a known job with a known end.
Knowing when the next one breaks is the harder half. Functions can fail. A discount can be edited by someone who did not know what it was for. An app that owned a rule can be uninstalled. Each of those is silent in the same way, and none of them is specific to Scripts.
Where ShopCanary fits
ShopCanary is a monitoring app for Shopify stores, built by HJB CodeForge. It does the comparison above on every order, so you are not doing it by hand two months late.
You declare the rules that should always hold. It checks each incoming order against them. When one does not fire, the alert names the order and the rule, with expected against actual.
It also keeps a timeline of discount edits, so when a rule stops firing you can see what changed in the hours before it did.
It reads your orders, products and discounts. It has no write access, so it cannot change anything in your store.