Shopify Scripts migration examples
Every shape of Shopify Script we have catalogued, with the original Ruby, what it becomes, the exact cart that proves it, and the refusals written out in full.
- Script shapes
- 42
- Rebuilt today
- 38
- Refused, with a reason
- 21
Why the refusals are on this page
No migration tool publishes what it cannot do, so a merchant searching for one specific Script shape finds marketing and nothing else. Every refusal here is written out with the reason, the exact wording the app shows, and a link to Shopify's own documentation wherever the reason is Shopify's rather than ours.
13 of the 21 refusals in this library are our own gap, and we say so. 2 are limits in Shopify that no discount app can work around, and 4 are not discounts at all: they need a different kind of Shopify app, named on the page.
How your Script was written
The two dialects most pasted Ruby is written in, and what each one gives away for free.
- Help Center script templateRebuilt
The dialect Shopify’s own documentation taught, with its settings block above a do-not-edit banner.
- Script Creator outputRebuilt
Generator output, with a CAMPAIGNS array at the bottom that states the merchant’s intent as data.
Prices and percentages
Setting a price, taking an amount off, and the pair that differ by a single minus sign.
- Fixed price per itemRebuilt
Everything in the clearance line repriced to one round number per unit.
- Amount off each itemRebuilt
A flat sum taken off every unit, however many the shopper bought.
- Amount off the orderRebuilt
One lump sum off the whole cart, spread across the lines.
- Sitewide percentage offRebuilt
One percentage off the whole catalogue, with no condition attached.
- Capped percentage discountRebuilt
A percentage with a ceiling on it, so a large cart never gave away more than a set maximum.
- Remove VAT outside the EURebuilt
Tax-inclusive prices reduced for shoppers outside the VAT area.
Quantities, BOGO and free units
Buy-and-get offers, and the counting decisions that change how much you give away.
- Buy one get one freeRebuilt
A set of paid units earns an extra unit at no charge.
- Buy X get Y, inclusiveRebuilt
The same buy-and-get offer, counted so the reward sits inside each set rather than beside it.
- Limit the discounted unitsRebuilt
The discount applied to the first few units only, with the rest at full price.
The least expensive thing in the cart discounted, once.
- BOGO across the cartRebuilt
Buy-and-get applied to the whole eligible selection rather than within one line.
Spend thresholds
Rewards that unlock once the cart is worth enough.
- Spend threshold, percentageRebuilt
A percentage that unlocks once the cart is worth enough.
- Spend threshold, amount offRebuilt
A flat sum off the order once the cart crosses a value.
- Discounted cart subtotalShopify platform limit
A threshold read from what was left after a code had already come off.
Shipping
Discounting delivery, and the shipping scripts that turn out not to be discounts at all.
- Percentage off shippingRebuilt
A share taken off every delivery rate at checkout.
- Amount off shippingRebuilt
A flat sum off the delivery charge, floored at free.
- Flat rate shippingNot supported yet
Every delivery rate rewritten to one price rather than reduced by an amount.
Delivery drops to free once the cart is worth enough.
Free delivery for one group of customers and nobody else.
- Discount one named rateNot supported yet
One delivery option discounted while the others stayed at full price.
- Free shipping on certain productsNot supported yet
Delivery went free because of what was in the cart, not what it was worth.
- Hide shipping ratesDifferent Shopify API
A delivery option removed from checkout under a condition.
Who the discount reached
Customer tags, order history and lifetime spend.
- First order discountNot supported yet
A discount for shoppers with no order history, or with enough of it.
- First time customer, cheapest itemNot supported yet
A new-customer gate wrapped around a cheapest-item reward.
- Lifetime spend discountNot supported yet
A reward for customers who had spent enough over their lifetime.
- Customer tag discountRebuilt
A discount only tagged customers ever saw.
Discount codes
Scripts that watched for a code, matched a whole family of them, or turned one away.
- Reject a discount codeNot supported yet
A code the shopper typed, turned away at checkout with a message.
- Discount code drivenRebuilt
Script logic that only ran when the shopper had typed a particular code.
- Discount code patternNot supported yet
A whole family of codes driving one rule through a prefix match.
Scope and exclusions
What a discount was allowed to touch, and what it had to leave alone.
- Scoped to a tag or vendorRebuilt
A discount limited to products carrying one tag, vendor or type.
- Exclude sale itemsRebuilt
Already-marked-down products protected from a second discount.
- Exclude gift cardsRebuilt
Gift cards left out of a discount that would otherwise have hit them.
- Line item propertyNot supported yet
A discount keyed on a property attached to one cart line.
- Exclude subscription itemsNot supported yet
Subscription lines held apart from the discount that hit everything else.
- Skip already discounted itemsShopify platform limit
Lines another discount had already touched, held back from a second one.
Not a discount at all
Scripts that changed the cart or the checkout rather than the price.
- Purchase quantity limitDifferent Shopify API
A cap on how many units a shopper could buy, enforced by trimming the cart.
- Remove products by countryDifferent Shopify API
Products that could not ship to the shopper’s country, quietly deleted.
- Hide a payment methodDifferent Shopify API
A payment option taken off checkout under a condition.
Problems with the file itself
Two ways a paste is unreadable before anything can be rebuilt from it.
- Several campaigns in one fileNot supported yet
One file holding several separate rules that ran one after another.
- Copied from a forum threadCheck your paste
A paste that lost its instance variables on the way through a forum post.
Paste your dead Script and see what it becomes
The rebuild is checked against the amount your old Script charged before anything can be published.