# Replace Shopify Scripts shipping discounts

Shopify Scripts stopped running on June 30, 2026, so a shipping Script no longer changes rates at checkout. Shopify's own free shipping discount can't target a rate by name or take a percentage off, which is what most shipping Scripts did. [RM: Advanced Free Shipping](https://apps.shopify.com/better-free-shipping) rebuilds the common shipping discount Scripts without code. It runs as a Shopify Function at checkout, on every Shopify plan, and costs $9.90 USD every 30 days, with a 7-day free trial, billed by Shopify.

The app doesn't read or import your Script. You rebuild each one as a discount in the app, then check that checkout gives the same result.

## Two jobs, two replacements

Shipping Scripts did two different jobs:

- **Discounting rates** (free, percentage off, amount off, a capped price). This is now a shipping discount, and it's what the app does.
- **Hiding, renaming or reordering rates.** This is now a delivery customization. Use a delivery customization app for that part.

## Each Script pattern, rebuilt

| What your Script did | Setup in RM: Advanced Free Shipping |
|---|---|
| Free shipping over $X | **Cart total** (or **Cart subtotal**) **Is at least** X, then **All shipping rates**, **Free** |
| `rate.name.include?("Ground")` | **Choose specific rates**, type "Ground", choose **Add "Ground" (wildcard match)** |
| Free cheapest rate | **Cheapest shipping rate**, **Free** |
| `customer.tags.include?("VIP")` | **Customer tag** **Contains** VIP. The customer must be signed in, as with Scripts |
| Country, state or postcode checks | **Shipping country**, **Province / State** or **Postcode / ZIP** |
| Products or collections in the cart | **Product in cart** or **Product collection** |
| Cart weight or item count | **Cart weight** or **Cart quantity** |
| Percentage or amount off a rate | **Percentage** or **Fixed Amount Off** |
| Cap a rate at a price | **Fixed Price** |
| Only with a code | **Discount code** as the **Discount method** |
| `if` / `elsif` tiers | One discount per tier. The customer gets the one that saves the most |
| `||` (alternative ways to qualify) | Rule groups, joined with OR |

For a product tag check, make a smart collection on the tag and use a **Product collection** condition.

## A worked example

Say your Script made any rate with "Ground" in its name free on carts of $75 or more, and left air rates alone. Your carrier returns "UPS® Ground" at $12.40 and "UPS 2nd Day Air®" at $31.80.

In the app, that's one discount:

1. Under **Conditions**, add **Cart total** **Is at least** 75.
2. Under **Discount setup**, choose **Shipping**, then **Choose specific rates**.
3. Type "Ground" and choose **Add "Ground" (wildcard match)**. It matches any rate name containing "Ground", ignoring case.
4. Set **Discount value** to **Free**.

At checkout:

- **$90 cart:** UPS® Ground shows ~~$12.40~~ Free. 2nd Day Air stays $31.80. With Ground, the customer pays $90.00.
- **$70 cart:** below $75, so Ground costs $12.40 and the customer pays $82.40.

![Typing Express in the rate search of RM: Advanced Free Shipping shows matching rates plus an Add "Express" (wildcard match) option](/images/specific-rates-wildcard.png)

## Scripts that checked several things at once

A Script with `&&` checks becomes one rule group: every condition in the group must pass. A Script with `||` becomes two or more rule groups: any group passing triggers the discount. For example, "VIP customers, or anyone spending $100 shipping to Australia" is two rule groups.

![Conditions in RM: Advanced Free Shipping with two rule groups joined by OR: Customer tag contains VIP, or Cart total is at least $100 AND Shipping country is Australia](/images/rule-groups.png)

One discount can also discount different rates differently, such as free Standard and $10 off Express. Use **Add delivery discount** in the **⋯** menu on **Discount setup**.

## Switch over safely

1. List what each Script checked and what it changed.
2. Build each one with **Test mode** on. It only applies when the shipping first name is ABC123, so customers don't see it yet.
3. Put the carts your Script handled through checkout. Try just below and just above each threshold.
4. Check combinations. For a product or order discount to apply alongside the shipping discount, both must allow it. The app's discounts combine with product and order discounts by default.
5. Turn off **Test mode**.

Only one shipping discount applies per rate, and Shopify gives the customer the one that saves the most. Discounts don't chain the way Script changes could, so build tiers as separate discounts. See [tiered shipping discounts](/guides/tiered-shipping-discounts.md) and [test a shipping discount](/guides/test-a-shipping-discount.md).

## Why it fits a Scripts store

- No Shopify Plus requirement. Scripts needed Plus. Functions run on every plan.
- Nothing to add to your theme. The discounted rate shows its old price crossed out.
- No developer needed. Each pattern above is a few settings.
- Free personalised setup from Brad, the developer. Send him your Script and he'll help map it.

Other options are compared in [Shopify Scripts shipping replacements](/best/shopify-scripts-shipping-replacement.md). For Plus-specific questions, see [RM: Advanced Free Shipping for Shopify Plus](/for/shopify-plus.md).

RM: Advanced Free Shipping is Built for Shopify and rated 5.0 on the Shopify App Store. It costs $9.90 USD every 30 days after a 7-day free trial, billed by Shopify. Install it from the [Shopify App Store](https://apps.shopify.com/better-free-shipping).
