# Ninety9 — full site content
> Ninety9 builds conversion-rate optimisation apps for Shopify: AI cart drawers, bundles, upsell popups, free shipping progress bars and post-purchase order editing. Trusted by 20,000+ stores.
Generated 2026-10-25. Canonical site: https://ninety9.dev
---
# Apps
## Addy: AI Cart Drawer & Bundles
URL: https://ninety9.dev/apps/addy.html
Shopify App Store: https://apps.shopify.com/addy-cart-drawer
Category: Cart customization, Product bundles
Pricing: Free to install
Rating: 5/5 from 2 reviews
Built for Shopify: no
Launched: 2026-08-10
Addy adds a fully customisable slide cart drawer to your Shopify store with AI in-cart upsells, volume discount bundles, subscriptions, a free shipping bar and shipping protection — then targets it per Market, customer tag or even per block.
### Highlights
- AI upsells, bundles and product recommendations that lift average order value
- Different carts for different Markets and customer tags, with block-level rules
- Volume discounts, free gifts, shipping protection and progress-bar reward goals
- Estimated delivery dates, countdown timers, announcement bars and trust badges
- A library of FOMO blocks plus custom HTML and CSS for total design control
### Features
- **AI-built cart drawer** — Addy reads your catalogue, theme and brand and assembles a complete cart drawer for you. You get a working, on-brand cart in minutes instead of an afternoon of configuration.
- **40+ drag-and-drop blocks** — Upsells, bundles, progress bars, announcements, trust badges, order notes, discount fields, gift wrap, countdown timers and more — reorder any of them by dragging.
- **In-cart upsells and cross-sells** — Show frequently bought together, related products or AI recommendations right where intent is highest, with one-click add and no page reload.
- **Volume discounts and free gifts** — Buy-more-save-more tiers, BOGO, bulk pricing, automatic discounts and free gift thresholds, all resolved natively at checkout.
- **Reward progress bars** — Stack goals for free shipping, order discounts and free gifts so shoppers always have a reason to add one more item.
- **Market and segment targeting** — Build a different cart for every Market or customer tag, and add conditions to individual blocks so the right offer reaches the right shopper.
- **Estimated delivery dates** — Show a real delivery window inside the cart to remove the biggest pre-checkout unknown and reduce abandonment.
- **Custom HTML and CSS** — Drop in your own markup and styles when a design needs to go beyond the settings panel. No theme edits, no developer required.
### Works with
- Checkout
- Shopify Admin
- All themes
- Discounts & free gift apps
- Foxify & GemPages
- Judge.me, Loox, Junip, Yotpo
- Multi-currency apps
- PageFly & EComposer
### FAQ
**Does Addy work with my Shopify theme?**
Yes. Addy installs as a theme app extension and is compatible with every Online Store 2.0 theme, plus page builders such as PageFly, GemPages, Foxify and EComposer. There are no theme file edits, so uninstalling leaves nothing behind.
**Will the cart drawer slow my store down?**
Addy loads asynchronously and only renders when the cart is opened, so it stays out of the critical rendering path. It does not block your Largest Contentful Paint and adds no render-blocking scripts.
**Can I show different carts in different countries?**
Yes. Addy supports Shopify Markets targeting, so you can run a different cart layout, different offers and different free shipping thresholds per Market, and target individual blocks by customer tag as well.
**How much does Addy cost?**
Addy is free to install from the Shopify App Store.
**Does Addy support multiple languages and currencies?**
Yes. Every string is translatable and prices render in the shopper’s presentment currency, so international carts read correctly without extra configuration.
## Addly: AI Bundles app & Upsell
URL: https://ninety9.dev/apps/addly.html
Pricing page: https://ninety9.dev/addly-pricing-subscriptions.html
Shopify App Store: https://apps.shopify.com/addly
Category: Product bundles, Upsell and cross-sell
Pricing: Free plan, then from $15/mo
Rating: 4.9/5 from 111 reviews
Built for Shopify: yes
Launched: 2023-04-03
Addly gives you every offer type that lifts basket size — frequently bought together, bundle discounts, cross-sells, quantity breaks, volume discounts, product add-ons and mix-and-match — plus AI offers built from your real purchase history.
### Highlights
- Frequently bought together or a slider upsell with a variety of layouts
- Volume discounts targetable to specific variants to clear slow-moving stock
- Product add-ons and mix-and-match offers with layered discount logic
- Translatable into 13 languages with full multi-currency support
- Analytics that surface your best performing offers, not just totals
### Features
- **Frequently bought together** — Pair the products your customers already buy together and present them as a single, discounted add. Choose from grid, slider or stacked layouts.
- **Quantity breaks and volume discounts** — Tiered pricing that rewards bigger orders, targetable down to individual variants so you can clear specific sizes or colours.
- **Mix-and-match bundles** — Build-a-box, sample packs, gift boxes and infinite-option bundles with discount logic that can nest conditions inside conditions.
- **AI offers from purchase history** — Addly analyses real order data to recommend the pairings that actually convert in your store, instead of guessing from category tags.
- **Product add-ons** — Attach warranties, gift wrap, shipping protection or accessories as optional one-click add-ons on the product page.
- **Live preview before publishing** — See the exact offer as a shopper will, on your real theme, before it goes live. No publish-and-pray.
- **13 languages, every currency** — English, German, Spanish, French, Italian, Japanese, Dutch, Turkish, Simplified Chinese, Korean, Punjabi, Hindi and Swedish out of the box.
- **Offer-level analytics** — Click-through rate, conversion rate and revenue per offer, so you can retire the losers and scale the winners.
### Works with
- Checkout
- Shopify Admin
- Addy: Cart drawer & Upsells
- Foxify & GemPages
- Multi-currency apps
- PageFly & EComposer
- Review apps
- UpCart & One Click Upsell
### Plans
- Free: Free/forever — For stores exploring bundling. No hidden fees on sales.
- Unlimited: $15/mo — Scale with no limits. No hidden fees.
- Advanced: $20/mo — Advanced functionality. No hidden fees.
### FAQ
**What is the difference between Addly and Addy?**
Addly runs offers before the cart — on product and collection pages — with bundles, quantity breaks and frequently bought together. Addy is the cart drawer itself. They are built to run together, and Addly explicitly integrates with Addy.
**Do Addly bundles work with Shopify discount codes?**
Addly applies its discounts through Shopify’s native discount engine, so pricing is correct in the cart and at checkout. Stacking behaviour with other codes follows your Shopify discount combination settings.
**Is there a free plan?**
Yes. Free is free forever, with up to three Basic offers — bundles, upsells, add-ons, cross-sells, volume discounts and default layouts. Unlimited adds unlimited offers, custom design and Markets. Advanced adds AI recommendations, bundle discounts and targeting. Paid plans follow your Shopify plan.
**Why do Unlimited and Advanced show different prices?**
Addly prices those two plans by the shop’s Shopify plan. Basic, Starter, Trial and Development pay $15 / $20/mo. Grow & Advanced pay $20 / $35/mo. Plus pays $39 / $50/mo. Free stays $0.
**Can I target a volume discount to one variant only?**
Yes. Volume discounts can be scoped to specific variants, which makes Addly useful for clearing a single size or colour without discounting the whole product.
**Which languages does Addly support?**
Thirteen: English, German, Spanish, French, Italian, Japanese, Dutch, Turkish, Simplified Chinese, Korean, Punjabi, Hindi and Swedish.
## Goalify: Free Shipping Bar PRO
URL: https://ninety9.dev/apps/goalify.html
Shopify App Store: https://apps.shopify.com/goalify
Category: Gifts, Upsell and cross-sell
Pricing: Free plan, then from $3.99/mo
Rating: 5/5 from 48 reviews
Built for Shopify: yes
Launched: 2024-12-04
Goalify combines progress bars, cart goals, stackable rewards and AI upsells into one experience. Build a free shipping bar, hand out a free gift with purchase, run BOGO and show AI recommendations — set up in under two minutes with no code.
### Highlights
- Rules based on cart value, cart quantity or specific products in the cart
- Stackable rewards: free gift, free shipping and order discount at once
- Unlimited rules and rewards — stack as many goals as your margin allows
- Multiple design templates, fully localised with translation and currency conversion
- Use it as a top bar and as a widget you can place anywhere in the theme
### Features
- **Free shipping progress bar** — The single highest-leverage AOV widget there is. Show shoppers exactly how far they are from free shipping, in their own currency.
- **Stackable reward goals** — Chain goals together: free shipping at $50, 10% off at $80, a free gift at $120. Each threshold crossed reveals the next one.
- **Free gift with purchase** — Auto-add a gift when conditions are met, with full control over which products qualify and how the gift appears in the cart.
- **Condition-based rules** — Trigger on cart subtotal, item count, or the presence of specific products and collections — then combine conditions freely.
- **AI upsells from order history** — When a shopper is short of a goal, Goalify suggests the product most likely to close the gap based on your real order data.
- **Country-based configuration** — Different thresholds for different countries, because $75 free shipping does not mean the same thing in every market.
- **Bar and embeddable widget** — Run it as a sticky announcement bar, drop it into the cart drawer, or place it on the product page. Or all three.
- **A/B testing and analytics** — Compare thresholds and copy against each other and see conversion rate, click-through and funnel performance per variant.
### Works with
- Checkout
- Shopify Admin
- All themes
- Cart modification apps
- Page builders
- Translation & currency apps
### Plans
- Free: $0/forever — Up to 10 orders / month
- Starting out: $3.99/month — Up to 20 orders / month
- Getting traction: $7.99/month — Up to 35 orders / month
- Scaling: $11.99/month — Unlimited orders
### FAQ
**How long does Goalify take to set up?**
Under two minutes for a standard free shipping bar. You pick a template, set the threshold, choose where it appears, and publish. No code and no theme edits.
**Can I stack more than one reward?**
Yes, that is the core idea. You can set unlimited rules and unlimited rewards, and stack both — for example free shipping at one threshold and a free gift at a higher one.
**Does the free shipping bar convert currency automatically?**
Yes. Goalify is fully localised, so thresholds are shown in the shopper’s presentment currency and can be configured per country.
**Where can I place the progress bar?**
As a sticky top bar on the storefront, inside the cart drawer, on the cart page, and on product pages. It is available both as a bar and as an embeddable widget.
**Is Goalify Built for Shopify?**
Yes. Goalify carries the Built for Shopify badge, which means it meets Shopify’s highest standards for performance, design and integration.
## Monet • AI Popup Bundle Addons
URL: https://ninety9.dev/apps/monet.html
Shopify App Store: https://apps.shopify.com/monet
Category: Product bundles, Discounts
Pricing: Free to install
Rating: 5/5 from 4 reviews
Built for Shopify: no
Launched: 2026-02-06
Monet shows upsells, cross-sells and bundles as popups triggered by the three moments that matter most: add to cart, checkout initiation and exit intent. Add AI recommendations and you capture revenue that would otherwise walk out the door.
### Highlights
- AI product recommendations inside every popup, running on autopilot
- Three triggers that cover the whole funnel: add to cart, checkout, exit intent
- Popup templates for bundle, cross-sell and add-on offers
- Multi-currency and translations so you can lift revenue internationally
- Analytics that show exactly which popup converts and which one does not
### Features
- **Add-to-cart trigger** — The highest-intent moment in the whole session. Show a complementary product the instant a shopper commits, while their wallet is already open.
- **Checkout-initiation trigger** — One last relevant offer before the shopper leaves your storefront for checkout — with no risk to the checkout flow itself.
- **Exit-intent trigger** — Detect the leave signal and present a reason to stay. Turns a bounce into a bundle far more often than you would expect.
- **AI recommendations** — Monet picks the offer product for you from purchase patterns, so popups stay relevant as your catalogue and season change.
- **Bundle, cross-sell and add-on templates** — Three proven popup layouts. Pick the one that fits the offer instead of building a layout from scratch.
- **Discount and countdown logic** — Percentage, flat, BOGO, tiered and volume discounts, plus limited-time offers and countdown timers for urgency that is honest.
- **Targeting and segmentation** — Geolocation, tagging, segmentation and rule-based triggers so a popup never fires at the wrong shopper.
- **Full-funnel analytics** — Views, add-to-cart rate and conversion rate per popup, so optimisation is a measurement exercise rather than a debate.
### Works with
- Checkout
- Shopify Admin
- Cart drawers
- Foxify & GemPages
- Multi-currency apps
- PageFly & EComposer
- Review apps
- UpCart & One Click Upsell
### FAQ
**Will upsell popups hurt my conversion rate?**
Not when they are triggered on intent rather than on a timer. Monet fires on add to cart, checkout initiation and exit intent, so the popup appears after the shopper has already committed or is already leaving. It never interrupts browsing.
**What is exit intent and how does Monet detect it?**
Exit intent is the behavioural signal that a visitor is about to leave — typically the cursor moving rapidly toward the browser chrome on desktop, or a back-navigation gesture on mobile. Monet listens for those signals and shows one targeted offer.
**Does Monet cost anything?**
No. Monet is free to install from the Shopify App Store.
**Can I run Monet alongside a cart drawer app?**
Yes. Monet is designed to work with cart drawers including Addy, as well as UpCart and One Click Upsell.
**Do popups work on mobile?**
Yes. Templates are responsive and the trigger logic adapts to mobile behaviour, including back-navigation as the exit signal.
## Reviso: Order editing & Upsell
URL: https://ninety9.dev/apps/reviso.html
Shopify App Store: https://apps.shopify.com/reviso-order-editor
Category: Order editing, Returns and exchanges
Pricing: Free to install
Rating: 5/5 from 1 reviews
Built for Shopify: no
Launched: 2026-06-23
Reviso lets customers edit their orders after checkout — address, products, quantities, variants — before anything ships. Support tickets fall, cancellations fall, returns fall, and AI upsells turn the edit screen into a second revenue moment.
### Highlights
- Cancellation deflection flow with incentive discounts or a free gift
- Post-purchase AI recommendations and recently viewed products to lift AOV
- Fewer returns because shoppers fix mistakes before fulfilment, not after
- Smart rules controlling edits by country, customer tag and order conditions
- Change address, shipping method, variants or quantities without a support ticket
### Features
- **Self-service address change** — The single most common post-purchase support ticket, handled by the customer in seconds — before the label is printed and the cost is locked in.
- **Edit items, quantities and variants** — Wrong size, wrong colour, forgot an item. Reviso lets shoppers correct it themselves at any point before fulfilment.
- **Cancellation deflection** — When a shopper starts a cancellation, offer an incentive discount or a free gift instead. A saved order beats a refunded one every time.
- **Post-purchase AI upsells** — The edit screen is a high-attention page with a warm buyer on it. Reviso fills it with AI recommendations and recently viewed products.
- **Rules by country and tag** — Control exactly who can edit what. Restrict address changes in some markets, allow item swaps only for tagged customers, set order-value conditions.
- **Native Shopify design** — The edit interface looks like it shipped with Shopify, so customers never feel handed off to a third party.
- **Returns and exchange tooling** — Automated approvals, return windows, return reasons, store credit, exchanges and non-returnable items, all in one place.
- **Works with customer accounts** — Lives inside Shopify customer accounts, so shoppers find it where they already look for their orders.
### Works with
- Customer accounts
- Shopify Admin
- Cart drawers & Kaching bundles
- Foxify & GemPages
- Judge.me review apps
- Monster, Vitals & Avada
- Multi-currency apps
- PageFly & EComposer
### FAQ
**Can customers edit an order after it has shipped?**
No. Reviso only exposes edits before fulfilment, which is exactly the window where a change is still cheap. Once an order is fulfilled the edit options close automatically.
**How does Reviso reduce returns?**
Most avoidable returns start as a mistake at checkout — wrong variant, wrong address, wrong quantity. Letting the customer fix that before the parcel moves removes the return entirely, along with its shipping cost and restocking work.
**Can I stop customers from changing certain things?**
Yes. Smart rules let you allow or block each edit type by country, customer tag and order conditions, so you keep control over high-risk changes.
**What does the cancellation flow offer?**
When a shopper begins to cancel, Reviso can present an incentive — a discount on the current order or a free gift — as an alternative to cancelling outright.
**Is Reviso free?**
Yes, Reviso is free to install from the Shopify App Store.
---
# Reviso demo
URL: https://ninety9.dev/reviso-demo/
Interactive demo of Reviso, the free Shopify app for post-purchase order edits. Change shipping, items, quantities and variants after checkout, before fulfilment. App page: https://ninety9.dev/apps/reviso.html. Shopify App Store: https://apps.shopify.com/reviso-order-editor
---
# CRO Audit for Shopify stores
URL: https://ninety9.dev/cro-audit/
Free product-page check. Paste a store domain (https:// optional), a homepage, a collection, or a /products/ URL. If the URL is not a product page, the audit looks for a best-selling product, then any product linked from the pasted page, then any product in the public catalogue, and scores that product page. A specific /products/ URL is audited as given. Password-protected stores work too: paste the store password from Online Store → Preferences (not your Shopify login) if asked. We use it once and do not save it.
The audit looks at what a shopper can see on the product page and in the cart, including after add to cart when we can. It does not log into Shopify admin, and does not see checkout, customers, or orders. Reports stay until the merchant deletes them and are shared with ?r={id}. Merchants can opt out with in theme.liquid, or erase stored reports with content="no,delete" and then submit the shop URL on the CRO audit page.
---
# ChatGPT SEO check for Shopify stores
URL: https://ninety9.dev/chatgpt-seo/
Free ChatGPT SEO check for Shopify store pages (homepage, collection, product, blog, or a page). Not a measure of citations in ChatGPT, Claude, Gemini, or Perplexity. Reads public HTML, robots.txt, and llms.txt. Buttons open those assistants in the visitor's browser with a short prompt. Ninety9 does not call their APIs. Same store-password and opt-out rules as the CRO audit.
---
# Blog
## How to Export a Shopify Store’s Products to CSV
URL: https://ninety9.dev/blog/how-to-export-a-shopify-stores-products-to-csv.html
Published: 2026-10-25
Category: CRO & Analytics
Reading time: 8 minutes
Download a competitor’s public Shopify catalogue as a CSV: titles, prices, compare-at prices, variants, SKUs and images. Sort it, then check margin before you match a price.
Pricing a competitor one product page at a time is slow. You click, you scribble a number, you forget the variant that was $4 more.
A [Shopify product exporter](https://checkoutclub101.com/shopify-product-exporter/) pulls the public catalogue into a spreadsheet: title, price, compare-at price (the “was” price), variants, SKUs, vendor, tags and image links. You sort, you count how many products sit in each band, and you see how deep the discounting goes.
The export is only what a shopper could see. The file is built in your browser and is not stored on the tool. No app is installed on their theme or yours.
## What one row means
The file is **one row per variant**, not one row per product. A T-shirt with six sizes is six rows. When you want a product count, count unique handles (the URL name), not rows.
Typical columns:
- **Title** and **handle** — what they call it, and the `/products/handle` slug.
- **Vendor** and **type** — brand line and the bucket they put it in.
- **Tags** — merchandising labels. Useful, noisy.
- **Variant title** and **SKU** — size, colour, and their stock code if they published one.
- **Price** and **compare-at** — what they charge, and the number they strike through.
- **Availability** — in stock or still listed while sold out.
- **Image URL** — for your notes. Not a license to reuse the photo.
A large catalogue takes longer because every variant is included. Open the CSV in Excel, Numbers or Google Sheets.
## What to look for first
**Price clusters.** Sort by price. You will see bands: under $20, $20–$40, $40–$80. The band you can advertise is the one that matters. If everything they sell sits above your customer’s comfort, you are not in the same shop.
**Compare-at gaps.** Filter to rows where compare-at is higher than price. Those SKUs are “on sale” in the catalogue. They are often the ones in ads. Confirm with a [Shopify ads spy](https://checkoutclub101.com/shopify-ads-finder/).
**Variant depth.** Six sizes and four colours is a different business to one-size pouches. Depth is inventory and photos. Shallow catalogues are easier to test; deep ones look more “real” on the PDP.
**Out of stock they still list.** Availability lets you see what they keep on the site when it is gone. That can be a signal they restock, or a leftover.
**Collection-only exports.** Paste a collection URL if you only care about that range. Pasting the homepage starts from the public catalogue the store exposes there.
## Use the file next to ads and a calculator
The export without a question is a dump. Pair it.
**Ad → price.** Spy their Meta or TikTok ads, note the product, find that title in the sheet, write the price they actually charge. Ads lie with “from.” Spreadsheets do not.
**Price → leftover.** Before you match their number, subtract your product cost, shipping and fees. If their $28 would be your $4 leftover, you cannot run their ad.
**Demand → SKU.** If you are still choosing what to sell, take two titles to a [winning products](https://checkoutclub101.com/shopify-winning-products-to-dropship/) board and see whether recent orders exist in a country you can ship to.
**Page → stack.** The [theme finder](https://checkoutclub101.com/shopify-theme-detector/) and [app detector](https://checkoutclub101.com/shopify-app-detector/) tell you how they present that price. The [CRO Audit for Shopify stores](/cro-audit/) tells you whether the PDP can take the click.
## Do not import their shop
Shopify’s product importer wants its own column names. Map carefully if you ever import *your* cleaned data. Do not paste their descriptions, their image URLs or their reviews into your store. The export is a ruler. It is not a clone tool.
Password pages export nothing. That is correct. Private products are not yours to list.
## A worked pass (example)
You export a small apparel store. Forty-eight products become about 200 rows because of sizes.
You sort by price. Most sit at $28–$48. Twelve rows have a compare-at about $10 higher. Those twelve titles include the hoodie you saw in a month-old Meta ad.
Your cost on a similar hoodie is $14 landed. At $38 you have room. At their $28 you do not. You do not match $28. You pick one hoodie and one pair of socks as a pair, or you skip the hoodie.
That is a catalogue used as a decision.
## Mistakes
**Counting rows as products.** Use unique handles.
**Matching the lowest price on the sheet.** The lowest item may need a conversion rate you will never hit.
**Exporting and never opening Ads Library.** You still do not know what they push.
**Storing the CSV as if it were a license.** Images and copy stay theirs.
## A one-hour sheet you can reuse
Make a second tab. Do not mark up the raw export — you will re-download it.
Columns that earn their keep:
- Handle
- Title
- Min price / max price (if variants differ)
- Compare-at gap
- Variant count
- In ads? (yes/no after you spy)
- Your landed cost
- Your leftover at their price
- Decision: match / bundle / skip
Fill ten rows, not two hundred. The rest of the catalogue is context. The ten are the fight.
When a new export lands next month, you only refresh those handles. Price moves show up. A disappearing compare-at means the sale ended. A new compare-at on a quiet SKU means they are about to push it.
## Variants that trick you
A “from $18” title with a $42 variant is a trap if you plan ads on $18. Use min and max on the handle, not the first row you see.
Gift cards, warranty SKUs and “do not delete” test products sit in a lot of catalogues. Filter them out by type or title before you average anything. Averages that include a $5 sticker and a $180 kit are fiction.
International prices: the public catalogue is usually the store’s primary currency. If they run Shopify Markets (different prices per country), the export is still the public default. Do not assume the euro shopper sees the same number.
## This afternoon
1. Paste the competitor into the [product exporter](https://checkoutclub101.com/shopify-product-exporter/).
2. Download the CSV. Count unique handles. Sort by price.
3. Filter compare-at. Spy ads on two of those titles.
4. Write your leftover on the one SKU you would actually sell.
5. If the leftover works, build that page and audit it. If it does not, pick another title or another store.
You now have their public price list. You also know which numbers you cannot afford to copy.
## Bundles hiding in a flat file
A kit is sometimes one product with one price, and sometimes three products with a compare-at that only appears in an app. The CSV shows the catalogue Shopify published. App-built bundles may not appear as a single row.
If the ad shows a kit and the sheet only has the parts, write the part prices and add them up. That is the real number behind the creative. If you cannot make that kit for less than they charge, you do not have a kit. You have three products you should not bundle yet.
Tags like `bestseller`, `bundle`, or `gift-set` are hints. They are also messy. Confirm on the live collection before you plan a whole range around a tag.
## Image URLs are for notes
The image column lets you recognise the SKU when titles are vague (“Classic / Black”). It does not let you hotlink their CDN on your product page. Download nothing into your theme. Shoot or license your own photos.
If two stores share the identical image URL host and crop, they may share a supplier. That is useful for product research. It is also a warning that the photo is not a brand advantage.
Re-export after a sale week. Compare-at columns move. A handle that disappears was unpublished. A new handle with a compare-at is often next month’s ad. Keep the old file so you can see the move.
## Price bands, not one hero
Sort unique handles by min price. Count how many sit under $20, $20–40, $40–80, and above. That is their range.
If they make money in $40–80 and you only list $18 gadgets, you are not in the same store. Matching one $48 hoodie does not put you there. Either raise a real product into that band or stop using them as the price map.
If they live under $20, your $90 kit will not steal their ads. Different trust. Different return rate. Use the sheet to pick a peer, not a celebrity catalogue.
Keep the raw CSV and the ten-row tab in the same folder, named with the store and the date. Next month you will thank yourself when a price moved $4 and you can prove it instead of arguing from memory.
### FAQ
**How do I export products from a Shopify store I do not own?**
Paste the store URL into a Shopify product exporter. It reads the public product list and gives you a CSV. Only public products are included.
**Does the export include sale prices?**
Yes. Every variant row has the current price and the compare-at price, so you can see discounts across the catalogue.
**What columns are in the file?**
Title, handle, vendor, type, tags, variant title, SKU, price, compare-at, availability and image URL. One row per variant.
**Can I import this CSV into my own Shopify store?**
It is built for comparison. Shopify’s importer expects its own columns, so map them before you import. Do not copy a competitor’s descriptions and images.
**Is the file saved on the tool’s server?**
No. The spreadsheet is generated for your download and is not stored.
**Does it work on password-protected stores?**
No. If products are not public, there is nothing to export.
**Can I export one collection only?**
Paste the collection URL if you only care about that range. The homepage export uses the public catalogue from that starting point.
## How to Find Out What Theme a Shopify Store Uses
URL: https://ninety9.dev/blog/how-to-find-what-theme-a-shopify-store-uses.html
Published: 2026-10-25
Category: CRO & Analytics
Reading time: 8 minutes
Find the real Shopify theme behind a competitor’s store, even if they renamed it in the editor. See whether it is on the Theme Store or custom, then decide if a switch is worth it.
When a competitor’s Shopify store looks faster, cleaner or more expensive than yours, the theme is usually part of the story — and usually a smaller part than it feels.
A [Shopify theme detector](https://checkoutclub101.com/shopify-theme-detector/) tells you which theme sits behind the storefront: Dawn, Impulse, Prestige, Symmetry, Motion, Warehouse, or another Theme Store theme, or a custom / headless build. It reads the theme the shop was published from, not the nickname in **Online Store → Themes**. A copy labelled “Live v3” can still be Impulse.
You get the real name, whether you can buy it, and the Theme Store listing when there is one. That is the difference between buying the same starting point and hiring someone to rebuild it.
## Why the editor name lies
Shopify lets merchants duplicate a theme and rename the copy. Holiday campaigns, Black Friday drafts and “Main — do not touch” are normal. Viewing page source sometimes shows an asset path, but agencies strip labels and renamed copies confuse a quick search.
The finder resolves the published origin. That is what you came for.
Headless (a storefront not using a normal Shopify theme — often Hydrogen) will not return a Theme Store name. That result is still useful. It usually means a bigger team and a bigger budget. You compete on offer and speed-to-test, not on matching their custom front end.
## How to run it
1. Paste a public URL. Home, collection or product all work.
2. Read the theme name and the Theme Store versus custom line.
3. Open the listing if there is one. Preview the demo.
4. Compare the demo with the live store. Most of the gap is sections, photography and apps.
They will not know you looked. Password-protected stores will not resolve.
If the homepage is a splash page (a single campaign screen), paste a product URL from the same shop. Campaign landing pages sometimes use a different template.
## Theme versus everything else
A theme sets the layout, the default cart behaviour and a speed baseline. It does not set the offer, the photos, the review widget or the ad that sent the click.
Two Impulse stores can convert differently because one has a clear price and one hides it, or because one opens a cart drawer and one dumps the shopper on `/cart`.
So after the name:
- [App detector](https://checkoutclub101.com/shopify-app-detector/) on the same URL — reviews, pop-up, cart, subscriptions.
- [CRO Audit for Shopify stores](/cro-audit/) on the product they advertise — can a stranger buy.
- [Ads spy](https://checkoutclub101.com/shopify-ads-finder/) — what they pay to say.
- [Product exporter](https://checkoutclub101.com/shopify-product-exporter/) — the price behind the look.
If you are still choosing a product, the [winning products](https://checkoutclub101.com/shopify-winning-products-to-dropship/) board is the demand check. A pretty theme on a SKU you cannot ship is still a pretty theme.
## Should you switch
Switch when the layout is the gap: your theme fights add-to-cart, cannot place a cart drawer, or is so slow that the first image is late. Buy the same Theme Store theme they use if the demo already does the job you need.
Stay when the gap is photos, reviews, the offer or the ads. Installing Prestige will not write a delivery sentence or add a bundle under the button.
Our apps sit on top of almost any modern theme as theme app extensions (they load in the theme editor, no `theme.liquid` edits): [Addy](/apps/addy.html) for the drawer, [Addly](/apps/addly.html) for product-page offers, [Goalify](/apps/goalify.html) for the bar. You do not need their theme to add those jobs.
## A worked pass (example)
You paste a competitor homepage. The finder says Impulse, Theme Store, and links the listing.
The Impulse demo is a clean fashion layout. Their live shop looks richer because of photography and a review app, not because they rewrote the theme. The app detector shows Judge.me and a cart drawer. The CRO audit on their bestseller passes the buy path.
Your note: you can stay on Dawn, add reviews and a drawer, and spend the theme budget on photos. Or you buy Impulse because you already wanted its collection layout. Either way you decided on a reason, not a feeling.
## Mistakes
**Treating “custom” as “better.”** Custom can mean an agency, or a mess. Audit the product page.
**Copying the theme and the apps in one weekend.** One change at a time, or you will not know what moved the number.
**Reading view-source and stopping.** Paths lie. The finder exists because they lie.
**Switching themes the week you scale ads.** Theme swaps move selectors. Recrawl the landing URL before you raise budget.
## What “Dawn” versus a paid theme actually changes
Dawn is Shopify’s free reference theme. It is fast, plain and easy to extend with app embeds. Impulse, Prestige, Symmetry, Motion and Warehouse are paid starting points with denser sections: lookbooks, more product-card styles, sometimes a different cart.
None of that replaces a price, a photo or a review. A paid theme can still ship a weak add-to-cart. Dawn can still sell a clear product.
When the finder says Dawn, do not treat that as “they are cheap.” Treat it as “they spent the budget on photos and apps.” When it says Prestige, do not treat that as “they convert.” Treat it as “they bought a fashion layout.” Then audit the PDP.
Headless / Hydrogen means the HTML is not a normal theme. Your theme finder result stops at “not a Theme Store theme.” Compete on shipping promise and offer. You will not out-engineer their front end this quarter.
## A theme switch checklist (only if you still want one)
1. Audit the current bestseller. Save the score and the ranked misses.
2. Duplicate the live theme. Never edit live.
3. Install the new theme as a draft. Add the same app embeds: drawer, bar, reviews.
4. Preview the bestseller. Can you still add to cart on a phone?
5. Check the cart: drawer or `/cart`, shipping goal, checkout button.
6. Publish at a quiet hour. Recrawl the same URL.
7. Leave ads at the current budget for two days. Then decide.
If step 4 fails, stay on the old theme. A prettier collection grid is not worth a dead buy button.
## This week
1. Paste the competitor you actually lose to into the [theme finder](https://checkoutclub101.com/shopify-theme-detector/).
2. Open the listing if it exists. Compare demo and live.
3. Detect apps on a product URL. Audit that URL.
4. Write one sentence: “The gap is theme / apps / offer / ads.”
5. Change that one thing.
You now know the starting file. You also know whether it is worth buying.
## Sections versus the theme file
What you like on their homepage is often a section (a drag-and-drop block in the theme editor): a slideshow, a lookbook, a video. Paid themes ship more of those blocks. You can add a similar section on Dawn with an app or a small custom section without paying for the whole theme.
Walk their homepage and name each band: announcement, hero, social proof, bestsellers, story, footer. Write which of those you are missing. Fill the missing band. That is cheaper than a theme swap and easier to undo.
Product templates matter more than the homepage. Open their bestseller and yours. Same order: gallery, title, price, variants, add-to-cart, offer, reviews, description. If your offer sits below a long story and theirs sits under the button, move yours. You did not need Prestige for that.
Speed: a heavy slider on a paid theme can lose to a static Dawn hero. After any change, load the PDP on a phone with a cold cache. If the buy button is late, the theme did not help.
## Agency “custom” that is still a Theme Store theme
Some agencies start from Impulse, rename the copy, and call the project custom. The finder should still say Impulse. Believe the finder. You can buy the same start and hire someone for sections only.
If the finder says custom and the HTML still looks like Dawn (plain product cards, default cart), they may have forked Dawn and stripped the name. You can still stay on Dawn. Do not hire a rebuild because the word “custom” appeared once.
You now have a reason to buy a theme, or a reason not to. Either one is a finished decision.
If you do buy, buy the listing the finder linked and keep the first week on a draft. The Theme Store demo is empty. Your products, photos and apps are the real preview. A draft that cannot add to cart on a phone is not ready to publish, no matter how close the homepage looks to theirs. Preview the bestseller, a collection and the cart — not only the homepage they styled for the launch screenshot.
### FAQ
**How do I find out what Shopify theme a website is using?**
Paste the store URL into a Shopify theme detector. You get the theme name, whether it comes from the Theme Store, and a link to the listing when there is one.
**Can I see a competitor’s theme if they renamed it?**
Yes. The finder reads the theme the store was built from, so a renamed Dawn or Impulse still shows as Dawn or Impulse.
**What does custom Shopify theme mean?**
The storefront was not built from a Theme Store theme you can buy. An agency built it, or the store runs a headless setup such as Hydrogen.
**Does knowing the theme tell me why they convert better?**
Not on its own. Two stores on the same theme can convert very differently. Audit the product page and look at the ads they send to it.
**Will the store owner know I checked their theme?**
No. The finder reads the public page the way a browser does. It does not log in or install anything.
**Can I check a theme from a product page URL?**
Yes. Homepage, collection or product URL all work. Use a product URL when the homepage is a campaign page.
**Should I switch my store to a competitor’s theme?**
Only if their product page also sells and the layout is the actual gap. Leave the theme when the gap is the offer, the photos or the ads.
## How to Find Winning Products to Dropship on Shopify
URL: https://ninety9.dev/blog/how-to-find-shopify-winning-products-to-dropship.html
Published: 2026-10-25
Category: CRO & Analytics
Reading time: 8 minutes
A practical way to pick Shopify winning products from real demand: filter by country, category and price, then check margin before you build the page or buy ads.
A “winning product” is not a vibe. It is an item people already pay for, at a price you can still advertise after you pay the supplier, the courier and the ad platform.
Most dropshipping stores fail the other way around. They pick a pretty product, build a theme, then discover the landed cost (product plus shipping to the customer) leaves no room for Facebook or TikTok. Or they pick something they cannot explain in one sentence on a product page. Or they pick something they cannot ship to the country they are allowed to sell in.
This guide is the mid-level version of product research: start from demand, filter to what you can actually fulfil, then check the numbers before you write a title tag.
## What “winning” actually means
In Shopify product research, a winning product has three traits you can check without a crystal ball.
**People already order it.** Not “it looks viral.” Recent order volume on a public catalogue is a better signal than a mood board.
**You can ship it to the country you sell in.** A serum that only ships from one warehouse to the US is not a winner if your ads will run in Germany.
**The price can carry ads.** After product cost, inbound shipping, last-mile shipping, payment fees and returns, there is still room for a click. If the only way the maths works is a 12% conversion rate on cold traffic, it is not a winner. It is a hope.
A product on a daily list is demand proof. It is not a profit guarantee. Treat the list as the start of a test, not the end of thinking.
## Filter before you browse
Open a [Shopify winning products](https://checkoutclub101.com/shopify-winning-products-to-dropship/) board and resist the urge to scroll. Set three filters first.
### 1. Country you can fulfil
If you use a supplier that only ships to the United States and Canada, set that. If you can do the EU, set that. The country filter is not a marketing preference. It is a shipping constraint. A product that “wins” in a country you cannot deliver to is a screenshot, not a SKU.
Write the countries on a note before you look at photos. Changing this later usually means changing the supplier, the delivery promise and the ad account targeting.
### 2. A category you can explain
Pick a category you could write a product page for in an afternoon: a claim, two photos, a size or scent, a delivery sentence. If you cannot finish that sentence, skip the category even if the orders look high.
Example (labelled as an example): “Vitamin C serum for dry skin, 30 ml, ships from the US in 5–8 days” is a page. “Assorted gadgets” is not.
### 3. A price band you can advertise
Set a minimum and a maximum in US dollars before you sort. A $7 item often needs too many sales to pay for a click. A $180 item needs reviews, photos and a return policy that look expensive. Mid-level stores usually test in a band they already understand — for many dropshippers that is roughly $18–$60, but your band is the one where your last tests did not go broke.
Then sort by **bestselling (recent orders)**. That is recent demand, not a live “sold today” chart and not a guess from a TikTok comment section.
## A simple scorecard for each card
For each product that survives the filters, write four lines. If you cannot fill a line, drop the product.
| Line | What you write | Fail if |
| --- | --- | --- |
| Offer | One sentence a stranger would understand | You need a paragraph |
| Landed cost | Supplier + shipping to the customer, in the same currency as the selling price | You only have the supplier’s “from” price |
| Selling price | What you would charge on Shopify | You copied the list price with no reason |
| Room for ads | Selling price minus landed cost minus payment fees | The leftover would not cover a cheap click |
You do not need a finance degree. You need the leftover to be large enough that a realistic conversion rate (how many visitors buy) still pays the ad.
If a card shows a rating or a positive-review rate, treat it as a hint, not a verdict. Some supplier listings only return a percentage. Do not invent stars that are not there.
## Check the offer before you build the page
A product that passes the scorecard still needs two public checks.
**Who already sells it.** Paste a store that lists the same item into a [Shopify ads spy](https://checkoutclub101.com/shopify-ads-finder/). Ads that have been live for months are usually paying for themselves. A wall of the same hook means the angle is crowded. You need a sharper claim, a bundle, or a different photo — not a clone of the first creative you see.
**How they price the catalogue around it.** Export that store’s public catalogue with a [Shopify product exporter](https://checkoutclub101.com/shopify-product-exporter/). Sort by price. See whether the hero sits alone or next to add-ons (a travel size, a cloth, a second scent). A lonely hero is harder to raise average order value on. A small family of SKUs is easier to advertise.
If you want the theme and the apps behind a competitor’s page, run the [theme finder](https://checkoutclub101.com/shopify-theme-detector/) and the [app detector](https://checkoutclub101.com/shopify-app-detector/) on the same URL. You are looking for the selling stack (reviews, pop-up, cart drawer), not a reason to copy every app.
## Build the page like a test, not a brand
Once you pick two or three products, build the smallest honest page.
1. Title that names the product and the job (“Vitamin C serum for dry skin”), not a slogan.
2. Price you can defend. If you need a compare-at (the “was” price), it has to be a price you actually charged.
3. Photos you have the right to use. A catalogue export is for research. Copying their images is not the job.
4. Delivery sentence with a country and a window. “Ships from the US, 5–8 business days” is a promise. “Worldwide shipping” is not.
5. One extra offer: a bundle, a quantity break, or a small add-on. Cold traffic rarely stacks a basket unless the page asks.
Then run that exact `/products/` URL through the [CRO Audit for Shopify stores](/cro-audit/). Paid traffic makes a missing add-to-cart expensive. Fix the buy path before you scale.
## A worked pass (example)
Imagine you ship only to the United States, you can explain skincare, and you can advertise between $16 and $40.
You open the winning products board, set country to US, category to Beauty, min $16, max $40, sort by recent orders. Three cards remain. One is a device you cannot explain. One has a landed cost that leaves $2. One is a $18 serum with a $7 landed cost and a one-sentence claim.
You spy a store already selling the serum. Two ads have been live for several weeks with the same “dull skin, seven days” hook. You export their catalogue and see a $12 moisturiser next to it. Your test is the serum plus that moisturiser as a pair, not a twenty-product beauty shop.
That is a winning-product workflow. It is boring. It is how you avoid building a theme around a hunch.
## Mistakes that look like research
**Scrolling without filters.** The board will show you whatever is loud. Filters make it show what you can sell.
**Treating “last 7 days” or “last 30 days” as a live ticker.** Those views rank stored copies of the daily list by peak recent-order volume. They stay still until the next night is stored. Useful for a second look. Not a stock market.
**Copying the first ad you see.** Long-running ads are a clue. They are not a license. Rebuild the hook in your own photos.
**Skipping the margin line.** If you cannot write the leftover after cost and shipping, you do not have a product. You have a picture.
**Building the whole store first.** Theme, apps and brand colours do not rescue a SKU that cannot carry a click. Pick the product, then the page, then the traffic.
## What to do this afternoon
1. Write the countries you can ship to, the category you can explain, and a min/max price.
2. Open the [winning products list](https://checkoutclub101.com/shopify-winning-products-to-dropship/) and set those three filters.
3. Score three cards. Keep two.
4. Spy the ads on one store that already sells them, and export that catalogue.
5. Build two product pages. Audit the URLs. Then buy a small test, not a rebrand.
If the first two fail the leftover-for-ads line, you did not fail product research. You avoided a theme you would have had to unwind. That is the job.
### FAQ
**What is a winning product on Shopify?**
A product people are already buying, at a price that still leaves margin after product cost, shipping and ads. The list shows demand. Your page, your shipping time and your ad cost decide the test.
**Does a trending product mean it will win in my store?**
It means people are already ordering it. Your creative, your margin, your delivery window and the product page still decide whether a test makes money.
**How do I use a list of winning products?**
Pick a country you can ship to, a price you can advertise, and a product you can explain on a Shopify product page. Then check the margin before you spend on ads.
**Why filter Shopify winning products by price?**
A cheap product often needs an unrealistic conversion rate once ads are paid. A high price needs trust on the page. Set a minimum and maximum you can defend.
**How often is a winning products list updated?**
About once a day on a typical board. Bestselling sort uses recent order volume from that day’s list, not orders placed only today.
**Where do I check if a product is already saturated?**
Search the product in the Meta Ad Library, or paste a store that sells it into a Shopify ads spy. Many long-running ads means the angle is crowded and you need a sharper offer, not a copy.
**Should I build a whole store around one winning product?**
No. Test two or three SKUs that share a shipping lane and a story. One hero plus two related add-ons is easier to advertise than a random catalogue.
## How to See the Ads a Shopify Store Is Running
URL: https://ninety9.dev/blog/how-to-see-a-shopify-stores-ads.html
Published: 2026-10-25
Category: CRO & Analytics
Reading time: 8 minutes
See a competitor’s Facebook, Instagram, TikTok and Google ads from their Shopify URL. Use public ad libraries, then match the creative to the price and the landing page.
Shopify ad spy means opening the public ad libraries on the right advertiser, not typing a brand name into Facebook and hoping you found the same page the store pays from.
Paste a competitor’s store. A [Shopify ads spy](https://checkoutclub101.com/shopify-ads-finder/) reads the Facebook, Instagram and TikTok names on the page and opens the Meta Ad Library, the TikTok ad library and the Google Ads Transparency Center on that brand. You see the creatives that are live: the hook (the first claim), the offer, the product, and how long the ad has been running.
Spend is not in those libraries. Do not treat a creative as a winner just because it exists. Treat months of airtime as the clue.
## Why merchants spy on ads
A competitor’s ads tell you what they are willing to pay to say, today.
- The first three seconds, or the first line of copy.
- The product they push hardest — often not the homepage hero.
- The offer: a bundle, a threshold, a “buy two” line, a delivery promise.
- How long that exact ad has been on.
Ads that stay live for months are usually covering their cost. Ads that appear and vanish in two days are tests, or they lost money. You cannot see the row in Ads Manager. You can see the date.
This is useful before you pick a winning product, before you raise a budget, and before you assume your page is the problem. Sometimes the ad is doing the work and the page is leaking. Sometimes the opposite.
## What you actually get
The spy does not log into anyone’s ad account. It does not estimate spend. It opens public pages.
**Meta (Facebook and Instagram).** Active ads for that Page: creative, primary text, start date, platforms. You can later filter by date on the advertiser page if you want older work.
**TikTok.** When the store links a TikTok account, you get the library search for that brand. Watch how long each video has been running.
**Google.** The Ads Transparency Center page for the brand name. Useful when the storefront has no Facebook link at all.
If a store only published a generic `facebook.com` link with no page name, the tool may fall back to a brand-name search. That is slower and sometimes noisier. Still better than guessing which of six similarly named Pages is the one they pay from.
Password-protected stores and stores with no social links give fewer Meta and TikTok results. Google can still try from the name.
## How to read an ad like a merchant
Open three or four long-running ads and ignore the rest for the first pass. Write four words for each.
**Hook.** What do they claim in the first line or the first shot? “Dull by day three” is a hook. A logo sting is not.
**Offer.** Price, bundle, gift, shipping line, or “X left.” If the offer is only a lifestyle film, the landing page is doing the selling — or nobody is.
**Product.** Which SKU is on screen? Screenshot it. You will need the price in a minute.
**Proof.** Reviews on the ad, a before/after, a UGC (user-generated content) face, or nothing. Nothing is common. Note it.
Then open the landing URL the ad points to. That URL is the brief. Do not audit the homepage out of habit if the ad goes to `/products/vitamin-c-serum`.
## Match the ad to the catalogue and the page
Seeing the creative is step one. The money is in the next two tabs.
**Price and variants.** Export the store’s public catalogue with a [Shopify product exporter](https://checkoutclub101.com/shopify-product-exporter/). Find the product from the ad. Write the price, the compare-at (the “was” price) and the variant count. If the ad says “from $18” and the PDP (product detail page) is $32, you now know which number they advertise.
**The page the click hits.** Run that product URL through the [CRO Audit for Shopify stores](/cro-audit/). You want to know whether a stranger can add to cart, whether the price is honest, and whether the page asks for a second item. A good ad into a page that cannot buy is a gift. A good ad into a page that already bundles and reviews is a harder fight.
**The stack on that page.** The [app detector](https://checkoutclub101.com/shopify-app-detector/) names the review widget, the pop-up and the cart drawer. The [theme finder](https://checkoutclub101.com/shopify-theme-detector/) tells you whether they bought a Theme Store theme or built custom. You are not copying the theme. You are learning how much of the “look” is the theme versus apps and photos.
If you are still choosing what to sell, take the product from the ad back to a [winning products](https://checkoutclub101.com/shopify-winning-products-to-dropship/) board and see whether recent demand exists outside that one store.
## A worked pass (example)
You paste `colourpop.com` as a try-store, or a smaller competitor you actually compete with. The spy returns Meta, TikTok and Google.
On Meta, two ads have been live for more than a month. Both open on the same palette kit. The hook is “one palette, five looks.” The offer is a bundle price, not a single pan.
You export the catalogue, find the kit, and see a $28 price with a $36 compare-at. The landing page has reviews and a clean add-to-cart. The app detector shows a review app and an email pop-up.
Your note is not “copy the palette ad.” It is: long-running ads on a kit, advertised as a bundle, landing on a PDP that can sell. If your own kit ad lands on a collection with no price and no add-to-cart, you know what to fix first.
## What not to do with the library
**Do not estimate spend from how “big” the brand feels.** Libraries do not show it. A small store can keep one ad alive for a quarter. A large store can rotate twenty losers.
**Do not save their video and recut it.** Write the hook in your own words. Shoot your own product. Their comments and their pixel (the tracking code on their site) are not yours.
**Do not spy and skip the page.** Creative cannot rescue a form that does not submit. If add-to-cart is missing on their page, you still should not copy the ad onto an equally broken page of your own.
**Do not treat a brand-name search as exact.** Confirm you are on the Page that matches the store’s footer or About link.
## Notes that survive the next campaign
Keep a one-page note per competitor, not a folder of screenshots you will never reopen.
- Store URL and the date you spied.
- Two long-running ads: hook, offer, product, start month.
- Landing handle (`/products/...`) and the price from the export.
- Whether the page can add to cart on a phone.
- One sentence you will not copy: their claim, rewritten in your words.
Update the note when an ad disappears. Disappeared plus a new hook is a test. Disappeared with no replacement can mean the product died.
If two competitors push the same SKU with different hooks, write both. The quieter hook is often the one that still has room.
## When the spy returns almost nothing
No Facebook link, a new store, or a brand that only runs search ads will look empty. That is data.
- Google still opened: they may be buying search or Shopping, not Meta. Your test might need a product feed, not a UGC video.
- Meta opened on the wrong Page: search the footer for a second social link, or the About page.
- TikTok empty and Meta full: do not invent a TikTok strategy because a thread said you must.
A quiet library is cheaper to learn from than a loud one. You are not late. They may not have found a winner either.
## A one-hour workflow
1. Paste the competitor store into the [winning ads spy](https://checkoutclub101.com/shopify-ads-finder/).
2. Open Meta first. Sort with your eyes by start date. Pick two long-running ads.
3. Write hook, offer, product, proof.
4. Open the landing URL. Audit it.
5. Export the catalogue. Write the price behind the ad.
6. If you still want the product, check demand on the winning products board and whether you can ship to the same country.
7. Rebuild one angle. Buy a small test. Do not rebuild their whole account.
You now know what they pay to say. You also know whether the page behind that ad is worth beating, or whether the gap is the offer and you should pick a different SKU.
Save the two landing URLs. When you spy again next month, you will know whether they still send the same click to the same page. A new landing handle is a new test — audit it before you assume the old notes still apply.
### FAQ
**How do I see what ads a Shopify store is running?**
Paste the store URL into a Shopify ads spy and open the Meta, TikTok and Google results. You land on the active ads for that advertiser instead of searching the brand name and hoping.
**Can I see a competitor’s Facebook and Instagram ads for free?**
Yes. The Meta Ad Library is public. It shows the creative, the copy, the start date and the platforms. Spend is not in the library.
**Does a Shopify ad spy show TikTok ads too?**
Yes, when the store links a TikTok account or the brand name can be searched. The result opens the TikTok ad library on that brand.
**Does it show how much a competitor spends?**
No. Public libraries show creatives, copy, start dates and platforms — not spend or results. How long an ad has been running is the usual proxy.
**What if the store has no Facebook or Instagram link?**
The Google advertiser lookup still runs from the brand name. For Meta and TikTok you can search the library by name once you know it.
**Does Shopify ad spy show inactive ads?**
Libraries default to what is active. Meta also lets you look by date once you are on the advertiser page. The spy’s job is to land you there.
**How do I use a competitor’s ads without copying them?**
Write down the hook, the offer and the product. Check the landing page. Rebuild the angle in your own photos and copy.
## How to See What Apps a Shopify Store Is Using
URL: https://ninety9.dev/blog/how-to-see-what-apps-a-shopify-store-uses.html
Published: 2026-10-25
Category: CRO & Analytics
Reading time: 8 minutes
See the storefront apps on a competitor’s Shopify shop — reviews, pop-ups, upsells, chat, subscriptions — with App Store links. Run it on a product page, not only the homepage.
Most of what makes a competitor’s Shopify store feel finished is apps: the review block under the buy button, the pop-up that asks for an email, the upsell in the cart drawer, the chat bubble, the subscribe-and-save toggle.
A [Shopify app detector](https://checkoutclub101.com/shopify-app-detector/) names those apps on any public store so you stop guessing which review app or cart app they picked. You get logos and Shopify App Store links. You can open the same listing, read the price, and decide whether that job belongs on your shop.
It reads the storefront a shopper sees. Apps that only run inside the Shopify admin never load on the public page, so they do not show. That is a feature. You care about what touches the sale.
## What the detector can and cannot see
**It can see** reviews (Judge.me, Loox, Yotpo, Okendo, Stamped), email and SMS (Klaviyo, Omnisend, Attentive, Postscript), upsells and bundles (Rebuy, ReConvert, Bold and others), chat (Gorgias, Tidio, Shopify Inbox), subscriptions (Recharge, Skio), loyalty (Smile, LoyaltyLion), pop-ups, and other storefront scripts.
**It cannot see** accounting, inventory, shipping labels, wholesale backends, or anything that never injects a script or a block on the published theme.
If you “know” they use an inventory app, you will not prove it here. You also do not need to. Inventory does not change the add-to-cart.
## Run a product page, not only home
Homepages are campaigns. Product pages are where review widgets, size charts, subscription offers and frequently-bought-together blocks actually load.
Paste a `/products/` URL when you have one. If an app you expected is missing, run a collection or a second product. Some apps only embed on certain templates.
Try-stores on the tool (`gymshark.com`, `colourpop.com`) are useful to see what a complete result looks like. Then paste the competitor you actually fight.
They will not get a notification. The request looks like a normal visit.
## Group the list by job
A raw list of twelve apps is noise. Sort it into jobs.
| Job | What you are looking for | Keep if |
| --- | --- | --- |
| Reviews | Stars under the title or in the buy box | Shoppers can read a real review without a new tab |
| Email / SMS | Pop-up or slide-in after a few seconds | It does not cover add-to-cart on first paint |
| Upsell / bundle | Pair, break, or add-on near ATC or in the cart | One offer, not four |
| Cart | Drawer versus a jump to `/cart` | The drawer shows total, shipping goal and checkout |
| Chat | Bubble | It does not sit on the buy button on mobile |
| Subscriptions | Toggle or “subscribe and save” | It is on the product you would advertise |
| Loyalty | Points line | It is readable, not a second checkout |
You do not install a job you cannot see working. A review app with no reviews on the PDP is a logo. A pop-up that hides the price is a leak.
## After the names, check the page
Apps explain the furniture. They do not explain whether the page sells.
Run the same URL through the [CRO Audit for Shopify stores](/cro-audit/). You want the buy path first: visible add-to-cart, honest price, selectable variants, stock that matches the ad. Only then do you care which review app they chose.
If you also want the theme those apps sit on, use the [Shopify theme finder](https://checkoutclub101.com/shopify-theme-detector/). If you want the ads that send traffic to that stack, use the [ads spy](https://checkoutclub101.com/shopify-ads-finder/). If you want prices next to the apps, [export the catalogue](https://checkoutclub101.com/shopify-product-exporter/).
Our own stack, when you need the job rather than their brand of widget: [Addly](/apps/addly.html) for bundles and quantity breaks on the product page, [Addy](/apps/addy.html) for the cart drawer, [Goalify](/apps/goalify.html) for a free shipping bar, [Monet](/apps/monet.html) for one timed popup, [Reviso](/apps/reviso.html) for edits after payment. Install the job you are missing. Do not install five because their detector list had five.
## A worked pass (example)
You paste a competitor product URL. The detector returns Judge.me, Klaviyo, a cart drawer app and a subscription app.
On the page, stars sit under the title. The Klaviyo pop-up waits until you scroll. The drawer opens on add-to-cart with a shipping goal. The subscribe toggle is on this SKU.
Your note: reviews and a delayed email capture are doing work. You already have a cart drawer. You do not need their subscription app if you do not sell a refill.
You skip Smile because you never saw a points line. You skip the chat bubble because it sits on the add-to-cart on your phone.
That is using the detector. Copying the whole list is not.
## Common misses
**Homepage only.** You will under-count product apps.
**Installing everything they have.** Stacks fight. Two pop-ups and two upsells is how add-to-cart disappears.
**Assuming a missing app means they do not use it.** Try another URL. Then accept that admin apps stay invisible.
**Skipping the App Store listing.** Price, reviews and “Built for Shopify” sit there. The detector is the name. The listing is the bill.
**Forgetting your own store.** Run yours too. The useful output is the gap: they have reviews on the PDP and you do not. Not “they have eleven apps and you have four.”
## How to read a messy list
Some stores load two review apps, an old pop-up and a new one, plus a leftover upsell from a trial they forgot to uninstall. The detector will show the leftovers.
On the live page, switch the leftovers off with your eyes:
- Two review blocks: they migrated and did not delete the first. You only need one.
- A pop-up and a slide-in: the first one that covers the price is the leak. Time-to-first-popup on mobile matters more than the brand of the app.
- An upsell on the PDP and another in the drawer and a popup: that is three asks. Pick the highest-intent one (usually the drawer or the block under add-to-cart).
If you cannot tell which script is which, disable candidates on *your* theme one at a time after you install. Never uninstall theirs. You are reading, not editing.
## Apps that look impressive and do nothing
**Loyalty on a store with no repeat reason.** Points on a one-time gadget do not raise the first order.
**Subscriptions on a product nobody refills.** A toggle that saves 10% on a suitcase is a discount with extra UI.
**Chat that opens on scroll.** On a phone that is a tap target over the buy button.
**A/B test apps you will not read.** If nobody on the team opens the report, the app is a script tax.
The detector will still name them. Your job is to leave them off your install list.
## Build a gap list, not a shopping list
Write three columns: they have / we have / we will add this month.
Example (labelled as an example): they have Judge.me on the PDP, you have none. They have a drawer with a shipping goal, you jump to `/cart`. They have Klaviyo, you have Shopify Email. You add reviews this week, a drawer next week, and you leave email alone until the page can sell.
That list is the only output that matters. A screenshot of twelve logos is not a plan.
Install order matters. Reviews first if the page has no proof. Drawer second if checkout is still `/cart`. Email last. An email pop-up on a page that cannot sell trains you to measure the wrong thing.
When two apps do one job (two review widgets, two pop-ups), pick one and delete the trial leftover. Extra scripts slow the buy button and confuse the shopper. The detector named both so you can choose, not so you can stack them.
## A thirty-minute workflow
1. Pick the product URL you would advertise against.
2. Paste it into the [app detector](https://checkoutclub101.com/shopify-app-detector/).
3. Group by job. Open at most three listings.
4. Audit the same URL.
5. Note theme and ads only if the page can sell.
6. Add one missing job to your store. Measure a week.
You now know the selling stack on that page. You also know which of those apps you can ignore.
Re-run the detector after they redesign. Theme swaps drop app embeds. A review app that vanished from the homepage may still sit on the product template — check both URLs before you assume they ripped it out.
If you run your store and theirs on the same day, write the date on the gap list. App stacks change after Black Friday and after a theme hire. A list from last spring is a different shop.
### FAQ
**How can I see what apps a Shopify store is using?**
Paste the store URL into a Shopify app detector. You get the storefront apps with logos and App Store links. Homepage, collection or product page all work if the page is public.
**Does it show every app installed on the store?**
No. It shows apps that load on the storefront. Accounting, inventory and shipping-label apps leave nothing on the page a shopper loads.
**Why is an app I know they use missing?**
It only runs in the admin, or it only loads on a page you did not check. Try a product URL from the same store.
**Will the competitor know I checked their apps?**
No. Nothing is installed, nothing is logged in, and nothing appears in their admin.
**Can it find Klaviyo, Judge.me or Rebuy?**
Yes, when those apps load on the public storefront. You get the name, logo and a listing link so you can compare reviews and pricing.
**Is a Shopify app detector free?**
The one this guide uses is free, with no account and no app to install. Paste a URL and read the list.
**What should I do after I see a competitor’s apps?**
Keep the apps that support a conversion you can see on their product page. Skip the rest. Run a CRO audit on that page so you are not copying a stack that does not sell.
## How to Set a Shopify Free Shipping Bar from AOV
URL: https://ninety9.dev/blog/how-to-set-a-shopify-free-shipping-bar-from-aov.html
Published: 2026-10-25
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 8 minutes
Turn average order value into free shipping, gift and discount goals. Use 1.2×, 1.5× and 2× as starting points, preview the bar, then paste the dollars into your cart app.
Merchants search for a free shipping bar, then type a round number that feels close to their average order value (AOV — sales divided by orders). That is how a $50 store ends up with a $150 threshold nobody reaches, or a $48 store that already clears $45 and gives away postage on half the carts.
A [Shopify progress bar calculator](https://checkoutclub101.com/shopify-progress-bar-calculator/) turns AOV into three goals you can paste into a cart app: free shipping at **1.2× AOV**, a free gift at **1.5×**, and 10% off at **2×**. Those multiples are the usual ecommerce starting points. The first goal is close enough to hit with one extra item. The later goals sit further up the same bar.
The calculator does not install anything. It does not quote carrier rates. It sets the reward the shopper sees. You still need your real postage cost before you waive shipping at that total.
## Why the first goal has to sit just above a typical order
A cart progress bar is a remaining-amount message. It is not a conversion feature by itself.
If most carts already clear the line, nobody adds a second item. You subsidised behaviour you already had. If the remaining amount looks like a second full order, people ignore the bar and you trained them to ignore the next one too.
The working first goal is one extra item they already sell, with contribution (the money left after product cost) still larger than the postage you will pay. The dummy product in a good preview sits around **0.85× AOV** so a typical order is close to free shipping, not over it.
Example (labelled as an example): AOV is $80. Free shipping at 1.2× is $96. A $68 tote leaves $28 to go. A $28 pouch is a real add. A $90 second tote is not.
## Get AOV from a normal window
In Shopify: **Analytics → Reports**, or the overview card that shows total sales and orders. Divide sales by orders for the period you sell in now.
Skip a holiday spike unless you are setting a holiday bar. Include discounts the way Shopify reports sales, so you do not set a goal on a number shoppers never paid.
Write the currency you charge in. A bar in the wrong currency is not a goal.
## Run the three multiples, then check postage
Type AOV into the [progress bar calculator](https://checkoutclub101.com/shopify-progress-bar-calculator/). You should see three dollars.
| Reward | Multiple | What it is for |
| --- | --- | --- |
| Free shipping | 1.2× AOV | First add-on. Most of the work. |
| Free gift | 1.5× AOV | Second rung if the gift is cheap to you. |
| 10% off | 2× AOV | Stretch. Easy to give away margin if you are not careful. |
Then do the only maths that matters on the first line: **gross profit on the extra item must beat average shipping cost** on the orders you move. If it does not, raise the dollar goal in the app, pick a cheaper gift, or do not promise free shipping.
Per-country thresholds exist because both sides of that equation change at the border. One global $75 bar is wrong for most shops that sell in more than one market. Set the number per country when you can.
## Preview both layouts
The calculator’s dummy page is there so you can see the two layouts cart apps usually ship.
**Stacked sentences.** Each reward and its remaining amount, on the product page or in the drawer. Clear when the gifts are different.
**One track with milestones.** Shipping, gift and discount on a single bar. Quieter. Fits a slim drawer.
Upsells in the preview should be priced to finish the first or second goal — not random bestsellers. If the suggested add-on does not close the gap, it is decoration.
Copy the dollars into the app you already use. [Goalify](/apps/goalify.html) paints a stacked or milestone free shipping bar and can hold a different number per country on paid plans. [Addy](/apps/addy.html) can put that bar in the cart drawer with the add-ons that close the first two goals. The [app detector](https://checkoutclub101.com/shopify-app-detector/) shows which cart and bar apps a competitor already loads, if you want a second reference.
## Put the bar where the basket is evaluated
The cart drawer is the highest-value place. That is where they see the running total and can add one more thing without leaving. The cart page is second. The product page can help when people add one item and checkout — but a bar at 0% before anything is in the cart is discouraging.
Copy should be the remaining amount, second person, in their currency: “You are $28 away from free shipping.” A rule (“Free shipping over $96”) makes them do arithmetic. When they cross, celebrate it, then show the next goal if you run a ladder.
We already wrote the longer copy and placement guide for the [free shipping progress bar](/blog/free-shipping-progress-bar-guide.html), and the percentile method if 1.2× AOV is the wrong first cut. This page is the calculator and the three locked multiples.
## A worked pass (example)
AOV from the last 60 days is $80. Postage you absorb is about $7. The calculator prints $96, $120 and $160.
You sell a $28 pouch with about $18 contribution. One pouch at $96 still leaves you money after $7 postage. You set free shipping at $96. The gift at $120 is a $4 sample you already pack. You skip 10% off at $160 until you see whether anyone climbs that far.
You type $96 / $120 / $160 into Goalify, enable the bar at the top of the Addy drawer, and leave the homepage alone. After two weeks you look at attach rate on the pouch, not at AOV in isolation.
## Mistakes
**Copying a competitor’s $75 bar.** That is their postage and their AOV, not yours. Export their prices if you want, but do not import their threshold.
**Setting the bar at AOV.** Half of orders already clear it.
**Promising free shipping you cannot pay for.** Raise the number or charge shipping under the line.
**Three rewards on day one.** Get the first goal honest. Add the gift when the first one is hit often enough to believe.
## When 1.2× is the wrong first cut
The multiples are a start, not a law.
**Heavy or low-margin goods.** Postage is a large share of the order. 1.2× can still lose money. Raise the dollar goal or use a gift instead of free shipping.
**Almost every cart already sits above 1.2×.** The bar is not doing work. Try 1.3–1.4×, or add the gift as the first visible goal.
**AOV is pulled up by a few huge orders.** Use a typical order (the median — the middle cart — if you can get it) instead of the average. Averages lie when one wholesale invoice sits in the same report.
**You sell in three countries.** Run the calculator once per market’s AOV and postage. Do not convert $96 and hope.
If you want the percentile method (60th–75th of the order list) instead of a multiple, use that and still paste the resulting dollars into the same bar.
## Copy you can paste
Use the remaining amount. Keep it short.
- “You are $28 away from free shipping.”
- “Add $28 to unlock free shipping.”
- After the cross: “Free shipping unlocked.” Then the next line if you have a gift.
Avoid “almost there” with no number. Avoid stating only the threshold. Avoid a second language that still shows the first currency.
Put the same number in the shipping policy so the bar and checkout do not disagree. A bar that completes at $96 while checkout still charges $9 at $94 is how you teach people not to trust the next goal.
## This afternoon
1. Write AOV from a normal window, and your average postage.
2. Open the [progress bar calculator](https://checkoutclub101.com/shopify-progress-bar-calculator/) and type AOV.
3. Check the $28-style add-on still leaves contribution after postage.
4. Paste the first goal into your bar. Put it in the drawer.
5. Recrawl the product URL with the [CRO Audit for Shopify stores](/cro-audit/) if the bar fights add-to-cart.
You now have dollars you can defend. The bar is just how the shopper sees them.
If you change AOV after a catalogue price update, run the calculator again. A bar set last spring on $64 AOV is the wrong bar on $80 AOV. The multiples stay. The dollars do not.
A weekly glance is enough: AOV up, leave the bar or nudge it. AOV down after a sale, do not drop the goal just to keep the bar “winning.” A cheap bar that already qualifies every cart is decoration. Decoration trains people to ignore the next message you put in the drawer.
### FAQ
**How do I calculate a Shopify free shipping threshold?**
Take average order value and multiply by a number a little above 1. A common start is 1.2× so a typical cart is close, but not already there. Raise the dollar goal if free shipping would wipe your contribution.
**What is a good free shipping goal for a Shopify store?**
One a shopper can hit with one extra item you already sell, that still leaves money after you pay postage. Use your AOV and your delivered cost.
**What is a Shopify progress bar?**
A message in the cart — usually the drawer — that shows how close the order is to a reward: free shipping, a gift or a discount. It updates as they add items.
**Should I use a stacked cart bar or a milestone bar?**
Stacked goals spell out each reward. A milestone track is quieter and fits a slim drawer. Pick the layout your theme can actually show.
**Where do I find average order value in Shopify?**
Analytics → Reports, or the overview that shows total sales and orders. AOV is sales divided by orders. Use a recent window that matches how you sell now.
**Will a free shipping bar raise AOV?**
Only if people can reach it and the extra item still leaves you money. A bar that is already cleared, or that needs another $80, usually does neither.
**Are the progress bar numbers saved?**
On the calculator this guide uses, no. It runs in the browser. Nothing is sent away.
## 20 Shopify Upsell Examples You Can Set Up Today
URL: https://ninety9.dev/blog/shopify-upsell-examples.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Average Order Value · App: Addly: AI Bundles app & Upsell
Reading time: 7 minutes
Twenty Shopify upsell examples you can set up on the product page, in the cart and before checkout. Patterns to copy, with prices to check against your own orders.
These are twenty upsells you can set up today, written as patterns. The prices below are worked examples, not a named store's results. If a number is not from your orders, it does not belong on the offer.
Two surfaces do most of the work. The product page sells the set. The cart sells one more thing. A popup is a third ask, and only if the first two did not already make it.
## On the product page
[Addly](https://apps.shopify.com/addly?src=Ninety9Blog) owns these. The price is a Shopify discount, so the page and checkout match.
| # | Example | Why it is the one to copy |
| --- | --- | --- |
| 1 | A fixed kit: device, case, cable | One price, one decision, three SKUs you already stock |
| 2 | A pair taken from real orders, cleanser and moisturiser | The second item comes from what people bought, not from a hunch |
| 3 | A quantity break on the hero SKU | The second and third unit are the whole upsell |
| 4 | Mix and match, three for a set price | Choice stays. The discount is still one rule |
| 5 | A paid add-on under the buy button | A pouch, a sample, engraving. Optional and visible |
| 6 | The refill pouch next to the bottle | Same product, lower price per use, still a choice |
| 7 | Good, better, best as three sets | One selected. Not seven cards |
| 8 | The quantity break on the variant they picked | The size in the cart is the size that is discounted |
## In the cart
[Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) shows one of these. One click, no reload.
| # | Example | Why it is the one to copy |
| --- | --- | --- |
| 9 | The case for the item just added | Completes the product they already chose |
| 10 | A second unit at the quantity price | The break they skipped on the page, asked once |
| 11 | Gift wrap as a line they add | A fee with a yes, not a fee that appears |
| 12 | Shipping protection, off until they tick it | Optional. Pre-ticked is a dark pattern |
| 13 | One product that crosses the free-shipping line | The bar named the gap. The offer fills it |
| 14 | A delivery date under the lines | Not an upsell. It stops the bounce that kills the upsell |
## Before they pay, and as a goal
[Monet](https://apps.shopify.com/monet?src=Ninety9Blog) asks at add to cart, when checkout starts, or on exit. One product. [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) is the goal on the bar.
| # | Example | Where |
| --- | --- | --- |
| 15 | A travel size after they add the full size | Add to cart, Monet |
| 16 | The matching shade as checkout starts | Monet, then stop |
| 17 | The cheaper format when they move to leave | Exit, once |
| 18 | Free shipping, then 10% off, then a gift | Goalify, three thresholds, one bar |
| 19 | A gift that adds itself when the cart qualifies | Goalify. The bar warned them |
| 20 | The add-on they removed, offered once | Exit or the cart. Not both |
Do not run 15 and 9 as the same SKU. Do not run 13 and a popup that also tries to close the shipping gap. One gap, one offer.
A recommendation after they have paid belongs on the edit screen in [Reviso](/apps/reviso.html), if they came back to change the order. It does not replace 1 through 14.
## Six of them, built with numbers
These are setups. The prices are examples so the arithmetic is visible. Use your cost.
**1. The kit.** Device $80, case $18, cable $12. Sold separately that is $110. A set at $99 is $11 off, about 10%. If the three cost you $48 landed, the set still has $51 before ads and the label. Show one price under the buy button. [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) creates that as a Shopify discount, so the page and checkout match. A widget price checkout ignores is not a kit.
**3. The quantity break.** One jar $28, two $48, three $66. The second jar is $20, the third is $18. Put the tiers on the product page, on the variant they selected. A break that applies to a size they did not pick is a surprise at checkout. The margin check is the same worksheet as any other product discount. Two product discounts on that jar, the break plus a sitewide sale, are usually one cut too many. That is in [discount stacking](/blog/shopify-discount-stacking-explained.html).
**9. The case in the cart.** They added the device. [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) shows the case once, one click, no reload. If the product page already sold the kit, the drawer does not sell the case again.
**13. The shipping closer.** The bar says $16 to go. One product they have a reason to want costs $18. Offer that product, not a grid. If you have no honest $18 add, change the threshold. Do not invent a cheap add-on to force the bar to complete.
**18. Three goals.** Free shipping at $75, 10% off at $100, a pouch at $120. One bar, in order. [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) reveals the next goal when the current one completes, and it can add the pouch when the cart qualifies. Publishing all three sentences at once, with no progress, is a poster. The sequence is the offer.
**19. The gift.** The pouch costs you $2.10. It appears at $0 when the cart crosses $120, and it leaves if the cart drops back. The bar said it was coming. A gift that appears for the first time on the order status page feels like a mistake, even when the price is zero.
## How to choose the two you will actually run
Pull the last ninety days of orders. For the hero product, list the other SKUs that show up in the same order. The pair with a real count is example 2. The hero's own quantity break is example 3, if a second unit is something people can use. Those two are the product page.
Then look at carts that stalled under the shipping threshold. If one SKU would have closed the gap often, that is example 13, and it lives in the drawer. If the stalled carts have nothing sensible to add, the threshold is wrong. Fix the number before you design an upsell to paper over it. The method is in [how to set free shipping over $X](/blog/how-to-set-up-free-shipping-over-x-shopify.html).
Leave the popup for a gap the page and the drawer are not already covering. [Monet](https://apps.shopify.com/monet?src=Ninety9Blog) asks at add to cart, at checkout, or on exit. One product. If example 9 and example 15 are the same SKU, delete 15.
| Live this week | Holds |
| --- | --- |
| A set or a pair on the hero | Addly |
| One complement, or the item that closes shipping | Addy |
| A goal the bar can explain | Goalify |
| One ask, if the first two did not already make it | Monet |
| A recommendation if they come back to edit | Reviso |
## What to count after a week
You do not need a published benchmark. From your own orders, count:
- Orders that contain the set, versus orders of the hero alone.
- Drawer adds of the complement that are still in the order at payment.
- Carts that crossed the threshold after the closer was shown.
- Popups closed with no add. A high close rate means the moment or the product is wrong.
Stop at two offers if those counts are still noisy. Twenty live offers is how the same shopper sees the case three times and trusts the price less.
Variant matters on the break and on the pair. A two-pack price that applies to a size they did not select will look like a stacking error at checkout. Set the break on the variant in the cart. Addly can do that. A pair that ignores the shade they picked will recommend the wrong bottle. Pin the shade when the campaign is about one shade. Use purchase patterns when any shade is a fair suggestion.
Install [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) for the product page. The cart version of this list is in [in-cart upsells that convert](/blog/in-cart-upsells-that-convert.html).
### FAQ
**Are these from specific Shopify stores?**
They are setups, not a store tour. The prices are examples so you can check margin before you publish. Copy the pattern, then check it against your own orders.
**Which example should I ship first?**
The pair or the quantity break on the product you already sell most, in Addly. Then one cart complement in Addy. Stop there for a week.
**Can I run a popup and a cart upsell for the same item?**
You can. You should not. The shopper sees the same product twice and trusts the price less.
**Where do free gifts fit?**
As a goal on the bar, added when the cart qualifies. Goalify. Not as a surprise line with no remaining amount.
**What about an upsell after they pay?**
That is a new order, or an edit-screen recommendation in [Reviso](/apps/reviso.html). It is not a substitute for the offer they should have seen before checkout.
**How do I know a pair is real?**
Count orders in the last ninety days that contain both products. If that pair is rare, it is a hunch. Put a hunch on a campaign, not on every product page.
**How many of the twenty should be live?**
Two. The product-page offer and one cart offer. Add a popup only if those two are not already asking for the same item.
## Best 5 Shopify bundle apps (2026)
URL: https://ninety9.dev/blog/best-shopify-bundle-apps-2026.html
Published: 2026-10-13 (updated 2026-10-14)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 9 minutes
We tested Addly on our own storefront and compared Kaching, Fast Bundle, Pumper and Shopify Bundles from their 2026 listings. Verdicts, screenshots, honest trade-offs.
A Shopify bundle app puts more than one product, or more than one unit, into a single decision on the product page. Merchants search "Shopify bundles" when the catalogue already has a set people should buy together, and "Shopify bundle app" when the theme cannot build that set on its own.
This is our ranking, not a poll. [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) is our app, it is first, and the reasons are in the screenshots and the plans, not in a fake review count. Kaching, Fast Bundle and Pumper have thousands of public reviews. Addly has 111. If you only buy the biggest listing, stop here and install one of those. If you want one discount that still holds a pair, a ladder and a box the shopper builds, keep reading.

## How we tested these Shopify bundle apps
We installed Addly and used it. Addly screenshots are listing examples of that product UI, not a named merchant store.
Competitor screenshots in the verdicts are from each app's public Shopify App Store gallery as of October 2026. They are labelled as listing examples. We did not capture admin we do not have, and we did not invent storefronts. Ratings, prices and plan caps are from those same listings.
The [Shopify product bundles guide](/blog/shopify-product-bundles-guide.html) is the brief. The list weights:
1. **How many offer shapes live in the app** — fixed sets, pairs, quantity breaks, mix and match, add-ons.
2. **Whether the cheap plan still includes those shapes.**
3. **Whether the bill follows store orders**, not a cap on "extra revenue" the app attributes.
4. **Whether the pair can come from orders**, not only from a collection you tagged by hand.
## Comparison table
| Rank | App | Rating | From | Offer shapes on the cheap plan | How you pay later |
| --- | --- | --- | --- | --- | --- |
| 1 | [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) | 4.9 / 111 | Free, then from $15/mo | Sets, pairs, quantity breaks, mix and match, add-ons | Shopify plan, no revenue cap |
| 2 | [Kaching Bundles](https://apps.shopify.com/bundle-deals) | 5.0 / 6,271 | Free to install, paid from $14.99 | Bundle deals, with a revenue ceiling on paid plans | Attributed revenue, capped |
| 3 | [Fast Bundle](https://apps.shopify.com/fast-bundle-product-bundles) | 5.0 / 3,541 | Free on development stores, then $19 | Bundles, with AI pairs starting on paid | Bundle-sales caps at $19, $49, $139 |
| 4 | [Pumper](https://apps.shopify.com/pumper-quantity-breaks-product-bundles-discounts) | 4.9 / 3,557 | Free until $300 extra revenue | Quantity breaks and bundles, then a cap | $9.99, $29.99, $49.99 on extra revenue |
| 5 | [Shopify Bundles](https://apps.shopify.com/shopify-bundles) | 2.9 / 568 | Free | Fixed bundles and multipacks | Stays a pack builder |
## 1. Addly — our pick, and the one we actually ran
Addly is a Shopify bundle app for the product page and the offers that show up after the first set is live. Frequently bought together can be drafted from purchase history, or picked by you on a new shop. The same install runs a [quantity break](/blog/quantity-breaks-vs-volume-discounts.html) per variant, a [mix and match](/blog/build-a-box-mix-and-match-bundles.html) box, and add-ons. Offers go through Shopify's own discounts, so the widget price is the checkout price.
Thirteen languages are on the install. Live preview and offer analytics are too. Free includes up to three Basic offers. Unlimited adds Markets. Advanced adds AI recommendations, bundle discounts and targeting. Paid prices follow your Shopify plan, from $15 / $20/mo. Built for Shopify, 4.9 from 111 reviews.
That review count is the honest gap. Kaching has fifty times as many. Addly still wins this list because there is no revenue cap, and because the pair can come from real orders instead of a collection you tagged by hand.

A quantity break is the offer most ladder apps stop at. Addly still runs the pair and the add-ons in the same install.

A mix-and-match box is the offer a ladder app usually does not cover. If you already know you only need "buy 2, save more", skip to Kaching. If you will need the pair or the box by the next collection drop, start in Addly so you are not migrating discounts later.
**Pros**
- Sets, pairs, quantity breaks, mix and match and add-ons in one Shopify bundle app
- A free plan you can try, then paid prices by Shopify plan — no revenue cap
- Pairs from real orders, or chosen by you
- No cap on attributed revenue
**Cons**
- 111 reviews, not several thousand
- Newer as a full merchandising app than the Kaching-era quantity-break widgets
- If you only need a sealed multipack, Shopify Bundles is simpler and free
**Verdict.** Install Addly if the product page has to sell more than one shape of offer and you do not want the bill to jump when the bundle works. It is our app. The screenshots are listing examples, not a merchant we do not name.
The same offer can show in the [Addy](/apps/addy.html) drawer. Do not publish it twice. Pick the surface.
## 2. Kaching Bundles
[Kaching](https://apps.shopify.com/bundle-deals) is the high-review quantity-break suite. 5.0 from 6,271 reviews. The listing is free to install. Paid plans at $14.99, $29.99 and $59.99 cap additional revenue at $1,000, $5,000 and $10,000.
That review base is real. A lot of Shopify stores learned the ladder widget here, and it is still a clean pattern when "buy more of this SKU" is the whole job. We did not run Kaching in our test store. The ranking is from the listing: a known widget, a revenue meter, and a plan question the week you also need a pair from orders or a box.
**Pros**
- Very large review base
- Familiar quantity-break widget
- Fine if a ladder is the only offer you will run this year
**Cons**
- Paid plans cap additional revenue
- The next offer shape is a plan question, not a default
- $14.99 is the start of the paid ladder, not the whole product

**Verdict.** Second, not because it is a bad app. It is the mature ladder. Pick it if you already live in Kaching and you only need quantity breaks. Pick Addly if the same SKU also needs a pair or a mix-and-match box, and you do not want a cap on the extra the bundle makes.
## 3. Fast Bundle
[Fast Bundle](https://apps.shopify.com/fast-bundle-product-bundles) is named for pace. 5.0 from 3,541 reviews. Free on development stores. Paid plans at $19, $49 and $139 follow monthly bundle sales, with caps around $1,000, $3,000 and $10,000. AI frequently bought together starts on the paid side.
Speed is a preview. A fast empty bundle is still empty. A suggestions feature that begins at $19 is a simpler app than the listing headline. The listing is enough to rank it: lots of social proof, a meter on bundle sales, AI pairs not on the free product.
**Pros**
- Large review base
- Built around getting a bundle onto the page
**Cons**
- Bundle-sales caps on the paid plans
- AI pairs are not the free product
- $139 is a long way from a $19 experiment

**Verdict.** Third. Use it if you want a bundle on the page this afternoon and you can live with a sales cap. Use Addly if the pair should come from orders on the same plan you already pay.
## 4. Pumper
[Pumper](https://apps.shopify.com/pumper-quantity-breaks-product-bundles-discounts) leads with quantity breaks and attaches bundles. 4.9 from 3,557 reviews. Free until about $300 of extra revenue, then $9.99, $29.99 and $49.99.
The free band ends when the offer works. That is a different contract from a free plan with up to three Basic offers and no revenue cap. A quantity-break app with bundles attached is still a ladder first. The set, the pair and the box are secondary.
**Pros**
- Large review base
- A free band for a small extra-revenue number
**Cons**
- The meter is attributed revenue
- The ladder is the product. The other shapes are attached.
- The free band ends when the bundle sells

**Verdict.** Fourth. Close to Kaching in shape, with a smaller free revenue ceiling. If the meter is the problem, Addly's Shopify-plan prices are the cleaner bill.
## 5. Shopify Bundles
[Shopify Bundles](https://apps.shopify.com/shopify-bundles) is the first-party pack builder. Free. 2.9 from 568 reviews. You group products into a fixed bundle or a multipack, and Shopify sells that group.
That is the simpler Shopify bundle app, and for a sealed kit it is the right first try. It does not draft a pair from orders, run a variant-level quantity break, or let the shopper build a box. The 2.9 rating is the public record of that limit, not a rumour.
**Pros**
- Free
- Native fixed bundles and multipacks
- No third-party discount to reconcile
**Cons**
- 2.9 from 568 reviews
- No quantity breaks, mix and match, or pairs from orders
- A pack builder, not a merchandising app

**Verdict.** Fifth, and still useful. Install it for one fixed pack. Replace it the week the catalogue needs a second shape.
## Which Shopify bundle app should you install?
| If you need | Install |
| --- | --- |
| Sets, pairs, quantity breaks and mix and match on one plan | Addly |
| A simpler ladder with a cap on extra revenue | Kaching or Pumper |
| A fast bundle that meters bundle sales | Fast Bundle |
| Only a fixed multipack, and nothing else | Shopify Bundles |
The set, the pair and the quantity break should share Shopify's native discounts. Two Shopify bundle apps on one product is how the page price and the cart price drift. The margin check is in [bundle discount maths](/blog/bundle-discount-margin-maths.html).
Install [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) when "Shopify bundles" means more than one pack at a fixed price. The pair-only shortlist is a different search: [frequently bought together apps](/blog/best-shopify-frequently-bought-together-apps-2026.html).
### FAQ
**What is the best Shopify bundle app in 2026?**
Addly. We put it first because the same install runs sets, frequently bought together, quantity breaks, mix and match and add-ons, with a free plan and no revenue cap. Kaching is the mature quantity-break suite if you only need a ladder and can live with a revenue cap.
**Is there a free Shopify bundle app?**
Addly has a free plan with up to three basic offers. Paid Unlimited and Advanced follow your Shopify plan, from $15 / $20/mo, with no revenue cap. Shopify Bundles is free and only builds fixed packs and multipacks. Several other listings look free until extra revenue crosses a cap.
**Did you test the competitor apps in a live store?**
We installed Addly. Its screenshots are listing examples of the product UI. For Kaching, Fast Bundle, Pumper and Shopify Bundles the screenshots in each verdict are from that app's public listing gallery as of October 2026, not from stores we operate.
**What is the difference between a Shopify bundle and a quantity break?**
A bundle groups different products, or a fixed multipack, into one offer. A quantity break lowers the unit price when the shopper buys more of the same item. Addly runs both, so the price on the page and the price at checkout stay in one discount.
**Where should a Shopify bundle sit on the product page?**
Under the add-to-cart button, before the long description. The placement notes are in [where to place bundles](/blog/where-to-place-bundles-on-pdp.html).
**Do I need a separate app for frequently bought together?**
Not if the bundle app already treats the pair as one offer. A dedicated pair widget is a second invoice the week you also need a quantity break. The pair-only comparison is in [frequently bought together apps](/blog/best-shopify-frequently-bought-together-apps-2026.html).
## Best 5 Shopify cart drawer apps (2026)
URL: https://ninety9.dev/blog/best-shopify-cart-drawer-apps-2026.html
Published: 2026-10-13 (updated 2026-10-14)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 9 minutes
We tested Addy on our own storefront and compared Kaching, Amp, Upcart and iCart from their 2026 listings. Verdicts, screenshots, honest trade-offs.
A Shopify cart drawer is a slide-out cart that opens on add to cart and keeps the product page behind it. The theme cart lists line items. A useful drawer sells the second item, shows how close the shopper is to a shipping goal, and states when the order arrives — without a trip to `/cart`.
This is our ranking. [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) is our app, it is first, and we are not going to hide the two public reviews or the missing Built for Shopify badge. Kaching, Amp and Upcart have that badge and a lot more ratings. If you only install the listing with the most social proof, they will feel safer. If you want a drawer that starts from the catalogue you already have, keep reading.

## How we tested these cart drawer apps
We installed Addy and used the AI draft. Addy screenshots are listing examples of that product UI. One of them even says the cart preview is an example.
Competitor screenshots in the verdicts are from each app's public Shopify App Store gallery. They are labelled as listing examples. We did not capture admin we do not have. Ratings and prices are from those listings as of October 2026. Upcart's listing is not currently on the App Store; the screenshot is from the listing gallery CDN.
The [cart drawer guide](/blog/shopify-cart-drawer-complete-guide.html) is the rubric. The list weights:
1. **Time to a competent first cart** — draft versus empty canvas.
2. **The blocks that actually sell** — upsells, volume deals, gifts, shipping protection, a progress bar, a delivery date.
3. **Whether one store can run more than one cart**, by market or tag.
4. **Whether the drawer stays off the first paint.**
## Comparison table
| Rank | App | Rating | From | First cart | Markets / rules | Built for Shopify |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) | 5.0 / 2 | Free to install | AI draft from the catalogue | Markets, customer tags, per block | Not listed |
| 2 | [Kaching Cart Drawer](https://apps.shopify.com/cart-upsell) | 5.0 / 1,484 | Free plan, then paid | You assemble it | Language and store settings | Yes |
| 3 | [Amp Slide Cart](https://apps.shopify.com/slide-cart) | 5.0 / 772 | Free plan, paid around $29.99 | Industry templates | Languages and markets | Yes |
| 4 | [Upcart](https://apps.shopify.com/upcart-cart-builder) | 4.7 / 959 | Free plan, then paid | You assemble it | HTML, CSS, JSX templates | Yes |
| 5 | [iCart](https://apps.shopify.com/icart) | 4.7 / 451 | First 100 orders free | You assemble it | Multi-tier bar, AI recs | Not listed |
## 1. Addy — our pick, and the one we actually ran
Addy is an AI cart drawer for Shopify. The first cart is not a blank column. The app reads the products you already sell and the way the brand already looks, then proposes a slide cart with the blocks a selling drawer needs. You edit it. You do not start from zero the week a campaign goes live.
That draft is a starting point, not a finished merchandising strategy. We still moved blocks, killed a weak upsell, and checked the delivery line. The point is you start from a cart that already looks like the store, not from an empty stack of toggles.

After the draft you get more than 40 blocks: in-cart upsells, volume discounts, gifts, shipping protection, a progress bar, estimated delivery dates, countdown timers, announcement bars, trust badges, FOMO blocks, custom HTML and CSS. Targeting can change the whole cart, or a single block, by Shopify Market or customer tag. Prices render in the shopper's currency. Strings are translatable.

It loads asynchronously and only renders when opened, so it should not touch Largest Contentful Paint. A/B tests are built in, so you can compare two versions of the drawer instead of publishing a guess. If the offer itself is a bundle, let [Addly](/apps/addly.html) own the discount and let Addy present it. If the shipping threshold should be its own test, [Goalify](/apps/goalify.html) can run that goal.

Addy is free to install. It has two public reviews. It launched in August 2026. It is not listed as Built for Shopify. Those are the facts. We still rank it first because the other drawers on this list open on a canvas you assemble, and because market-level carts and an A/B test are in the same free install.
**Pros**
- First cart is drafted, then editable
- Markets and tags, including per block
- Delivery date, protection, gifts and a progress bar in the same drawer
- A/B tests on the drawer
- Free to install
**Cons**
- Two public reviews. You are early.
- Not listed as Built for Shopify
- The AI draft still needs a merchant pass. It will not merchandize a bad catalogue.
**Verdict.** Install Addy if you want a drawer this week and you are willing to be early on reviews. It is our app. The screenshots are listing examples, not a merchant we do not name. If you need the Built for Shopify badge and a thousand ratings more than you need a draft, Kaching or Amp will feel safer on paper.
## 2. Kaching Cart Drawer
[Kaching](https://apps.shopify.com/cart-upsell) is the high-review suite drawer. 5.0 from 1,484 reviews. Built for Shopify. Slide cart, urgency timer, shipping or gift bars, payment icons, gift wrap and shipping-protection toggles, translations.
The review count is the listing. The first cart is still a blank column. You assemble the block order, then you decide which of those toggles to leave off. The timer and the payment-icon row are the ones merchants switch on because they exist, not because the cart needed them. We did not run Kaching in our test store.
**Pros**
- Large public review base
- Built for Shopify
- Translations without code
**Cons**
- You still assemble the first cart
- Easy to publish every toggle at once
- Familiar only if you already live in the Kaching suite

**Verdict.** Second, on purpose. It is the proven suite drawer. Pick it if you already pay for Kaching and you want the badge. Pick Addy if the empty canvas is the delay, and you want market rules without a second builder afternoon.
## 3. Amp Slide Cart
[Amp](https://apps.shopify.com/slide-cart) leads with templates. 5.0 from 772 reviews. Built for Shopify. Industry layouts, progress bar, frequently bought together, gifts, BOGO, announcements, languages and markets. Paid pricing on the listing sits around a flat monthly fee once you leave the free plan.
A template is not a draft of your catalogue. It is a starting look you still fill. Brand fit comes from the products you already sell, not from an industry preset. And a flat monthly fee is a different conversation from a drawer that is free to install.
**Pros**
- Industry templates on the listing
- Markets and languages
- Built for Shopify
**Cons**
- Paid plan is a flat fee, not a free install
- The template still has to be filled before Friday
- Design-first can delay the first live offer

**Verdict.** Third. A template is faster than a blank Upcart canvas and slower than an Addy draft of your own SKUs. Use Amp if you like the look on the listing and you will pay the monthly fee. Use Addy if the first cart should already contain your products.
## 4. Upcart
[Upcart](https://apps.shopify.com/upcart-cart-builder) is the builder named as a builder. 4.7 from 959 reviews. Built for Shopify. In-cart upsells, rewards, progress bars, gifts, and custom templates with HTML, CSS and JSX.
HTML and JSX are control. They are also a developer ticket. Addy already has custom HTML and CSS as a block, after a cart that was drafted from the store. Upcart opens on the canvas. The week of a sale, that is the delay. As of 14 October 2026 the [Upcart listing](https://apps.shopify.com/upcart-cart-builder) is not currently on the App Store. The screenshot below is from that listing's gallery CDN, not a store we operate.
**Pros**
- Custom templates if you have someone to write them
- Rewards and upsells in the same canvas
- Built for Shopify
**Cons**
- Empty canvas by default
- Custom code is a cost, not a toggle
- 4.7, not 5.0 — the review history is mixed on setup time

**Verdict.** Fourth. The right pick only if a developer is already on the drawer and the listing is back. Otherwise you are buying a canvas and a ticket.
## 5. iCart
[iCart](https://apps.shopify.com/icart) is a drawer plus a full cart page, popup and mini cart. 4.7 from 451 reviews. First 100 orders free for life on the listing, then paid bands. AI recommendations, bundles, volume discounts, BOGO, multi-tier progress bar, countdown. Not listed as Built for Shopify either, so Addy is not the only app on this list without the badge.
Most stores that want a drawer do not also need a second cart page, a popup cart and a mini cart. Those extra surfaces are configuration you will not open. A working slide-out already keeps the shopper on the product. Keep the countdown for a real deadline.
**Pros**
- First 100 orders free on the listing
- Multi-tier shipping bar
**Cons**
- More surfaces than most stores will use
- AI recs still need a merchandiser to kill substitutes
- You assemble the first cart, same as the other builders

**Verdict.** Fifth. Extra cart surfaces are not extra conversion. If you only need the slide-out, Addy is the shorter path.
## Which Shopify cart drawer should you install?
| If you need | Install |
| --- | --- |
| A drafted cart, market rules, and an A/B test | Addy |
| A simpler suite you still assemble block by block | Kaching |
| An industry template, then a flat monthly fee | Amp |
| HTML and JSX, and someone to write them | Upcart |
| A drawer plus extra cart surfaces you may never open | iCart |
Progress bar, line items, one upsell, delivery estimate, checkout. A third upsell is usually a second app shouting. [In-cart upsells that convert](/blog/in-cart-upsells-that-convert.html) is the merchandising pass. The offer-app shortlist is [cart upsell apps](/blog/best-shopify-cart-upsell-apps-2026.html).
If you are still choosing the pattern, read [cart drawer vs cart page](/blog/cart-drawer-vs-cart-page.html). Install [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog). The other listings are real. None of them draft the first cart from the store you already have. If you already have a drawer and only need the offer, use the [cart upsell](/blog/best-shopify-cart-upsell-apps-2026.html) list.
### FAQ
**What is the best Shopify cart drawer app in 2026?**
Addy. We put it first because it drafts the first slide cart from the catalogue and the brand, then lets you edit more than 40 blocks, including a different cart per market. Two reviews is a real gap. A thousand reviews on a builder still open on an empty canvas.
**Did you test the competitor drawers in a live store?**
We installed Addy. Its screenshots are listing examples of the product UI. For Kaching, Amp, Upcart and iCart the screenshots in each verdict are from that app's public listing gallery. Upcart's listing is not currently on the App Store; that shot is from the gallery CDN while the listing was public. None of them are stores we operate.
**Will a cart drawer app slow my Shopify store down?**
It should not. Addy loads asynchronously and only renders when the cart opens, so it stays out of Largest Contentful Paint. Test any drawer with PageSpeed Insights before and after install. The performance rules are in [cart drawer LCP](/blog/cart-drawer-performance-lcp.html).
**How many upsells should a Shopify cart drawer show?**
One or two. A third offer reliably lowers the take rate of the first two. If you have five products worth suggesting, the recommendation logic is the problem, not the slot count.
**Can I run a different cart for each Shopify Market?**
Yes, in Addy. Layout, offers and shipping thresholds can change by market and by customer tag, including per block. Currency follows the shopper.
**Do I need to edit my theme to add a cart drawer?**
Not with a modern theme app extension. Enable the embed in the theme editor. Uninstall should leave no Liquid behind.
## Best 5 Shopify cart upsell apps (2026)
URL: https://ninety9.dev/blog/best-shopify-cart-upsell-apps-2026.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 6 minutes
A 2026 comparison of Shopify cart upsell apps. Features, pricing and where Addy, ICU, Candy Rack, ReConvert and BiSell fit after add to cart.
A Shopify cart upsell is the product you show after add to cart, while the first item is still on screen. Merchants search "Shopify cart upsell app" when the theme cart is a receipt and the second item never appears. The upsell fails when it is a grid, when it suggests a substitute, or when the app that should show it is really a thank-you funnel.
This comparison looks at five Shopify cart upsell apps from the 2026 App Store. It is not the [cart drawer](/blog/best-shopify-cart-drawer-apps-2026.html) shortlist. The ranking favours an offer that is already sitting in a drafted cart, then editable by market.

## How these Shopify cart upsell apps were ranked
[In-cart upsells that convert](/blog/in-cart-upsells-that-convert.html) is the merchandising rule. The list weights:
1. **Whether the first cart already contains an offer**, or you wire the slot across product, cart, checkout and thank-you.
2. **Whether the offer can change by market or tag.**
3. **Whether you can A/B test the cart** instead of publishing one version for everyone.
4. **Whether the cart add is the product**, not a post-purchase funnel with a cart checkbox.
[Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) is first because a Shopify cart upsell app that starts as four surfaces spends the launch week deciding where the offer lives. The add waits.
## Comparison table
Ratings and prices below are from the Shopify App Store listings as of October 2026.
| Rank | App | Rating | From | Where the offer sits | Extra control |
| --- | --- | --- | --- | --- | --- |
| 1 | [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) | 5.0 / 2 | Free to install | Drafted in the cart | Markets, tags, A/B tests, 40+ blocks |
| 2 | [ICU In Cart Upsell](https://apps.shopify.com/in-cart-upsell) | 4.8 / 586 | Free plan | Cart, product page, popups, post-purchase | Conditional logic |
| 3 | [Candy Rack](https://apps.shopify.com/candyrack) | 4.9 / 263 | Free plan | AI upsells, quantity breaks, a cart drawer | Offer suite you still assemble |
| 4 | [ReConvert](https://apps.shopify.com/reconvert-upsell-cross-sell) | 4.8 / 3,110 | Free plan, then $9.99 | Product, cart, checkout, thank-you | Billed on orders or upsell revenue |
| 5 | [BiSell](https://apps.shopify.com/upsell-cross-sell) | 5.0 / 7 | Free | In-cart, checkout, post-purchase | Thin public record |
## 1. Addy — the cart upsell is already in the drawer
Addy is a Shopify cart upsell app that does not start from an empty column. It reads the catalogue and the brand and proposes a slide cart with the blocks a selling cart uses: the upsell, volume discounts, a gift, shipping protection, a progress bar, a delivery date. You edit that draft. You do not spend Friday choosing which of four surfaces should show the pouch.
After the draft there are more than 40 blocks, including custom HTML and CSS. Targeting can change the whole cart, or one block, by Shopify Market or customer tag. A/B tests compare two versions of the drawer. It loads only when the cart opens. It is free to install. It has two public reviews. The review count is not the upsell.
**Pros**
- The cart upsell arrives with the first draft
- Markets, tags and A/B tests
- One cart, so the offer is not a second app
- Free to install
**Cons**
- Two public reviews
- Not listed as Built for Shopify
If the offer is a bundle with its own price, [Addly](/apps/addly.html) should own the discount. If the bar itself needs country thresholds, [Goalify](/apps/goalify.html) can run that goal inside the same cart. One upsell. One bar.
## 2. ICU In Cart Upsell
[ICU](https://apps.shopify.com/in-cart-upsell) is a targeted upsell listing. 4.8 from 586 reviews. A free plan is on the listing. The same product covers the product page, the cart, popups and post-purchase.
Four surfaces is a funnel, not a cart add. The in-cart offer still needs a merchandiser, or it will repeat the product-page pair. Conditional logic can hide a row. It cannot draft the complement from the catalogue the way a cart that already contains the slot can.
**Pros**
- A large review base for an offer app
- A free plan on the listing
**Cons**
- Product page, popup and thank-you sit next to the cart
- You still place the offer
- Easy to show the same SKU twice
## 3. Candy Rack
[Candy Rack](https://apps.shopify.com/candyrack) is an AI upsell and quantity-break suite. 4.9 from 263 reviews. A free plan is on the listing. Cross-sell, volume bundles and a built-in cart drawer sit in the same product.
A drawer attached to an offer builder is still a builder. The first cart is yours to assemble. Quantity breaks belong on the product page when they have their own price. Putting the ladder and the complement in one cart row is how the shopper stops trusting either number.
**Pros**
- AI upsells and quantity breaks on one listing
- A free plan
**Cons**
- You assemble the first offer
- The drawer is attached to a wider suite
- Easy to stack a break and a complement on the same SKU
## 4. ReConvert
[ReConvert](https://apps.shopify.com/reconvert-upsell-cross-sell) is the high-review post-purchase suite that also names cart upsell. 4.8 from 3,110 reviews. A free plan is on the listing. Paid plans in the current comparison start at $9.99 and follow store orders or upsell revenue, then $19.99 and $39.99. Surfaces include product, cart, checkout and thank-you.
The public record is the thank-you funnel. A cart checkbox on a post-purchase app is how the shopper sees the same offer after they pay. Addy is free to install and stays in the cart they already opened. You do not pay on attributed upsell revenue to keep it there.
**Pros**
- Large review base
- Cart is named on the listing
**Cons**
- The product is post-purchase first
- Paid plans meter orders or upsell revenue
- Four surfaces, one of which is the cart
## 5. BiSell
[BiSell](https://apps.shopify.com/upsell-cross-sell) is a free in-cart, checkout and post-purchase listing. 5.0 from 7 reviews.
Seven reviews is a thin record for a tool that adds a line item. Confirm the current triggers on the plan screen before you promise the cart and nothing else. Monet owns the popup. Addy owns the cart add. A free listing with three surfaces still needs a merchandiser.
**Pros**
- Free
- In-cart is named on the listing
**Cons**
- Seven public reviews
- Checkout and thank-you sit next to the cart
- A short listing to audit before a sale
## Which Shopify cart upsell app should you install?
| If you need | Install |
| --- | --- |
| An upsell already sitting in a drafted cart, with a test | Addy |
| An offer suite across cart, popup and thank-you | ICU |
| AI upsells and quantity breaks you still assemble | Candy Rack |
| A thank-you funnel that also names the cart | ReConvert |
| A free in-cart listing with seven reviews | BiSell |
Progress bar, line items, one upsell, delivery estimate, checkout. A second Shopify cart upsell app inside that drawer is how the shopper sees two recommendations and trusts neither.
Install [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog). If you are still choosing the shell, read [cart drawer vs cart page](/blog/cart-drawer-vs-cart-page.html) and the [cart drawer app comparison](/blog/best-shopify-cart-drawer-apps-2026.html).
### FAQ
**What is the best Shopify cart upsell app in 2026?**
Addy. The cart upsell is drafted with the drawer, then you edit it. Markets, tags, A/B tests and more than 40 blocks are in the same free install. An offer suite that also covers checkout and thank-you is a wider product, not a faster cart add.
**How many products should a Shopify cart upsell show?**
One or two. A third offer lowers the take rate of the first two. The merchandising pass is in [in-cart upsells that convert](/blog/in-cart-upsells-that-convert.html).
**Should the cart upsell be a bundle or a single product?**
A single complement, or one bundle with one price. If the offer is a set with its own discount, let [Addly](/apps/addly.html) own the price and let Addy present it. Do not run two discounts on the same SKU.
**Can I test a Shopify cart upsell?**
Yes. Addy includes A/B tests, so two versions of the drawer can run at once. Guessing in Slack is the alternative.
**Do I need a separate cart drawer and a cart upsell app?**
No. A second upsell app inside a drawer you already have is how the cart gets two progress bars and three product rows. The drawer comparison is in [cart drawer apps](/blog/best-shopify-cart-drawer-apps-2026.html).
## Best 5 Shopify free shipping bar apps (2026)
URL: https://ninety9.dev/blog/best-shopify-free-shipping-bar-apps-2026.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 7 minutes
A 2026 comparison of Shopify free shipping bar apps. Features, pricing and where Goalify, Essential, Hoppy, XB and Kaktus fit on a real cart.
A Shopify free shipping bar is a progress fill that tells the shopper how much more they need to spend to unlock free delivery. It works because the cart already has intent. It fails when the number is a guess, when every country sees the home-market threshold, or when the remaining amount does not match the shipping rate you actually absorb.
This comparison looks at five Shopify free shipping bar apps merchants install in 2026. The ranking favours an honest shipping threshold you can change by country and test. Gift and discount goals are a different search: [progress bar apps](/blog/best-shopify-progress-bar-apps-2026.html).

## How these free shipping bar apps were ranked
A pretty bar that cannot change by market is a screenshot. The list weights:
1. **Whether the remaining amount is the real shipping threshold**, not a decorative fill.
2. **Whether the number can change by country**, with currency that matches the shopper.
3. **Whether you can test the threshold or the copy** instead of arguing in Slack.
4. **Whether the paid plan is based on orders you already understand**, not on a view meter that spikes with ads.
[Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) is first because the shipping number can change by country and you can test it. A high review count on a single-fill bar still leaves you shopping when the second country appears.
## Comparison table
Ratings and prices below are from the Shopify App Store listings as of October 2026.
| Rank | App | Rating | From | Stacked goals | Country / geo | Testing |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) | 5.0 / 48 | Free under 10 orders, then $3.99 | Yes | Country thresholds and currency | A/B tests |
| 2 | [Essential Free Shipping Bar](https://apps.shopify.com/essential-order-value-booster) | 5.0 / 971 | Free to 1,000 views, then $9.99 | Bar plus later upsells | Geolocation on paid plans | Analytics on higher plans |
| 3 | [Hoppy Free Shipping Bar](https://apps.shopify.com/hoppy-free-shipping) | 4.7 / 264 | Free | Goals, gifts, discounts | Multi-currency, multi-language | Not listed as A/B |
| 4 | [XB Free Shipping Bar](https://apps.shopify.com/xb-free-shipping-bar-upsell) | 4.9 / 41 | Free | Goals plus upsells | Geolocation | Not listed as A/B |
| 5 | [K: Free Shipping Bar](https://apps.shopify.com/kaktus-free-shipping-bar) | 4.7 / 57 | Free on dev stores, then $6.70 | Single bar plus countdown | Placement only | Not listed as A/B |
## 1. Goalify — a shipping number you can change and test
Goalify is a Shopify free shipping bar. The first publish can be a single fill in under two minutes: pick a template, set the shipping threshold, choose the cart drawer or the top bar, go live. That is table stakes.
The reason it sits first is the shipping number itself. Country configuration keeps export carts from seeing the domestic minimum. A/B tests compare thresholds and copy. When the shopper is short, AI upsells from order history can suggest a product that closes the gap. Gift and discount goals can sit later in the same install. They are not why this page ranks it first.
You can run it as a sticky bar, as a widget on the product page, and inside the cart. Free up to 10 orders a month, then $3.99, $7.99 and $11.99. Built for Shopify, 5.0 from 48 reviews.
**Pros**
- Country shipping thresholds and presentment currency
- A/B tests on the shipping number
- Bar plus embeddable widget
- Order-banded pricing, including a real free band
**Cons**
- 48 reviews, not 971. The sequence is still the product.
Put the bar at the top of the [Addy](/apps/addy.html) drawer so the remaining amount sits on the line items. The [free shipping progress bar guide](/blog/free-shipping-progress-bar-guide.html) is the setup checklist.
## 2. Essential Free Shipping Bar
[Essential](https://apps.shopify.com/essential-order-value-booster) is the high-review single-job bar. 5.0 from 971 reviews. Free up to 1,000 monthly booster views. Paid plans at $9.99, $14.99 and $29.99 raise the view cap, then add geolocation, cart-page boosters, upsell products and analytics.
The free band is a view cap, not a finished bar. Paid social burns through 1,000 views. Geolocation, cart upsells and analytics arrive after you are already paying. Stacked rewards and a test of the threshold are not the product.
**Pros**
- Large review base
- Geolocation once you pay
**Cons**
- View-based pricing grows with ads, not with orders
- Stacked rewards and tests are not the core product
- The free band ends when traffic works
## 3. Hoppy Free Shipping Bar Cart Upsell
[Hoppy](https://apps.shopify.com/hoppy-free-shipping) lists as free and Built for Shopify. 4.7 from 264 reviews. The listing pairs the progress bar with AI upsells, gifts, discounts, frequently bought together and cart-drawer placement.
A free bar that also wants to recommend products will crowd the drawer before the threshold is honest. Keep one offer in the cart besides the bar. Two upsells plus a gift plus a pair is a catalogue, not a goal. There is no listed A/B test for the number itself.
**Pros**
- Free listing
- Multi-currency and multi-language
**Cons**
- Easy to turn the bar into a full upsell suite
- No listed A/B test for the threshold itself
- 4.7, and the extra offers are the risk
## 4. XB Free Shipping Bar Upsell
[XB](https://apps.shopify.com/xb-free-shipping-bar-upsell) is a smaller, newer listing: 4.9 from 41 reviews, free, Built for Shopify. Progress bar, product or cart or announcement-bar placement, geolocation, built-in upsells.
A free geo-aware fill is not a sequence. Confirm the current plan screen still matches "free" after install. Small review counts move faster than large ones. Stacked rewards and a test are not on the listing.
**Pros**
- Free, with location rules on the listing
- Flexible placement
**Cons**
- Thin public review history
- Upsells in the same app can crowd the bar
- No stacked goals, no listed A/B test
## 5. K: Free Shipping Bar
[Kaktus](https://apps.shopify.com/kaktus-free-shipping-bar) is a placement-heavy bar: top, bottom, cart page, cart drawer, product page, plus a countdown. 4.7 from 57 reviews. Free on development stores, then $6.70, $14.99 and $49.99 by store order volume.
A countdown next to a shipping goal can help a weekend sale. It can also make every Tuesday feel like a closing-down sale. Use the timer when the deadline is real. The bar itself does not need a clock to work, and this listing is still one fill, not a sequence.
**Pros**
- Many placements
- Order-banded paid plans
**Cons**
- One bar, not a stacked sequence
- Countdown is easy to overuse
- Free only on development stores
## Which Shopify free shipping bar should you install?
| If you need | Install |
| --- | --- |
| A shipping threshold per country, and an A/B test | Goalify |
| A simpler single fill, billed once ad views pile up | Essential |
| A free bar that also tries to be an upsell suite | Hoppy |
| A thinner free listing, without stacked goals | XB |
| One bar and a countdown, free only on a dev store | Kaktus |
Showing every shopper the domestic free-shipping threshold is how export carts stall. Set the country number first. Style the bar second. Copy notes are in [free shipping bar copy](/blog/free-shipping-bar-copy.html).
Install [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog). The bar has to survive a second country. If the next job is a gift or a discount, that is the [progress bar](/blog/best-shopify-progress-bar-apps-2026.html) list. One honest shipping threshold beats a ladder nobody can finish.
### FAQ
**What is the best free shipping bar app for Shopify in 2026?**
Goalify. Country shipping thresholds and a real A/B test sit on the same install, including the free band under 10 orders. A high-review single-fill bar still leaves you shopping when the second country appears.
**Where should a Shopify free shipping progress bar sit?**
At the top of the cart drawer, and again as a quiet storefront bar if you want the threshold visible before add to cart. Below the line items it reads as a footnote. The placement notes are in [where to put a progress bar](/blog/where-to-put-a-progress-bar.html).
**How do I set the free shipping threshold?**
Slightly above current average order value, often 15 to 30 percent higher, so one extra item can close it. Then check that the added margin covers the shipping you absorb. [When not to offer free shipping](/blog/when-not-to-offer-free-shipping.html) is the margin test.
**Can I run different free shipping goals per country?**
Yes, in Goalify. A $75 threshold does not mean the same thing in every market. Country configuration and presentment currency keep the remaining amount honest.
**Do I need a separate app for a free gift at a higher cart value?**
Not with Goalify. The gift belongs on a later goal in the same bar. That sequence is the [progress bar apps](/blog/best-shopify-progress-bar-apps-2026.html) comparison. A second app for the gift is how the bar and the cart fall out of sync.
## Best 5 Shopify frequently bought together apps (2026)
URL: https://ninety9.dev/blog/best-shopify-frequently-bought-together-apps-2026.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 8 minutes
A 2026 comparison of Shopify frequently bought together apps. Features, pricing and where Addly, Frequently Bought Together CBB, Essential, Selleasy and Fether fit.
A Shopify frequently bought together widget is a pair on the product page: this item, plus the item people already buy with it, added in one tap. The job is [average order value](/blog/how-to-increase-average-order-value-shopify.html), not a second catalogue. Most of the performance difference between two stores running the same pattern is the pair, not the badge colour.
This comparison looks at five Shopify apps that merchants actually install for that widget in 2026. The ranking is for stores that want the pair to stay true when the next request is "now let them buy three" or "let them build the box". A pair-only listing is not a second install. It is a second invoice waiting.

## How these frequently bought together apps were ranked
Review count is a popularity score. It is not a merchandising score. The list weights four things a buyer can check on the listing and in the admin:
1. **Whether the pair can come from orders**, not only from a collection tag.
2. **Whether a second offer shape lives in the same app**, so the discount does not move to a second tool.
3. **Whether the free or cheap plan still includes the offer you came for.**
4. **Whether the widget can sit under add to cart without a theme edit.**
[Addly](https://apps.shopify.com/addly?src=Ninety9Blog) is first because it treats frequently bought together as one offer inside a bundle app, with no revenue cap. The other four are real listings. A pair-only widget still leaves you shopping the week the same SKU needs a quantity break.
## Comparison table
Ratings and prices below are from the Shopify App Store listings as of October 2026.
| Rank | App | Rating | From | Pair from orders | Other offer shapes | Built for Shopify |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) | 4.9 / 111 | Free, then from $15/mo | Yes, or you pick the set | Quantity breaks, mix and match, add-ons | Yes |
| 2 | [Frequently Bought Together CBB](https://apps.shopify.com/frequently-bought-together) | 4.9 / 1,206 | Free starter, paid from $14.99 | Paid plans | Pair and bundle discounts | Yes |
| 3 | [Essential Upsell & Cross Sell](https://apps.shopify.com/essential-post-purchase-upsell) | 5.0 / 2,418 | Free plan, paid from $9.99 | Yes, plus related products | Cart and post-purchase offers | Yes |
| 4 | [Selleasy](https://apps.shopify.com/upsell-cross-sell-kit-1) | 4.9 / 2,748 | Free to 50 orders, then $9 | Yes | 18 upsell strategies | Yes |
| 5 | [Frequently Bought Together FT](https://apps.shopify.com/fether) | 4.6 / 371 | Listed as free | Pair and related products | Product, cart and thank-you placements | Yes |
## 1. Addly — the pair, then the next offer
Addly is a Shopify bundles app that happens to be very good at frequently bought together. That order matters. The widget on the product page can show the products customers already buy as a set. The same app can then run a [quantity break](/blog/quantity-breaks-vs-volume-discounts.html) on a variant, a [mix and match](/blog/build-a-box-mix-and-match-bundles.html) box, or an add-on, without a second discount engine.
The set can be drafted from purchase history. On a new shop you pick it yourself. Manual sets stay first-class. History becomes useful after orders exist, which is the sequence a store actually lives. Offers go through Shopify's own discounts, so the price in the widget is the price at checkout.
Thirteen languages keep the offer readable when you leave the home country. Live preview shows the widget on your theme. Offer analytics show click-through, conversion and revenue per offer. Free includes those tools — up to three Basic offers. Unlimited adds Markets. Paid prices follow your Shopify plan, from $15 / $20/mo.
**Pros**
- Frequently bought together, quantity breaks, mix and match and add-ons in one install
- Pairings from real orders, or chosen by you
- A free plan you can try, then paid prices by Shopify plan — no revenue cap
- Variant-level volume prices, so a travel size does not drag a 100ml table down
**Cons**
- 111 reviews, not a thousand. The pair still sits next to the other offer shapes.
The same set can show again in the [Addy](/apps/addy.html) drawer so the product page and the cart agree. Do not stack the identical offer on both surfaces. Pick one.
## 2. Frequently Bought Together by Code Black Belt
[Code Black Belt](https://apps.shopify.com/frequently-bought-together) is the dedicated widget most merchants mean when they search "Shopify frequently bought together app". 4.9 from more than a thousand reviews. Built for Shopify. The starter plan is free and covers three manual bundles. Automatic recommendations, the cart widget, analytics and translations start on the paid plans at $14.99, $19.99 and $39.99 by order volume.
The listing is the pair. The free starter covers three manual sets. Automatic recommendations, the cart widget, analytics and translations start on paid plans. That is a pair widget you pay to finish. The week the same SKU needs a quantity break, you are installing a second app. Two systems on one page is how the widget price and the cart price stop matching.
**Pros**
- Focused on the pair
- Free starter for three manual sets
**Cons**
- Automatic recommendations and analytics are not on the free plan
- No quantity breaks or mix and match in the same app
- Paid plans start at $14.99 for the features most people came for
## 3. Essential Upsell & Cross Sell
[Essential](https://apps.shopify.com/essential-post-purchase-upsell) sells a wider funnel: frequently bought together and related products on the product page, then cart and post-purchase offers. 5.0 from thousands of reviews. Paid plans are billed on additional revenue the app attributes, from $9.99 a month.
The surface area is the risk. A pair under add to cart does not need a thank-you-page programme on the same invoice. Watch whether "related products" is a complement or a substitute. Substitutes belong on collections, not next to the buy button. The method is in [frequently bought together on Shopify](/blog/frequently-bought-together-shopify.html).
**Pros**
- Long public review history
- Free plan to start
**Cons**
- Pricing follows attributed revenue, which is a different meter than store orders
- Easy to turn a pair widget into a second storefront
- Post-purchase is a different job from the pair under the button
## 4. Selleasy
[Selleasy](https://apps.shopify.com/upsell-cross-sell-kit-1) is an upsell kit, not a pair widget. 4.9 from 2,748 reviews. Free to 50 store orders a month, then $9, $19 and $29. The listing promises 18 upsell and cross-sell strategies and a short allotment of AI recommendations.
Eighteen strategies is how a product page becomes a wall. The pair is one line on that list. If the meeting is "the serum needs the moisturiser under the button", the other seventeen placements are configuration you will not use well. One offer per moment still converts better than a kit.
**Pros**
- Free to 50 orders a month
- Built for Shopify
**Cons**
- The pair is one strategy among many
- Easy to publish more offers than a product page can carry
- A kit, not a merchandising decision
## 5. Frequently Bought Together FT
[Fether](https://apps.shopify.com/fether) lists as free and puts FBT and related-product recommendations on product, cart, checkout and thank-you surfaces. 4.6 from a few hundred reviews. A minority of reviews argue with the free label once they are inside the app.
A free label is not a finished merchandising tool. Confirm the current plan screen before you promise finance a $0 line. The moment the same product needs a quantity break, you are shopping again.
**Pros**
- Listed as free
- Several placements for the pair
**Cons**
- Lowest rating on this list
- Confirm what "free" includes after install
- Pair-only. The next offer is a second app.
## Which Shopify frequently bought together app should you install?
| If you need | Install |
| --- | --- |
| The pair, then a quantity break or a box in the same app | Addly |
| A simpler pair widget, three manual sets on the free plan | Frequently Bought Together CBB |
| A wider funnel, billed on attributed revenue | Essential |
| A kit of 18 strategies, the pair being one of them | Selleasy |
| A free pair-only listing, with a 4.6 rating | Fether |
The pair, the quantity break and the mix-and-match box should share Shopify's native discounts. That is the practical reason to put them in one app. The shopper never sees the engine. They see a price that still matches at checkout.
How to pick the actual products is a merchandising job, not an app job. Start with [frequently bought together](/blog/frequently-bought-together-shopify.html) and the [Shopify product bundles guide](/blog/shopify-product-bundles-guide.html). Install [Addly](https://apps.shopify.com/addly?src=Ninety9Blog). The pair is the first offer. The second shape is already in the same app.
### FAQ
**What is the best frequently bought together app for Shopify in 2026?**
Addly. The pair sits next to quantity breaks, mix and match and add-ons, with a free plan and no revenue cap. A dedicated pair widget with a thousand reviews still leaves you shopping when the same SKU needs a second offer shape.
**How do Shopify frequently bought together apps pick the products?**
The useful ones read order history and rank complements. Category or "related products" logic usually suggests a substitute. Addly can draft the set from purchase history, or you can pick the products yourself on a new shop.
**Should I discount a frequently bought together bundle?**
A small discount on the added item, around 10 to 15 percent, is usually enough. Deeper cuts start paying people who would have bought both anyway. The [bundle discount maths](/blog/bundle-discount-margin-maths.html) walk-through is the check.
**Where should the frequently bought together widget sit on a Shopify product page?**
Directly under the add-to-cart button, before the long description. Above the button it competes with the primary buy. At the bottom of the page most phones never reach it.
**Can I run frequently bought together and quantity breaks in the same app?**
Yes, in Addly. Both offer types share Shopify's native discounts, so the price on the page and the price at checkout stay the same. Two apps on one product is how those prices drift.
## Best 5 Shopify order editing apps (2026)
URL: https://ninety9.dev/blog/best-shopify-order-editing-apps-2026.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 6 minutes
A 2026 comparison of Shopify order editing apps and order editors. Features, pricing and where Reviso, Editly, Order Editing & Upsell, AE and OrderEditing.com fit after checkout.
A Shopify order editing app lets the customer change the order they just placed, before anything ships. Shopify already lets staff do this in the admin. The ticket exists because the customer cannot. Wrong address, wrong size, extra unit — those are corrections. Treated as cancellations they become refunds, reships and a review you did not need.
Merchants search both "Shopify order editing app" and "Shopify order editor". This is that list. The ranking favours an editor that stops at fulfilment, can answer a cancel click, and does not start at $39 a month while you are still proving the ticket savings.

## How these order editing apps were ranked
The [order editing guide](/blog/shopify-order-editing-guide.html) is the brief. The list weights:
1. **What the customer can change** before fulfilment — address, items, variants, quantities, shipping method.
2. **Whether the control disappears once the order is fulfilled.**
3. **Whether a cancel click can be met with a save**, not only a refund.
4. **Whether you pay a monthly fee before the ticket volume is proven.**
[Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog) is first because it covers the edit, the cancel save, and returns in one free install. It has one public review. That is the honest number. A longer listing is not a fuller editor.
## Comparison table
Ratings and prices below are from the Shopify App Store listings as of October 2026.
| Rank | App | Rating | From | Customer can change | Cancel save | After fulfilment |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | [Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog) | 5.0 / 1 | Free to install | Address, items, variants, quantities, shipping method | Discount or gift | Returns, exchanges, store credit |
| 2 | [Editly](https://apps.shopify.com/editly-order-editing) | 5.0 / 14 | Free | Address, variants, quantity, items, shipping, cancel | Window and logs | Not the core listing |
| 3 | [Order Editing & Upsell](https://apps.shopify.com/order-editing-1) | 5.0 / 3 | Free | Editor plus an upsell | Not the headline | Thin public record |
| 4 | [AE Order Editing](https://apps.shopify.com/account-editor) | 5.0 / 261 | From about $39 / month | Account-page edits, plus an upsell | Not the headline | Paid account editor |
| 5 | [OrderEditing.com](https://apps.shopify.com/order-editing) | 5.0 / 340 | From $99 / month | Suite edits, optional address checks | Not the headline | Per-lookup validation fees |
## 1. Reviso — fix the order, then decide if they still want to leave
Reviso is a self-serve Shopify order editor. The customer finds it in customer accounts, on a screen that looks like Shopify. Until fulfilment they can change the shipping address, the items, the quantities, the variants and the shipping method. Country, customer tag and order rules decide who sees which control. A wholesale tag or a preorder should not get the same form as a domestic one-off.
If they still click cancel, Reviso can offer a discount on the current order or a free gift. That is a save, not a lecture. The same screen can show product suggestions and recently viewed products. Recently viewed is the honest upsell. They already looked at those SKUs in this shop.
After the window, returns, exchanges and store credit stay in the same app. It is free to install. It does not call an address-validation API, a 3PL, or POS. Staff still own edge cases that need a carrier check.
**Pros**
- Address, items, variants, quantities and shipping method before fulfilment
- Cancel deflection in the same install
- Returns and store credit after the window
- Free
**Cons**
- One public review
- No carrier address validation
- Not a 3PL or POS tool
Open the fields first. Add the product suggestion once customers can find the edit in one look. [Self-serve order edits vs tickets](/blog/self-serve-order-edits-vs-tickets.html) is the operations pass.
## 2. Editly
[Editly](https://apps.shopify.com/editly-order-editing) is the other free editor on shortlists. 5.0 from 14 reviews. Built for Shopify. Address, variant, quantity, add or remove items, shipping method, cancel. Custom edit window. Klaviyo and Shopify Flow triggers. Every edit logged.
Fourteen reviews is still a short list. The editor is there. The cancel save and the return are not. Most cancel clicks are a correction. An editor that only refunds that click is half the ticket. Confirm weekday cutoffs if your warehouse does not pick on Saturday.
**Pros**
- Free, Built for Shopify
- Broad edit types and a logged window
- Flow and Klaviyo hooks
**Cons**
- Cancellation save is not the product
- Returns live elsewhere
- More reviews than Reviso, not more of the job
## 3. Order Editing & Upsell
[Order Editing & Upsell](https://apps.shopify.com/order-editing-1) pairs an editor with an upsell. 5.0 from 3 reviews. The listing is free.
Three reviews is a thin record for a tool that touches live orders. An upsell beside an untrusted form is how customers ignore both. Prove the edit. Then show a product. Reviso can do that pair without a monthly fee, and it still closes at fulfilment.
**Pros**
- Listed as free
- Edit and upsell named together
**Cons**
- Three public reviews
- A short listing to audit before a sale
- The upsell can land before the form is trusted
## 4. AE Order Editing
[AE](https://apps.shopify.com/account-editor) puts the editor in the customer account and pairs it with an upsell. 5.0 from 261 reviews. Paid plans in the current comparison start around $39 a month, then climb.
The account page is the right home. Reviso already sits there. The fee is the difference. If the upsell has not earned $39, you are paying for an order editor you have not measured.
**Pros**
- A longer review history
- Account-native, with an upsell
**Cons**
- Paid from about $39
- Confirm which fields sit on the plan you buy
- The invoice starts before the ticket savings are known
## 5. OrderEditing.com
[OrderEditing.com](https://apps.shopify.com/order-editing) is the suite end of the category. 5.0 from 340 reviews. Public plans start at $99 a month. Optional address validation is billed per lookup, a few cents an order depending on the country.
That is a full operations product: edits, upsells, integrations, address checks. It is also $99 before you know how many tickets the form deletes. Reviso does not replace a carrier validation API. It replaces the ticket for the address the customer can type themselves.
**Pros**
- Large review base for the category
- Address validation if you want to pay per lookup
**Cons**
- From $99 a month
- More system than a first order editor
- Validation fees sit on top of the subscription
## Which Shopify order editor should you install?
| If you need | Install |
| --- | --- |
| The edit, a cancel save, and returns, free | Reviso |
| A simpler free editor, without the save or the return | Editly |
| A free editor-plus-upsell with three reviews | Order Editing & Upsell |
| An account editor from about $39 | AE |
| A $99 suite with optional address checks | OrderEditing.com |
A shipped order is not a form. The cheap window is the hour after checkout, before the label. [Order edit cutoff windows](/blog/order-edit-cutoff-windows.html) is the policy. [Change shipping address after checkout](/blog/change-shipping-address-after-checkout.html) is the most common field.
Install [Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog). The ticket queue is address and size. You are not ready to put $39 a month on a tool you have not measured. Keep 3PL and address APIs in the systems that already own them.
### FAQ
**What is the best Shopify order editing app in 2026?**
Reviso. Customers fix address, items, variants and shipping until fulfilment, and the same free app can meet a cancel click and handle returns. A free editor without the cancel save is half the ticket. A paid editor from $39 is a later invoice.
**Can customers edit a Shopify order after it ships?**
Not in Reviso. Edits close at fulfilment, which is the window where a change is still cheap. After that, returns, exchanges or store credit are the path.
**What can a customer change in a self-serve order editor?**
In Reviso: shipping address, items, quantities, variants and shipping method. You can restrict each of those by country, customer tag and order rules.
**How do order editing apps reduce cancellations?**
Most cancel clicks are a correction — wrong size, wrong address, forgot an item. An editor lets them fix it. Reviso can also offer a discount or a gift when they still try to cancel.
**Does Reviso validate addresses with a carrier API?**
No. It lets the customer type the address they meant. It does not replace a 3PL or a POS workflow. A $99 suite with optional address checks is a later system, not a first editor.
**Is this the Shopify order editor ranking too?**
Yes. Order editing app and order editor are the same search. This page is that list.
## Best 5 Shopify progress bar apps (2026)
URL: https://ninety9.dev/blog/best-shopify-progress-bar-apps-2026.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 6 minutes
A 2026 comparison of Shopify progress bar apps for gift and discount goals, not only shipping. Features, pricing and where Goalify, Yaco, Kai, Turbo and Progressify fit.
A Shopify progress bar shows the distance between this cart and a reward the shopper can earn — a gift, money off, or another threshold after shipping is already done. Merchants search "Shopify progress bar" when the cart has no finish line, and "Shopify progress bar app" when a free-shipping fill cannot hold the next reward. The bar fails when the gift needs another app, or when every country sees the same number.
This comparison looks at five Shopify progress bar apps from the 2026 App Store. The ranking favours gift and discount goals, not a second copy of a shipping-only list. The shipping-threshold shortlist is [free shipping bar apps](/blog/best-shopify-free-shipping-bar-apps-2026.html).

## How these Shopify progress bar apps were ranked
[Stacked cart goals](/blog/stacked-cart-goals.html) is the model. The list weights:
1. **Whether a gift or a discount can be a goal**, not only free shipping.
2. **Whether rewards stack** so the next threshold appears after the current one.
3. **Whether the gift can add itself** when the cart qualifies, and leave if it drops.
4. **Whether you can A/B test the threshold or the copy.**
[Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) is first because a shipping-only fill leaves the gift and the discount for a later install.
## Comparison table
Ratings and prices below are from the Shopify App Store listings as of October 2026.
| Rank | App | Rating | From | More than one goal | Testing |
| --- | --- | --- | --- | --- | --- |
| 1 | [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) | 5.0 / 48 | Free under 10 orders, then $3.99 | Shipping, discount, gift | A/B tests |
| 2 | [Yaco](https://apps.shopify.com/upsellprogressbar) | 4.9 / 22 | Free plan, then about $9.90 | Shipping bar, more tiers on paid | A/B on the Optimize plan |
| 3 | [Kai](https://apps.shopify.com/progress-bar-shipping-gift) | 5.0 / 44 | From $5.99 after trial | Shipping and gifts, upsells on higher plans | Not the headline |
| 4 | [Turbo Progress Bar](https://apps.shopify.com/turbo-progress-bar) | 4.8 / 20 | Free | A fast single goal | Not listed as A/B |
| 5 | [Progressify](https://apps.shopify.com/progressify) | 4.0 / 41 | $5 / month | Tiered bar | Not listed as A/B |
## 1. Goalify — a Shopify progress bar for a gift and a discount
Goalify is a Shopify progress bar app for cart rewards. The first publish can be one fill. The reason it leads is the next reward: money off, then a gift that adds itself when the cart qualifies and leaves if the cart drops. Rules can use cart value, item count, or specific products. Shipping can sit in that sequence. It is not the only goal the bar is for.
Country thresholds keep export carts off the domestic number. When the shopper is short, AI upsells from order history can suggest a product that closes the gap. You can run a sticky bar, a product-page widget, and the cart. A/B tests compare thresholds and copy. Free under 10 orders a month, then $3.99, $7.99 and $11.99. Built for Shopify, 5.0 from 48 reviews.
**Pros**
- Stacked rewards in one Shopify progress bar app
- Country thresholds and currency
- A/B tests on the goal
- Order-banded pricing, including a real free band
**Cons**
- 48 reviews, not a huge public record. The sequence is still the product.
Put the bar at the top of the [Addy](/apps/addy.html) drawer so the remaining amount sits on the line items. The gift has to leave if the cart drops. The shipping-only setup is a different article: [how to set up free shipping over X](/blog/how-to-set-up-free-shipping-over-x-shopify.html).
## 2. Yaco
[Yaco](https://apps.shopify.com/upsellprogressbar) is a progress bar pointed at an upsell. 4.9 from 22 reviews. A free plan is on the listing. Premium is about $9.90. A/B testing sits on the Optimize plan, listed around $9.95 during a beta.
A bar plus an upsell is a familiar pair. The test is not on the cheap plan. Goalify includes the test with the goal, not as a later tier you discover after the threshold is already wrong.
**Pros**
- Free plan on the listing
- A/B exists, on Optimize
**Cons**
- Testing is a higher plan
- A smaller review count, and a narrower job than a stacked sequence
- The upsell can crowd the bar
## 3. Kai
[Kai](https://apps.shopify.com/progress-bar-shipping-gift) pairs a progress bar with gifts. 5.0 from 44 reviews. Plans start at $5.99 after a short trial, then $7.99 and $9.99. Upsells show up as you move up the plans.
Shipping plus a gift is the natural pair. A discount between them, a country-specific number, and a test of the copy are the parts a growing cart asks for next. Those are not the headline of a $5.99 bar.
**Pros**
- Shipping and gifts in one listing
- Modest monthly price
**Cons**
- Upsells arrive on higher plans
- No listed A/B test as the core product
- Trial first, then a monthly fee, for a single-job bar
## 4. Turbo Progress Bar
[Turbo](https://apps.shopify.com/turbo-progress-bar) is a fast cart bar. 4.8 from 20 reviews. The listing is free. Show the goal, fill it, nudge the next item.
A free single fill is the simpler Shopify progress bar. It does not become a sequence, and it does not list an A/B test. Twenty reviews is a short record for a bar you will outgrow.
**Pros**
- Free
- Fast to put one goal on the cart
**Cons**
- One job, thinly reviewed
- No listed test
- The second reward is a different app
## 5. Progressify
[Progressify](https://apps.shopify.com/progressify) is a tiered free-shipping bar at $5 a month. 4.0 from 41 reviews. Markets are on the listing. There is no free plan in the current pricing, only a trial.
Four out of five, from 41 reviews, is the number to read before the $5 price. A cheap bar with a weak public record is still a bar you will explain to support. Tiered shipping is not the same as a tested, country-specific sequence.
**Pros**
- Low monthly price
- Markets mentioned on the listing
**Cons**
- 4.0 from 41 reviews
- No free band for a live store
- No listed A/B test
## Which Shopify progress bar app should you install?
| If you need | Install |
| --- | --- |
| A gift, a discount, and a test | Goalify |
| A simpler bar, with A/B locked to a higher plan | Yaco |
| Shipping and a gift, then a monthly fee | Kai |
| One free fill and nothing further | Turbo |
| A $5 bar with a 4.0 rating | Progressify |
A Shopify progress bar that shows every shopper the domestic threshold stalls export carts. Set the country number first. Style second. Copy notes are in [free shipping bar copy](/blog/free-shipping-bar-copy.html).
Install [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) when the bar has to earn a gift or a discount, not only free shipping. Read [stacked cart goals](/blog/stacked-cart-goals.html) before you publish three fills on day one. One honest threshold beats a ladder nobody can finish.
### FAQ
**What is the best Shopify progress bar app in 2026?**
Goalify. It is a Shopify progress bar app for a gift and a discount, not only shipping, with country thresholds and A/B tests, free under 10 orders a month. A single shipping fill is a simpler widget you outgrow.
**Where should a Shopify progress bar sit?**
At the top of the cart drawer, and as a quiet storefront bar if the threshold should be visible before add to cart. Placement notes are in [where to put a progress bar](/blog/where-to-put-a-progress-bar.html).
**Can one Shopify progress bar unlock more than free shipping?**
Yes, in Goalify. Free shipping, an order discount and a gift can stack. A second app for the gift is how the bar and the cart disagree.
**Should the progress bar use the same threshold in every country?**
No. A domestic minimum shown to an export cart stalls the order. Goalify sets the number per country, in the shopper's currency.
**How is a progress bar different from a free shipping bar?**
A free shipping bar is one goal. A progress bar app should be able to hold the next goal too. The shipping-only shortlist is in [free shipping bar apps](/blog/best-shopify-free-shipping-bar-apps-2026.html).
## Best 5 Shopify upsell popup apps (2026)
URL: https://ninety9.dev/blog/best-shopify-upsell-popup-apps-2026.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Bundles & Upsells · App: Monet • AI Popup Bundle Addons
Reading time: 7 minutes
A 2026 comparison of Shopify upsell popup and add-to-cart popup apps. Features, pricing and where Monet, BA, Kaching, Jumi and EA fit.
A Shopify upsell popup is an overlay that offers one more product after the shopper has already leaned in. The useful versions fire on add to cart, at the start of checkout, or on exit. The rest fire because a timer expired. Shoppers learn to close those.
Merchants search both "Shopify upsell popup" and "Shopify add to cart popup". This is that list. The ranking favours a product offer at add to cart, checkout start or exit, not a promotion engine that also happens to upsell.

## How these upsell popup apps were ranked
[Add to cart popup upsells](/blog/add-to-cart-popup-upsell.html) and [exit-intent popups](/blog/exit-intent-popups-shopify.html) are the two jobs. The list weights:
1. **Whether the trigger is intent**, not a countdown on a collection page.
2. **Whether the overlay sells a product**, with a picture, a price and one add.
3. **Whether the plan stays free or cheap when the offer is the whole product.**
4. **Whether email capture and sitewide promo banners live somewhere else.**
[Monet](https://apps.shopify.com/monet?src=Ninety9Blog) is first because it only does those three moments, it is free, and it will not turn the add-to-cart frame into a newsletter. It has four public reviews. That is disclosed on purpose. Review count is not a trigger.
## Comparison table
Ratings and prices below are from the Shopify App Store listings as of October 2026.
| Rank | App | Rating | From | Triggers | Also does | A/B test |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | [Monet](https://apps.shopify.com/monet?src=Ninety9Blog) | 5.0 / 4 | Free to install | Add to cart, checkout start, exit | Bundles, cross-sell, add-ons, BOGO | No |
| 2 | [BA Popup Upsell](https://apps.shopify.com/not-another-popup-upsell) | 5.0 / 25 | Dev stores free, then $7.99 | Add to cart, exit, timer | Bundles, quantity breaks | Yes |
| 3 | [Kaching Upsell & Email Popup](https://apps.shopify.com/popup-upsell) | 5.0 / 137 | Dev stores free, then $4.99 | Popups with targeting | Email capture | Not the headline |
| 4 | [Upsell Popup by Jumi](https://apps.shopify.com/push-upsell-popup) | 5.0 / 34 | Free to $100 extra revenue, then $4.99 | Targeted popups | Revenue-banded plans | Not listed |
| 5 | [EA Bundles & Upsell Popups](https://apps.shopify.com/ea-upsell-popups-cross-sell) | 4.9 / 24 | Free plan, then $9.99 | Cross-sell popup | Bundles, BOGO, quantity breaks | Not the headline |
## 1. Monet — a product, at the moment it belongs
Monet is a Shopify upsell popup app. It opens on add to cart, when checkout starts, or on exit. Those are the three moments that already have a product in mind. It does not open because ten seconds passed.
The layouts are a bundle, a cross-sell or an add-on. The product can be chosen by you or suggested from purchase patterns. Discounts can be percent, flat, BOGO, tiered or volume, with a countdown when the deadline is real. Targeting can use country and customer tag. Analytics show views, add-to-cart rate and conversion per popup.
It is free to install. It does not collect email. It is not a thank-you-page upsell. If you need a list, keep the list tool. If you need a post-purchase offer, that is a different surface.
**Pros**
- Three intent triggers, no browse-interrupting timer as the product
- Bundle, cross-sell and add-on templates
- Country and tag rules
- Free, with no view cap on the listing
**Cons**
- Four public reviews
- No A/B test inside the app
- Wrong tool for a sitewide "10% off this weekend" banner
The add-to-cart version can be the set. The exit version should be smaller. [Goalify](/apps/goalify.html) can own the shipping maths. Monet can own the product ask.
## 2. BA Popup Upsell
[BA](https://apps.shopify.com/not-another-popup-upsell) adds a timer to add-to-cart and exit. 5.0 from 25 reviews. Built for Shopify. Paid plans from $7.99, $14.99 and $29.99 are billed on added revenue. All features sit on every paid plan, including bundles, quantity breaks, live preview and A/B testing.
The A/B switch is the listing. The timer is the feature most likely to fire on a collection page, which is the page that should not have a popup. Testing two overlays does not fix a trigger you should not run. Monet stays on the three moments. You do not pay on attributed revenue to keep it there.
**Pros**
- Add to cart and exit in the same app
- All features on every paid plan
**Cons**
- Timer trigger is easy to misuse
- You pay on attributed revenue once you leave the dev-store plan
- A/B is not a reason to put a countdown on browse
## 3. Kaching Upsell & Email Popup
[Kaching](https://apps.shopify.com/popup-upsell) is the suite popup. 5.0 from 137 reviews. Built for Shopify. Free on development stores, then $4.99, $12.99 and $24.99. Unlimited popups, targeting, customisation — and email.
Email and a product upsell are different successes. A shopper who just added a bottle does not owe you their address. Mixing the two in one overlay usually gets a close. Keep the list tool. Keep the product offer. Do not put both in the add-to-cart frame.
**Pros**
- Low paid entry
- Familiar if you already run Kaching
**Cons**
- Email capture in the same product
- Easy to publish a promotion overlay instead of an offer
- Paid once you leave a development store
## 4. Upsell Popup by Jumi
[Jumi](https://apps.shopify.com/push-upsell-popup) is a focused popup listing. 5.0 from 34 reviews. Built for Shopify. Free up to $100 a month in additional revenue, then $4.99, $12.99 and $22.99 as that number grows. Unlimited views and offers on the published plans.
A revenue band is simple until the app and finance disagree about what "additional" means. Read the current definition on the listing. Confirm the triggers on the plan screen before you promise add-to-cart-only. Monet publishes those three moments without a revenue meter.
**Pros**
- Free band for a small extra-revenue number
- Dedicated popup, not a full promo suite
**Cons**
- Trigger list is thinner on the public listing than Monet's
- Pricing follows attributed revenue
- The free band ends when the offer works
## 5. EA Bundles & Upsell Popups
[EA](https://apps.shopify.com/ea-upsell-popups-cross-sell) is a cross-sell popup with bundles attached. 4.9 from 24 reviews. A free plan is on the listing. All features are listed at $9.99, including bundles, BOGO and quantity breaks.
A popup plus a quantity-break builder is two products. The add-to-cart moment needs one product and one button. Quantity breaks belong on the product page, in a bundle app, not inside an overlay the shopper did not ask to configure.
**Pros**
- A free plan
- Cross-sell is on the listing
**Cons**
- The popup is bundled with a wider offer builder
- Twenty-four reviews
- $9.99 to unlock the full feature list
## Which Shopify upsell popup should you install?
| If you need | Install |
| --- | --- |
| A product at add to cart, checkout start, or exit, free | Monet |
| The same overlay, plus a timer you have to keep switched off | BA Popup |
| A popup that also asks for an email | Kaching |
| A simpler popup, billed once the extra revenue shows up | Jumi |
| A popup mixed with a bundle builder | EA |
A popup with four products is a second storefront. The shopper answers yes or no. Extra options turn that into browsing, and browsing is how overlays die. The [one-offer popup rule](/blog/one-offer-popup-rule.html) is the design pass.
Install [Monet](https://apps.shopify.com/monet?src=Ninety9Blog). The overlay has to add a line item. Design the add-to-cart version first. Make the exit version smaller. Leave email and the weekend banner where they already live.
### FAQ
**What is the best Shopify upsell popup app in 2026?**
Monet. The overlay adds a product at add to cart, checkout start or exit, and it is free to install. A/B tests and email capture belong in other tools. They do not belong in the add-to-cart frame.
**When should an upsell popup appear on Shopify?**
After the shopper has committed or is leaving. Add to cart is the cleanest moment. Checkout initiation is a last relevant offer before Shopify checkout. Exit intent is a smaller, cheaper offer. Ranked notes are in [popup triggers](/blog/popup-triggers-ranked.html).
**Will upsell popups hurt conversion rate?**
They can, if they fire on a timer while someone is still reading. Monet does not open on browse. It waits for add, checkout start or leave. Measure add-to-cart rate on the hero as the guardrail.
**Can Monet collect emails?**
No. Monet is a product offer, not a list builder. Keep email capture in the tool you already use for that.
**Should the same popup run on add to cart and on exit?**
No. The add-to-cart version can be the set. The exit version should be cheaper and shorter. Copying one four-product grid onto every moment is how popups get closed on sight.
**Is this the add-to-cart popup ranking too?**
Yes. Add to cart is the cleanest upsell-popup trigger. A separate add-to-cart list would split the same five apps.
## Different Free Shipping Thresholds per Country on Shopify
URL: https://ninety9.dev/blog/different-free-shipping-thresholds-per-country-shopify.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 8 minutes
How to show a different free shipping threshold per country on Shopify, in the shopper's currency, without one domestic number on every cart.
A $75 free-shipping threshold is a domestic sentence. The label to the next country costs a different amount, the average order is different, and a straight currency conversion is not a strategy. Showing every shopper the home number is how international carts reach checkout and bounce on the shipping price.
## Set the countries that pay you
Pull the last ninety days of orders by country. Keep the two or three that are real. For each, note the average order and a typical label. The foreign threshold should sit just above that country's average, and the extra margin has to cover that country's label. The home method is in [how to set free shipping over $X](/blog/how-to-set-up-free-shipping-over-x-shopify.html). Repeat it per country. Do not multiply $75 by an exchange rate and call it localised.
Round the result in the currency people think in. €70, not €68.40.
## Make the discount match the bar
Shopify's free-shipping discount needs a minimum that matches the bar for that destination. If the discount is one global minimum, the bar can say €40 while checkout still wants the dollar rule. The shopper did the thing the bar asked. Checkout disagreed. That is the bug.
[Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) stores a threshold per country and shows the remaining amount in the shopper's presentment currency. The bar can sit on the storefront, in the cart, and on the product page. Country rules are part of the product, including on the paid plans that start at $3.99 after the free band under 10 orders. Built for Shopify.
If the cart is a drawer, the same country goal should be what [Addy](/apps/addy.html) shows. Two bars with two countries' numbers is worse than one honest bar.
## What to publish first
| Country | Do this |
| --- | --- |
| Home | The number you already run, written as a remaining amount |
| The next country that actually orders | Its own threshold, from its labels, rounded |
| Everywhere else you ship | A simple second number, reviewed when volume shows up |
| Countries you do not ship to | No bar |
A/B test the home threshold and the export threshold separately. A winner at home is not a winner on a more expensive label. Goalify can test the threshold and the copy.
## One home number, priced as if every label cost the same
A shop ships from the United States. These figures are an example you replace with your own invoices.
| Destination | Recent average order | A typical label | A threshold worth testing |
| --- | --- | --- | --- |
| United States | $54 | $6 | $75 |
| Germany | €48 | €14 | €90 |
| United Kingdom | £46 | £11 | £80 |
| A country with three orders | Too few to average | Whatever the invoice says | No special goal yet |
The US threshold sits just above $54, and the extra item has to cover a $6 label. The German threshold sits further above the average because the label is €14. A straight conversion of $75 into euros ignores that invoice. It also ignores that German prices may already be shown with tax included, so the number on the bar has to be the number the shopper thinks they are spending. If your store shows tax-inclusive prices in that market, the threshold the shopper reads should be tax-inclusive too. Place a test order and compare the bar to the amount Shopify uses for the shipping discount. Those two amounts are the whole feature.
Round in the currency people say out loud. €90, £80, $75. A threshold of €87.40 is a spreadsheet that leaked.
## Markets change the currency. They do not write the goal
Shopify Markets can price a product in euros and show a European catalogue. The progress bar is still a rule you configure. If the bar has one domestic minimum, every market sees it, converted or not. [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) stores a threshold per country and shows the remaining amount in the presentment currency. That country configuration is on the paid plans, from $3.99 after the free band under 10 orders a month. Built for Shopify. The bar can sit on the storefront, in the cart, and on the product page.
The Shopify free-shipping discount has to agree. One global minimum means the bar can say €40 while checkout still wants the dollar rule. Build the discount so the destination the shopper selected is the destination the minimum describes. Then add a product until the bar completes, and open checkout. Standard shipping should be free. Remove a unit. It should charge again.
If the cart is a drawer, [Addy](/apps/addy.html) should show that same country goal. A header bar in euros and a drawer bar in dollars is two promises. Keep one.
## What to calculate before you add a fourth country
1. Orders, last ninety days, by country. Drop anyone under a volume you would trust. Three orders is an anecdote.
2. Average merchandise value for the countries you kept.
3. A typical label, from invoices, not from a rate-card guess you made in January.
4. The margin on the item people actually add to close the gap. If that margin is smaller than the label, raise the threshold or stop offering free shipping there.
5. A round number in their currency.
6. One test order. Bar, then checkout, then remove a unit.
A/B tests belong on the countries with enough traffic to finish. Testing a threshold in a country that sends twenty sessions a week will not finish. Test the home number. Test the next real country. Leave the long tail on a simple second number until the orders show up. Goalify compares the threshold and the copy. A winning sentence at home can be copied. A winning number should not.
Countries you do not ship to get no goal. Hide the bar. A remaining amount you cannot fulfil becomes a ticket the moment they pay.
The home arithmetic, including where to set a single $X, is in [free shipping over $X](/blog/how-to-set-up-free-shipping-over-x-shopify.html).
Install [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog). One bar, more than one number.
## What the shopper actually compares
They do not compare your domestic policy to a strategy deck. They compare the bar to the shipping line at checkout, in the currency on the screen.
Walk Germany with the example numbers. The bar says "€22 away from free shipping" on a €68 cart, because the goal is €90. They add a €24 product. The cart is €92. Checkout shows standard shipping at €0. That is a pass.
Now break it on purpose, so you know what failure looks like. Leave the Shopify discount at a converted $75 minimum, about €70, while the bar says €90. At €75 the bar still asks for more, and checkout has already made shipping free. Or the reverse: the bar completes at €70 and checkout still wants €90. Both are the same bug. The bar and the discount are describing different goals. Fix the discount to the country's number before you translate another string.
Tax changes the number they see. A €90 goal on tax-inclusive prices is a different cash amount from a €90 goal on tax-exclusive prices. Use the figure printed on the product page in that market. Place the test order while previewing as a customer in that country, not while your admin is set to the home market. An admin preview in dollars will "confirm" the domestic rule and miss the export one.
## A sensible order of work
Week one, home only. The bar, the discount, and four test orders. Week two, the next country that actually pays you, with its own label and its own round number. Week three, a test of the home threshold against one alternative, if you have the orders to finish it. The long tail of countries stays on a simple second number, or on no bar if you do not ship there.
Do not launch forty country goals because the spreadsheet had forty rows. Empty rows become wrong rows. Goalify will store the ones you mean, on the paid plans, and show them in the presentment currency. The free band under 10 orders a month is there to prove the home bar. Country configuration is the reason the paid plan exists.
If Addy is the cart, the drawer should read the same remaining amount the header does. Edit the goal once. A second bar with a typed-in conversion will be stale the week rates move, and it was the wrong method even when the rate was fresh.
### FAQ
**Can Shopify Markets use a different free shipping threshold per country?**
Markets can change currency and price. The progress bar still needs its own country rule, or every shopper sees the domestic goal. Goalify stores that rule per country.
**Should the threshold be converted from the home currency?**
Only as a starting guess. A straight conversion ignores the real label cost. Set the foreign number from that country's orders and shipping cost, then round it.
**The bar is in euros but checkout uses the dollar minimum. What happened?**
The bar converted the display and the discount did not, or the reverse. The qualifying amount and the displayed amount have to be the same rule.
**Do I need a different bar design per country?**
No. The same bar, a different number. Design is the last step.
**What about a country I do not ship to?**
Do not show them a free-shipping goal. Hide the bar, or show that you do not ship there. A goal you cannot fulfil is a complaint.
**Do I convert $75 into euros and publish that?**
Only as a draft number. Replace it with a threshold built from that country's orders and that country's label, then round it.
**Are country thresholds on the free Goalify plan?**
Country configuration is on the paid plans, from $3.99 a month after the free band under 10 orders. The free plan is the bar, the goals, and the analytics.
## Do Popups Hurt Shopify SEO? Google's Mobile Popup Rules
URL: https://ninety9.dev/blog/do-popups-hurt-shopify-seo.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Bundles & Upsells · App: Monet • AI Popup Bundle Addons
Reading time: 7 minutes
Google's mobile interstitial rules, and which Shopify popups can affect rankings. Add-to-cart overlays are not the same as a page-load takeover.
Popups can hurt Shopify SEO when they behave like a gate. Google's mobile guidance on intrusive interstitials is about a page that, when reached from search, is covered by a full-screen layer before the shopper can read it. The content they clicked is behind a promotion. That pattern can be a ranking problem. It is not a story invented by popup vendors, and it is not a reason to ban every overlay.
## What Google actually described
The pages at risk are mobile landing pages. The popup shows on arrival, or immediately after, and it covers the main content. A newsletter, an app install, or a discount that has to be dismissed before the product can be read. Google has carved out things a page must show: a cookie or legal notice, an age gate, a login. A marketing offer is not on that list.
A banner that uses a strip of the screen is not the same object as a full-screen takeover. Size and timing are the whole argument.
## What a selling popup is allowed to be
[Monet](https://apps.shopify.com/monet?src=Ninety9Blog) does not open because a timer expired while someone was reading. It opens after add to cart, when checkout starts, or when the shopper is leaving. The shopper has already reached the product. The offer is a second item, not a wall in front of the first one.
That is a better shape than a page-load interstitial. It is not a claim that Google has reviewed Monet, and it is not a claim that the popup has no effect on anything. A full-screen layer is still a full-screen layer if you let it cover the product after the tap. Keep one product in it. Make the dismiss control obvious. Do not chain a second popup after a no.
Monet does not ask for an email. The SEO risk of a newsletter gate is a different product, usually a different app, firing on arrival. Leaving that app on a five-second delay does not make it "after the content".
## A practical split
| Popup | Timing | SEO posture |
| --- | --- | --- |
| Full-screen discount on landing | On load | The pattern Google warned about |
| Newsletter covering the product | On load or a short delay | Same family. Delay is not a defence |
| Cookie or age notice | On load, as small as the law allows | The exception, still not a place for a sale |
| Offer after add to cart | After a click | A response, not a gate |
| Offer as checkout starts | After they chose to pay | A response |
| Exit on desktop | After they move to leave | Weaker, and easy to overuse |
If you want the offer without a popup at all, put one complement in the [Addy](/apps/addy.html) drawer. The product page stays clear. The ask happens in the cart they just opened.
## What this article will not promise
No one can honestly say "popups do not affect SEO". A theme that injects a full-screen app on every collection URL can affect it. Check the mobile landing page from a search result, not from the theme editor. If the first thing on the screen is a sale, remove that app before you blame the product page.
## What to look at on a phone
Google's intrusive-interstitial guidance is about mobile pages reached from search. The content the person clicked is covered, on arrival or immediately after, by a layer they have to dismiss. The examples Google has pointed at are promotions: a newsletter, an app install, a discount. Legal notices, cookie consent, age gates and sign-in are the carve-outs, because the page cannot function without them. A 15% code is not on that list.
A strip of the screen is a different object from a layer that hides the product. You do not need a pixel count to see which one you shipped. Hold the phone. If you can read the product title, the price and the add-to-cart button without dismissing anything, you are in the safer shape. If the first tap is "no thanks", you are in the pattern the guidance describes.
Do this in a private window, from a results page, on a phone. The theme editor hides the problem, because you are already inside the page. Check the URLs search actually lands on.
| URL people land on | What you want to see first | What to remove |
| --- | --- | --- |
| A product | Title, price, add to cart | A full-screen code on load |
| A collection | The grid | The same code, especially with a short delay |
| A blog post | The article | A newsletter that covers the post |
| The homepage | The homepage | An app-install wall |
| After they tap add to cart | The offer, easy to dismiss | A second wall after they decline |
Collection and blog URLs are where newsletter apps usually fire, because that is where new visitors arrive. A product-page upsell that waits for a click does not repair a collection page that is covered on load. Audit every template that ranks, not only the one you redesigned.
## Delay, size, and a second popup
A popup that waits five seconds and then covers the screen is still the first thing that happens on the visit. The shopper has not finished reading. Moving the timer from zero to five does not turn a gate into an answer.
A banner that uses a band at the top or bottom leaves the product readable. That is the shape to prefer for anything that must be on screen at once, including consent. Consent can still be larger than it needs to be. A consent layer that is really a sale, with a discount in the same modal as the cookie buttons, borrows the legal exception for a promotion. Split them. The legal control stays as small as the law you operate under allows. The sale waits for a click.
A second popup after "no" is a second gate. One offer. [Monet](https://apps.shopify.com/monet?src=Ninety9Blog) opens after add to cart, when checkout starts, or when the shopper is leaving. It does not open because a browse timer expired. It does not ask for an email. That is a better shape than a page-load interstitial. It is not a review by Google, and it is not a promise that the popup has no effect. If you let that offer go full screen and hide the product after the tap, you have rebuilt the wall one step later. Keep one product in it. Make the dismiss control obvious.
Exit on a phone is a weak signal, and a full-screen exit layer on a landing URL sits closer to the warned pattern than a small card after add to cart. Prefer the click. The offer examples are in [pre-purchase upsells](/blog/pre-purchase-upsells-shopify.html).
## Other tools that can still cover the page
Walk the published theme with every app embed on, because the popup you remember is rarely the only one.
- A newsletter or spin-to-win app set to "on arrival" or "after a delay".
- A countdown bar that expands into a modal.
- A cookie tool styled as a full-screen sale.
- A slide cart and a popup both opening on the same add, so the screen is two layers deep.
- An old additional script on a page that still injects a modal. Those scripts are a poor place to keep a promotion anyway.
Turn them off one at a time and reload the landing URL. The one that changes the first screen is the one that matters. Leave Monet, or the [Addy](/apps/addy.html) drawer, for the moment after they choose a product. The product page they found in search should be readable when it loads.
Install [Monet](https://apps.shopify.com/monet?src=Ninety9Blog) when the offer should follow an action. Check the landing URL on a phone before you call the store clean.
### FAQ
**Do popups hurt Shopify SEO?**
A full-screen popup that covers a mobile landing page as soon as it loads can. Google has said those intrusive interstitials can make the page harder to reach and can affect ranking. An overlay that follows a tap is a different pattern.
**Are add-to-cart popups interstitials?**
They cover content, but they follow an action the shopper just took. Google's warning is aimed at popups that block the content before the shopper can read it. Do not treat that as a certificate. Keep the popup small enough to dismiss, and do not fire it on arrival.
**What about exit-intent on mobile?**
Exit on a phone is a weak signal. A full-screen exit layer on a landing page is closer to the thing Google described than a small cart offer after a click. Prefer the add-to-cart moment.
**Does Google penalise every email popup?**
The public guidance is about intrusive interstitials on mobile search landing pages, not a ban on email. A newsletter that covers the screen on arrival is the risky version. Monet does not collect email at all.
**Will installing Monet protect my rankings?**
No app can promise that. Monet avoids the page-load takeover. Your other apps, your theme, and a cookie banner the size of the screen can still create the problem.
**Does a five-second delay make a landing popup safe?**
No. The shopper still meets a wall before they can read the page they opened. Delay changes the clock. It does not change the pattern.
**How do I check my own store?**
Open a product URL from a search result on a phone, in a private window. The first screen should be the product. A sale that has to be dismissed first is the pattern to remove.
## Hextom Free Shipping Bar Alternatives
URL: https://ninety9.dev/blog/hextom-free-shipping-bar-alternatives.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 7 minutes
Hextom Free Shipping Bar alternatives for Shopify. Goalify, Essential, Hoppy, Yaco and Turbo compared when one message bar is no longer enough.
Hextom is the bar a lot of stores installed first. Progressive shipping messages, a free plan, paid from about $9.99, Built for Shopify, 4.9 from about 2,800 reviews on the App Store listing. It tells the shopper there is a goal, and it stops there.
The stores that outgrow it are not confused about the message. They need a second goal, a different number in another country, or a test of the threshold. A message bar does not grow into that. These are the alternatives, with Goalify first.
Ratings are from the Shopify App Store as of October 2026.
| App | Rating | From | What you are actually buying |
| --- | --- | --- | --- |
| [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) | 5.0 / 48 | Free under 10 orders, then $3.99 | Stacked goals, country thresholds, A/B tests |
| [Essential](https://apps.shopify.com/essential-order-value-booster) | 5.0 / 974 | Free to 1,000 views, then $9.99 | A single-job bar, then a view cap |
| [Hoppy](https://apps.shopify.com/hoppy-free-shipping) | 4.8 / 264 | Free | A bar that also tries to upsell |
| [Yaco](https://apps.shopify.com/upsellprogressbar) | 4.9 / 22 | Free plan, then about $9.90 | A bar pointed at an upsell. A/B sits on a higher plan |
| [Turbo](https://apps.shopify.com/turbo-progress-bar) | 4.8 / 20 | Free | One fast goal, a short review record |
## Goalify
Goalify is the Hextom alternative when the bar has to become a sequence. Free shipping, then a discount, then a gift. The threshold can change by country, in the shopper's currency, on the paid plans. If the cart is short, an AI suggestion from real orders can close the gap. A/B tests compare the number and the copy. Bar or widget, including inside a cart drawer. Free under 10 orders a month, then $3.99, $7.99 and $11.99. Built for Shopify. 48 reviews is a smaller crowd than Hextom. The sequence is the product Hextom's crowd still has to go shopping for.
## Essential
A high-review bar. Free until 1,000 booster views, then $9.99 and up. Geolocation and the extra pieces sit on paid plans. Views are a painful meter if you buy traffic. One fill, billed like a campaign.
## Hoppy
Listed as free, with a bar plus upsells, gifts and discounts. 4.8 from 264 reviews. A free bar that also wants to recommend products will crowd the cart. The threshold still needs a test. Hoppy does not list one.
## Yaco
A progress bar aimed at an upsell. The test is on the Optimize plan, not the plan you start on. A smaller, narrower tool.
## Turbo
A free single goal. 4.8 from 20 reviews. Fine as a placeholder. Thin as the bar you run for a year.
## When to leave Hextom
| You need | Stay or move |
| --- | --- |
| One domestic sentence, already working | Stay |
| A second reward on the same bar | Goalify |
| A different number per country | Goalify |
| A test of the threshold | Goalify |
| A view-capped bar with a huge review count | Essential |
| A free bar that also upsells | Hoppy, and watch the cart get noisy |
Disable Hextom's embed before you enable the next one. Two remaining amounts is worse than the old bar. Match the Shopify free-shipping discount to the new number the same day. The setup is in [free shipping over $X](/blog/how-to-set-up-free-shipping-over-x-shopify.html).
## What you outgrow, in one cart
A message bar can say "$18 away from free shipping". That is a complete product if it is the only promise you will ever make. The next request is almost always a sequence. These numbers are an example.
| Cart | What the shopper should see |
| --- | --- |
| $40 | "$35 away from free shipping" |
| $75, shipping unlocked | "Free shipping. $25 away from 10% off" |
| $100 | "You have 10% off. $20 away from a pouch" |
| $120 | The pouch is in the cart at $0 |
One bar carries that. The thresholds move together when you edit them. A message app plus a discount app plus a gift app is three remaining amounts, and they will disagree the first week someone changes only one. [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) is the sequence: shipping, then a discount, then a gift. If the cart is short of the next line, a suggestion from your own orders can name one product that closes it. That suggestion is only useful after the number itself is true.
Country is the other way a message bar runs out. $75 domestic and €90 in Germany are two configurations of one bar, on Goalify's paid plans, shown in the shopper's currency. Copying the home sentence into every market is how export checkout stalls. The arithmetic is in [thresholds per country](/blog/different-free-shipping-thresholds-per-country-shopify.html).
A test is the third way. "Is $75 better than $85?" is a question a message bar does not answer. Goalify can run the threshold and the copy against each other. You still need enough orders for the test to finish. A test on a quiet country will sit there looking scientific.
## How to compare them on your cart, not on the review count
Hextom's 4.9 from about 2,800 reviews means a lot of stores run a message. It does not mean the message can become three goals. Essential's 5.0 from 974 reviews is a popular single-job bar with a view cap after the free band. Hoppy's 4.8 from 264 is a free bar that also wants to recommend products. Yaco's 4.9 from 22 is a bar aimed at an upsell, with the test on a higher plan. Turbo's 4.8 from 20 is a free single goal with a short record.
Install the one you might keep on a development or quiet theme. Put the same $75 goal on it. Then ask five questions.
1. Does the remaining amount match checkout after a code?
2. Can a second reward appear on the same bar without a second app?
3. Can Germany have a different number, in euros?
4. Can you test $75 against $85?
5. What happens to the bill when traffic arrives? Views, order caps, and a flat fee are different meters. Goalify's paid plans are $3.99, $7.99 and $11.99 by order volume, after a free band under 10 orders a month.
If the answer to 2, 3 and 4 is no, you are still on a message bar. That can be the right tool. It is not an alternative to a sequence.
## The day you switch
1. Write down the live threshold and which shipping rates are free.
2. Build that same number in Goalify. Add the second goal only after the first matches checkout.
3. Preview on the published theme.
4. Place one order over the line and one under it.
5. Turn the old embed off. Confirm a customer only sees one remaining amount.
6. Uninstall the old app once that order is right.
7. Tell whoever edits discounts that the Shopify shipping discount is still the thing that makes shipping free. The bar only displays it.
A view-capped bar is a reasonable choice if you want a huge review count and you will watch the meter. A free bar that also upsells will compete with the cart for attention. Neither one is the stack.
Tell the person who edits the theme that the bar moved, and tell the person who edits discounts that the discount did not. The most common failed switch is a new bar on an old minimum. The customer did the new thing. Checkout still enforces Thursday's number. Put both numbers in the same note, in the same currency, and do not archive the note until a test order has agreed with it. If the test order disagrees, change the discount or the bar before you uninstall anything. The old bar, still correct, is better than a new bar that lies.
Install [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog).
### FAQ
**What is the best Hextom Free Shipping Bar alternative?**
Goalify, if the bar has to stack a reward, change by country, or be tested. Hextom remains the simpler message bar.
**Is Hextom Free Shipping Bar free?**
There is a free plan. Paid plans start around $9.99. Confirm the current screen before you promise finance a $0 line forever.
**Will switching bars break my free-shipping discount?**
The Shopify discount is separate from the bar app. Match the new bar's threshold to that discount before you uninstall the old bar. Do not run two bars.
**Can I keep Hextom and add Goalify?**
No. Two bars means two remaining amounts. Disable one embed.
**I only need a top-of-page message. Do I still switch?**
Not for that sentence alone. Switch when the message has to become a sequence or a different number abroad.
**What does a second goal actually look like?**
Free shipping at the first number, a discount at a higher one, a gift at a higher one still. One bar, revealed in order. Two apps do not make that sequence.
**When do I uninstall the old bar?**
After one real order where the new bar and the shipping discount agree. Disable the old embed first. Uninstall once that order looks right.
## How to Add a Slide Cart to Your Shopify Store (Dawn and Free Themes)
URL: https://ninety9.dev/blog/how-to-add-a-slide-cart-shopify-dawn.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 7 minutes
How to add a Shopify slide cart on Dawn and other free Online Store 2.0 themes with an app embed, without editing cart-drawer.liquid.
Dawn already slides a cart in from the side. So do Craft, Sense, Refresh, and most free themes Shopify ships now. The job is not "add a drawer". The job is to replace the theme's receipt with a cart that can sell, without forking `cart-drawer.liquid`.
## What you are replacing
The theme drawer shows line items, a subtotal, and checkout. That is a receipt. A selling slide cart adds one complement, the distance to free shipping, a gift if the cart earned it, and a delivery window. [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) drafts that cart from the products you sell and the way the brand looks. You edit the draft. You do not start from a blank column the week the theme goes live.
It is a theme app extension. It loads when the cart opens, so it stays off the first paint. Uninstall leaves no Liquid behind. It is free to install. A/B tests are in the app, so two versions of the drawer can run without a theme branch.
## Add it on Dawn
1. Install Addy from the Shopify App Store.
2. Online Store, Themes, Customize. Open the theme you actually publish. Dawn's unpublished copy is a different theme.
3. App embeds. Turn Addy on. Save.
4. Add a product on the preview. The slide cart that opens should be Addy's, not Dawn's empty-looking drawer with a second icon.
5. If Dawn's drawer still opens, disable the theme cart drawer in the theme settings, or stop the product form from calling it. One drawer.
6. Check the cart icon in the header. It should open the same slide cart, not send the shopper to `/cart` while the button opens a drawer.
7. Repeat on a phone. Dawn's header is tight. A drawer that is fine at 1440px can cover the close button at 390px.
The same embed works on the other free Online Store 2.0 themes. The setting that hides the theme drawer moves. The embed does not. Do not copy a snippet from a 2021 blog into `theme.liquid`. Theme updates delete those snippets, and the cart "breaks" the morning after.
## What to put in the drawer
Progress, line items, one upsell, a delivery estimate, checkout. That order is the one in [cart drawer vs cart page](/blog/cart-drawer-vs-cart-page.html). A third product row is browsing.
If the threshold should change by country, the bar can be [Goalify](/apps/goalify.html) inside the Addy drawer. If the offer is a bundle with its own price, [Addly](/apps/addly.html) owns the discount and Addy presents it. Do not install a second slide cart to get a bar.
## Dawn's cart, and the other free themes
Dawn's theme settings include a cart type. Drawer keeps the shopper on the product. Page sends them to `/cart`. If you are replacing Dawn's cart with an app, the setting that matters is that Dawn stops opening its own drawer when Addy opens. Two animations, one button.
The same embed is how you add a slide cart on the other free Online Store 2.0 themes Shopify ships: Craft, Sense, Refresh, Ride, Studio, Taste, Origin, Crave, Publisher, Colorblock. The label for "hide the theme cart" moves. The embed does not. A snippet pasted into `theme.liquid` from an old tutorial is the thing a theme update deletes. The cart then "breaks" the morning after, because the snippet is gone and the app embed was never the thing opening.
Vintage themes that are still Online Store 1.0 are a different install. Confirm the theme is 2.0 before you promise a no-code embed. Addy installs as a theme app extension on Online Store 2.0 themes. There is no theme-file edit, and uninstall leaves nothing behind.
## What a selling drawer contains
Use one product the store actually sells and write the drawer as a list.
| Block | Example on a $32 serum |
| --- | --- |
| Progress | "$18 away from free shipping" once the threshold is $50 |
| Lines | Serum, 30 ml, quantity, price, remove |
| One upsell | The moisturiser people already buy with it, one click, no reload |
| Delivery | A window you can keep, such as "leaves the warehouse tomorrow" |
| Checkout | The button, larger than the upsell |
A third product row is browsing. Gift wrap is a line they add, with a price. Shipping protection is a toggle that starts off. The longer block list, including the 40 or so Addy can place, is in the [cart drawer guide](/blog/shopify-cart-drawer-complete-guide.html). You do not turn them all on. The draft gives you a cart. You delete until the button is obvious.
[Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) builds that first draft from the catalogue and the brand. Markets and customer tags can change the layout, a single block, or the threshold. Prices render in the shopper's currency. It loads when the cart opens, so it stays off the first paint. A/B tests compare two versions of the drawer without a second theme.
If the threshold itself should be its own test, [Goalify](/apps/goalify.html) can run that bar inside the drawer. If the offer is a bundle with its own price, [Addly](/apps/addly.html) owns the discount and Addy presents it. A second slide cart, installed to get a bar, is how add to cart appears to do nothing. The fixes are in [cart drawer not updating](/blog/shopify-cart-drawer-not-updating.html).
## A pass on the published theme
Do this on the theme customers see, in a normal browser, not only inside the editor.
1. Add the serum. The slide cart opens with that line.
2. Increase the quantity. The line and the subtotal move.
3. Remove it. The drawer is empty, and the header count matches.
4. Open the bag icon. It is the same drawer, not `/cart` and not Dawn's old drawer.
5. Add from a collection quick-add, if you use one. Some quick-add buttons are a second form.
6. Narrow the window to a phone width. The close control is visible. Checkout is visible without a hunt.
7. Switch country if you run Markets. Currency and the threshold follow the shopper.
8. Place the order. The amount paid matches the drawer.
Save the theme after the embed is on. An embed that exists only in an unpublished "Dawn copy" is invisible on the live shop.
## When Dawn's drawer is enough
A wholesale catalogue with no second item, no gift, and one market can keep the theme drawer. It is a receipt, and a receipt is the right cart when there is nothing to add. The week you want one complement or a different cart per country, start in the app. Forking `cart-drawer.liquid` to add a product row is how the next Dawn update becomes a project.
Leave these out of the first version even though the block exists. A countdown with no real end. A second and third upsell. A discount field in a louder colour than checkout. An announcement that repeats the header. Each one is available in Addy. Each one can wait until the drawer has taken orders and you know the first upsell is the right product. Custom HTML and CSS are there when a block cannot match the brand. They are not the first afternoon's job. Preview the drawer, then open the published shop in a private window. The editor can show an embed the live theme does not have until you save. Do that save on the published theme, then add one product outside the editor before you call the slide cart live. If the published shop still opens Dawn's drawer, the theme cart is still bound to the button.
Install [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog). The first afternoon is a drafted cart you edit, on Dawn or on any other free Online Store 2.0 theme.
### FAQ
**Does Dawn need a slide cart app?**
Dawn includes a basic cart drawer. It lists the lines. It does not draft upsells, gifts, a delivery date or a different cart per market. That is the app.
**Will this work on Craft, Sense, Refresh and the other free themes?**
Yes, if the theme is Online Store 2.0. Addy installs as a theme app extension. Enable the embed, save, and test add to cart. You should not edit theme code.
**What if both drawers open?**
The theme cart and the app cart are both bound to the same button. Turn the theme drawer off, or stop the theme from opening its own drawer on add. One button, one cart.
**Do I have to edit cart-drawer.liquid?**
No. Liquid edits are how a theme update wipes the cart, and how uninstall leaves a broken drawer. Use the app embed.
**Can the slide cart differ by country?**
Yes, in Addy. Layout, offers and the free-shipping threshold can change by market and by customer tag.
**Dawn has a cart type setting. Which one should I pick?**
Drawer, if you are keeping Dawn's own cart. If Addy is the cart, stop Dawn opening a second drawer on the same button. Page is the full cart, and it sends people away from the product.
**What should I test after the embed is on?**
Add, change quantity, remove, open the header icon, apply a code, and do it again at a phone width. Then place one order through checkout.
## How to Automatically Add a Product to Cart on Shopify
URL: https://ninety9.dev/blog/how-to-automatically-add-a-product-to-cart-shopify.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Average Order Value · App: Goalify: Free Shipping Bar PRO
Reading time: 7 minutes
How to auto-add a Shopify product to the cart: a cart link for a chosen variant, and a gift that adds itself when a threshold is met.
Automatically adding a product to the cart means two different jobs. One is a link that puts a known variant in the bag when someone clicks. The other is a gift that appears on its own once the cart qualifies. Stores mix them up, then wonder why a "free" item never shows, or why a paid item showed up without a yes.
## The click method
Shopify can add a variant from a URL. You need the variant ID, not the product handle. A button, a banner, or a post-purchase email can point at that link. The shopper clicks. The variant is in the cart.
That is not automatic. Nothing watches the subtotal. Nothing swaps the gift when the season changes. Use it for a campaign landing page where the click is the decision. Do not use it as the free-gift system.
## The rule method
A free gift should add itself when the cart crosses a line you set: a subtotal, an item count, or a specific product already in the bag. [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) does that. You pick the gift, the condition, and where the progress bar sits. When the cart qualifies, the gift is added. When it no longer qualifies, the gift should leave with it. A gift that sticks after the shopper removes the qualifying item is a support ticket.
The bar is the warning. "You are $18 from a pouch" is a task. A gift that materialises on the checkout page, with no bar on the product page, feels arbitrary. Put the bar in the cart, and on the product page if the threshold should be visible before the first add.
Country thresholds matter here. A $75 gift in the home market is a different gift abroad. Goalify sets the number per country. One global rule auto-adds the gift for the wrong carts.
## What not to auto-add
| Line | Add it automatically? |
| --- | --- |
| Free gift at a threshold | Yes, with the rule visible on a bar |
| Sample the shopper already agreed to | Yes |
| A paid complement | No. One click, in the cart or a popup |
| A second gift "while you are here" | No |
| Shipping protection | No, unless the toggle is on the cart and off by default |
Paid upsells belong on a button. [Addy](/apps/addy.html) can show the complement in the drawer with a one-click add. [Monet](/apps/monet.html) can ask after add to cart. Neither should insert a priced line the shopper did not confirm.
## A worked cart
This is an example you can copy with your own prices. It is not a result from a store.
The serum is $32. The pouch costs you $2.10 landed. Recent orders sit around $48, so a gift at $75 asks for about one more full-size item. A shopper adds the serum ($32) and a cleanser ($28). The subtotal is $60. The bar says "$15 away from a pouch". They add an $18 toner. The subtotal is $78. The pouch appears at $0.
They remove the toner. The subtotal is $60 again. The pouch has to leave with it. A gift that stays after the qualifying item is gone is a $2.10 giveaway, and the next shopper will learn to add, collect the gift, and remove. [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) adds the gift when the condition is met. The same condition has to be able to take it back.
## Money rules and unit rules
A subtotal rule follows price. A quantity rule follows units. They split as soon as a code is applied.
Three soaps at $12 are $36. A 20% code makes the cart $28.80. A rule that says "spend $30 and the gift adds" just failed, with three units still in the bag. If the offer is really "any three", use the item count. If the offer is "this order is large enough to afford the pouch", use the subtotal. Place one test order with a code on it and write down which figure checkout used. The bar and the gift have to use that same figure. A bar that celebrates, and a cart that then removes the gift, is the bug shoppers describe as the gift "not working".
Goalify can trigger on cart value, on item count, or on a product already in the bag, and those conditions can be combined. "Spend $75 and the order contains the serum" stops the pouch attaching to a cart of accessories that never included the product the pouch belongs with.
## The gift is a variant
A product with sizes cannot be added until a variant is chosen. Pick the variant you will actually pack. If that variant hits zero, the rule should fail quietly. A line that says the gift was added, then shows sold out, is worse than no gift. Keep a second variant only if you are willing to pack either one, and say which one on the bar. "A pouch" and "the travel pouch, 30 ml" are different promises.
Price the line at $0 through the gift rule. A 100% code the shopper has to remember will miss the carts that qualified in a hurry. Goalify resolves the gift with the cart. You do not also need a code.
## When a link is still the right tool
Use a link when the decision is the click. A campaign page for a kit. A button under a guide. An email to people who already own the device and should add the case. You need the variant ID. In admin, open the product, open the variant, and use that variant. The product handle is the wrong ID, because one handle can be four sizes.
The link does not know the subtotal. It adds the variant when it is clicked, including on a cart that already has it, depending on how the theme merges identical lines. It will not remove itself when the cart shrinks. Publish it as a button. Keep the automatic gift on the rule.
## Paid lines stay on a button
A $14 case that appears because the phone was added is a charge nobody confirmed. Show the case in the [Addy](/apps/addy.html) drawer as one row with a price and an add button. Or ask once in [Monet](/apps/monet.html) after add to cart. Shipping protection belongs on a toggle that starts off. A second gift at a higher threshold can wait until the first gift has been packed for a week without support tickets.
Selling plans are a different cart shape. If you sell subscriptions, place one test with a plan selected before you promise the gift on that product. A rule written against the one-time variant does not automatically describe the plan.
## What to check before you announce it
| Check | A pass looks like this |
| --- | --- |
| Under the threshold | The bar shows a remaining amount. There is no gift line |
| Cross the threshold | The gift is $0. The bar completes |
| Remove a unit | The gift leaves. The remaining amount comes back |
| Apply a code | The bar and the gift still agree |
| Gift variant sold out | There is no broken $0 line |
| Another country | The threshold is that country's number. Country rules are on Goalify's paid plans, from $3.99 after the free band under 10 orders |
| A phone | The gift line is smaller than checkout |
The threshold itself uses the same percentile idea as [a free-shipping threshold](/blog/free-shipping-threshold-calculator.html). One global $75 will add the pouch on carts that never reached a sensible local goal, and withhold it on carts that did. Per-country numbers are in [thresholds per country](/blog/different-free-shipping-thresholds-per-country-shopify.html).
## A clean setup
1. Pick one gift whose landed cost you can afford at the threshold. In the example, $2.10 against the margin on the extra toner.
2. Publish the bar before auto-add, so the pouch is expected.
3. Remove the gift when the cart falls back under the line.
4. Read it on a phone. If the gift is louder than checkout, shrink the line.
Install [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) when the product should enter the cart because the cart earned it.
### FAQ
**Can Shopify automatically add a product to the cart without an app?**
A link can add a specific variant when someone clicks it. Shopify does not, on its own, watch the cart and drop in a gift at a spend threshold. That rule is an app.
**How do I auto-add a free gift on Shopify?**
Set the condition and the gift in Goalify. The gift is added when the cart qualifies, and the progress bar shows the distance left before it does.
**Will an auto-added product surprise the shopper?**
It will if the cart never said it was coming. Put the remaining amount on the bar, name the gift, and show the line at $0 when it lands.
**Can I auto-add a paid upsell?**
Do not. A paid line that appears without a click is how chargebacks start. Paid adds stay on a button, in the [Addy](/apps/addy.html) drawer or a [Monet](/apps/monet.html) popup.
**Does the gift need its own discount code?**
No. Goalify resolves the gift with the cart rule. A code the shopper must type is a second step, and most people will not take it.
**Should the rule use the subtotal or the item count?**
Use the subtotal when the gift depends on order size. Use the item count when the offer is buy any three. A code can drop the money under the line while the units stay put, so test both.
**What if the gift variant is sold out?**
Choose a variant you can pack. A sold-out gift should not appear as a broken $0 line. Hide it until stock returns, and say so on the bar if the gift was the whole promise.
## How to Customize the Shopify Order Status Page
URL: https://ninety9.dev/blog/how-to-customize-shopify-order-status-page.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 7 minutes
What you can honestly change on the Shopify order status page, and how customers edit the order from their account without a custom status-page theme.
Customising the Shopify order status page usually starts as a request for a logo and ends as a request for a private website that happens to show a tracking number. Shopify will give you the first. The second breaks the next time checkout changes. The change that matters is narrower: the customer can see the order, and they can fix it before you ship it.
## What Shopify will let you change
Checkout branding covers the mark, the colours, and the language around the order. Use it. A status page that does not look like the store is a phishing rehearsal.
You can add a short message. Tracking, the carrier, and what happens next belong there. A paragraph of merchandise does not. They already paid.
Additional scripts on the thank-you and status pages are the old way to inject a widget. Treat them as temporary. If your "customisation" is a script tag, you do not have a customisation. You have a dependency.
## What is worth adding
A link to change the order, shown only while it is unfulfilled. [Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog) is that screen, inside customer accounts, with Shopify's own layout. The customer can update the address, the shipping method, variants, quantities and items. They can start a return or an exchange later, including store credit. If they hit cancel, you can offer a discount or a gift once, then let them cancel.
Reviso does not restyle the status page, does not validate the address against a postal database, does not update a 3PL, and does not run in POS. Claiming it is an order-status theme editor would be false. The status page stays Shopify's. The account is where the edit happens. If they open that screen, Reviso can also show a recommendation beside the edit. That is still the account, not a second theme for the status page. Point to it.
Copy for that link: "Need to change this order? You can, until it ships." Not "manage your experience".
## What to leave off the page
| Idea | Leave it off because |
| --- | --- |
| A second theme for the status page | It will not survive checkout changes |
| An email popup | They already bought. You have the email |
| A thank-you upsell dressed up as status content | That is a new order. Build it as one, or skip it |
| Three apps competing for the same block | The tracking number loses |
| A cancel button with no edit beside it | You will refund orders that needed a new size |
[Monet](/apps/monet.html) stays off this page. It is for add to cart, checkout starting, and exit. The order status page is after the sale.
## A status page that is finished
1. Branding matches the store.
2. Tracking is the loudest thing on the page.
3. One sentence links to the customer-account edit while the order is open.
4. The link disappears after fulfilment, and the return path replaces it.
5. You place a test order and open the status page on a phone.
## What the page is for
The order status page answers one question: where is the thing I paid for? Shopify's checkout branding can put your mark and your colours on it. A short message can say when you ship, or what "in transit" means for your carrier. Tracking, when you have a number, is the largest text on the page after the status itself.
People land here from the confirmation email, often on a phone, often once. They are not shopping. A paragraph of new products, a countdown, and an email form are three ways to hide the tracking number. The page can be plain. Plain is the customisation that survives.
Thank-you and order status are both after payment. Treat additional scripts on either one as temporary. Checkout changes have been retiring that style of injection. If the only way a customer can fix a size is a script on that page, you will lose the fix when the script stops running. [Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog) lives in customer accounts instead. The status page keeps a sentence that points there, while the order is unfulfilled: "Need to change this order? You can, until it ships."
## What they can do after they follow the link
In the account, before fulfilment, they can change the address, the shipping method, the variant, the quantity, and the items. The screen looks like Shopify. After fulfilment, that link should disappear and the return, exchange, or store credit path is what you show. Reviso includes those. It does not restyle the status page, validate addresses against a postal database, update a 3PL, or run in POS.
If they open the edit, Reviso can show a recommendation beside it. That is an add they choose on a page they opened in order to change something. It is still the account. It is not a second theme, and it is not a popup [Monet](/apps/monet.html) should fire. Monet is for add to cart, the start of checkout, and exit.
Country and tag rules belong on the edit, not on a different status-page design per market. One market can allow address changes. Another can send those orders to staff. The status page stays one layout.
## Copy you can paste, and copy you should not
While the order is open:
- "Need a different size or address? Change this order until it ships."
- "We have not packed this yet. You can update it from your account."
After it has shipped:
- "This one is on the way. If it is not right when it arrives, start a return from your account."
Skip "manage your experience", "unlock rewards", and any line that implies the payment method can be swapped. A new card is a refund and a new order. Say that only if they ask. The limits are in [what you can't edit](/blog/what-you-cant-edit-in-a-shopify-order.html).
## Check the page the way a customer opens it
1. Place an order on a phone.
2. Open the status link from the email, not from the admin.
3. Confirm the logo is yours, the status is readable, and tracking is present if you added a number.
4. Tap the change link. Land in the account. Change a harmless field on a test order.
5. Fulfil the order. Reload the status page. The change link is gone. The return path is there.
6. Open the same URL in a desktop window only after the phone looks right. Most of these visits are mobile.
A from-scratch status page will not get through that list after the next checkout change. Branding, one sentence, and an account that can actually edit the order will.
The email link and the status-page link should land in the same account screen. If the email goes to the status page and the status page goes to the account, that is two taps, which is acceptable. If the email goes to a third app with its own login, people reply to the email instead. Reviso uses the customer account they already have. Keep the path that short. Open both links on a phone after the test order. They should show the same edit controls while the order is unfulfilled, and neither should show them after you mark it fulfilled. If the status page still offers a change after fulfilment, the sentence is hardcoded. Remove it and let the account decide. A hardcoded sentence cannot know that you bought the label an hour ago. The account can, because fulfilment is what closes the edit.
Install [Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog). The status page stays Shopify's. The account is where the order gets fixed.
### FAQ
**Can I fully redesign the Shopify order status page?**
Not as a theme you control line by line. Checkout branding covers logo, colours and a short message. A from-scratch status page is a different product, and Reviso is not it.
**How do customers change an order from the status page?**
Send them to the order in their customer account. Reviso shows the edits there, in the native Shopify layout, until the order is fulfilled.
**Will custom code on the thank-you page survive?**
Do not depend on it. Checkout extensibility has been replacing additional scripts. An app that lives in customer accounts still works when that script disappears.
**Can I add upsells to the order status page?**
A new offer after they have paid is a second order. It is not an edit. Monet does not run on the thank-you page. Do not paste a popup there to force it.
**What should the status page actually say?**
Where the order is, the tracking link if you have one, and a plain link to change the order if it has not shipped. One link. Not three apps.
**Is the thank-you page the same as the status page?**
They are both after payment. Branding can cover both. The edit still lives in the customer account. A script on the thank-you page is a weak place to hang that link.
**Can the status page show a different block per country?**
Keep the status page plain for everyone. Country rules belong on the edit itself, in Reviso, so a market can allow an address change and another market cannot.
## How to Let Customers Cancel Their Own Shopify Order
URL: https://ninety9.dev/blog/how-to-let-customers-cancel-shopify-order.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 7 minutes
How to let a customer cancel their own Shopify order, and how to offer an edit, a discount or a gift before the order is lost.
Letting a customer cancel their own Shopify order is easy to do badly. A red button in the confirmation email creates refunds. A lot of those tickets, when you read them, are "wrong size", "wrong address", or "I added one too many". The order did not need to die. It needed an edit, and the only tool they had was cancel.
## Offer the edit first
[Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog) lives in customer accounts and looks like Shopify. Before fulfilment, the customer can change the address, the shipping method, the variant, the quantity, or a line. That is the cancel you never see. The window closes when the order is fulfilled. Do not promise edits after the carrier has the parcel.
Point the "wrong address?" line in the confirmation email at the order in their account, not at a reply-to inbox. The setup pattern is the same one in [reducing cancellations](/blog/reduce-order-cancellations.html).
## Then offer a reason to stay
When they do choose cancel, Reviso can deflect with a discount or a gift. One offer. A customer who still wants to cancel should be able to finish. A second and third offer is how a save flow becomes a trap, and traps become chargebacks.
Use the deflection for orders you can still change. A gift on an order that ships in an hour is a gift you will also have to refund. Rules by country, tag and order exist so a wholesale account or a made-to-order SKU does not get the same button as a shelf product.
## What the button must not be
Reviso does not validate addresses against a postal API, does not talk to a 3PL, and does not run in POS. A self-serve cancel on an in-store order, or on a shipment a warehouse system has already accepted, will disagree with the floor. Exclude those orders. Staff keep them.
It is free. One public review. The missing review count is not a reason to keep cancellation as an email thread. Email is where the order sits until someone on your team is awake.
## A short policy
1. Edits are open until fulfilment.
2. Cancel shows one save offer, then completes.
3. Fulfilled orders use returns, exchanges or store credit.
4. Tags you exclude never see the button.
5. You place one test order and cancel it yourself before the link goes in the email.
## What the tickets actually are
Read the last month of "cancel" mail before you design the button. Most stores find the same four piles. The shares will be yours. The categories are the useful part.
| They wrote | What they needed | What a bare cancel button does |
| --- | --- | --- |
| Wrong apartment, wrong postcode | An address edit | Refunds a good order |
| Wrong size or colour | A variant edit | Refunds a good order |
| Ordered two, wanted one | A quantity edit | Refunds the whole order, or starts a partial-refund thread |
| Changed their mind | A cancel | The one case the button is for |
[Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog) puts the first three in customer accounts, looking like Shopify, until fulfilment. The fourth still needs a path. Cancellation deflection offers one discount or one gift when they start that path. One. If they decline, the cancel finishes. A second and third offer is how a save flow becomes something people dispute.
## A save offer with a number on it
Example, not a promotion you should copy blindly. The order is $64 of skincare. Shipping has not been bought yet. A return later would cost you the outbound label, the return label, and the restock. Call that $14 all-in, if that is what your invoices say. A 10% discount to keep the order is $6.40. That is cheaper than the return, and it is one sentence: "Stay, and we will take 10% off this order." A gift that costs you $3 to land is the other sentence. Offer one of them.
Do not offer the save on an order that leaves the building in an hour. You will discount it and still be unable to stop the shipment. Rules by country, tag and order exist so a wholesale account, a made-to-order SKU, or a tagged "already picked" order never sees the button. Staff keep those.
The confirmation email should point at the order in their account. One line: "Need to change this before it ships? You can, from your account." A reply-to inbox is where the order waits until someone is awake. The wider pattern is in [reducing cancellations](/blog/reduce-order-cancellations.html). The policy language, if you need to publish one, belongs next to [writing a cancellation policy](/blog/writing-a-cancellation-policy.html).
## The test order
1. Place an order with a real gateway you can refund. A bogust payment test is not enough if you are about to promise refunds.
2. Open the customer account. Change the address. Change the size. Change the quantity. Each one should stick in the admin.
3. Start a cancel. Confirm you see one offer.
4. Decline it. Confirm the order cancels and the refund follows the gateway's rules.
5. Place a second order, mark it fulfilled, and confirm the edit and the cancel button are gone. The return or exchange path, including store credit, is what remains.
6. Place a third order with the tag you meant to exclude. The button should be absent.
Reviso does not validate the address against a postal API, does not update a 3PL, and does not run in POS. A typed address can still be wrong. A warehouse that already has the order will not hear about the cancel from this app. Exclude those orders before the link goes in the email. It is free. One public review. The review count is not a reason to leave cancellation as an overnight email.
Install [Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog). If they wanted a new size, the edit screen is the feature. What they still cannot change is in [what you can't edit in a Shopify order](/blog/what-you-cant-edit-in-a-shopify-order.html).
## Quantity, not a refund of the whole order
"I wanted one, I ordered two" should not become a cancellation. Before fulfilment, the quantity edit is the whole fix. The order stays. You pack one. You refund the difference through the edit, following the gateway, instead of refunding $64 because $32 of it was a duplicate.
Write the confirmation email so that case is obvious. "Wrong quantity or size? Change the order in your account until it ships." People use the word cancel because it is the only verb on the page. Give them the verb edit, and keep cancel one step further in.
If they still cancel, the save offer is a single number you can explain. On a $64 order, 10% is $6.40. Compare that with what a return costs you in labels. If the save is cheaper than the return, offer it once. If they are cancelling because the item is wrong for them, a discount will not fix the product. Let the cancel finish. A gift on an order they do not want is a second thing to refund.
## Timing
The useful window is after payment and before anyone picks the order. That can be hours, or it can be twenty minutes if you ship same day. Publish the cutoff you can keep. "Until it ships" is honest. "For 24 hours" is a lie if the label is bought at 4pm. Reviso closes the edit and the cancel-save path at fulfilment. If a 3PL or the warehouse has the order earlier than Shopify's fulfilled state, exclude it with a tag at that moment. The app will not call the warehouse.
Partial shipments are staff work. If one line has already gone and another has not, do not promise a self-serve edit of "the order". Test that state before you write the email, and if the screen cannot represent it cleanly, send those customers to a person.
Place the test order on the gateway you take real money with. Cancel it yourself. Read the refund. Then put the link in the email.
### FAQ
**Can Shopify customers cancel an order themselves?**
Not in a useful way on a stock store. They email you, or they dispute the charge. Reviso adds a self-serve cancel in customer accounts, with a chance to save the order first.
**Should every cancel be saved?**
No. A customer who wants out should get out. The save offer is one step, a discount or a gift, not a maze. If they still cancel, cancel.
**What if the order has shipped?**
Self-serve edits stop at fulfilment. Use the return or exchange path, including store credit, instead of pretending the order is still editable.
**Can I block cancels from some countries or tags?**
Yes. Reviso rules can depend on country, customer tag and the order. Wholesale or already-picked orders can stay with staff.
**Does this refund the payment automatically?**
The cancel has to follow Shopify's refund rules for that payment. Reviso does not invent a refund the gateway will not make. Test one order on a real gateway before you announce the button.
**What should the save offer be worth?**
One discount or one gift you can afford on that order. A 10% save on a $60 order is $6. If that is less than the cost of a return, it is a reasonable offer. A second offer after they decline is a trap.
**When should the button disappear?**
When the order is fulfilled, and earlier if a warehouse or a 3PL has already accepted it. Reviso closes edits at fulfilment and does not push changes to a 3PL.
## How to Set Up Free Shipping Over $X on Shopify
URL: https://ninety9.dev/blog/how-to-set-up-free-shipping-over-x-shopify.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 7 minutes
How to offer free shipping over a spend threshold on Shopify, set the discount, and show the remaining amount in the cart.
Free shipping over $X is two objects that must agree. Shopify needs a shipping discount with a minimum spend. The shopper needs to see how far they are from that minimum while they can still add something. Stores create the discount, skip the bar, and then say the threshold "doesn't work".
## Create the discount
In Shopify admin, create a free shipping discount. Set the minimum purchase to the number you mean, in the store currency. Choose which shipping rates it applies to. A discount that excludes express, while the bar says "free shipping", will charge express and look like a bug.
Leave the combination rules open to product discounts if a bundle should still get free shipping. Closed combinations are why a qualified cart still pays. That matrix is in [discount stacking](/blog/shopify-discount-stacking-explained.html).
## Pick the number
$X should sit just above orders that already clear it. If your average order is $42, a $40 threshold gives shipping away. A $120 threshold on a $42 store is a joke. Use the percentile method in [the threshold calculator](/blog/free-shipping-threshold-calculator.html), then round it. $75 is a goal. $73.18 is a spreadsheet.
Check the margin. The profit on the extra items has to cover the shipping label. If it does not, raise the threshold or shrink the zone. Do not paper over a loss with a prettier bar.
## Show the remaining amount
[Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) is the progress bar. Set the same threshold as the discount. Put the bar at the top of the cart, and on the product page if you want the goal visible before the first add. Copy should be the remaining amount, not the policy. "Spend $75 for free shipping" is a rule. "$18 away from free shipping" is a task. The wording is in [free shipping bar copy](/blog/free-shipping-bar-copy.html).
You can stack a second goal, a discount or a gift, once the shipping goal is honest. Do that second, not on day one. Setup is a template, the number, and the placement. Free under 10 orders a month, then $3.99, $7.99 and $11.99.
If the cart itself is a slide-out, put the bar in the [Addy](/apps/addy.html) drawer so the remaining amount sits on the line items.
## Check it once
Add products until you cross $X. Shipping at checkout should be free on the rate you chose. Remove a unit. Shipping should return, and the bar should show a remaining amount again. Test one other country before you call it done.
## A small order book, and the number it implies
These twelve orders are an example, so you can see the arithmetic. Replace them with yours. Amounts are merchandise, before shipping.
$22, $31, $36, $41, $44, $48, $52, $55, $61, $70, $74, $96.
Sorted, the middle is between $48 and $52. A threshold at $40 sits under most of these orders. You would give shipping away and change little. A threshold at $120 sits above every order but one. Nobody is one item away. The band to test is just above the orders that already clear a lower bar. Here, $75 sits above the 9th order ($70) and within reach of someone at $55 who adds one $20 item. The method, including the percentile cut, is in [the threshold calculator](/blog/free-shipping-threshold-calculator.html). Round $75. Do not publish $74.20.
## Does the extra item pay for the label?
Say the label you absorb is $6.50, and the item people add to cross $75 contributes $11 of margin after its own cost. You are ahead by $4.50 on the orders that stretch, and you are giving away $6.50 on the orders that would have paid $75 anyway. Count those. In the list above, two orders are already at or above $75 ($74 is close, $96 is over). If a large share of orders already clear the line, you are funding labels, not changing behaviour. Raise the threshold, or accept the cost as a stated policy and stop expecting the bar to "lift" anything.
If the extra item only contributes $4 and the label is $9, the threshold loses money every time it works. Shrink the zone, raise $X, or drop free shipping on the heavy products. A prettier bar does not repair that. When free shipping is the wrong offer entirely, the cases are in [when not to offer free shipping](/blog/when-not-to-offer-free-shipping.html).
## The discount and the bar have to share one figure
Create the free shipping discount in Shopify admin. Minimum purchase, the same number as the bar, in the store currency. Choose the rates. Standard can be free. Express can stay paid. The bar copy has to name that. "Free standard shipping over $75" matches a discount that excludes express. "Free shipping" does not.
Product discounts need to be allowed to combine, or a bundle that qualifies will still pay for the label. The combination checkboxes are in [discount stacking](/blog/shopify-discount-stacking-explained.html).
Then watch a code change the cart. Merchandise is $78, so the bar completes. A 15% code brings the purchase to $66.30. If Shopify's minimum uses the amount after discounts, shipping comes back and the bar must show about $9 remaining. If your bar stays completed, it is reading the pre-code subtotal. Fix the bar. Do not "fix" it by telling support the customer was wrong.
[Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog) draws the remaining amount. Set the same threshold as the discount. Put the bar at the top of the cart, and on the product page if the goal should be visible before the first add. "$18 away from free shipping" is the sentence. "Spend $75 for free shipping" is the policy, and it can live once, in the footer. Wording examples are in [free shipping bar copy](/blog/free-shipping-bar-copy.html). Placement is in [where to put a progress bar](/blog/where-to-put-a-progress-bar.html).
A second goal, a discount or a gift, waits until the shipping goal matches checkout for a week. Stacking rewards is the product. Doing it on day one, before the first number is honest, means two promises to debug. Free under 10 orders a month, then $3.99, $7.99 and $11.99. Country-specific numbers are on the paid plans.
If the cart is a slide-out, the remaining amount belongs on the line items in the [Addy](/apps/addy.html) drawer. Two bars, one in the header and one in the drawer, will drift the first time you edit only one of them. One bar.
## Four orders before you announce it
| Order | What you are proving |
| --- | --- |
| $60 of products | Shipping charges. The bar shows the gap |
| Just over $75 | Standard shipping is free. Express, if excluded, still charges |
| Just over $75, then remove a unit | Shipping returns. The bar shows a gap again |
| Just over $75, then a code that drops you under | The bar and checkout still agree |
Test one other country the same day. A domestic $75 on an export cart is how international checkout bounces. That setup is in [thresholds per country](/blog/different-free-shipping-thresholds-per-country-shopify.html).
One more distinction before you publish. A minimum purchase amount is money. A minimum quantity is units. Free shipping over $75 is the amount. "Free shipping on 3 items" is a different offer and a different bar. If you run both, say which one the customer is chasing. Goalify can use cart value or item count. Pick the one the discount in Shopify actually checks, then match the sentence to it. Three cheap items can clear a unit rule and miss a money rule. One expensive item does the opposite. The bar should describe the rule checkout will enforce. Write that rule in the discount title you will recognise in admin, so the next edit does not create a second minimum by accident.
Install [Goalify](https://apps.shopify.com/goalify?src=Ninety9Blog).
### FAQ
**How do I set free shipping over a certain amount in Shopify?**
Create a free shipping discount with a minimum purchase amount. Then show that amount in the cart as a progress bar. Goalify is the bar, and it can be the goal the discount has to match.
**What should $X be?**
Above your current average, often in the band where one extra item can close it, and only if the margin on that extra item covers the shipping you absorb. The method is in [how to set the threshold](/blog/free-shipping-threshold-calculator.html).
**The bar says free shipping but checkout still charges. Why?**
The bar's number and the shipping discount's minimum do not match, or the discount does not apply to that shipping rate or country. Make them the same number.
**Can I do this without an app?**
You can create the discount in Shopify. You cannot show a live remaining amount in the cart with that discount alone. The bar is the app.
**Should every country see the same $X?**
No. A domestic threshold on an export cart stalls checkout. Per-country setup is in [different free shipping thresholds per country](/blog/different-free-shipping-thresholds-per-country-shopify.html).
**What if a discount code drops the cart back under $X?**
Shipping should turn back on, and the bar should show a remaining amount again. If the bar stays complete, it is reading the subtotal before the code.
**Which shipping rate should the discount cover?**
The rate you named in the bar. Free standard shipping can exclude express. A bar that says free shipping, while express still charges, will read as a broken promise.
## Pre-Purchase Upsells on Shopify: What They Are and 10 Examples
URL: https://ninety9.dev/blog/pre-purchase-upsells-shopify.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Bundles & Upsells · App: Monet • AI Popup Bundle Addons
Reading time: 7 minutes
What a pre-purchase upsell is on Shopify, where it belongs, and ten examples that ask before checkout instead of on the thank-you page.
A pre-purchase upsell is an extra item offered before the shopper pays. It joins the order already in progress. A thank-you page offer is a new order, after the decision, and it is a different product. Stores buy a "pre-purchase" app and then fire a popup on a timer while the shopper is still reading. That is an interruption. It is not an upsell.
[Monet](https://apps.shopify.com/monet?src=Ninety9Blog) waits for three moments: add to cart, checkout starting, and a shopper about to leave. The offer can be a bundle, a cross-sell or an add-on, with a real discount, including a quantity break or a buy-one-get-one when the deadline or the rule is real. Recommendations can come from orders you have already taken. Country and customer tag decide who sees it. It is free. It does not collect email addresses. It does not A/B test. It does not sit on the thank-you page.
These ten are examples of offers, not case studies and not a stack.
| Example | When it asks | Why it is pre-purchase |
| --- | --- | --- |
| Case for the device just added | Add to cart | The accessory only makes sense with that device |
| Travel size of the moisturiser | Add to cart | A smaller second unit, not a second routine |
| Refill pouch beside the bottle | Add to cart | Same product, cheaper format, one decision |
| Two-pack at a quantity break | Add to cart | The second unit is the offer, before they leave the product |
| Gift wrap or a pouch | Add to cart | A fee they can see, not a line that appears later |
| The matching shade | Checkout starts | They are committed, the pair is still optional |
| A sample set of the scent they bought | Checkout starts | One small add, then payment |
| Free-shipping closer | The cart is short of the bar | One product that crosses the line, not a grid |
| A cheaper variant when they are leaving | Exit | A real alternative, not a coupon for the same item |
| The add-on they removed | Exit | One chance to put it back, then stop |
## What the popup is allowed to say
One product. A price that matches checkout, because the discount is a Shopify discount. A reason that names the item already in the cart. If you need a countdown, the end time has to be a real end. A timer that resets is the failure mode in [exit-intent popups](/blog/exit-intent-popups-shopify.html). Monet can show a countdown when the deadline is real.
Do not also pop the same product inside the cart drawer. [Addy](/apps/addy.html) is the in-cart version of one complement. Pick the surface. Product-page sets and quantity breaks still belong to [Addly](/apps/addly.html), not to a popup that restates the product page.
## What to skip
A browse timer. An email capture. A second popup after they declined. A thank-you upsell described as pre-purchase. A discount so deep the first item was the bait. None of those are in the ten.
## Three of the ten, with prices
These are setups, not case studies. Swap in your SKUs and your cost.
**The case, after add to cart.** The phone is $499. The case is $29 and costs you $6. The popup names the phone they just added and offers the case once. There is no percentage off, because $29 next to $499 does not need a costume. If you do discount it, 10% is $2.90, and you still have margin. Forty percent off, to $17.40, is a different product. Do that only if the case is how you acquire the customer, and write the margin down first. [Monet](https://apps.shopify.com/monet?src=Ninety9Blog) shows one product at this moment. Country or a customer tag can hide it from wholesale.
**The refill, after add to cart.** The bottle is $24. The pouch is $16, and the pouch is the same formula. The popup says the pouch is the format that lasts longer per dollar. This offer belongs here because the shopper just chose the product. It does not belong on a collection page they are still browsing. A quantity break on the bottle itself is a product-page job for [Addly](/apps/addly.html). The popup should not restate a tier the page already showed.
**The closer, when the cart is short.** The bar says $14 to free shipping. One product in the catalogue costs $16 and is something this shopper has a reason to want, because other orders with the same first item included it. The popup offers that one product. It does not offer a grid. If nothing in the catalogue honestly closes a $14 gap, do not invent a $4 sample with free shipping attached. Move the threshold, or leave the gap on the bar. Goalify can name a product from your orders when the cart is short of a goal. Use one of those systems, not both, for the same gap.
## Which moment gets which offer
| Moment | The shopper has | A fair ask | A poor ask |
| --- | --- | --- | --- |
| Add to cart | Chosen a product | The thing that completes it | A newsletter, a timer, a second unrelated brand |
| Checkout starting | Decided to pay | One small add, then payment | A bundle that forces them to rethink the order |
| Exit | Signalled they are leaving | One cheaper format, once | A coupon that trains them to leave |
| Still reading | Not chosen | Nothing | Any popup |
Exit on a phone is a weak signal. Prefer add to cart there. The detail is in [exit-intent popups](/blog/exit-intent-popups-shopify.html). Checkout offers are easy to overbuild. One line, one button, a way to dismiss that is as obvious as the add. [Checkout initiation](/blog/checkout-initiation-popups.html) is the narrower version of that moment.
A countdown belongs only when the end is real. A code that dies at midnight can show a clock. A clock that resets on refresh is a false statement about the offer. Monet can show the clock when the deadline is real. It will not collect an email address in the same popup. The email ask is how the upsell becomes a form.
## Pick one, then count it
Choose the example that matches the product you already sell most. Ship that popup. For a week, count three things from your own orders.
- Popups shown.
- Adds from the popup.
- Orders where the original item and the extra item both stayed through payment.
You do not need an industry attach rate to judge it. If the extra item is removed before payment, the discount was the bait or the product was wrong. If almost nobody adds, the moment is wrong, or the product page already made the offer. Turn the popup off before you add a second one.
Do not also show that SKU in the [Addy](/apps/addy.html) drawer. One surface. Recommendations can come from purchase patterns, and you can still pin a SKU for a campaign. Pin the campaign. Let the pattern fill the days the campaign is off.
Wholesale and staff tags should not see the consumer offer. Monet can target by customer tag and by country. A 10% case offer on a wholesale account that already has contract pricing is how the price list leaks into a popup. Exclude the tag. Check it with a tagged customer, not only with a fresh incognito session. A fresh session only proves the offer works for a stranger. Log in as the tagged wholesale customer and add the same product. The popup should stay closed. If it opens, the tag rule is not the rule you think it is.
Install [Monet](https://apps.shopify.com/monet?src=Ninety9Blog) for the ask. The popup comparison is in [best Shopify upsell popup apps](/blog/best-shopify-upsell-popup-apps-2026.html).
### FAQ
**What is a pre-purchase upsell?**
An offer shown before the shopper pays, so the extra item joins the order they are already placing. Post-purchase and thank-you offers are a later order.
**Where should it appear?**
After add to cart, when checkout starts, or on exit. Not on a timer while someone is still reading the product page.
**Is a cart drawer upsell pre-purchase?**
Yes. The shopper has not paid. [Addy](/apps/addy.html) shows that one inside the drawer. Monet shows it as a popup at add, checkout or exit. Use one surface for one product, not both for the same product.
**Can I capture an email in the same popup?**
Not in Monet. The popup is the offer. An email field is a second ask, and it is how the upsell starts losing to a newsletter.
**Do the ten examples need ten popups?**
No. Pick the one that matches the product already in the cart. The list is a menu, not a campaign plan.
**How deep should the discount be?**
Deep enough to notice, shallow enough that the extra unit still has margin. A worked pair is in the article. Use your cost, not a benchmark.
**What if they close the popup?**
They said no. A second popup in the same session repeats the ask. Leave the offer in the cart if it still belongs there, or let them go.
## Shopify Cart Drawer Not Updating? 8 Fixes
URL: https://ninety9.dev/blog/shopify-cart-drawer-not-updating.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 7 minutes
Eight fixes when a Shopify cart drawer does not update after add to cart, on Dawn and other themes. One drawer, one embed, one cart icon.
When a Shopify cart drawer does not update, the item usually did get added. The drawer you are looking at is not the one that changed. Eight checks, in the order that fixes the most stores.
## 1. The app embed is off on the live theme
Online Store, Themes. The published theme, not the duplicate named "Dawn copy". Customize, App embeds, the cart app, on, Save. An embed enabled in preview and never saved does not exist for customers.
## 2. Dawn's drawer and the app drawer are both on
Dawn opens its own drawer on add to cart. The app opens another. One of them has the new line. The other still shows the previous cart. Disable the theme drawer, or stop the product form from calling it. One button, one drawer. The install steps are in [how to add a slide cart on Dawn](/blog/how-to-add-a-slide-cart-shopify-dawn.html).
## 3. The header icon opens a different cart
The add button opens the drawer. The bag icon goes to `/cart`, or to the theme drawer. After an add, the shopper opens the icon and sees an old page. Point the icon at the same drawer.
## 4. A second cart app is still installed
Upcart, a page-builder cart, and the theme drawer can all listen for "add". Uninstall or disable every cart embed except the one you intend to keep. Two listeners are a race. The loser looks like a cart that did not update.
## 5. You tested inside the theme editor
The editor preview is not the storefront. Open the published URL in a normal window, add a product, and watch the drawer. If it works there, the editor was the stale view.
## 6. The product form does a full reload
Some older product forms submit the cart and reload. The drawer script never hears the add, because the page went away. On Online Store 2.0 themes the product form should add with Ajax and let the drawer refresh. If a custom product form or a page builder replaced it, the drawer is waiting for an event that never fires. Put the buy button back on the theme form, or on a form the cart app is built to hear.
## 7. Quantity buttons inside the drawer are the theme's
You added the item. The drawer opened. Plus and minus still call Dawn's quantity input, so the line on screen does not move. The drawer that owns the lines has to own the quantity controls. A hybrid, theme buttons inside an app drawer, goes stale on the first tap.
## 8. Markets and currency
A cart rendered in the wrong currency looks "wrong" rather than empty. The threshold and the line prices should follow the shopper. [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) renders prices in the presentment currency and can run a different cart per market. A single drawer with the home-market currency on a French storefront is the bug people describe as "not updating" after they switch country.
## Prove the add happened
Before you edit a file, separate "the cart rejected the item" from "the drawer is showing an old picture".
Add the product. Do not close the drawer. Open the store in a second tab and go to `/cart`. If the line is on that page, Shopify has the item. The drawer that still looks empty is a view. Fixes 1 through 4 are about which view you are holding. If `/cart` is also empty, the product form never reached the cart. That is fix 6, or the variant was unavailable.
Then change the quantity in the drawer only. Refresh `/cart`. If the quantity on the page moved and the drawer did not, the plus button is the theme's. That is fix 7.
Write down which theme is published. Online Store, Themes, the one with the live label. A "Dawn copy" you customised last Tuesday is a different theme. App embeds do not copy themselves across themes when you hit publish on the wrong one.
## A map from what you see
| What you see | What it usually is |
| --- | --- |
| Drawer opens empty, `/cart` has the line | A second drawer, or the icon bound to the theme cart |
| Nothing opens, and the page reloads | The product form is a full submit |
| Desktop updates, the phone does not | A different header icon at the mobile breakpoint |
| Quantity taps do nothing | Theme buttons inside the app drawer |
| Prices look like the home currency abroad | One cart, no market rule |
| It fails only inside the theme editor | Preview. Check the published URL |
| It failed the morning after a theme update | A Liquid edit was overwritten. The embed is the install that survives |
| Two drawers flash | Two apps, or Dawn plus the app |
Page-builder product forms are a frequent version of the reload. The button looks like the theme button and posts the cart the old way. Put the buy button back on the theme's product form, or on a form the cart app is built to hear. Quick-add buttons on collection cards are a second form. Test those too. A drawer that works on the product page and fails on the collection is that second form.
## After it updates, keep it to one cart
Leave one embed. [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) is that embed: a drafted slide cart, no Liquid left behind if you remove it, A/B tests if you want two versions without forking the theme. It is free to install. It loads when the cart opens.
If you are coming off a builder and a theme drawer at the same time, disable both, then enable Addy, then save, then test. The order matters. Enabling the new embed first gives you three listeners for an afternoon. The migration notes are in [Upcart alternatives](/blog/upcart-alternatives-cart-drawers.html). The Dawn steps are in [how to add a slide cart](/blog/how-to-add-a-slide-cart-shopify-dawn.html).
## A ten-minute regression
Run this after any theme publish or any new app that mentions "cart".
1. Add from the product page.
2. Add from a collection, if you use quick add.
3. Change quantity. Remove the line.
4. Open the header icon on desktop and at a narrow width.
5. Switch country, if you have more than one.
6. Confirm `/cart` and the drawer show the same lines if both exist. Preferably only the drawer exists.
If the drawer updates and the offer is wrong, that is merchandising. One upsell. The list is in [in-cart upsells that convert](/blog/in-cart-upsells-that-convert.html).
Install [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) once the live theme has a single embed.
## The cart count, the note, and the discount field
Three small pieces get blamed on "the drawer" and belong to a different render.
The header bubble can update on a delay, or not at all, while the drawer is right. Click the bubble. If it opens a different surface from the add button, rebind the bubble. A correct drawer with a wrong bubble still trains people to think the add failed.
The order note and the discount field have to be the app's, if the app owns the drawer. A theme note box pasted into the drawer will submit into nothing, and the shopper will tell you the note "didn't save". That is the same hybrid as the theme's quantity buttons.
A discount code that applies on `/cart` and fails in the drawer is a field that never called the cart. Use the drawer field. Apply a real code. The total should match checkout. If the code is refused because of combination rules, that is a discount setup, not a stale drawer. The distinction is in [discount stacking](/blog/shopify-discount-stacking-explained.html).
After any of those fixes, repeat the ten-minute list. One pass on desktop, one at a narrow width, one from a collection quick-add. The drawer is done when those three agree with `/cart`.
### FAQ
**Why does my Shopify cart drawer show the old quantity?**
The drawer on screen is not the cart that received the add. A second app, Dawn's own drawer, or the cart icon opening /cart while the button opens a drawer will all look like a stale cart.
**I edited the theme and the cart still fails. Why?**
You may have edited an unpublished theme. Online Store, Themes, the published one, Customize, then the app embed. Save.
**Do I need to clear the cache?**
After the embed is right, yes, once, on the device that failed. Cache is the last fix. It is not the reason two drawers exist.
**The drawer updates on desktop and not on mobile. Why?**
The mobile header often uses a different cart icon. Point that icon at the same drawer. Test at 390px, not only in the theme editor.
**Should I edit cart.js?**
No. Theme updates replace it, and a patched cart.js is how the drawer breaks again next month. Use one app embed.
**The cart count in the header is wrong, but the drawer is right. What is that?**
The bubble is a separate render. Open the drawer, then the bag icon. If they disagree, the icon is still bound to the theme cart.
**How do I prove the item was added?**
Open /cart in a second tab after you add. If the line is there, the add worked and the drawer you are staring at is the stale one.
## Shopify Discount Stacking Explained: What Combines, What Doesn't
URL: https://ninety9.dev/blog/shopify-discount-stacking-explained.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 7 minutes
How Shopify discount combinations work for product, order and shipping discounts, and how to keep a bundle and a code from fighting.
Discount stacking on Shopify is not a theme setting. Each discount, automatic or code, has combination rules: it may combine with product discounts, order discounts, and shipping discounts. If either side refuses the pair, checkout keeps one of them. The shopper sees a code that "does not work" and assumes the store is broken.
## The three stacks
| You are discounting | Examples | Usually combines with |
| --- | --- | --- |
| A product | Bundle price, quantity break, 15% off one SKU | Shipping, sometimes an order discount. Rarely a second product discount on the same unit |
| The order | 10% off the cart, a threshold reward | Product discounts and shipping, if both sides allow it |
| Shipping | Free shipping over a threshold | Product and order discounts, if the shipping discount allows it |
Read that as a permission, not a promise. Both discounts must allow the combination. A bundle that allows order discounts, and a code that does not allow product discounts, still will not stack.
## What you actually want to stack
A set or a quantity break should stack with free shipping. The shopper who built the bundle is the shopper the bar is trying to move. Blocking shipping on a bundled cart makes the [progress bar](/blog/free-shipping-progress-bar-guide.html) a lie.
A set should not stack with a second product discount on the same units. The bundle price is already the offer. A 20% code on top is a second offer you did not merchandise. Turn that combination off unless finance has already priced it. The check is in [bundle discount maths](/blog/bundle-discount-margin-maths.html).
An order-level reward, such as 10% off once the cart clears a goal, can sit on top of a product bundle if both discounts allow it. That is a real stack. Write it down. "Bundle price, then 10% off the order, then free shipping" is a sentence finance can audit. Three apps that each think they own the line is not.
## Where the price should be created
[Addly](https://apps.shopify.com/addly?src=Ninety9Blog) creates the bundle, the pair, the quantity break and the add-on as Shopify discounts. The product page and the checkout read the same discount. You still set Combinations in Shopify. You do not debug a private price the theme cannot see.
If a code and a bundle fight, do not add a third app to "fix stacking". Open the two discounts. Decide which combination is allowed. Publish that, and only that.
[Goalify](/apps/goalify.html) can own the shipping threshold and an order-level reward. Let it combine with the product discount. A second free-shipping discount, built by hand with the opposite combination checkbox, will fight the first one at checkout.
## A cart you can audit
Fill this with your own cost. The prices are an example.
Two products list at $40 and $30, so $70 together. The set is 15% off those units, which is $10.50. The pair is $59.50. That 15% is a product discount, created as a Shopify discount by [Addly](https://apps.shopify.com/addly?src=Ninety9Blog).
An order code of 10%, allowed to combine with product discounts, applies to what is left. Ten percent of $59.50 is $5.95. The merchandise total is $53.55. Free shipping then depends on the shipping discount allowing both product and order discounts, and on whether $53.55 still clears the minimum. If the minimum is $75 on the purchase amount after discounts, this cart does not get free shipping. The bar has to say so. A bar that still says "free shipping unlocked" is using a different subtotal from checkout.
If the 10% code is not allowed to combine with product discounts, checkout keeps one discount. The shopper sees a code that "does not work". That is the checkbox, on one side or the other. Both discounts have to allow the pair.
## The stack you probably do not want
The same $70 pair, plus a sitewide 20% that also targets those units. Twenty percent of $70 is $14. Together with the $10.50 bundle, that is $24.50 off $70, before any order code. If the two units cost you $32 to land, you have $13.50 left, and you have not paid the label yet.
That is why two product discounts on the same unit are usually a mistake. The bundle price was already the offer. The sitewide sale can be a choice the shopper gets instead, or it can exclude the bundled SKUs. Run the exclusion in the discount, where checkout can see it. A theme that hides the sale badge and still lets the code through has only hidden the problem.
A quantity break is the same shape. One unit at $28, two at $48. The break is already $4 off each unit. A further 20% on the $48 makes $38.40. Write that down before you turn Combinations on. The worksheet for the margin is in [bundle discount maths](/blog/bundle-discount-margin-maths.html).
## Automatic discounts and codes
An automatic discount applies when the cart qualifies. A code applies when someone types it. They still use the same combination rules. Automatic does not mean "stacks with everything". A code does not mean "the customer earned a second cut".
Shopify will not apply a pair that either discount refuses. You do not need a third app to referee that. You need a written sentence:
| Stack you intend | Product discount | Order discount | Shipping discount |
| --- | --- | --- | --- |
| Bundle, and free shipping if the cart still qualifies | The set | Off | On, if the minimum is still met |
| Bundle, then 10% off the order, then shipping | The set | The 10% code | On, if the minimum is still met |
| A sitewide sale instead of the bundle | One of them, not both on the same units | Whatever the sale already includes | On, if you still want shipping |
| Quantity break only | The break | Off for that SKU | On |
Read checkout after each row. The product page, the cart, and the payment step should show the same merchandise total. [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) is how the bundle, the pair, the quantity break and the add-on become that Shopify discount. A widget that paints a lower price on the product page, while checkout uses a different engine, is the drift people call a stacking bug.
## What changed when the code landed
A common support ticket is "they had free shipping in the cart and paid for shipping". Walk the cart in order.
1. Merchandise before discounts.
2. Product discounts, including the bundle.
3. Order discounts, if they are allowed.
4. The purchase amount Shopify uses for the shipping minimum.
5. The shipping discount, if that amount still qualifies and the rate is one the discount covers.
Express excluded from the discount will still charge, even when the bar says shipping is free. Name the rate. "Free standard shipping over $75" is a sentence. "Free shipping" is a hope.
Place four test orders before a sale: no code, code that should stack, code that should not, and a code that pulls the cart back under the shipping minimum. Save the four totals. If a later app changes a combination checkbox, you will see which total moved.
Write the four totals on the sale calendar, next to the end date of the promotion. When the sale ends, the sitewide discount has to come off the combinations you allowed for the week. A forgotten automatic discount is how Tuesday still has Friday's stack. [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) can stay. The temporary code should not. Open one order from the sale in admin and read the discount lines. The names there should match the sentence you wrote down. If a third name appears, an app you forgot is still discounting the unit.
Install [Addly](https://apps.shopify.com/addly?src=Ninety9Blog) when the bundle should be a Shopify discount you can combine on purpose.
### FAQ
**Why won't my Shopify discounts stack?**
Open each discount and check Combinations. A code that is not allowed to combine with product discounts will lose to the bundle, or the bundle will lose to the code. Both outcomes look like a bug. Both are the checkbox.
**Can a customer use a code on top of a bundle?**
Only if the bundle discount and the code are both allowed to combine. If you do not want a second cut, turn the combination off. Do not hope the theme will block it.
**Do free shipping discounts stack with product discounts?**
They can. Shipping is its own combination. A product bundle and a free-shipping threshold should be allowed to combine, or the bar will promise shipping the checkout then removes.
**Should quantity breaks stack with a sitewide sale?**
Usually no. A 20% sale plus a quantity break on the same unit is a deeper cut than the margin planned. Leave the sale and the break as a choice, not a stack.
**What if two apps both discount the same line?**
Pick one app to own the price. Addly is that app for sets, pairs and quantity breaks. A second discount engine on the same SKU is the drift.
**Which discount does checkout keep when they cannot combine?**
One of them. The shopper experiences that as a code that failed. Open Combinations on both discounts and decide the pair on purpose, then place a test order.
**Does a code change whether the cart still qualifies for free shipping?**
It can. A 15% code on a $78 cart can drop the purchase under a $75 shipping minimum. Test the code and the threshold together.
## Upcart Alternatives: 5 Cart Drawers Compared
URL: https://ninety9.dev/blog/upcart-alternatives-cart-drawers.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 7 minutes
Five Shopify cart drawers compared as Upcart alternatives. Addy, Kaching, Amp and iCart against a builder that opens on an empty canvas.
Upcart is a cart builder. The drawer is a canvas. Rewards, upsells and gifts are blocks you place, including templates in HTML, CSS and JSX. That is a real product if someone on the team wants to write the cart. It is a delay if the brief is "the drawer should be selling on Friday".
These five Shopify cart drawers are the comparison. Addy is first because the alternative to an empty canvas is a cart that is already drafted.
Ratings below are from the Shopify App Store as of October 2026. Upcart is 4.7 from 959 reviews, Built for Shopify, with a free plan and paid plans after it.
| Cart | Rating | From | First afternoon |
| --- | --- | --- | --- |
| [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog) | 5.0 / 2 | Free to install | A drafted cart, then you edit |
| [Kaching](https://apps.shopify.com/cart-upsell) | 5.0 / 1,487 | Free plan, then paid | You assemble the suite |
| [Amp](https://apps.shopify.com/slide-cart) | 5.0 / 772 | Free plan, then about $29.99 | You fill a template |
| [iCart](https://apps.shopify.com/icart) | 4.7 / 451 | First 100 orders free | You assemble a drawer, a page, a popup and a mini cart |
| [Upcart](https://apps.shopify.com/upcart-cart-builder) | 4.7 / 959 | Free plan, then paid | You build it, including JSX |
## Addy
Addy reads the catalogue and the brand and proposes the slide cart: upsell, volume offer, gift, shipping protection, progress bar, delivery date. More than 40 blocks, markets and customer tags, custom HTML and CSS, A/B tests. It loads when the cart opens. Two public reviews. Not listed as Built for Shopify. The draft is the difference, not the review count.
The head-to-head is in [Addy vs Upcart](/blog/addy-vs-upcart.html).
## Kaching
A high-review suite drawer. Timer, bars, gift wrap, protection, translations. You still place the blocks. Useful if you already live in that suite. A simpler assembly job than a drafted cart.
## Amp
Industry templates, markets, gifts, a progress bar. The paid plan is a flat monthly fee once you leave the free plan. A template is a look. It does not know your catalogue until you fill it.
## iCart
Drawer, full cart page, popup and mini cart. First 100 orders free, then paid. Most stores replacing Upcart needed one slide cart, not three extra surfaces.
## Upcart
Keep it if the cart is a front-end project and someone will maintain the JSX. Leave it if the drawer is a merchandising surface. Custom code does not make the upsell more relevant. It makes the upsell wait.
## What "a drafted cart" means on a real catalogue
Take a store that sells a $32 serum, a $28 cleanser and a $18 toner. On a builder, the first afternoon is a column, a colour picker, and a decision about which block goes where. On Addy, the first afternoon is a proposed drawer: the lines, one complement, the distance to the shipping goal, a delivery window, checkout. You delete what you do not want. You do not invent the cart from a blank file.
The complement should be one product. For the serum, that is the cleanser if orders already contain both. The drawer adds it in one click, without a reload. A second row, the toner, can wait. A timer on that row can wait forever unless the end time is a real end.
Markets are the next edit, not the first. A French cart can show euros and a different threshold. A wholesale tag can hide the upsell. Addy can change the whole cart or one block by market and by tag. Prices follow the shopper's currency. A/B tests compare two versions of that drawer without a theme branch. Two public reviews. Not listed as Built for Shopify. The draft is still the thing the canvas does not do.
## A migration that fits in a day
JSX templates do not come with you. That is the point of leaving a builder. Write down what the live Upcart drawer actually does, in one column, before you uninstall it.
| Already live, and worth keeping | Leave it behind |
| --- | --- |
| The shipping goal and the remaining amount | A custom animation nobody can maintain |
| One upsell people add | A grid of four recommendations |
| Gift wrap, if it has a price and a yes | A pre-ticked protection fee |
| The delivery sentence, if you can keep it | A countdown that resets |
| Translations you already paid a human to write | A second empty cart "for later" |
Then:
1. Install Addy. Leave Upcart's embed on until the new drawer has been previewed, then turn Upcart off before you turn Addy on for customers. Never both.
2. Open the published theme, not a copy. App embeds. Addy on. Save.
3. Rebuild the row in the table. Progress, lines, one upsell, delivery, checkout.
4. Add the serum on the live URL. The new drawer opens. Dawn's drawer does not.
5. Place one order. The paid total matches the drawer.
6. Uninstall Upcart once that order looks right. An unused embed still listens for "add".
The head-to-head on the builder itself is in [Addy vs Upcart](/blog/addy-vs-upcart.html). The install on Dawn is in [how to add a slide cart](/blog/how-to-add-a-slide-cart-shopify-dawn.html).
## How to read the other four
Kaching is a suite with a long review record, 5.0 from 1,487 reviews, Built for Shopify. You still place the blocks: timer, bars, gift wrap, protection, translations. If your team already lives in that suite, the clicks are familiar. The first cart is still an assembly.
Amp is templates. Industry looks, markets, gifts, a progress bar. The paid plan is a flat monthly fee once you leave the free plan, about $29.99. A template is a skin. It learns your catalogue when you fill it.
iCart is a drawer plus a full cart page, a popup and a mini cart. First 100 orders free, then paid. A store leaving Upcart usually needed one slide cart. Three extra surfaces are three more places for the count to go stale.
Upcart, 4.7 from 959 reviews, Built for Shopify, stays the right product when a developer will own the JSX after the sale. It is the wrong product when the brief is a drawer that sells this week. HTML and CSS in Addy cover the cases where a block is not enough, without making the whole cart a front-end project.
## Which drawer, by the job in front of you
A two-person brand with a sale on Friday needs the drafted cart. An agency with a front-end developer and a design system in JSX can stay. A brand that already assembled Kaching and only wants a familiar admin can stay there, and should still run one drawer. A brand that wants a template and will pay a flat fee can look at Amp, knowing the template is empty of their products until they fill it.
| If you are leaving Upcart because | Install |
| --- | --- |
| The canvas is still empty | Addy |
| You want a suite you already know how to click through | Kaching |
| You want an industry template and will pay a flat fee | Amp |
| You want a drawer plus a full cart page | iCart |
| You want to keep writing JSX | Stay on Upcart |
Turn one embed off before you turn the next on. Two drawers on Dawn is the bug in [cart drawer not updating](/blog/shopify-cart-drawer-not-updating.html).
Review count is a poor way to finish this choice. Upcart's 959 reviews and Kaching's 1,487 describe how many stores installed a builder or a suite. They do not describe whether your serum has a complement in the drawer on Friday. Addy's two reviews are a true limit of a new listing. The draft is still the difference on the first afternoon.
Install [Addy](https://apps.shopify.com/addy-cart-drawer?src=Ninety9Blog).
### FAQ
**What is the best Upcart alternative in 2026?**
Addy. The first cart is drafted from your products and your brand. You still get custom HTML and CSS, markets, tags and A/B tests, without opening on a blank canvas.
**Is Upcart a bad cart drawer?**
It is a builder. Stores that enjoy JSX get a custom cart. Stores that needed the drawer live before a sale get a canvas. Those are different jobs.
**Can I migrate without editing the theme?**
Yes. Disable Upcart's embed, enable Addy's, save, and place one test order. Do not leave both embeds on.
**Which alternative is closest to a visual builder?**
Amp sells industry templates. You still fill them. Kaching is a suite you assemble. Neither drafts the cart from the catalogue the way Addy does.
**Do I need a developer to leave Upcart?**
Not for Addy. Custom JSX does not come with you, which is the point. Rebuild the one upsell and the bar. Leave the rest of the canvas behind.
**What should I rebuild on the first day?**
The progress line, the line items, one complement, a delivery window, and checkout. Leave gift wrap, a timer, and a second upsell until that drawer has taken a real order.
**Can both drawers stay installed while I decide?**
No. Disable one embed before you enable the next. Two listeners on add to cart is a drawer that looks stale.
## What You Can't Edit in a Shopify Order (and Workarounds)
URL: https://ninety9.dev/blog/what-you-cant-edit-in-a-shopify-order.html
Published: 2026-10-13 (updated 2026-10-13)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 8 minutes
What Shopify will not let you change on an order, what a customer can change before fulfilment, and the honest workarounds after that.
Shopify lets a merchant edit some unfulfilled orders in the admin. Customers cannot, unless you give them a screen. The screen still cannot do everything a support agent wishes it could. Here is the split, and the workaround that is actually available.
## Before fulfilment
[Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog) lets the customer change, in their account:
- Shipping address
- Shipping method
- Variant, such as a size or a colour
- Quantity
- Which items are in the order
It looks like Shopify, because a custom "order portal" is where people lose trust. Rules can limit this by country, customer tag or the order itself. A made-to-order line can be excluded while a shelf SKU stays editable.
If they are trying to cancel instead of edit, the cancel path can offer a discount or a gift first. That flow is in [how to let customers cancel](/blog/how-to-let-customers-cancel-shopify-order.html).
## What stays locked
| They want | What is possible |
| --- | --- |
| A different size, unfulfilled | Edit the variant |
| A new ship-to address, unfulfilled | Edit the address. No postal API checks it |
| A cheaper shipping method, unfulfilled | Change the method |
| A different card | Refund and a new order. Not an edit |
| A change after the label exists | Return, exchange, or store credit |
| An edit inside a 3PL that already has the order | Staff, in the warehouse system. Reviso does not push to a 3PL |
| A POS sale from the counter | Not this app |
Reviso is free. It does not add address validation, a warehouse integration, or a POS mode. Those are not on a later plan. They are out of scope. Shipping the feature anyway would mean an address field that claims to be verified and is not.
## After fulfilment
The workaround is a returns flow: send it back, exchange it, or take store credit. Reviso includes that, still in the customer account, still in Shopify's own visual language. It is slower than an edit. It is the operation the carrier allows.
Do not keep the edit button visible on a fulfilled order with a note that says "contact us". Hide it. A button that errors is how people open a dispute.
## What staff still do
Orders with a tag you excluded. Anything a 3PL has accepted. POS. Payments. The odd address that is deliverable only because a human noticed the missing apartment number. Self-serve is for the typo and the size. It is not a plan to empty the support queue of judgement.
## Where the order is, and what that allows
An order moves through states. The edit window is the early ones. After the label exists, you are in returns, even if the customer still says "edit".
| State | Address, size, quantity | Payment method | Practical path |
| --- | --- | --- | --- |
| Paid, not picked | [Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog) can open those edits | Locked. A new card is a refund and a new order | Self-serve |
| Picked, or already sent to a 3PL | Locked, even if Shopify still says unfulfilled | Locked | Staff, in the warehouse system |
| Label bought, in transit | Locked | Locked | Return, exchange, or store credit when it comes back |
| Delivered | Locked | Locked | The returns window you actually publish |
Reviso closes the edit options at fulfilment. It does not update a third-party warehouse, so a picked order can be "unfulfilled" in Shopify and already gone from your point of view. Tag those orders out of self-serve. There is no postal-validation API behind the address field. A customer can correct an apartment number and can also type a street that does not exist. Staff still read the odd one. Shipping the feature as if it verified addresses would be false.
Payment is the request that sounds like an edit and is not one. "Can I use the other card?" means refund this payment and take a new one. Say that in the reply. A button labelled "change payment" that errors is how the dispute starts.
## A typo versus a new order
Example. The order is a medium shirt, $48, address missing the apartment. Before fulfilment they can set the apartment and switch to large, in their account, in Shopify's own layout. The order number stays. You pack the large.
The same shirt, already handed to the carrier. They want large. The edit button should be gone. The return or the exchange is the path, including store credit if that is the policy you run. Reviso includes that tooling: windows, reasons, exchanges, store credit, items you will not take back. It is slower than an edit. It is what the carrier allows. An exchange they start themselves is still cheaper than a ticket that sits until Monday.
If they are cancelling rather than editing, one discount or one gift can be offered first. The flow is in [how to let customers cancel](/blog/how-to-let-customers-cancel-shopify-order.html). After they decline, the cancel completes. Do not keep an edit button on a fulfilled order with a note that says "contact us". Hide it.
Adding a product during the edit is a choice they make on that screen. Reviso can show a recommendation there, from the order and from what they viewed. It is an add with a yes. It is not a line that lands because they opened the page. It also does not replace the offer you should have made before they paid. That work sits on the product page and in the cart.
## What to tell support to stop doing
Write the split on a card.
- Unfulfilled, not in the warehouse: send them the account link.
- In the warehouse or fulfilled: start a return or tell them the cutoff has passed.
- Payment, POS, excluded tags: staff only.
- Address that looks impossible: staff, because nothing in the app will call a postal database.
The comparison with other editors is in [best Shopify order editing apps](/blog/best-shopify-order-editing-apps-2026.html). The longer operating picture is in the [order editing guide](/blog/shopify-order-editing-guide.html).
Install [Reviso](https://apps.shopify.com/reviso-order-editor?src=Ninety9Blog). The window is before the label. After the label, the workaround is a return.
## Partial shipments
Some orders leave in pieces. One line is fulfilled. Another is still on the shelf. Shopify can show that split. A customer will still say "change my order" and mean the line that has not moved.
Do not assume self-serve can express that cleanly. Reviso closes edits when the order is fulfilled. A half-shipped order is close enough to committed that the safe policy is staff, until you have placed a test order in that exact state and seen a screen you would send a customer to. If the screen offers to edit the line that is already on a truck, hide the button and handle it yourself.
The line still on the shelf can be changed by staff in admin. The line on the truck is a return when it arrives. Say which is which in the reply. "We can still change the unshipped item. The one that left has to come back if it is wrong." That sentence prevents the argument where they think the whole order was editable because one line was.
## Money that is not an edit
A discount they forgot to apply is not an edit of the product. If you choose to honour it, that is a refund of the difference or a new discount on this order, done by staff, with the code checked against your combination rules. It is not a variant change. Reviso will not invent a code that was never entered.
Store credit on a return is a later step. It belongs in the returns settings: the window, the reasons, what you will not take back, and whether credit is the refund. Publish the window you keep. A 30-day promise with a 14-day setting is how "the app is broken" tickets start.
Taxes and duties on an address change can move the total. If they change country before fulfilment, expect the total to change and show them the new total before they confirm. If your rules block cross-border address edits, say so. A blocked edit with no sentence looks like a bug. A blocked edit that says "we only ship this order inside the country it was placed in" is a policy.
The screen is free to install. It is not an address-validation product, a warehouse integration, or a POS tool. Those stay outside it on every plan. Use it for the apartment number and the size. Use people for the rest.
### FAQ
**Can I edit a Shopify order after it ships?**
Not usefully. The carrier has the parcel. Reviso closes edits at fulfilment. Use a return or an exchange.
**Can a customer change the address before it ships?**
Yes, in Reviso, until fulfilment. There is no postal-validation API behind that field. A typed address can still be wrong. Staff still catch the ones that look impossible.
**Can they swap the payment method?**
No. A different card is a new payment, which means a refund and a new order, or a checkout link. Do not describe that as editing the order.
**What about orders already sent to a 3PL?**
Reviso does not update a third-party warehouse. If the warehouse has the order, treat it as committed even if Shopify still says unfulfilled. Exclude those orders from self-serve edits.
**Can in-store POS orders be edited the same way?**
No. Reviso is not a POS tool. Keep counter orders on the process the store already uses.
**The order is unfulfilled in Shopify, but the warehouse already has it. Can they edit?**
Treat it as committed. Reviso does not push a change to a 3PL. Exclude those orders, even if Shopify still says unfulfilled.
**Can they add a product while they edit?**
They can change items before fulfilment. A recommendation on that screen is an add they choose. It is not a line that appears on its own.
## 10 cart drawer upsells that work during BFCM
URL: https://ninety9.dev/blog/cart-drawer-upsells-bfcm.html
Published: 2026-10-11 (updated 2026-10-11)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 6 minutes
Ten Shopify cart drawer upsells that hold up on Black Friday and Cyber Monday: what to show, where it sits, and the offers that annoy a committed shopper.
A cart drawer upsell during BFCM is a single add shown after the shopper has put something in the bag, inside the slide-out cart, before they go to checkout. Black Friday shoppers are impatient and already swimming in discounts. The drawer should confirm the bag, show what shipping will cost, and offer one more thing that belongs there.
[Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) is that drawer. It drafts a cart from the catalogue and the brand, then you edit it: in-cart upsells, volume deals, a shipping goal, gifts, a delivery date, shipping protection, and a different cart by market or customer tag. It is free to install from the [Addy listing](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev). The year-round ranking of offers is [in-cart upsells that convert](/blog/in-cart-upsells-that-convert.html). This list is the ten we would actually leave on for 27 to 30 November.

Read that drawer from top to bottom the way a thumb does. A progress line. The items already chosen. One suggestion. Checkout, large. If you insert a gallery and a second recommendation above checkout, you have built a page inside the drawer, and the reason they opened it was to pay.
The products in the example are placeholders. What you copy is the order of the blocks. One commercial offer plus the progress is the ceiling for Friday.
## 1. The pair they already buy
One product, chosen because it shows up in the same orders as the hero. Not a "you may also like" row of eight. Under the line items, above checkout. If you do not know the pair, use order history rather than a collection guess. [Addly](https://apps.shopify.com/addly?src=ninety9dev) can own the set on the product page. The drawer should not repeat a different pair and make them pick twice.
## 2. The quantity step on the line they just added
"Add one more, save a little" on the consumable already in the cart. Same decision, less doubt. This outperforms a stranger product when the hero is something people use up. Keep the tier honest. If three units are a worse deal than the sitewide code, they will notice.
## 3. The free-shipping gap, with a product that closes it
If they are $16 short, show one product around that price, not a lecture. The threshold itself is [Goalify](https://apps.shopify.com/goalify?src=ninety9dev), and the number should be the one you calculated in [the BFCM free shipping threshold](/blog/free-shipping-threshold-bfcm.html). The drawer is where the bar is believable, because the total is on the same screen.
## 4. The gift rung, once shipping is cleared
Shoppers who already earned free shipping need a next reason. A small gift at a higher spend, revealed when the first goal is met. Not all three goals shouted at a $20 cart. [Holiday gift ideas](/blog/holiday-free-gift-with-purchase-ideas.html) for what the gift should be. Addy can show the progress in the drawer. Goalify can own the rule.
## 5. Gift wrap or a note, as a one-tap add
BFCM is gifts. A wrap, a pouch, or a written note is an add-on people understand immediately. Full price is fine. Do not hide it behind a bundle builder inside the drawer. One line, one price, one tap.
## 6. Shipping protection, stated as a choice
A small protection fee, opted in or out in the drawer, next to the total. It is not an upsell in the romantic sense. It is a yes/no that belongs before checkout so it is not a surprise. Say what it covers in one line. If you cannot say it, do not show the toggle.
## 7. A delivery date beside the total
Gift buyers ask one question. When does it arrive? An estimated window in the drawer answers it while they can still add or remove. If you are quoting a range, quote a range you can hit. A date you invented on Thursday is a chargeback story in December.
## 8. A short announcement, not a second ad
One line: order cutoff for arrival before a holiday date, or the hour the code ends. Not a rotating banner of three campaigns. [FOMO blocks](/blog/fomo-blocks-in-the-cart-drawer.html) work when the fact is real. A fake "12 people are viewing this" on every SKU is how a serious shopper loses trust on the busiest day of the year.
## 9. A different cart for a different market
The US bar, the EU bar, and the wholesale tag should not share one drawer. Addy can run a different cart, or a different block, by market and by customer tag. Use it for the threshold and the delivery promise. Do not use it to hide the price.
## 10. One countdown that matches the real end
If the offer ends Monday night, a countdown to that moment is fair. A countdown that resets is not. Put it on the announcement or the goal, not on every line item. Urgency on top of urgency reads as noise, and noise is what shoppers close.
On a phone, checkout has to be visible without scrolling past a gallery. If the upsell pushes it away, delete the upsell. The [cart drawer guide](/blog/shopify-cart-drawer-complete-guide.html) is the layout. Two blocks, then the button.
Build the drawer before the week of the sale. Place a test order. Open it on a phone. If the pair, the bar and the date are all competing for the top, keep the date and the bar, and move the pair under the lines.
Then watch one ratio on Saturday: upsell adds divided by drawer opens, next to checkout completion. A clever offer that lowers checkout completion is not an upsell. It is a tax on the sale you already had. Take it out the same day.
### FAQ
**What is the best cart drawer upsell for Black Friday?**
The product people already buy with the hero, priced clearly below it, placed under the line items. A quantity step-up on the item in the cart is even easier, because it is the same decision. A grid of eight recommendations is the version that gets ignored.
**How many upsells should a Shopify cart show during BFCM?**
One product offer, plus the shipping or gift progress if you have it. More than that pushes the checkout button down on a phone, which costs more orders than the extra offer can win.
**Should cart upsells be discounted on Black Friday?**
Only if the campaign story needs a reason to add it now. A useful accessory can sit at full price. An extra percent off everything in the drawer trains shoppers to expect the add-on to be cheap all weekend, including people who would have added it anyway.
**Do cart drawer apps slow the store on Black Friday?**
They do if they block the first paint of the product page. A drawer that loads when the cart opens, as a theme app extension, stays out of that path. Still place a test order on a phone on cellular before you scale ads.
**Can different countries see different cart upsells?**
Yes. A domestic cart and an international cart should not share a shipping goal or a delivery promise. Market and customer-tag rules exist so a wholesale buyer does not see the retail gift.
## 10 quantity break examples for Black Friday and Cyber Monday
URL: https://ninety9.dev/blog/quantity-breaks-black-friday-cyber-monday.html
Published: 2026-10-11 (updated 2026-10-11)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 7 minutes
Ten Shopify quantity break examples for Black Friday and Cyber Monday, with tier maths, variant pricing and the margin check before you publish the ladder.
A quantity break for Black Friday and Cyber Monday is a price ladder on a single Shopify product: pay the campaign price for one, a little less per unit for two, a little less again for three. It raises units per order without requiring a deeper sitewide discount. The single-unit buyer is unharmed. The stock-up buyer has a reason.
[Addly](https://apps.shopify.com/addly?src=ninety9dev) runs these tiers, including on one variant, plus the bundles and add-ons around them. Free plan, then Unlimited and Advanced from $15 / $20/mo by Shopify plan. Install from the [Addly listing](https://apps.shopify.com/addly?src=ninety9dev). The principle, with the margin trap, is [quantity breaks versus volume discounts](/blog/quantity-breaks-vs-volume-discounts.html). The ten below are BFCM examples you can copy the shape of, then replace with your cost.

This is the ladder. One unit at the campaign price. Two and three show a lower price each, and the word each is on the row so nobody thinks $22 is the price of both. Add to cart does not move and does not get a second label.
Two failures show up the moment you compare your own widget to that one. The first is a badge on the regular price, so every tier looks like a deal and none of them do. The second is a third tier so deep that the per-unit profit no longer covers the product, let alone the free-shipping label that three units just triggered. If tier three is the one that loses money, delete tier three before Friday. You can still sell three at the tier-two price.
Black Friday 2026 is 27 November. Cyber Monday is 30 November. Publish one ladder before Friday and leave it up through Monday. Changing the steps on Sunday is how your best customers feel tricked.
## How to read the examples
Each example assumes a campaign price you have already chosen for one unit. The break is extra, on top of that, not instead of a secret second code. Gross profit is illustrative. Yours will differ. If you cannot fill the cost column, you are not ready to publish the tier.
| Example | One unit | Two units each | Three units each | Who it is for |
| --- | --- | --- | --- | --- |
| Daily consumable | $24 | $22 | $20 | Refills, coffee, supplements |
| Gift pair | $48 | $44 | — | "One for you, one to give" stops at two |
| Mini set of a hero | $18 | $16 | $15 | Stocking fillers bought in handfuls |
| Variant you are long on | $36 | $32 | $30 | The size that is not the bestseller |
| Sample flight turned full size | $28 | $25 | — | They tried the mini, two full sizes is the step |
## 1. The refill ladder
$24, $22, $20 on a product people finish. Three is a season, not a warehouse. Stop at three unless your cost still works at four. State "per unit" so nobody thinks $20 is the price of all three.
## 2. Two as a gift, and stop
$48 each for one, $44 each for two, no third tier. The story is a gift, not a stock-up. A third tier on a giftable hero attracts resellers and clutter more than it attracts households.
## 3. Three minis
$18, $16, $15 on a mini candle, soap or sample. The landing is a stocking table. Cap it, because minis are how a cart fills with units that do not cover a heavy label. If three minis still do not clear shipping, the threshold is a separate problem, solved in [the BFCM shipping bar](/blog/free-shipping-threshold-bfcm.html), not by a fourth mini at a loss.
## 4. The size you need to clear
The popular size stays at the campaign price with a gentle break. The size you are long on gets the steeper ladder. Addly can target the discount at a variant. A storewide "any size, buy 3" will do the opposite of what the stockroom needs.
## 5. The pantry step
Food and coffee: one bag, three bags, six bags. Six only if the per-unit profit still pays for the heavier parcel. Write the weight change into the tier decision. A sixth bag that bumps the shipment into a new bracket can wipe the break you thought you earned.
## 6. The beauty routine, same SKU
Cleanser or oil they can decant into a second bathroom. Two is the natural tier. Three is optional and should be priced only if subscription-like stocking up is real for you. Do not invent a subscribe-and-save story inside the quantity widget if you are not running subscriptions. The break is a one-time ladder.
## 7. The team or household pack
Four units as the top tier, named "household" or "team," for socks, bottles, basics. The middle tier is two. Skip a silly one-unit "discount" that is just the normal price with a badge. Badges on the regular price make the real break look fake.
## 8. The colourway that is not the hero colour
Same product, the holiday colour or the quiet colour, with a stronger per-unit break than the core colour. You are buying clearance of a variant without putting the core on a deeper code. When that colour hits your reserve, remove the tier the same day.
## 9. Cyber Monday, same ladder, new hero
Monday does not need new maths. It needs the product you still have. Keep Friday's tiers. Move the widget to the SKU that survived Saturday. A fresh 40% third unit on Monday, after a milder Friday, is how your Friday buyers ask for a refund of the difference.
## 10. The break that stops before free shipping doubles up
If three units always clear free shipping, you are paying the break and the label. That can be fine if you meant to. It is not fine if you did not add the label cost into unit three. Do the addition on paper. [Bundle discount maths](/blog/bundle-discount-margin-maths.html) is the same muscle, applied to a set. Use it on the tier too.
Campaign price minus the tier discount, minus unit cost, minus the shipping share if this tier is what triggers free shipping. If that number is negative, the tier is a promotion you are paying customers to take.
Put the ladder under the price on the product page, not in a popup that hides it. The cart can repeat a one-line reminder. [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) is the drawer for that reminder. It should not show a different quantity price than the product page. One ladder, one place that owns it.
On Saturday, split orders of that SKU into one unit, two, and three. You want the share that took a tier, and the gross profit per order at each tier, not a blended average. If almost everyone stayed on one unit, the step is too small to notice or the widget is below the fold. If everyone jumped to three and profit per order fell, the tier is too deep. Change the price, not the story, and leave the new ladder up through Monday.
Through Monday night, then off. A quantity break that quietly becomes the permanent price is a decision for January, made with the attach rate in front of you, not a leftover from the weekend.
### FAQ
**What is a quantity break on Black Friday?**
Tiered pricing on one product. One unit at the campaign price, two units a bit less each, three units a bit less again. The shopper who wants a single gift can still buy one. The shopper who can use more sees a reason to add it now, through Cyber Monday, without you cutting the single-unit price further.
**How deep should Black Friday quantity breaks go?**
Deep enough to notice, shallow enough that unit three still clears your cost plus the shipping you might throw in. On many consumables that is a small step, a few percent, not a half-off third unit. Run the profit per unit at each tier before you publish. If tier three is the one that loses money, delete tier three.
**Should Cyber Monday use a different quantity break than Black Friday?**
Only if the product or the stock position changed. A new ladder on Monday teaches people to wait. Keep the same tiers from Friday through Monday, with a published end. Change the hero if you sold out, not the maths, mid-weekend.
**Can quantity breaks target one variant?**
Yes, and they should when sizes or colours have different stock and different costs. A break on every variant will empty the bestseller and do nothing for the size you are long on. Target the tier at the variant you can afford to multiply.
**Do quantity breaks replace a bundle?**
No. A quantity break is more of the same product. A bundle is a different product, or a mix. Use the break on things people repurchase. Use a [Black Friday bundle](/blog/black-friday-bundle-ideas-shopify.html) when the second item is a companion, not a twin.
## 12 Black Friday bundle ideas for Shopify stores (with examples)
URL: https://ninety9.dev/blog/black-friday-bundle-ideas-shopify.html
Published: 2026-10-11 (updated 2026-10-11)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 8 minutes
Twelve Black Friday bundle ideas for Shopify, with pricing examples, margin checks and where each offer belongs on the product page.
A Black Friday bundle on Shopify is a set, a pair, or a build-your-own box offered at one clear price during the BFCM weekend. The job is to raise [average order value](/blog/how-to-increase-average-order-value-shopify.html) without turning the product page into a discount warehouse. The shopper already came for a deal. The bundle should make the next unit obvious.
Black Friday 2026 falls on 27 November, with Cyber Monday on 30 November. That is a short window. Build the sets in October, price them from margin, and leave the product page with one offer a thumb can accept.

That card is the offer. Three products, each price visible, a total, and one button. If the set needs a paragraph, it is not ready.
Three details are doing the work. The products should come from orders, so the pair is already a habit at full price. Both prices are on the card, so the deal can be checked in a second. And there is one action. A bundle that asks for three separate adds is three chances to buy only the hero.
[Addly](https://apps.shopify.com/addly?src=ninety9dev) is the Shopify bundles app we use for these: frequently bought together, fixed sets, mix and match, quantity breaks, add-ons and offers drawn from real orders. Free plan, then Unlimited and Advanced from $15 / $20/mo by Shopify plan. Install it from the [Addly listing](https://apps.shopify.com/addly?src=ninety9dev).
## What a Black Friday bundle has to do
The set has to be understandable in one glance on a phone, priced so the added unit still makes money, and placed where it does not block add to cart. If any of those three fail, a bigger percent-off will not save it.
| Bundle | Best for | Discount shape | Watch-out |
| --- | --- | --- | --- |
| Fixed pair | A hero with one proven companion | 10–15% on the added item | Do not discount the hero as well |
| Mix and match | Gifts, shades, flavours | Price break at 3 and 6 units | Too many choices freeze the tap |
| Frequently bought together | Anything with order history | Small set discount, or none | Ignore category guesses |
| Add-on | A cheap completion (wrap, case, sample) | Optional, often full price | Do not make it required |
The rest of this guide is twelve shapes that fit that table. Pick two for the weekend, not twelve.
## 1. The proven pair
Pull the last 90 days of orders. Find the product that most often sits in the same order as the hero, priced well below it. That pair is the Black Friday bundle. A moisturiser and the serum people already add. A device and the case. Offer the pair under the button as one add.
If you do not have the report, [frequently bought together on Shopify](/blog/frequently-bought-together-shopify.html) is the method. Addly can build the set from purchase history instead of a merchandiser's hunch, which matters when the weekend is too short to test ten guesses.
## 2. The gift box they build
Mix and match is the holiday bundle for stores with many small SKUs: shades, flavours, samples, charms. "Choose any 3" at one price. Cap the choice at one collection so the box still looks like a gift, not the whole catalogue.
Show the running total as they add. A shopper who cannot see the price until the end abandons the box and buys the single hero, which is the opposite of a Black Friday bundle.
## 3. The stocking trio
Three low-priced items, preselected, sold as one stocking stuffer. This is a fixed bundle, not a builder. The value is the editing. You did the choosing. Price it so one trio is an easy add next to a larger gift, and do not also run a sitewide 40% code on the same SKUs or the trio stops being a deal.
## 4. Hero plus the refill
Sell the device, the bottle, or the starter with the refill in the same set. The refill is the unit they will need in January. A small discount on the refill only. The hero stays at the campaign price you already planned. This protects margin better than a blanket percent off both.
## 5. Complete the routine
Skincare, coffee gear, hair, pet: three steps, one bundle. Name the steps in the title ("cleanse, treat, seal") so the shopper does not have to open three product pages. Keep it to three. A five-step routine is a regimen they will not assemble on a Friday night phone.
## 6. The add-on under the button
Gift wrap, a travel cap, a pouch, a sample of the adjacent scent. This is a product add-on, not a second bundle widget. One checkbox. Full price is fine when the add-on is obviously useful. A discount on a $6 pouch does less than simply showing it.
## 7. Two of the same, for a gift
"One for you, one to give" is a two-unit fixed bundle of the same hero, lightly discounted versus two singles. It is different from a quantity break, which is a ladder of 1, 2 and 3 on the product itself. Use the bundle when the story is a gift. Use the [quantity break](/blog/quantity-breaks-black-friday-cyber-monday.html) when the story is stocking up.
## 8. Shade or flavour flight
A set of three variants of one product: mini candles, sample perfumes, coffee bags. Mix and match if they should choose, a fixed flight if you want zero decisions. Variant-level pricing matters here. If one shade costs you more, do not let the bundle pretend every shade has the same margin.
## 9. The host set
For food, drink and home: the thing guests use together. Glasses plus a mixer. A throw plus the candle. Price the set under the cost of buying both at the campaign price, by a small gap, not a dramatic one. The host set fails when it includes a product nobody reorders, because then you trained a one-time basket with a permanent discount.
## 10. The travel edit
Minis and travel sizes in one bundle. Landed cost is low, perceived value is high, and the set does not replace the full-size hero if you keep full sizes out of the bundle. This is the same logic as a [free gift with purchase](/blog/free-gift-with-purchase-strategy.html), except the shopper pays, which is kinder to margin during a weekend when everyone expects something free.
## 11. The last-chance colourway
A holiday colour or a limited sleeve, bundled with the core product so the limited piece does not have to carry the page alone. When the limited unit sells out, hide the bundle the same day. A Black Friday bundle that shows an unavailable piece reads as a broken page, and broken pages do not convert at 9pm on 27 November.
## 12. The set that clears free shipping
Build one bundle whose price sits just over your free-shipping threshold. The shopper feels two wins: the set, and shipping. Do not also slash the threshold that weekend or the bundle loses its job. The threshold maths is in [how to set a BFCM free shipping threshold](/blog/free-shipping-threshold-bfcm.html). [Goalify](https://apps.shopify.com/goalify?src=ninety9dev) can show the bar. Addly presents the set.
A 20% sitewide code on a bundle that was already 15% off is an effective discount nobody modelled. Exclude bundles from the deepest code, or the set becomes the worst margin order of the weekend.

The set and the wrap are different decisions. The set is the considered extra. The wrap is a completion, and it can sit at full price. Discounting both, and then letting a sitewide code hit them again, means you no longer know which discount the order used.
A margin check before you publish a pair. Hero at a $48 campaign price, $22 landed. Companion at $18, $6 landed. Fifteen percent off the companion only costs you $2.70, against about $12 of gross profit on that added unit, and the hero stays at the price you already planned. Twenty percent off the whole $66 set gives away $13.20, including on a hero you were going to sell anyway. The louder version often makes less money. Run the same subtraction on your costs. If you cannot fill in landed cost, the bundle is not ready for the ad.
## What to publish, and what to leave off
Publish one bundle on each hero, plus quantity breaks only on the consumables. Put [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) behind the set if the second unit should also appear in the cart drawer, and keep the drawer to one extra offer. The [product bundles guide](/blog/shopify-product-bundles-guide.html) covers the types. The [margin maths](/blog/bundle-discount-margin-maths.html) covers the discount you can afford.
If the page is already crowded, run the [CRO Audit for Shopify stores](/cro-audit/) on the hero URL before you add a fourth widget. A bundle under a buried add-to-cart button will not be seen.
### FAQ
**What is a good Black Friday bundle discount on Shopify?**
Start at 10 to 15 percent off the added item, not 30 percent off the whole set. The bundle pays only when the extra margin from the added unit beats the discount given to people who would have bought both anyway. Deepen the discount only if the attach rate is too low after a few days of traffic.
**Should every product have a Black Friday bundle?**
No. Bundle the heroes that already have a natural pair, a refill, or a gift use. A one-off decorative item with no companion should stay a single product. Too many bundles on one product page slows the decision and trains shoppers to hunt for the biggest percent off.
**Where should a Shopify bundle sit on the product page during BFCM?**
Directly under the add-to-cart button, before the long description. The shopper has already chosen the hero. The bundle is a yes to one more thing, not a second storefront above the price.
**Can I run quantity breaks and bundles in the same Black Friday promotion?**
Yes, on different products. A consumable wants a quantity break. A kit wants a fixed bundle or a mix-and-match box. Putting both offers on the same product usually splits the click and lowers the take rate of each.
**How do I know if a Black Friday bundle is cannibalising full-price sales?**
Compare orders that contain both products before the promotion with orders during it. If most bundle buyers already bought the pair at full price, the discount is a gift to existing behaviour. The [bundle discount maths](/blog/bundle-discount-margin-maths.html) walk-through shows the break-even.
## 15 things to fix on your Shopify store before November 27
URL: https://ninety9.dev/blog/shopify-store-fixes-before-black-friday.html
Published: 2026-10-11 (updated 2026-10-11)
Category: CRO & Analytics
Reading time: 6 minutes
Fifteen concrete fixes for a Shopify store before Black Friday on 27 November: the product page, the cart, shipping, inventory and the order after checkout.
27 November 2026 is Black Friday. The stores that hold up are not the ones with the loudest banner. They are the ones where a new visitor on a phone can see the price, choose the variant, add it, understand shipping, and pay, and where a wrong address the next morning does not become a ticket pile.
This is a fix list, in the order we would do it. The first items are the sale. The later items are how the sale stays profitable. Run the [CRO Audit for Shopify stores](/cro-audit/) on the product URL you will advertise. It ranks the public page the way a shopper meets it. Then do the operational checks the audit cannot see, because it does not log into your admin.

Price, a short variant choice, and a button that is the largest control. Anything you add this week has to survive that test on a phone: price visible, choice obvious, button reachable without a scroll past a gallery. A sold-out size that still looks tappable, or a buy button the size of a text link, fails before any offer gets a chance.
## The fifteen, in order
| # | Fix before 27 November | Why it hurts on the day |
| --- | --- | --- |
| 1 | Price and compare-at price are honest and visible | A crossed-out price that is not the real usual price is a trust problem, and a policy one |
| 2 | Variants can be chosen without hunting | Sold-out sizes that still look selectable create rage-clicks |
| 3 | Add to cart stays visible while the page scrolls on mobile | If the button leaves the screen, the offer above it does not matter |
| 4 | The hero you will advertise is in stock, with a buffer | Friday's ad to a sold-out URL is paid traffic to a dead end |
| 5 | Photos load, and the first image matches the variant | A slow first image is the page, as far as a shopper is concerned |
| 6 | One offer on the product page, not five | Bundles, popups and bars stacked on the button hide the buy |
| 7 | The cart opens as a drawer or a clear cart page | A surprise full-page jump loses the momentum of the add |
| 8 | Shipping cost or the threshold is visible in the cart | The number at checkout is the classic abandonment |
| 9 | Delivery expectation is stated, even if it is a range | Gift buyers leave when "when does it arrive?" has no answer |
| 10 | Discount field and campaign code behave as you intend | A code that does not stack the way the ad said creates support |
| 11 | Mobile checkout actually completes in a test order | Place the order yourself, on cellular, not office wifi |
| 12 | International thresholds are not a copy of the domestic bar | One number mis-prices every other country |
| 13 | Customers can fix address, variant and quantity before fulfilment | Otherwise every typo is a ticket or a cancel |
| 14 | Cancellation has a path that is not only "email us" | The cancel wave hits before you are back at the desk |
| 15 | The theme and the app embeds are frozen | A Friday edit is how the cart disappears |
## Buy path before offers
Items 1 to 5 are the product page. If they fail, do not spend the week designing a bundle. [What the CRO audit checks](/blog/what-the-shopify-cro-audit-checks.html) is the same order: can they buy, then did you miss the extra unit. [Product page leaks](/blog/product-page-leaks-cro-audit-finds.html) is the longer list of how those leaks look.
Item 6 is restraint. Pick one product-page offer. A bundle or a quantity break from [Addly](https://apps.shopify.com/addly?src=ninety9dev) is enough. A second widget that repeats it is how the button gets pushed down.
## Cart, shipping, and the promise

Items 7 to 10 are the cart. A drawer from [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) keeps them on the page, shows the total, and can hold one upsell plus a delivery date. The shipping number is [Goalify](https://apps.shopify.com/goalify?src=ninety9dev): a bar with a real threshold, including a different one per country. How to set that number is [the BFCM free shipping threshold](/blog/free-shipping-threshold-bfcm.html). If the cart is where people drop, the [cart abandonment checklist](/blog/shopify-cart-abandonment-checklist.html) is the next pass after these four.
The failure mode is a cart that tells the truth too late. Shipping appears at checkout. The code fails because it does not stack the way the ad said. The delivery date is a blank. Each of those is a reason to abandon that looks, in analytics, like "checkout drop-off." It is not a payment-provider problem. It is a sentence you did not put next to the total.
Item 11 is non-negotiable. Place a real order on your phone. Use the code from the ad. Reach the thank-you page. If you will not do it, a stranger with a cart full of gifts will do it for you, once.
## After the payment

Items 13 and 14 are Saturday. Wrong addresses and wrong sizes are the bulk of BFCM tickets. [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) lets the customer change the address, the variant, the quantity or the shipping method before the order ships, and can offer a reason to stay if they hit cancel. The playbook is [order changes and wrong addresses during Black Friday](/blog/black-friday-order-changes-wrong-addresses.html).
Do not enable every module because the grid looks complete. Enable the ones your warehouse can still perform after the label window you actually run. If you ship the same evening, address and variant are the two that pay. Add-product and a long cancellation flow are useful only if someone is still looking at the order before it is picked. A module that fails because the parcel already left teaches the customer that self-serve is decoration.
Item 15 is discipline. Duplicate the theme if you must experiment. Do not publish a half-finished editor at noon on Friday.
Audit the advertised product URL. Place one mobile order. Set the shipping bar. Open self-serve edits. Then stop adding surfaces.
The offers that grow the order, once the page can sell, are collected in [how to raise AOV on Black Friday without a bigger discount](/blog/increase-aov-black-friday-without-bigger-discounts.html).
### FAQ
**What should I fix on my Shopify store before Black Friday?**
Start with whether a shopper can buy on a phone: visible price, selectable variants, a reachable add-to-cart button, and a cart that shows the total and the shipping deal. Then check inventory on the advertised SKU, the free-shipping rule, and how a customer fixes a wrong address after checkout. Offers come after those.
**How late is too late to change a Shopify theme before BFCM?**
A theme change in the last week is how tracking, apps and the cart break on Friday. Freeze the theme. Fix copy, offers and inventory inside the apps and the theme editor. If a change is required, do it on a duplicate theme and buy on a phone before you publish.
**Should I add more apps before Black Friday?**
Add one only if it owns a hole you have already seen, such as no cart drawer, no shipping bar, or no way for customers to edit an order. Do not install a stack of overlapping upsell apps the week of the sale. They fight for the same spot and slow the page.
**Does a CRO audit replace checking out myself?**
No. The [CRO Audit for Shopify stores](/cro-audit/) ranks what a shopper hits on the public product page and cart. You still need to place a real order, on mobile, with the campaign code, through to the thank-you page, and then try to change the address.
**What if my store is password protected while I prepare?**
Finish the public page before you send ads. A password wall is fine for a draft. It is not fine for the URL in the ad. When you are ready, audit the live product URL, not a preview only you can open.
## 5 steps to calculate the right free shipping threshold for BFCM
URL: https://ninety9.dev/blog/free-shipping-threshold-bfcm.html
Published: 2026-10-11 (updated 2026-10-11)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 6 minutes
Five steps to set a Black Friday and Cyber Monday free shipping threshold on Shopify so the bar raises average order value without giving shipping away.
The right free shipping threshold for BFCM is the cart value where the extra items a shopper adds are worth more than the shipping cost you absorb. It is not the lowest number you can advertise. Black Friday 2026 is 27 November. If the bar is wrong, you will feel it in margin before you feel it in the AOV report.
[Goalify](https://apps.shopify.com/goalify?src=ninety9dev) is the free shipping bar we run for this: cart value or quantity rules, a different threshold per country, a gift or a discount stacked above shipping, and a suggestion when the shopper is short. Free up to 10 orders a month, then $3.99, $7.99 and $11.99. The [Goalify listing](https://apps.shopify.com/goalify?src=ninety9dev) is where it installs. The year-round version of the maths is the [free shipping threshold calculator](/blog/free-shipping-threshold-calculator.html). The steps below are the BFCM cut.

A free-shipping bar is a price anchor with a job. It tells the shopper the next useful number, in the currency they are paying, with one product that can close it. In the example the gap is $18 and the product sits under the bar. If that product does not exist, the sentence "$18 to free shipping" is a dare, not an offer.
The same shape has to be priced per country. Translating the words and keeping a converted dollar threshold is how an easy domestic bar becomes a wall, or a giveaway, somewhere else. Shipping is the first rung, because it is the one a hesitant cart will actually stretch for. A gift sits further out, for people who were going to clear shipping anyway. Showing the top prize first, with a huge number, makes the shipping rung look trivial.
## Step 1. Export the orders you actually get
Use the last complete month, and a previous BFCM weekend if you have one. You want order value, country, and whether shipping was already free. The median matters more than the average. A few large wholesale orders pull the average up and make a threshold look reachable when most shoppers will never see it move.
Ignore drafts, cancelled orders and replacements. They are not baskets someone is trying to grow on Friday.
## Step 2. Write down the shipping you will pay
For each country you will promote, note the label cost you eat when shipping is free, including packaging. A $6 domestic label and a $22 international label cannot share one threshold. If you do not know the number, you cannot know whether the bar makes money. Guessing "about eight dollars" is how Friday night becomes a surprise invoice.
| Input | Why it changes the threshold |
| --- | --- |
| Median order value | The bar has to sit near baskets you really see |
| Label cost you absorb | The extra margin must cover this |
| Typical add-on price | One item has to be able to close the gap |
| Country | Cost and willingness to add are both local |
## Step 3. Place the bar where one item closes it
Start around 15 to 30 percent above the median, then check the gap in money. If the median basket is $54 and you set $78, the shopper needs $24 more. If your add-ons are $12, they need two decisions. That is usually one decision too many on a phone during Black Friday. Either lower the bar toward one add-on, or show a specific product that closes it.
[Goalify](https://apps.shopify.com/goalify?src=ninety9dev) can suggest that product from order history when someone is short. A generic "you are $24 away" with nothing relevant underneath is a slogan. A serum they already buy with the moisturiser is an offer.
## Step 4. Split the threshold by country
Configure the goal per country. Show the shopper's currency. A converted $75 that started as a US rule is not a strategy for everyone else. Domestic can sit closer to the median. Expensive zones should sit higher, or free shipping should not be the offer there at all. [When not to offer free shipping](/blog/when-not-to-offer-free-shipping.html) is the case for a flat rate or a gift instead.

Put the bar in the cart drawer and, if you use one, on the product page. The two have to agree. A product page that says $12 away and a cart that says $19 away is a broken promise, and Black Friday shoppers notice faster than you can edit the theme. Copy that updates with the amount remaining is in [free shipping bar copy](/blog/free-shipping-bar-copy.html). [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) can hold that bar inside the drawer next to the line items, which is where the total is believable.
One more check on the gap. Contribution of the add-on, not its shelf price, has to cover the label. An $18 add-on with $4 of gross profit does not pay a $7 label. An $18 add-on with $11 of gross profit does, barely. The bar is not "set it 20% above the median and hope." It is label cost versus the profit on the one item you expect them to add.
## Step 5. Stack the next reward, then stop
Free shipping is rung one. A gift or a small order discount can be rung two, higher up, for shoppers who were going to clear shipping anyway. Do not show all three numbers at once to a $20 cart. They will anchor on the top number and ignore the first. [Stacked cart goals](/blog/stacked-cart-goals.html) is the sequence. Holiday gift ideas that can sit on rung two are in [free gift with purchase ideas](/blog/holiday-free-gift-with-purchase-ideas.html).
Then stop. Do not also drop a sitewide code that makes every order free to ship by accident. Do not cut the threshold on Saturday because Friday felt quiet. Read the share of orders that finished just below the line. If a pile sits $4 under it, the bar is slightly high. If almost everyone cleared it in the first hour, it was a giveaway.
Median order $54. Domestic label $7. A relevant add-on is $18 with about $8 gross profit. A threshold at $68 asks for one of those add-ons. The $8 covers the $7 label, with a little left over. A threshold at $40 would have paid the label on orders you were already taking. A threshold at $110 needs two add-ons and will mostly be ignored.
Publish the end. "Free shipping over $68 through 30 November" is a promotion. A bar with no end becomes the new permanent policy, and you will spend December arguing with yourself about whether you can put it back.
### FAQ
**How do you calculate a free shipping threshold for Black Friday?**
Export recent orders, find the median order value, add your absorbed shipping cost, and place the threshold roughly 15 to 30 percent above the median so one extra item can clear it. Check that the gross profit on that extra item covers the shipping you will pay. If it does not, raise the threshold or narrow who gets the offer.
**Should the Black Friday free shipping threshold be lower than usual?**
Only if your usual bar is so high that almost nobody was crossing it. Dropping a healthy threshold for the weekend gives free shipping to orders you were already getting. That is a margin cut, not an AOV tactic. A short, honest promotion is a published end date, not a cheaper bar.
**Do I need a different BFCM threshold for each country?**
Yes if you ship internationally. Label cost, zone and delivery promise are different. A single converted currency number still hides a different profit. Set the goal per country, and show it in the shopper's currency.
**Where should the free shipping bar appear during BFCM?**
In the cart, where the total changes, and on the product page if the hero can realistically close the gap. A sticky announcement of a number nobody can reach is noise. The bar has to move when the cart changes.
**What if shoppers add a cheap item just to get free shipping?**
That is the point, as long as the cheap item's margin covers the shipping. If the only thing that clears the bar is a loss-leader, raise the threshold or exclude that SKU from the progress. Then suggest a product that actually closes the gap.
## 6 exit-intent popup offers to save abandoned Black Friday carts
URL: https://ninety9.dev/blog/exit-intent-popups-black-friday.html
Published: 2026-10-11 (updated 2026-10-11)
Category: CRO & Analytics · App: Monet • AI Popup Bundle Addons
Reading time: 6 minutes
Six exit-intent popup offers for abandoned Black Friday carts on Shopify. One product, no second coupon, and the triggers that do not interrupt a shopper who is still buying.
An exit-intent popup on Black Friday is one offer shown when a Shopify shopper is about to leave, or at the moment they add to cart or start checkout. The abandoned cart is still on the table. The popup's only job is to put one relevant product into it. A bigger coupon is the offer that feels productive and usually is not, because the sitewide code is already the reason they came.
[Monet](https://apps.shopify.com/monet?src=ninety9dev) is the popup. It triggers on exit intent, on add to cart, and when checkout starts. Templates cover a bundle, a cross-sell and an add-on. Recommendations can come from purchase patterns. It is free to install from the [Monet listing](https://apps.shopify.com/monet?src=ninety9dev). It does not collect emails. The longer guide is [exit-intent popups on Shopify](/blog/exit-intent-popups-shopify.html). The rule of one is [one offer per popup](/blog/one-offer-popup-rule.html). The add-to-cart trigger, which is a different moment from the exit, is covered in [the add-to-cart upsell slot](/blog/add-to-cart-popup-upsell.html).

The popup is one product, one price, one button. Not a coupon field. Monet can show it on add to cart, at the start of checkout, or on exit. Those are three moments, not three popups, and a frequency cap should stop the same person meeting all three in one session.
Exit is the weakest of the three on a phone, because you do not get a cursor leaving the window. You get a back gesture, which is late and messy. Add to cart and the start of checkout are the moments when intent is already proven. Use exit for the cart that is full and idle. Do not use a timer on arrival. That is how you interrupt someone who was still going to buy.
## 1. The pair they did not add
If the hero is in the cart and the usual companion is not, the exit offer is that companion. One image, one price, one button. This is the same pair you would have put in the drawer. Use the popup only if they are leaving without it. Do not show it and the drawer offer at the same time or you have asked twice.
## 2. The product that clears free shipping
They are $14 short and heading for the door. The popup is one product near $14 that belongs with the bag, not "here is 10% more off." The threshold is the one from [the BFCM free shipping calculation](/blog/free-shipping-threshold-bfcm.html). [Goalify](https://apps.shopify.com/goalify?src=ninety9dev) knows the gap. Monet presents a single product into it. If you do not have a product that fits the gap, do not invent a discount to fake it.
## 3. A small bundle of what they are already buying
A two-unit or three-unit version of the consumable in the cart, as a bundle template, with a modest break versus buying singles. This is a quantity story told at the exit, for people who almost left with one. The ladder itself should already exist on the product page via [Addly](https://apps.shopify.com/addly?src=ninety9dev). The popup is the reminder, not a different price they cannot find again.
## 4. The add-on they understand in one second
Wrap, a case, a sample. Add-on template. No carousel. Black Friday exit is a second, maybe two. If the offer needs a paragraph, it is a product page, and they have already decided not to be on one.

## 5. Checkout start, for the shopper who is not leaving yet
Some of the money is not at the exit. It is the moment they tap checkout, still on your page, before the payment step. One last relevant add, then get out of the way. Monet's checkout-initiation trigger is that moment. Do not use it to restate the campaign code. They are already converting.
## 6. A real end time, attached to one of the five
If the pair or the shipping gap is the offer, a countdown to the published end of the weekend is fair. A timer that resets when they refresh is how you teach people that urgency is decoration. [Popup frequency capping](/blog/popup-frequency-capping.html) matters more on Black Friday than on a Tuesday, because the same visitor will open five products in ten minutes. Once per session is enough.
| Offer | Show it when | Do not show it when |
| --- | --- | --- |
| Missing pair | Hero is in the cart, companion is not | They already added the companion |
| Shipping-gap product | Cart is just under the bar | They have cleared shipping |
| Quantity bundle | Only one unit of a consumable is in the bag | They already took the break |
| Add-on | Cart has the hero, no wrap or case | The add-on is out of stock |
| Checkout-start add | They tapped toward checkout | They are still reading the description |
If the ad already says 20% off, the exit popup must not say 30%. You will save a few carts and reprice the whole weekend, including people who were never going to leave.
Desktop and mobile are not the same trigger. Test both. Place a product in the cart, move to leave, and see if the offer matches the bag. If it shows a generic bestseller, turn the recommendation rule tighter or set the product by hand for the heroes in your ads.
The cart itself should already be doing its job before the popup exists. [Cart drawer upsells for BFCM](/blog/cart-drawer-upsells-bfcm.html) is that job. The popup is the last tap, not the first. If the add-to-cart button is already buried, the popup will not save the cart. Run the [CRO Audit for Shopify stores](/cro-audit/) on the hero URL before you add another layer.
### FAQ
**What should a Black Friday exit-intent popup offer?**
The missing pair, the unit that would clear free shipping, or a small bundle of what is already in the cart. Not a new percent-off code if a campaign code is already public. A second code teaches shoppers to head for the door to see if the offer improves.
**Do exit popups work on mobile during BFCM?**
Less precisely than on desktop. Desktop can watch the cursor move toward the browser chrome. Mobile relies on back navigation and similar leave signals, so the same aggressive offer will mistime more often. Use a shorter popup on mobile, still one product, and do not cover the whole screen if they can still reach checkout.
**Should I collect emails in the Black Friday exit popup?**
Not if the goal is to save the cart in front of you. An email field is a second task for someone who is leaving. The offer should add a product they can accept in one tap. Email capture is a different campaign, on a quieter day.
**How many exit popups can I run on Black Friday?**
One at a time, with a frequency cap so the same person does not see it on every page of the session. A popup on the product page, another in the cart, and another at checkout start is three interruptions. Pick the moment that matches the offer.
**Will an exit popup hurt Black Friday conversion rate?**
It should not, if it only appears once they are leaving or after they have added to cart. A popup on a timer, on arrival, will. Measure add-to-cart and orders together the first day. If orders fall and the popup is the only change, turn it off.
## 7 post-purchase upsell ideas to turn BFCM buyers into repeat customers
URL: https://ninety9.dev/blog/post-purchase-upsells-bfcm.html
Published: 2026-10-11 (updated 2026-10-11)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 6 minutes
Seven post-purchase upsell ideas for Black Friday and Cyber Monday buyers on Shopify, on the order itself before it ships and on the next visit.
A post-purchase upsell for BFCM is a product offered after the Shopify checkout has succeeded, before you pack the order. The buyer has already paid. You are not risking the Black Friday conversion. You are asking if one more thing should go in the same box, or if the next visit should be easier. That is a better path to a repeat customer than a bigger code on the receipt.
[Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) is the screen we use. Customers can still change the address, the variant and the quantity, and the same page can show AI recommendations and recently viewed products. When they start a cancellation, it can offer a discount or a gift instead. It is free to install from the [Reviso listing](https://apps.shopify.com/reviso-order-editor?src=ninety9dev). The year-round case is [post-purchase upsells](/blog/post-purchase-upsell-strategies.html). [Monet](https://apps.shopify.com/monet?src=ninety9dev) is not that screen. Monet is the popup on a later visit, on add to cart, checkout start, or exit. Both belong in this list. They are not the same moment.

Two products the customer already has a reason to know, each with a price and a button. Not a code, and not eight tiles. Start with two, and only while the order is unfulfilled.
The original order is already won. That is why this surface is allowed to be quiet. A louder discount than the one they just used tells them they overpaid five minutes ago. Match the campaign price, or take a small step down, and say that the add closes when the order ships.
## 1. The companion they looked at and did not buy
Recently viewed, filtered to something that pairs with the line they purchased, one card on the edit screen. This is the strongest "repeat" seed you have, because they already spent attention on it. A global bestseller shown to every order is how a candle buyer gets offered a phone case.
## 2. The refill or the second unit, before the box closes
If the hero is a consumable, offer one more unit so they are not reordering in three weeks from a cold start. Ship it now, in this parcel. Price it with a small break or at the campaign price, not at a new low that makes the unit they just bought look overpriced. [Quantity breaks](/blog/quantity-breaks-black-friday-cyber-monday.html) on the product page should match this price. Do not invent a quieter discount backstage.
## 3. The sample that starts the next full size
A travel size of the adjacent product, added to this order. Cheap to pack, obvious as a next purchase. This is the paid cousin of a [holiday free gift](/blog/holiday-free-gift-with-purchase-ideas.html). Charging a little is fine. The point is the second product in their house, not a freebie that trains them to wait for gifts.
## 4. Gift wrap or the spare, while you can still pack it
They bought a gift and skipped the wrap, the pouch, or the extra. The edit screen is the last cheap moment to add it. After the label, that add is a second shipment and a second decision they may not make. [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) can offer wrap in the drawer before checkout. Reviso offers it again only if it is still missing. Do not show it twice if they already took it.
## 5. The size swap that becomes a keep, not a cancel
A wrong size is often the start of a cancellation. Let them swap, and if the right size is a different price, settle it on the order. The "upsell" here is sometimes a more expensive variant they actually wanted. Sometimes it is just a save. Both are worth more than a refund and a hope they come back. The operational rules are in [order changes and wrong addresses](/blog/black-friday-order-changes-wrong-addresses.html).
## 6. A reason to keep the order, if they hit cancel
Cancellation deflection is not a classic upsell, and it still protects the relationship you need for a second order. Offer a modest discount on this order or a small gift, once, when they start to cancel. If the reason is a wrong address, show the address edit first. A coupon does not fix a parcel going to last year's apartment.

## 7. The next visit, with one popup, not on the receipt
Cyber Monday is 30 November. Some Friday buyers come back. When they add to cart again, or when they leave, [Monet](https://apps.shopify.com/monet?src=ninety9dev) can show one product: the pair, or the unit that completes shipping. That is a new session. Do not fire it on the thank-you page over the order summary. They are reading confirmation, not shopping. Frequency-cap it so Friday's buyer is not nagged on every collection they browse on Sunday. The offer shapes are in [exit-intent popups for Black Friday](/blog/exit-intent-popups-black-friday.html).
| Moment | App | Offer | Do not |
| --- | --- | --- | --- |
| Order screen, before the label | Reviso | Companion, refill, sample, wrap | A grid of eight |
| Cancel click | Reviso | Fix the order, or one small save | A bigger code than the campaign |
| Next visit, add to cart or exit | Monet | One product that belongs with Friday's order | A popup on the receipt |
Same-day Black Friday fulfilment makes this a short offer. Say that next to the button. An add that fails because the order already left should never look like a bug.
The original AOV work still happens before payment. [Raising AOV without a bigger discount](/blog/increase-aov-black-friday-without-bigger-discounts.html) is that half. Post-purchase is the half that does not touch conversion rate, which is why it belongs in the plan even when the product page is already full.
### FAQ
**What is a post-purchase upsell on Black Friday?**
An offer shown after the Shopify order is paid, while the shopper is still looking at the order and the warehouse has not shipped it. Adding a unit then ships in the same box. It does not risk the conversion you already have. It is not a popup on the product page, and it is not a second coupon in the confirmation email.
**How do you turn a BFCM buyer into a repeat customer with an upsell?**
Sell them the thing they will need next, or the thing they looked at and did not buy, while the order can still change. A refill, a sample of the adjacent product, or the companion that was in recently viewed. A random bestseller does not create a second purchase habit. It creates a confused line item.
**Can customers add a product after checkout on Shopify?**
Only if an order editing app allows an add before fulfilment. Shopify's admin can do it for staff. The customer needs a screen on the order, with stock checks, that closes when the order ships. After the label, the add becomes a new order.
**Should the post-purchase offer be discounted?**
A small reason to add it now is enough, because the effort is one tap and the shipping is already happening. Match it to the campaign only if you must. A deeper discount than the one they just used feels like they paid too much five minutes ago.
**Where does a popup fit if the order is already placed?**
Not on the confirmation. The next visit is the popup moment. If they come back during Cyber Monday, add to cart or start to leave, one offer can meet them then. That is a new session, not the receipt they are trying to read.
## 7 ways to handle order changes and wrong addresses during Black Friday
URL: https://ninety9.dev/blog/black-friday-order-changes-wrong-addresses.html
Published: 2026-10-11 (updated 2026-10-11)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 6 minutes
Seven ways to handle Shopify order edits and wrong addresses during Black Friday, before the parcel ships and the ticket queue takes the weekend.
Black Friday order changes are the corrections that show up after payment and before the label: wrong address, wrong size, wrong quantity, a line they meant to add. On a normal week they are a nuisance. On the weekend of 27 November 2026 they arrive together, and a support inbox is the slowest tool you can use.
[Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) is how we let the customer do it. Address, shipping method, variant, quantity, a cancellation that can be saved with a discount or a gift, and an upsell on that same screen. It is free to install from the [Reviso listing](https://apps.shopify.com/reviso-order-editor?src=ninety9dev). Edits stop when the order is fulfilled. The full map is the [Shopify order editing guide](/blog/shopify-order-editing-guide.html). Address-only detail is in [change the shipping address after checkout](/blog/change-shipping-address-after-checkout.html).

Those four switches are the operating policy. Every one you enable is a change the warehouse must still be able to make. On Black Friday the useful set is usually address, shipping method, variant and quantity. Add-product is an upsell, and it belongs only while the order is still unpicked. A switch that fails because the parcel already left teaches the customer that self-serve is decoration.
## 1. Open the address field, and close it when you buy the label
Self-serve address change is the highest-volume fix. Put it on the order status page and in the account, where people already look. Close it the moment the order is fulfilled, including same-day picks. A customer who edits an address after the label exists has not saved you money. They have created a second shipment.
Say the cutoff in the confirmation: "You can change the address until we pack the order." Vague "contact us soon" produces emails.
## 2. Let them swap the variant without cancelling
Wrong size and wrong colour are the second pile. A swap inside the order keeps the payment and the promise. Cancelling so they can repurchase loses the sale to a sold-out size an hour later, which is common on Black Friday. Allow the swap only while both variants can still ship together. If the new variant is gone, say that. Do not leave a spinner.
## 3. Allow a quantity change before the pick
Someone meant two and bought one, or bought three and only wanted one. Quantity edits are safe when stock is real. They are dangerous when the product is already allocated to another order. Tie the edit to available stock, and do not let a quantity increase oversell the last unit you were saving for a wholesale pick.
## 4. Let them add the forgotten piece into the same order

A forgotten gift wrap, a second shade, the refill. Adding a line before fulfilment ships it in the same box, which is cheaper than a second order next week. This is also the post-purchase upsell, covered in [BFCM post-purchase upsell ideas](/blog/post-purchase-upsells-bfcm.html). Keep it one suggestion, not a second store.
Two products the customer already has a reason to know. Eight cards on a confirmation is a catalogue. The add has to fail closed once the order is fulfilled. An "Add" button that errors because the label already exists will generate the ticket you were trying to avoid.
## 5. Offer a way to change the shipping method while it still matters
Upgrade to a faster service when the gift has a date. Downgrade when they do not need it. Only show methods you can still buy. If the order is already in a pick wave, hide the control. Reviso can include the shipping method among the fields customers change, with rules for who is allowed.
## 6. Meet the cancellation with a correction first
People hit cancel because the address is wrong or the size is wrong, and cancel is the only button they trust. Put the edit next to the cancel. When they still want to cancel, a modest incentive (a discount on this order, or a small gift) is a save. It is not a trick if the alternative is a refund you were about to process anyway. [Reduce order cancellations](/blog/reduce-order-cancellations.html) is the policy side. [Self-serve edits versus tickets](/blog/self-serve-order-edits-vs-tickets.html) is how to roll it out so the warehouse is not surprised.
## 7. Write the rules by country and by customer
Not every order should be editable. A cross-border address change can move the parcel into a zone you did not price. A wholesale tag may need staff. Block those, and allow the rest. One global "edit everything" switch is how a Black Friday order leaves the country you thought it was in.
| Edit | Usually allow | Hold for staff |
| --- | --- | --- |
| Shipping address, same country | Yes, before the label | After fulfilment |
| Address that changes country | Rarely | Almost always |
| Variant swap in stock | Yes | When the new SKU changes the ship date |
| Quantity increase | Yes, if stock remains | When it raids a held allocation |
| Cancel | Offer a fix or a small save first | Fraud reviews |
If you fulfil within hours, the self-serve window is short on purpose. Tell the customer that in the confirmation email. A surprise "too late" with no stated cutoff feels like a broken button.
Returns are the expensive version of the same mistakes, after the truck. [Fewer returns](/blog/reduce-ecommerce-returns.html) starts with edits that happen first. Reviso also covers returns and exchanges once the parcel has moved, including store credit, but the Black Friday win is the hour after checkout, not the week after delivery.
Turn this on before you turn on ads. A Friday install, with no test order, is how you discover the button on a live complaint.
### FAQ
**Can Shopify customers change their address after Black Friday checkout?**
Not with Shopify alone. Staff can edit the order in the admin. Customers need an order editing app on the order status page or in their account, and the edit has to close before fulfilment. After the label is created, the cheap window is gone.
**What is the most common order change on Black Friday?**
The shipping address. People check out at a gift address, a work address, or an old saved address, then notice an hour later. Variant swaps (size and colour) are next, then quantity, then a forgotten add-on.
**Should I let every customer edit every field during BFCM?**
No. Allow the corrections that are cheap and block the ones that break a rule. Address and variant swaps are the usual yes. Some countries, wholesale tags, or high-risk orders should stay staff-only. Write that down before Friday, not in the inbox on Saturday.
**How do order edits reduce Black Friday cancellations?**
A shopper who can fix the address or the size does not need to cancel and repurchase. When they do start a cancellation, an incentive to keep the order beats a silent refund. The cancel path should be visible, or they will email anyway and you have both systems.
**What if the order has already shipped?**
The edit window should already be closed. A shipped wrong address is a carrier problem or a reship, not a self-serve edit. That is why the cutoff has to be tied to fulfilment, automatically, including orders that go out the same day.
## 8 free gift with purchase ideas for the holiday season
URL: https://ninety9.dev/blog/holiday-free-gift-with-purchase-ideas.html
Published: 2026-10-11 (updated 2026-10-11)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 6 minutes
Eight free gift with purchase ideas for Shopify holiday and Black Friday promos, chosen for perceived value, landed cost and a threshold that still makes money.
A holiday free gift with purchase is a product added when the cart hits a rule: a spend level, a quantity, or a specific item. For Black Friday and the weeks around it, the gift is how you raise [average order value](/blog/how-to-increase-average-order-value-shopify.html) without another sitewide percent. The trap is giving away something people do not want, or something that costs more than the extra margin.
[Goalify](https://apps.shopify.com/goalify?src=ninety9dev) auto-adds the gift when the condition is met, stacks it above free shipping, and can use a different threshold per country. [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) is where we show that progress inside the cart drawer, next to the total. Goalify is free up to 10 orders a month, then $3.99, $7.99 and $11.99, on the [Goalify listing](https://apps.shopify.com/goalify?src=ninety9dev). Addy is free to install from the [Addy listing](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev). How to pick a gift that pays is the [free gift with purchase strategy](/blog/free-gift-with-purchase-strategy.html). These eight are holiday-specific.

Shipping is the first rung, still short of the goal. The gift is the next rung, at a higher number. The gift is not a surprise in the box. It is a goal with an amount remaining, shown before they pay. A gift that only appears in the packing slip gets disputed. A gift that appears as a line when they cross the threshold gets kept.
[Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) is the drawer that can show that progress next to checkout. Goalify owns the rule that adds the gift. If those two disagree, trust the rule and fix the drawer. Two different thresholds is how a shopper earns a gift the warehouse did not reserve.
## 1. The travel size of the hero
A mini of what they just bought. High perceived value, low landed cost, and it does not replace the full size because they already have the full size in the cart. This is the default holiday gift if you make consumables. Set it on a spend level above free shipping.
## 2. A sample of the product they have not tried
The adjacent scent, shade or flavour, in a sample. You are buying a future full-size order with a unit that costs little to pack. Do not gift the full size of a product you are trying to sell at full price in the same season. That is cannibalisation with a ribbon.
## 3. A pouch, sleeve or ornament you do not sell alone
An exclusive that has no product page. Perceived value comes from "you cannot buy this." Landed cost stays low because you printed a run for the promotion. When the run is gone, the offer ends. Do not reorder it in January out of guilt and then have a SKU with no home.
## 4. Gift wrap as the goal
For some catalogues the "gift" is the wrap, the box, or the handwritten card, unlocked at a threshold. It fits holiday intent perfectly. The operational version is [gift wrap as a cart goal](/blog/gift-wrap-as-a-cart-goal.html). Keep it a choice they can see in the drawer. A wrap that appears only in the warehouse, with no line on the order, will be disputed.
## 5. A miniature of the thing that completes the set
The case, the cap, the filter, the spoon. Small, relevant, and useful the day it arrives. This beats a random accessory from a leftover bin. Relevance is why they stretch the cart. Novelty is why they forget.
## 6. A two-step gift, not two gifts at once
Free shipping first. This gift second, at a higher number. Reveal the gift when shipping is earned, so the top prize does not make the first rung look trivial. [Stacked cart goals](/blog/stacked-cart-goals.html) is the sequence. Goalify is built for that stack. Addy shows the active rung in the drawer so the cart does not turn into a terms-and-conditions page. What else belongs in that drawer during the weekend is in [cart drawer upsells for BFCM](/blog/cart-drawer-upsells-bfcm.html).
## 7. A gift tied to a specific product, not the whole site
"Spend $90" is vague on a store with $20 items and $200 items. "Add the serum, get the mini cream" is a rule on a product. Goalify can trigger on cart value, quantity, or specific products. Use the product rule when you know the pair. Use the spend rule when the catalogue is wide and you only need the average to move.

The gift line should look like a product, with a name, and a price of free. "Gift included" with no SKU is how support spends Sunday answering "what am I supposed to receive?" Put the same name on the goal and on the line. If you let them choose between two gifts, the choice is one tap, and both SKUs have a reserve. A choice of six is a form, and forms do not belong in a holiday cart.
## 8. The BOGO that is actually a gift
Buy the hero, get a specific small item. Say the item. "Buy one get one" with the second unit mysterious is how people assume they get a second hero, then write to you when they do not. If you mean a second hero, that is a quantity offer, and it belongs in [quantity breaks](/blog/quantity-breaks-black-friday-cyber-monday.html) or a [bundle](/blog/black-friday-bundle-ideas-shopify.html), priced as a discount, not described as a gift you cannot afford.
| Gift | Landed-cost risk | Stock-out risk | Fits the drawer |
| --- | --- | --- | --- |
| Travel size of the hero | Low | Medium | Yes, one line |
| Sample of something else | Low | Medium | Yes |
| Exclusive pouch | Low if you capped the run | High if you did not | Yes |
| Gift wrap | Low, until it changes the box size | Low | Yes, as a choice |
| Full-size bestseller | High | High | No |
Count the units, subtract what you need for orders already promised, and kill the offer at that line. A Black Friday gift that fails to ship is the review that outlives the weekend.
Country thresholds still apply. A gift that is cheap to add domestically can push an international parcel into a new weight break. Set that market's goal higher, or do not offer the gift there. Goalify can do the country split. The drawer in Addy should not promise a gift the market will not receive.
The threshold under the gift, if shipping is rung one, is calculated in [five steps for a BFCM free shipping threshold](/blog/free-shipping-threshold-bfcm.html).
### FAQ
**What is a good free gift with purchase for Black Friday?**
A sample, a travel size, or a small exclusive of your own product. Shoppers understand it, it does not replace a full-price hero, and the landed cost can sit under the extra profit from the units they added to qualify. A random cheap item from another category usually does not get added on purpose. People ignore the threshold.
**Where should the gift threshold sit relative to free shipping?**
Higher. Free shipping is the first rung, the gift is the next. If both sit at the same number, you paid for two rewards to move one basket. If the gift is lower than shipping, shoppers take the gift and never stretch for shipping.
**Should holiday shoppers choose their gift?**
A choice of two is enough. Three starts to feel like a form. One gift is fine when the item is obviously desirable. More choice also means more SKUs that can stock out on Saturday.
**Can the gift show inside the cart drawer?**
Yes. The rule can live on the goal, and the drawer can show the progress and the gift line. The shopper should see the gift appear when they cross the amount, not discover it in the confirmation email.
**What happens when the gift sells out during BFCM?**
Suppress the offer as soon as you hit the reserve you set aside for orders already promised. A gift that disappears silently, or that you cannot pack, costs more goodwill than the promotion made. Do not advertise a gift you have twelve of, on an ad that will be seen by thousands.
## 9 ways to increase average order value on Black Friday without bigger discounts
URL: https://ninety9.dev/blog/increase-aov-black-friday-without-bigger-discounts.html
Published: 2026-10-11 (updated 2026-10-11)
Category: Average Order Value
Reading time: 7 minutes
Nine ways to increase average order value on Black Friday and Cyber Monday without a deeper sitewide discount, using the cart, the product page and the order after checkout.
Black Friday average order value is revenue divided by orders during the BFCM weekend. The usual way stores try to raise it is a bigger discount. That makes each unit cheaper, so the order value only rises if the shopper adds enough extra units to offset the cut. Often they do not. They buy the same thing, pay less, and your gross profit per order falls while the dashboard AOV looks flat.
There is another way. Keep the campaign discount you already planned, and add one reason to put something else in the basket. These nine are that reason. None of them require a deeper sitewide code. All of them sit on a Shopify store as a theme app extension, so you are not editing `theme.liquid` the week of 27 November.

AOV is a ratio. Revenue over orders. You can raise it by charging more, by putting more units in the order, or by making the discount smaller than the extra product it bought. The third one is the Black Friday version of the first, and it is the one stores get backwards. They deepen the code, AOV stays flat, and gross profit per order falls.
The quantity widget above is the clean version of "more units." One bottle stays at the campaign price. Two and three show a per-unit saving, and the button does not change. The person who wanted a gift can still buy one. The person who can use three does not need a sitewide code to see why.
The order of the funnel matters more than the number of apps. Product page first, where the quantity break or the one bundle lives. Cart second, where shipping and one extra product are visible next to the total. Exit third, and only if they are leaving. The order screen last, after you have already been paid. Stacking all four on the product page is how the button gets pushed below the fold.
The longer map is [how to increase average order value on Shopify](/blog/how-to-increase-average-order-value-shopify.html). This page is the BFCM cut: what to turn on, and what to leave off so the weekend stays readable.
## 1. A quantity break instead of another 10 percent
On a consumable, "2 save a little, 3 save a little more" beats "25% off everything" because the shopper who wanted one still can buy one, and the shopper who can use three sees a reason. Price the tiers from margin, not from the loudest competitor. Worked examples are in [quantity breaks for Black Friday and Cyber Monday](/blog/quantity-breaks-black-friday-cyber-monday.html). [Addly](https://apps.shopify.com/addly?src=ninety9dev) runs the tiers down to a variant, which matters when one size is the one you need to move.

## 2. A free-shipping threshold above the order you already get
Set the bar a little above the median BFCM basket, not at $1 under it. Shoppers who were going to clear it still do. Shoppers just below have one honest gap. The five-step version is [the right free shipping threshold for BFCM](/blog/free-shipping-threshold-bfcm.html). [Goalify](https://apps.shopify.com/goalify?src=ninety9dev) draws the bar, including a different number per country, because a domestic parcel and an overseas parcel are not the same cost.
## 3. One bundle on the hero, not a bundle grid
A single frequently-bought-together set under the button adds a unit without a sitewide cut. Twelve bundles on the page add confusion. Ideas and pricing are in [Black Friday bundle ideas](/blog/black-friday-bundle-ideas-shopify.html). The discount, if you need one, sits on the added item.

## 4. One upsell inside the cart drawer
The cart is where the shopper has already said yes. One complementary product, priced well below the hero, under the line items. Not a column of eight. [Cart drawer upsells that work during BFCM](/blog/cart-drawer-upsells-bfcm.html) lists ten that earn the slot. [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) is the drawer: the upsell, the shipping bar, a delivery date, and a cart that can differ by market.
## 5. A gift at the next rung, not instead of shipping
Free shipping at the first threshold, a [free gift with purchase](/blog/holiday-free-gift-with-purchase-ideas.html) at a higher one. The gift is a sample or a travel size with a low landed cost. It is not 20% off the order, which is just a discount with a bow on it. Goalify can stack the rungs and reveal the next one when the current one is met.
## 6. An exit offer that is a product
When they leave, offer the pair they did not add, or the unit that would have cleared shipping. Do not offer a bigger coupon than the one already on the site. A second code teaches people to bounce. [Exit-intent popup offers for Black Friday](/blog/exit-intent-popups-black-friday.html) keeps the offer to one product. [Monet](https://apps.shopify.com/monet?src=ninety9dev) fires on exit, on add to cart, and at the start of checkout, so you are not using a timer popup on people who are still reading.
## 7. A post-purchase add before the parcel is sealed
The order is already paid. An extra item on the edit screen ships in the same box. That is AOV with no risk to the conversion you just won. [Post-purchase upsell ideas for BFCM](/blog/post-purchase-upsells-bfcm.html) covers the shapes. [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) puts the offer on the same screen where they fix an address or a size, and closes the edit when the order ships.
## 8. A delivery date in the drawer
This does not add a unit by itself. It stops people dropping the extra unit because they cannot tell if the order will arrive before a party or a flight. Addy can show an estimated delivery date next to the total. If the date is unknown, say so. A fake date is a support ticket on 28 November.
## 9. Country thresholds, not one global number
A $75 bar that is easy in one country is a wall in another, and a giveaway in a third. Goalify sets the goal per country. Addy can show a different cart per market. If you sell across borders on Black Friday, one threshold is how international orders either abandon or get free shipping you cannot afford.
Gross profit per order. AOV can rise while profit falls if the only thing that changed is the depth of the code. Write the campaign discount down before Friday. Do not add points to it because a competitor did.
## What the weekend report should actually say
Pull three numbers on Saturday morning, not a dashboard tour. Orders, revenue, and gross profit after the campaign discount and the shipping you absorbed. AOV is revenue divided by orders. If AOV is up and gross profit per order is down, the code got deeper or the free-shipping bar was a giveaway. If units per order are up and the discount rate is flat, the extra product is doing the job.
Do not add a fourth offer because Friday felt slow. Slow is often the page, the stock, or the ad, and another widget will not fix those. The [CRO Audit for Shopify stores](/cro-audit/) on the hero URL is the check for the page.
## What we would turn on first
If you can only ship three: a quantity break or one bundle on the hero with [Addly](https://apps.shopify.com/addly?src=ninety9dev), a free-shipping bar with [Goalify](https://apps.shopify.com/goalify?src=ninety9dev), and a drawer with one upsell in [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev). Add [Monet](https://apps.shopify.com/monet?src=ninety9dev) if exit traffic is large. Add [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) before the weekend so address mistakes do not become cancellations that erase the AOV you just gained.
Then run the [CRO Audit for Shopify stores](/cro-audit/) on the hero product. If the add-to-cart button is buried, none of the nine will be seen. The pre-weekend list is [15 things to fix before 27 November](/blog/shopify-store-fixes-before-black-friday.html).
### FAQ
**How do you increase average order value on Black Friday without discounting more?**
Add a unit, a pair, or a threshold the shopper can still reach, instead of cutting the price of what they already meant to buy. Quantity breaks, a free-shipping bar set above the current average, one cart upsell, and a gift at a higher rung all do this. A bigger sitewide percent does the opposite. It makes the same basket cheaper.
**What is a realistic AOV lift for BFCM?**
On a store that has none of these offers live, one well-placed threshold or quantity break often adds a few dollars to the average within the weekend, because a slice of shoppers take the extra unit. Do not plan the ad budget on a 30% AOV jump. Plan it on gross profit per order staying flat or better while the average rises a little.
**Will these offers slow checkout on the busiest day?**
They will if they add steps. A theme app extension that loads with the theme, one offer per moment, and a checkout button that stays visible will not. Stacking five popups on the product page will. Test the hero URL on a phone before 27 November.
**Should the Black Friday discount and the AOV offer stack?**
Decide on purpose. A quantity break on top of a 20% code can erase the margin on the extra units. Many stores let the campaign code apply to the hero and keep the add-on or the bundle at its own smaller deal. Model the deepest stack before you turn both on.
**Which offer should a small Shopify store ship first?**
The one that matches the leak. Single-unit product pages need a quantity break or a bundle. Carts that stall just under a shipping cost need a free-shipping bar. Shoppers who leave at the exit need one product offer, not a coupon. The [CRO Audit for Shopify stores](/cro-audit/) will show which of those is missing.
## Addly vs Easy Bundles Quantity Breaks
URL: https://ninety9.dev/blog/addly-vs-easy-bundles.html
Published: 2026-10-10 (updated 2026-10-24)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
Easy Bundles Quantity Breaks is a tiered-offer app. Addly runs quantity breaks per variant, plus mix and match, sets from real orders, and a free plan with paid Unlimited and Advanced priced by Shopify plan.
[Easy Bundles Quantity Breaks](https://apps.shopify.com/cartmax) is aimed at the merchant who wants a quantity offer without a complicated builder. The tier should be obvious to the shopper and obvious to set up. [Addly](https://apps.shopify.com/addly?src=ninety9dev) is built for that same clarity, and it keeps the rest of the offer stack in the same app so the simple tier can grow up without a second tool.
Easy is a quality of the setup. It is also a quality of the shopper's decision. Three tiers with plain prices beat a builder the shopper has to learn. The setup stops feeling easy when a second offer type arrives in a second app, with a second way of writing the discount. The product page looks simple and the admin does not.
## Three prices, then the catalogue around them
Easy Bundles Quantity Breaks concentrates on the tier. Buy more units, see the saving, add them. That is the right default for consumables, socks, supplements and anything people already understand as a multi-buy.
Addly keeps that tier plain, and makes the plain version the one you can check before it is public.
Quantity breaks with a clear ladder, including a ladder per variant. Volume discounts on that same ladder. Product bundles and frequently bought together when a tier is the wrong shape. Mix and match and build-a-box. Add-ons. Suggestions from purchase history for the sets. Live preview. Thirteen languages, Shopify Markets, analytics. Shopify's own discounts.
Free includes those offer types — up to three Basic offers. Unlimited adds Markets. Advanced adds AI recommendations. Paid prices follow your Shopify plan, from $15 / $20/mo. The break can show again in [Addy](/apps/addy.html). Addly is Built for Shopify, rated 4.9 from 111 reviews.
Per-variant ladders sound less simple until you try to explain one ladder that over-discounts a premium size. Two short tables are easier to stand behind than one wrong one. The shopper still sees units and a price. They do not see your internal name for the promotion.
## Addly and Easy Bundles
| Feature | Addly | Easy Bundles |
| --- | --- | --- |
| Price | Free plan, then from $15/mo by Shopify plan | $6 a month. No free plan |
| Volume price | A different break per variant | Quantity breaks |
| How pairs are chosen | From your order history | Frequently bought together upsells |
| Languages | 13, plus Shopify Markets | Not included |
| Before it goes live | Live preview on your theme | Styles and colour swatches |
| Which offer to keep | Click-through, conversion and revenue per offer | Not included |
| In the cart | The same offer can show again in Addy | The product-page bundle |
## Keep the page as plain as the offer
Use Addly when you want the quantity break to feel easy on the page and complete in the admin. Start with three tiers and a preselected middle option. Add a bundle only on products that have a real companion.
[Quantity breaks vs volume discounts](/blog/quantity-breaks-vs-volume-discounts.html) will keep the wording honest. Shoppers should see units and price.
### FAQ
**Is Addly an Easy Bundles alternative?**
Yes. Addly publishes quantity breaks and product bundles, including mix and match and frequently bought together. Free includes those offer types — up to three Basic offers. Unlimited and Advanced add more offers, Markets and AI.
**Can two variants have different break prices?**
Yes. Volume discounts in Addly can be set per variant.
**What is the cheapest plan with quantity breaks?**
The Free plan. Quantity breaks are included, with up to three Basic offers. Paid Unlimited and Advanced follow your Shopify plan, from $15 / $20/mo.
## Addly vs Fast Bundle: Product Bundles on One Plan
URL: https://ninety9.dev/blog/addly-vs-fast-bundle.html
Published: 2026-10-10 (updated 2026-10-24)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
Fast Bundle focuses on getting a product bundle live. Addly keeps that pace and adds variant quantity breaks, mix and match, offers from orders, and paid plans priced by Shopify plan.
[Fast Bundle](https://apps.shopify.com/fast-bundle-product-bundles) is named for pace. A product bundle should take minutes. [Addly](https://apps.shopify.com/addly?src=ninety9dev) agrees with the minutes. Pace is a property of the editor and the preview. It is also a property of not splitting the quantity break onto another invoice the month you need it.
Most bundle projects die in configuration. A clear price, a short setup, and a preview you can trust will outrun a workshop. The bill is the part to read twice. Addly prices paid plans by your Shopify plan, not by monthly orders. Free lets you publish up to three Basic offers before you pay.
## Minutes, then the next product
Fast Bundle targets merchants who have decided on a bundle and want it on the page. Product bundles, a clear price, a short setup. That promise is right.
Addly's version of the same afternoon:
Product bundles and frequently bought together. Quantity breaks and volume discounts at variant level, ready when the sealed set is the wrong shape. Mix and match and build-a-box. Add-ons. Suggestions from purchase history. Live preview and offer analytics. Thirteen languages and Shopify Markets. Shopify's own discounts.
Free includes those offer types — up to three Basic offers. Unlimited and Advanced are from $15 / $20/mo, priced by Shopify plan. If you only publish one fixed bundle, you have not paid extra for the features you did not use. They are there for the next product. The offer can also sit in the [Addy](/apps/addy.html) drawer. Addly is rated 4.9 from 111 reviews and is Built for Shopify.
## Addly and Fast Bundle
| Feature | Addly | Fast Bundle |
| --- | --- | --- |
| Plans | Free, then Unlimited and Advanced from $15 / $20/mo by Shopify plan | Free on development stores. Then $19, $49 and $139, named for 1K, 3K and 10K |
| Suggestions | From your own orders on Advanced | AI frequently bought together starts at $19 |
| Volume price | A different break per variant | Volume discount upsell |
| Shopper-built sets | Nested conditions inside mix and match | Mix and match |
| Languages | 13 | Support in English |
| Before it goes live | Live preview on your theme | Not included |
| Which offer to keep | Click-through, conversion and revenue per offer | Not included |
## One sitting, one bundle, the rest waiting
Use Addly when you want to publish a set in one sitting and you want the quantity break available without changing what the app can do. Put a single bundle on the hero product this week. The rest of the catalogue can wait.
The shapes are documented in [Shopify product bundles](/blog/shopify-product-bundles-guide.html). Publish the one you can explain in a sentence. "Three for the price of two" is a sentence. A page of optional rules is a workshop.
### FAQ
**Is Addly straightforward to publish?**
You can publish one bundle and stop. Live preview shows it first. Quantity breaks, mix and match and offers from orders are on Free — up to three Basic offers. Unlimited adds unlimited offers.
**How is Addly priced?**
Free forever with up to three basic offers. Unlimited and Advanced follow your Shopify plan: $15 / $20 on Basic, $20 / $35/mo on Grow & Advanced, $39 / $50/mo on Plus.
**Are the discounts real Shopify discounts?**
Yes. Addly uses Shopify's own discount system.
## Addly vs Frequently Bought Together by Code Black Belt
URL: https://ninety9.dev/blog/addly-vs-frequently-bought-together.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
Compare Addly with Frequently Bought Together from Code Black Belt. Sets from real orders, quantity breaks, mix and match, and every offer on every plan.
[Frequently Bought Together](https://apps.shopify.com/frequently-bought-together) from Code Black Belt does one job cleanly. It puts a set on the product page: this item, plus the items shoppers already buy with it. [Addly](https://apps.shopify.com/addly?src=ninety9dev) treats that set as one offer inside a broader bundle app, because the pair is usually the start of the merchandising, not the end.
A camera and a case. A serum and a moisturiser. The page should show the pair, show one decision, and add both in one click. That widget converts when the pair is true. It stalls when the next request is "now let them buy three of the serum" and the discount has to move to a second app.
## Pairs are a merchandising decision
The bought-together widget works when the catalogue has natural companions. You are not inventing a bundle. You are showing a habit the orders already contain. Code Black Belt's app is aimed at that pair.
Addly can start the same way. The AI reads purchase history, so the suggestion comes from orders in this store. On a new shop, with little history, you pick the set yourself. Manual sets stay first-class. The history becomes useful after orders exist, which is the sequence a store actually lives.
A pair and a quantity break on the same product should share one discount. Two systems on one page is how the price in the widget and the price in the cart drift apart. Addly runs the pair, the quantity break, the mix-and-match box and the add-on through Shopify's own discounts.
## Variant prices, kits, and the small yes
A 30ml and a 100ml often need different volume prices. Addly can set the break on the variant, so the expensive size is not dragged down by the travel size's table. Mix and match and build-a-box are there when the shopper should choose the contents. Add-ons cover the optional extra that should not force a new bundle.
Live preview shows the widget on your theme. Thirteen languages carry it into another country. Offer analytics show which set earns its place. Free includes those tools — up to three Basic offers. Unlimited adds Markets. Paid prices follow your Shopify plan, from $15 / $20/mo.
The set can also show in the [Addy](/apps/addy.html) drawer, so the product page and the cart agree. Addly is rated 4.9 from 111 reviews and is Built for Shopify.
## Addly and Frequently Bought Together
| Feature | Addly | Frequently Bought Together |
| --- | --- | --- |
| Free plan | Up to 3 basic offers | 3 manual bundles, basic styling, basic support |
| Pairs | From your orders, or chosen by you, on every plan | Automatic recommendations start at $14.99 |
| Same product, more units | Quantity breaks, including one variant | Not included |
| Shopper-built sets | Mix and match and build-a-box | Not included |
| Small extras | Warranty, gift wrap, shipping protection | Not included |
| Languages | 13, on every plan | Translations start at $14.99 |
| Where it shows | Product page, and again in the Addy cart | Product and cart widgets start at $14.99 |
| Reading the winner | Click-through, conversion and revenue per offer | Analytics start at $14.99 |
## When the pair is the start
Choose Addly when "bought together" is the first offer and you expect a quantity break or a box on the same catalogue. If the only thing you will ever publish is one static pair, a dedicated widget matches that brief. The moment the same product needs a second offer shape, one app should own both discounts.
See [frequently bought together on Shopify](/blog/frequently-bought-together-shopify.html) for how to pick the set, and the [bundles guide](/blog/shopify-product-bundles-guide.html) for the other shapes.
### FAQ
**Does Addly replace a frequently bought together app?**
Yes. Addly can show products that are bought together, and it can also run quantity breaks, mix and match and add-ons from the same app.
**Where do the recommendations come from?**
Addly can read purchase history, so the set is based on orders placed in the store. You can also choose the products yourself.
**Does a small store get the set?**
Free includes frequently bought together — up to three Basic offers. Unlimited adds unlimited offers. Advanced adds AI recommendations. Paid prices follow your Shopify plan, from $15 / $20/mo.
## Addly vs Kaching Bundles: Shopify Bundles Compared
URL: https://ninety9.dev/blog/addly-vs-kaching-bundles.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
Kaching Bundles and Addly both sell quantity breaks and bundles on Shopify. Compare offers from real orders, variant pricing, mix and match, and Addly plans priced by Shopify plan.
[Kaching Bundles](https://apps.shopify.com/bundle-deals) taught a lot of Shopify stores the quantity-break widget. Buy two, save more. Buy three, save more again. The choice is obvious, and obvious choices convert. [Addly](https://apps.shopify.com/addly?src=ninety9dev) is built for that same moment on the product page, and for the offers a single tier table does not cover.
A quantity break is one offer. A real catalogue usually needs four: the break, the set people already buy together, the box they build themselves, and the small add-on under the button. Addly keeps those in one app. The free plan includes them.
## The tier is the easy offer. It is rarely the only one.
Kaching is a deal widget. The shopper sees the step from one unit to several, and the price updates. That is the right default for socks, supplements, refills and anything people already understand as a multi-buy.
The week after a tier is live, merchants ask for the rest. Can this shade have its own price? Can the shopper build a kit? Can we show the moisturiser that actually gets bought with the serum? Addly is set up for those questions on day one.
Quantity breaks and volume discounts can sit on a single variant. A premium size and a travel size do not have to share a table that over-discounts one of them. Frequently bought together can use real purchase history, so the pair comes from orders, or you can pick it yourself. Mix and match and build-a-box cover the kit the shopper assembles. Add-ons cover the small yes: gift wrap, a refill, a case.
You preview the widget on the real theme before it is public. The wrong preselected tier teaches people to buy one. You want to see that before they do.
## A bill that does not cap extra revenue
Addly's paid prices follow the shop’s Shopify plan, not monthly orders. Free includes up to three Basic offers. Unlimited and Advanced are from $15 / $20/mo. Unlimited adds Markets. Advanced adds AI recommendations. Growing the store does not take the widget away.
Offers go through Shopify's own discounts, so the price on the page and the price at checkout are the same discount. Thirteen languages and Shopify Markets keep the offer readable when you leave the home country. Analytics tell you which offer to keep. The same offer can show again in the [Addy](/apps/addy.html) cart drawer, so the product page and the cart tell one story.
Addly is rated 4.9 from 111 reviews and carries the Built for Shopify badge.
## Addly and Kaching Bundles
| Feature | Addly | Kaching Bundles |
| --- | --- | --- |
| What the plans include | Bundles, quantity breaks, mix and match and add-ons from Free; AI offers on Advanced. No revenue cap | Starter is $14.99 and caps extra revenue at $1,000. Scale caps it at $5,000. Pro is $59.99 and caps it at $10,000 |
| Volume price | A different break for a single variant | Volume discount on products or collections |
| Shopper-built sets | Mix and match and build-a-box, with conditions inside conditions | Bundle deals you configure |
| How pairs are chosen | From your real orders, or by you | Bundles, gifts and upsells you set up |
| Add-ons | Warranty, gift wrap or shipping protection, one click | Free gifts and custom upsells |
| Languages | 13, plus Shopify Markets | 9 languages |
| Before it goes live | Live preview on your theme | Colours and styling |
| In the cart | The same offer can show again in the Addy drawer | The product-page deal |
## How to run the page
Put the tier on the SKU people already buy in multiples. Put the pair on the SKU that has a real companion in your orders. Leave the box for products where choice is the point. Two shapes on a template is plenty. Six shapes is a page with no offer.
The definitions are in the [Shopify product bundles guide](/blog/shopify-product-bundles-guide.html) and in [quantity breaks vs volume discounts](/blog/quantity-breaks-vs-volume-discounts.html).
### FAQ
**Is Addly a Kaching Bundles alternative?**
Yes. Addly covers quantity breaks, bundles, mix and match, add-ons and frequently bought together, with suggestions from purchase history on Advanced.
**Do cheaper Addly plans lose offers?**
Free includes up to three Basic offers. Unlimited adds unlimited offers, custom design and Markets. Advanced adds AI, bundle discounts and targeting. Paid prices follow your Shopify plan, from $15 / $20/mo.
**Can two variants have different quantity prices?**
Yes. Addly can price a volume break on the variant, so a 30ml and a 100ml do not have to share one table.
## Addly vs MBC Bundles: Product Bundles on Shopify
URL: https://ninety9.dev/blog/addly-vs-mbc-bundles.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
MBC Bundles groups products into Shopify bundles. Addly adds quantity breaks, mix and match, offers from real orders, and paid plans priced by Shopify plan.
[MBC Bundles](https://apps.shopify.com/bundle-products-mbc) is a product-bundle app. You group SKUs, you price the group, you put it on the store. [Addly](https://apps.shopify.com/addly?src=ninety9dev) still does that group. It also answers the two requests that show up the week after a bundle app goes live: can they build their own, and can three of the same one cost less.
A fixed kit is a merchandising decision. A starter set, a gift box, a device plus the thing it needs. It should not require a second app the moment the decision changes.
## Kits rot when the only edit is a new fixed group
MBC sits in the "bundle these products" category. The merchant knows the kit. The app's job is to sell that kit as one decision. That is a strong job when the kit is truly fixed.
Kits change. A summer kit and a winter kit are two bundles. A shopper who wants the kit without one item needs mix and match. A shopper who wants three of the hero needs a quantity break. One catalogue often has all three, sometimes on the same collection.
Addly keeps the fixed group and the variations.
Product bundles and frequently bought together. Groups drawn from purchase history, plus bundles you specify. On a two-week-old store, history is a poor guide, so you pick the kit. The suggestions become useful after orders exist. Mix and match and build-a-box when the kit should be flexible. Quantity breaks and volume discounts, including per variant. Add-ons for the optional extra that should not force a new bundle.
Live preview, analytics, 13 languages. Shopify's own discounts. Free includes the offer types — up to three Basic offers. Unlimited adds Markets. Advanced adds AI. Paid prices follow your Shopify plan, from $15 / $20/mo. In-cart presentation with [Addy](/apps/addy.html). Rated 4.9 from 111 reviews, Built for Shopify.
## Addly and MBC Bundles
| Feature | Addly | MBC Bundles |
| --- | --- | --- |
| Top price | $50/mo on Plus Advanced | $159.99 on the top plan |
| Small stores | Free plan with up to three Basic offers | Development stores, then $15.99 and $59.99 before the top plan |
| Volume price | A different break per variant | Quantity breaks and volume discount |
| How pairs are chosen | From your order history | Not included |
| Shopper-built sets | Mix and match with nested conditions, on every plan | Mix and match and a bundle builder |
| Languages | 13 out of the box | Shopify Markets |
| Before it goes live | Live preview on your theme | Not included |
| Which offer to keep | Click-through, conversion and revenue per offer | Not included |
## Install for the kit you have, and the kit you will have
Use Addly when the bundle is a kit today and might be a ladder or a box next quarter. MBC's idea, a clear group of products, is the right starting offer. Addly is the home for it when you expect the offer to change shape.
[Frequently bought together](/blog/frequently-bought-together-shopify.html) is the tight version of a kit. The [bundles guide](/blog/shopify-product-bundles-guide.html) covers the looser ones.
### FAQ
**Can Addly create a product bundle like MBC?**
Yes. Addly builds product bundles and frequently bought together sets, using your choices or purchase history.
**What if shoppers should build the bundle themselves?**
Use mix and match or build-a-box. They choose the contents on the product page, and the discount is a Shopify discount.
**Does Addly work with almost no orders yet?**
Yes. Free includes bundles — up to three Basic offers. Unlimited adds unlimited offers. With little history, you pick the bundle until there are orders to read on Advanced.
## Addly vs P: Quantity Breaks & Bundles
URL: https://ninety9.dev/blog/addly-vs-pareto-quantity-breaks.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
P: Quantity Breaks & Bundles focuses on tiered pricing. Addly adds sets from real orders, mix and match, variant-level breaks, and plans that keep every feature.
[P: Quantity Breaks & Bundles](https://apps.shopify.com/quantity-price-breaks-limit-purchase) is a pricing app. The product page grows a ladder, and each rung is a better unit price. [Addly](https://apps.shopify.com/addly?src=ninety9dev) includes that ladder and the other offers a product page uses once the ladder is not the only story.
Tier tables fail in a specific, expensive way. They assume every variant shares one price logic. A 50ml and a 200ml, or a standard size and a plus size, often need two ladders. One shared table over-discounts the expensive SKU or under-discounts the cheap one. Either way the margin is wrong, and the shopper can feel it.
## A ladder is a good default. It is a bad universal rule.
Pareto's app is for merchants who think in breaks. Buy 1, buy 2, buy 4. The widget makes the break obvious, which is why the category converts. Bundles sit next to the breaks so a set can have a deal too.
Addly keeps the ladder and lets it differ by variant. Publish one table on the SKU that has one price. Publish two short tables when the sizes should not share a discount. Two honest tables are easier to defend than one clever table that is wrong on the premium size.
The page can also sell a pair. Frequently bought together can come from purchase history or from products you choose. A store that only has ladders never shows the companion someone would have added if they had seen it. Mix and match and build-a-box cover the set the shopper assembles. Add-ons cover the small item that belongs in the order without becoming its own bundle.
## The plan should not hide the ladder
Free includes quantity breaks and bundles — up to three Basic offers. Unlimited and Advanced are from $15 / $20/mo, priced by Shopify plan. You preview the widget before it is public, in 13 languages. Unlimited adds Markets. Analytics sit on the offer. The discount is Shopify's own, so the cart does not reconcile two apps.
The break can show again in the [Addy](/apps/addy.html) drawer. Addly is rated 4.9 from 111 reviews and is Built for Shopify.
## Addly and Pareto
| Feature | Addly | P: Quantity Breaks & Bundles |
| --- | --- | --- |
| Free plan | Up to 3 basic offers, no revenue cap | 1 active offer, and extra revenue capped at $300 |
| Volume price | A different ladder per variant, on every plan | Volume discounts on the offer |
| Shopper-built sets | Mix and match on every plan, including free | Multi-product bundles on the $59.99 plan |
| Add-ons | On every plan | Bundles and add-ons on the $29.99 plan |
| How pairs are chosen | From your order history | Not included |
| Languages | 13 out of the box | Auto-translate on the $59.99 plan |
| Revenue cap | None. Plans change with orders, not with a revenue ceiling | $300, then $2,000, $5,000 and $10,000 |
| Before it goes live | Live preview on your theme | A basic in-app layout on the free plan |
## Set the table you can explain
Use Addly when the break is real and the catalogue is more than one SKU. Start with three tiers and a preselected middle option. Add a pair only where orders say two products belong together.
Read [quantity breaks vs volume discounts](/blog/quantity-breaks-vs-volume-discounts.html) before you copy one table onto a whole collection.
### FAQ
**Can Addly show a quantity-break table?**
Yes. Addly supports quantity breaks and volume discounts, including a different discount for each variant.
**What else can sit on the product page?**
Frequently bought together, mix and match, build-a-box and add-ons, plus offers based on past orders.
**Are features locked on the free plan?**
Free includes up to three Basic offers. Unlimited adds Markets. Advanced adds AI. Paid prices follow your Shopify plan, from $15 / $20/mo.
## Addly vs Pumper Bundles: Quantity Breaks on Shopify
URL: https://ninety9.dev/blog/addly-vs-pumper-bundles.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
Pumper sells quantity breaks and product bundles. Addly matches that job with variant prices, offers from real orders, mix and match, and paid plans priced by Shopify plan.
[Pumper](https://apps.shopify.com/pumper-quantity-breaks-product-bundles-discounts) is a quantity-break app with bundles attached. The promise is speed: get a tiered offer onto the product page and let the unit price do the selling. [Addly](https://apps.shopify.com/addly?src=ninety9dev) is in that race, with room for the next offer once the tier is live.
A widget you can publish this afternoon beats a perfect offer that is still a draft in May. The next question is whether that widget is the only one the product will need. A hero with one price can live on a single table. A hero with variants, or a hero people buy with something else, needs more than the table.
## Publish the break, then keep the set in the same place
Pumper concentrates on breaks and product bundles. Merchants who want a visible "buy more, save more" block are the audience. The widget is the conversion tool.
Addly gives you that block and the pieces that usually arrive as a second install.
A different volume price per variant, so sizes and shades stay honest. Product bundles and frequently bought together, including sets drawn from purchase history. Mix and match and build-a-box when the shopper should assemble the offer. Add-ons for the small item under the main product. Live preview, so you see which tier is preselected before the theme does. Thirteen languages, Shopify Markets, and analytics on the offers you publish.
The discount is Shopify's own. Free includes those offer types — up to three Basic offers. Unlimited and Advanced are from $15 / $20/mo, priced by Shopify plan. The offer can show again in the [Addy](/apps/addy.html) drawer. Addly is rated 4.9 from 111 reviews and is Built for Shopify.
Live preview matters on a tier widget because the wrong default teaches the shopper to buy one. Look at the preselected option before you publish. If the middle tier is the one your margin wants, make it the one their eye hits first.
## Addly and Pumper
| Feature | Addly | Pumper |
| --- | --- | --- |
| Free plan | Up to 3 basic offers, no revenue cap | Free until $300 of extra revenue, then $9.99, $29.99 and $49.99 |
| Volume price | A different break per variant | Quantity breaks |
| How pairs are chosen | From your order history, or by you | Bundles you build |
| Shopper-built sets | Mix and match, with conditions inside conditions | A bundle builder |
| Add-ons | Warranty, gift wrap, shipping protection | Not included |
| Languages | 13, plus Shopify Markets | Not included |
| Before it goes live | Live preview on your theme | Not included |
| Which offer to keep | Click-through, conversion and revenue per offer | Not included |
## Start with the sentence you can say out loud
"Three for a better unit price" is a sentence. Publish that on the SKUs people already replenish. Add the companion product when orders say two SKUs belong together. Addly holds both, so the second offer does not become a second discount system.
The merchandising notes are in the [bundles guide](/blog/shopify-product-bundles-guide.html). A drawer cannot rescue a tier table nobody understands. Get the page right first.
### FAQ
**Is Addly an alternative to Pumper?**
Yes, for quantity breaks and product bundles. Addly also runs frequently bought together, mix and match and add-ons, with suggestions from purchase history.
**How does Addly pricing work?**
Free forever with up to three basic offers. Unlimited and Advanced follow your Shopify plan, from $15 / $20/mo.
**Can the offer show in the cart?**
Yes. Addly offers can be presented again in the Addy cart drawer.
## Addly vs Rapid Bundles: Fast Shopify Bundle Setup
URL: https://ninety9.dev/blog/addly-vs-rapid-bundles.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
Rapid Bundles & Upsell gets a bundle widget onto Shopify quickly. Addly pairs that pace with offers from real orders, variant quantity breaks, mix and match, and a free full plan.
[Rapid Bundles](https://apps.shopify.com/rapi) is sold as speed. The bundle or upsell should be on the product page before the afternoon disappears. [Addly](https://apps.shopify.com/addly?src=ninety9dev) treats speed as a preview and a suggestion. A fast empty widget is still an empty widget. A fast draft that reflects what people buy is something you can publish.
Any offer is better than a lone add-to-cart button. The second week is the real test. If the draft was generic, and every variant shares a discount it should not share, you will rebuild it. Speed you have to redo is a delay with extra steps.
## Day one should include seeing the offer
Rapid-style apps win the install when the store has no offer at all. The merchant wants a bundle, an upsell, or a break, and they want it today. Addly's version of today includes two things you can look at.
Suggestions from purchase history, so the first set is tied to orders in this store. On a brand-new shop you still choose the products yourself. And a live preview, so day one includes seeing the widget in place, including which option is preselected.
Behind that draft the full set is already there. Frequently bought together and product bundles. Quantity breaks and volume discounts per variant. Mix and match and build-a-box. Add-ons. Thirteen languages, offer analytics. Shopify's own discounts. Free includes those offer types — up to three Basic offers. Unlimited adds Markets. Advanced adds AI. Paid prices follow your Shopify plan, from $15 / $20/mo.
A second surface is the [Addy](/apps/addy.html) drawer, if the product page should not be the only place the offer appears. Addly is rated 4.9 from 111 reviews and is Built for Shopify.
## Addly and Rapid Bundles
| Feature | Addly | Rapid Bundles |
| --- | --- | --- |
| Revenue cap | None. Paid prices follow your Shopify plan, from $15 / $20/mo | Forever free stops at $100 a month from the app. Then $1,000 and $10,000 caps, until Elite at $59 |
| Volume price | A different break per variant, on every plan | Volume discounts start at $15 |
| How pairs are chosen | From your order history | Not included |
| Add-ons | Warranty, gift wrap and shipping protection, on every plan | Free gifts and upsells start at $15 |
| Languages | 13, plus Shopify Markets | Not included |
| Before it goes live | Live preview on your theme | Not included |
| Which offer to keep | Click-through, conversion and revenue per offer | Not included |
## Publish the right type quickly
Choose Addly if you want the widget today and you also want the variant break and the bought-together set in the same place next month. The wrong type, published quickly, is still the wrong type.
Start from the [bundles guide](/blog/shopify-product-bundles-guide.html) if you are choosing the offer while the app installs. One sentence should describe it. If you need a paragraph, it is not ready for the product page.
### FAQ
**Can I launch a bundle quickly with Addly?**
Yes. Live preview and suggestions from purchase history mean the first offer does not have to be built from a blank widget.
**Does Addly only do bundles?**
It also does quantity breaks, volume discounts, frequently bought together, add-ons and build-a-box.
**What does the Built for Shopify badge mean here?**
Addly is Built for Shopify and rated 4.9 from 111 reviews. The badge is Shopify's bar for performance, design and the merchant experience.
## Addly vs Shopify Bundles: Fixed Bundles and Everything Around Them
URL: https://ninety9.dev/blog/addly-vs-shopify-bundles.html
Published: 2026-10-10 (updated 2026-10-24)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
Shopify Bundles builds fixed bundles and multipacks. Addly adds quantity breaks, mix and match, offers from real orders, and a free plan with paid Unlimited and Advanced priced by Shopify plan.
[Shopify Bundles](https://apps.shopify.com/shopify-bundles) is the first-party answer for a simple pack. You group products into a fixed bundle or a multipack, and Shopify sells that group. [Addly](https://apps.shopify.com/addly?src=ninety9dev) still makes sets. It is for stores whose product page has to do more than one pack at a fixed price.
A sealed gift set that never changes fits a fixed bundle. A three-pack of the same soap can too. The page outgrows that the first time a shopper should choose the contents, or buy three of the same SKU for less, or see the product people actually purchase alongside it.
## Fixed packs are a decision. They are one decision.
Shopify Bundles is deliberately narrow. Fixed bundles and multipacks. There is no quantity ladder, no mix-and-match builder, no add-on under the buy button. The app is free, and it lives in the admin merchants already trust. Use that narrowness on purpose, for the kit that should stay sealed.
Addly can still sell a fixed set. It can also sell the shapes that show up the week the sealed kit is not enough.
- Frequently bought together, from purchase history or from a set you choose.
- Quantity breaks and volume discounts, with a separate ladder per variant.
- Mix and match and build-a-box, so the shopper picks the contents.
- Add-ons for the optional extra.
- Live preview, 13 languages, Shopify Markets, and offer analytics.
- A free plan with up to three basic offers, then Unlimited and Advanced from $15 / $20/mo, priced by Shopify plan. Unlimited adds Markets. Advanced adds AI recommendations and bundle discounts.
The discount is Shopify's own. Checkout does not have to translate a private price into a real one. If the set should appear again after add to cart, [Addy](/apps/addy.html) can present it in the drawer.
A fixed multipack can remain the hero. Addly does not force a ladder onto a product that should stay a sealed set. The ladder is there for the SKU that should have one. Addly is rated 4.9 from 111 reviews and is Built for Shopify.
## Addly and Shopify Bundles
| Feature | Addly | Shopify Bundles |
| --- | --- | --- |
| Fixed sets | Yes, as a bundle | Fixed bundles and multipacks |
| Shopper-chosen contents | Mix and match and build-a-box | Not included |
| More units of one product | Quantity breaks, including a single variant | A multipack you defined |
| What to pair it with | Real orders, or your own pick | The products you grouped |
| Add-ons | Warranty, gift wrap, shipping protection | Not included |
| Before it goes live | Live preview on your theme | Created in the admin |
| In the cart | Can show again in the Addy drawer | The bundle product |
## When to move
Stay with a fixed pack when every offer you will ever run is a sealed set. Move to Addly when the catalogue needs a pack and a quantity break and a box, and you want one discount for all three.
The definitions are in [Shopify product bundles](/blog/shopify-product-bundles-guide.html). If you are unsure whether a ladder or a sealed pack fits a SKU, [quantity breaks vs volume discounts](/blog/quantity-breaks-vs-volume-discounts.html) splits them.
### FAQ
**Should I replace Shopify Bundles with Addly?**
Move when you need more than a fixed bundle or multipack. Addly still creates sets, and it also runs quantity breaks, mix and match, add-ons and offers from purchase history.
**Does Addly use Shopify discounts?**
Yes. Offers go through Shopify's own discount system, so the bundle price is a real Shopify discount at checkout.
**Is Addly free?**
Addly has a free plan with up to three basic offers. Paid Unlimited and Advanced follow your Shopify plan, from $15 / $20/mo.
## Addly vs Wide Bundles for Shopify Quantity Offers
URL: https://ninety9.dev/blog/addly-vs-wide-bundles.html
Published: 2026-10-10 (updated 2026-10-24)
Category: Bundles & Upsells · App: Addly: AI Bundles app & Upsell
Reading time: 3 minutes
Wide Bundles builds quantity breaks and bundles. Addly covers those offers with prices per variant, suggestions from real orders, mix and match, and paid plans priced by Shopify plan.
[Wide Bundles](https://apps.shopify.com/widebundle) aims at stores that want every bundle shape in one install: breaks, sets, deals on the product page. The name is the strategy. [Addly](https://apps.shopify.com/addly?src=ninety9dev) is a wide offer app too, with a rule that matters more than the widget count. Paid prices follow the shop’s Shopify plan, not a thinner product.
A wide app can still be a pile of widgets. The useful version is a short list of offers that share one discount and one preview. Shoppers can read two offers. They will not read six.
## Coverage is the goal. A shared discount is what makes coverage work.
Wide Bundles competes on range. Merchants install it so they do not have to pick between a quantity break and a classic bundle. That is the right goal. A store that sells kits and also sells "stock up and save" will not stay on a single-purpose app.
Addly's range is the same commercial list, kept on one Shopify discount:
Frequently bought together and standard product bundles. Quantity breaks and volume discounts per variant. Mix and match, build-a-box, and add-ons. Suggestions from purchase history when you would rather start from orders than from a spreadsheet. One live preview for the widget you are about to publish. Thirteen languages and Shopify Markets, so the offer is not a screenshot of the home country. Analytics, so a wide menu does not become a permanent experiment.
Free includes those offer types — up to three Basic offers. Unlimited and Advanced are from $15 / $20/mo, priced by Shopify plan. The same offer can reappear in [Addy](/apps/addy.html). Addly is rated 4.9 from 111 reviews and is Built for Shopify.
International is where wide widgets get sloppy. A tier written in one currency, shown to a shopper in another, feels like a mistake even when the maths is right. Markets and translations are how the offer travels with the customer.
## Addly and Wide Bundles
| Feature | Addly | Wide Bundles |
| --- | --- | --- |
| Price | Free plan, then from $15/mo by Shopify plan | Free on development stores, then $14.99, $19.99 and $24.99 |
| Volume price | A different break per variant | Quantity breaks or bundles on the product |
| How pairs are chosen | From your order history | Not included |
| Shopper-built sets | Mix and match and build-a-box | Bundles |
| Add-ons | Warranty, gift wrap, shipping protection | Not included |
| Languages | 13, plus Shopify Markets | Not included |
| Before it goes live | Live preview on your theme | Widget styling |
| Which offer to keep | Click-through, conversion and revenue per offer | Not included |
## Turn on two shapes, not the whole menu
Pick Addly when you want the wide set and a free plan you can try before you pay. Use a quantity break on replenishment products and a bundle on products with a real companion. Leave the rest off until those two are earning.
How the shapes differ is the subject of [Shopify product bundles](/blog/shopify-product-bundles-guide.html). A product page with every widget is a page with no offer.
### FAQ
**Which offer types does Addly share with a wide bundle builder?**
Quantity breaks, product bundles, frequently bought together, mix and match, build-a-box and add-ons.
**Can each variant have its own volume price?**
Yes. Volume discounts in Addly can be set per variant.
**Does a higher plan remove features?**
Free includes up to three Basic offers. Unlimited adds unlimited offers, custom design and Markets. Advanced adds AI, bundle discounts and targeting. Paid prices follow your Shopify plan, from $15 / $20/mo.
## Addy vs Amp Slide Cart: Which Shopify Drawer Sells More
URL: https://ninety9.dev/blog/addy-vs-amp-slide-cart.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 4 minutes
Amp Slide Cart and Addy both open a Shopify cart after add to cart. See how a drafted drawer, in-cart offers, gifts and a delivery date compare.
The cart is where a one-item order becomes a two-item order. [Amp Slide Cart](https://apps.shopify.com/slide-cart) is built for that moment: a drawer, an extra product, a gift, a shipping bar. [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) keeps that job and shortens the part merchants usually stall on. The first cart is drafted from the products you already sell and the way the brand already looks. You edit it. You do not start from a blank column the week a promotion goes live.
Shoppers do not experience your cart as a project. They experience a yes they just made, and a quiet question: is there a reason to add something else before checkout? A clear drawer answers that. A drawer that took a month to configure often never gets the answer live.
## The second item has to be obvious
Most of the margin in a slide cart is the second item, or the third unit of the first one. Amp is aimed at that upsell. Addy puts the same decision in the drawer, with more than one way to make it.
A shopper who added a moisturiser can see the serum people buy with it. A shopper who added one jar can see the price of three. A shopper who is twelve dollars short of free shipping can see the bar move. Those are three different reasons to stay, and they can sit in one cart instead of three apps arguing over the corner of the screen.
Addy includes frequently bought together, volume deals, buy-one-get-one, free gifts and a shipping goal. The gift and the shipping goal can both show progress, so the shopper always knows the next reward. You choose which blocks a product actually needs. A hero SKU with a natural pair wants the pair. A consumable wants the quantity break. Turning every block on for every product is how a drawer becomes a second homepage.
## A delivery date before they leave
A lot of carts tell the shopper the total and then send them to checkout to discover the delivery date. That is a late surprise. Addy can show an estimated delivery date in the drawer, while the shopper can still add, remove, or take the gift.
The date does a simple commercial job. It answers "when does this arrive?" at the moment the order is still flexible. Stores that sell gifts, perishables, or anything with a deadline feel this first. The shopper who needed it by Friday finds out in the cart, and either adds the faster option you offered or checks out knowing the date. They do not have to open a new tab to guess.
## One brand, more than one cart
A store on Shopify Markets is rarely one audience. The French threshold for free shipping is not the US threshold. A wholesale tag should not see the retail gift. Addy can run a different cart for each market and each customer tag, and the rule can apply to a single block. The rest of the drawer stays shared, so you are not rebuilding the whole cart for one country.
You still get a library of more than 40 blocks, custom HTML and CSS when a block is not enough, live preview, translations and the shopper's currency. The drawer loads on the side, so the product page can appear before the cart is ready. That is the practical version of speed: the product is on screen, the cart is there when they tap the bag.
## Addy and Amp Slide Cart
| Feature | Addy | Amp Slide Cart |
| --- | --- | --- |
| Price | Free to install, with the offers below included | Free plan is styling, a timer and Markets. AI upsells, shipping protection and the progress bar start at $29.99 |
| First layout | Drafted from your catalogue and brand, then edited | You design the cart. Agency designs are on the $49.99 plan |
| In the drawer | Upsells, bought-together sets, volume deals, BOGO, gifts and a shipping goal | A progress bar from $29.99. Buy-one-get-one gifts on the $49.99 plan |
| Delivery date | Shown in the drawer, next to the total | Not included |
| Who sees which cart | A different cart, or one block, by Market and by customer tag | Markets and languages |
| When a preset is not enough | 40+ blocks, plus your own HTML and CSS | Brand styling in the editor |
| Shipping protection | Included | On the $29.99 plan |
## Launch it as a merchant, not as a project
Publish one shipping goal, one gift, and one honest recommendation. Then watch which of the three shoppers actually use. Addy gives you the blocks. It does not require you to invent a cart philosophy before Thursday's campaign.
If you are still choosing between a drawer and the theme cart page, read [cart drawer vs cart page](/blog/cart-drawer-vs-cart-page.html) and the [Shopify cart drawer guide](/blog/shopify-cart-drawer-complete-guide.html). When the offer itself should be a bundle, put [Addly](/apps/addly.html) behind the drawer and let Addy present it.
### FAQ
**Is Addy a replacement for Amp Slide Cart?**
Yes, when you want the cart itself to sell. Addy opens a slide cart with upsells, gifts, a shipping goal and a delivery date, and the first layout is drafted for you.
**Can wholesale and retail see different carts?**
Yes. Addy can run a different cart for each market and each customer tag, and a rule can sit on a single block.
**Does Addy cost anything to install?**
Addy is free to install from the Shopify App Store.
## Addy vs iCart: Shopify Cart Drawer Compared
URL: https://ninety9.dev/blog/addy-vs-icart.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 4 minutes
iCart and Addy both turn the Shopify cart into a place to grow the order. Compare a drafted drawer, gifts, shipping goals, delivery dates and carts by market.
[iCart](https://apps.shopify.com/icart) became a familiar name because it put the cart programme in one app: the slide-out, the extra product, the gift, the shipping goal. [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) is that programme with a shorter first afternoon. The drawer is drafted from your products and your brand. You keep the blocks that match how you sell, and you publish before the season moves on.
A well-known cart app and a cart that is live are different things. The drawer that makes money is the one a merchant can ship this week, then tighten once real adds are coming in.
## The cart is the last calm sales floor
The shopper has already chosen something. The drawer is the last place they are still in your store, still able to add, still able to understand a threshold. iCart is built for that floor. Addy is too, and it assumes you would rather edit a competent cart than assemble one from an empty stack.
What belongs there depends on the catalogue. Apparel often wants a second size or a care product. Beauty wants the next step in the routine. Food wants a larger quantity at a better unit price. Addy can show frequently bought together, a cross-sell, volume pricing, buy-one-get-one and a free gift, with progress so the reward is visible. A free-shipping bar can sit in the same drawer. You are not explaining two widgets that do not know about each other.
More than 40 blocks cover the usual pieces, and custom HTML and CSS cover the piece that is yours alone. Preview it on the theme before it is public. The words can be translated, and prices follow the shopper's currency.
## Tell them when it arrives
Checkout is a bad place to reveal a delivery window. The shopper has already done the work, and a disappointing date is an abandoned payment. Addy can show an estimated delivery date beside the line items. If the date is the problem, they can still change the order. If the date is fine, they check out with one less doubt.
Stores that promise a gift deadline, a subscription start, or a weekend delivery feel the difference immediately. Everyone else still benefits, because "when?" is a universal question and the cart is the natural place to answer it.
## Markets are not one threshold
If you sell in more than one country, one free-shipping number will be wrong somewhere. If logged-in wholesale customers share a theme with retail, one gift will be wrong for somebody. Addy lets you run a cart per market and per customer tag. When only the gift should change, the rule can sit on that block and the rest of the drawer stays put.
The cart stays out of the way while the product page loads. Shoppers came for the product. The drawer earns its place when they open it.
## Addy and iCart
| Feature | Addy | iCart |
| --- | --- | --- |
| Price | Free to install, with no order cap | First 100 orders free, then $9, $19 and $29 a month |
| First layout | Drafted from your catalogue and brand | A sticky cart you configure, with AI recommendations inside it |
| Delivery date | Shown in the drawer | Not included |
| Who sees which cart | A different cart, or one block, by Market and by customer tag | One cart for the store |
| Past the presets | 40+ blocks, plus your own HTML and CSS | A customizable sticky cart |
| Volume pricing | Buy-more-save-more tiers, BOGO and gifts, with no order cap | Volume discounts and BOGO, until the store passes 100 orders |
## Publish the competent version
Ship the draft, remove the blocks that do not match the catalogue, and set one threshold you can defend. A $50 shipping goal that your margin can afford beats a $50 goal you copied from a thread. Addy will show the bar. You still own the number.
Read [how a cart drawer earns the click](/blog/shopify-cart-drawer-complete-guide.html) before you stack rewards. If the threshold logic should live in its own app, [Goalify](/apps/goalify.html) can run the goals while Addy remains the cart.
### FAQ
**Is Addy the same kind of app as iCart?**
Both replace the cart page with a drawer that can upsell. Addy adds a drafted layout, a delivery date in the cart, and cart rules by market and customer tag.
**Can one drawer show shipping progress and a gift?**
Yes. Shipping progress, free gifts, buy-one-get-one and volume deals are blocks in the same drawer.
**What does it cost to start?**
Addy is free to install. You can publish a drawer before you pick a paid plan.
## Addy vs Kaching Cart Drawer for Shopify Upsells
URL: https://ninety9.dev/blog/addy-vs-kaching-cart-drawer.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 4 minutes
Kaching Cart Drawer and Addy both sell from a Shopify slide cart. Compare a drafted layout, gifts, quantity offers, delivery dates and carts by market.
[Kaching Cart Drawer](https://apps.shopify.com/cart-upsell) meets the shopper after add to cart and tries to put one more offer in front of them. That is the right moment. The wallet is already open. [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) treats that moment as the cart itself: the products, the gift, the shipping goal, the delivery date, and which customer is allowed to see which piece.
A reward that lives in one app and a shipping bar that lives in another is how drawers get slow and inconsistent. The shopper sees two stories. You reconcile two settings screens. One drawer with a clear next step is easier to buy from, and easier to run on a Monday.
## The offer and the cart should be the same place
Kaching's drawer is an upsell surface in a family of upsell apps. Merchants who already think in offers install it so the cart can keep up. Addy starts one step earlier. It reads the catalogue and the brand and drafts a drawer you can actually publish, then leaves every block editable.
Inside that drawer you can show frequently bought together, a cross-sell, a volume price, a buy-one-get-one, a free gift and a free-shipping bar. Progress sits next to the reward, so "you are $18 away" is attached to something they can add. A bar with no product next to it is a number. A bar with a $22 pouch under it is a decision.
There are more than 40 blocks, plus custom HTML and CSS when the brand needs a piece the presets do not cover. Live preview shows the drawer on the store before customers do. Translations and the shopper's currency keep a market from seeing a cart that was clearly written for somewhere else.
## The date is part of the sale
Delivery is one of the last reasons a shopper hesitates, and it usually shows up too late, on the shipping step. Addy can put an estimated delivery date in the cart. The shopper sees it while they can still add the gift or drop a line.
That matters for gifts with a deadline, for replenishment people are timing, and for any store where "how long?" is the question support answers every day. Answer it in the drawer and a share of those questions never get asked.
## The right cart for the right buyer
A retail customer and a wholesale tag are not the same cart. A domestic order and an export order are not the same free-shipping number. Addy can keep a cart per market and per customer tag, and the difference can be a single block. You do not have to clone the entire drawer to hide one gift.
The script stays off to the side of the product page, so the product can paint and the cart can catch up. Shoppers judge the product first. The drawer is there when they open the bag.
## Addy and Kaching Cart Drawer
| Feature | Addy | Kaching Cart Drawer |
| --- | --- | --- |
| Price | Free to install | Free on development stores, then $9.99, $14.99 and $24.99 by order count |
| First layout | Drafted from your catalogue and brand | You build the slide cart |
| Offers in the drawer | Upsells, bought-together sets, volume deals, BOGO, gifts and a shipping goal | Upsell carousel, a shipping bar and a gift bar |
| Delivery date | Shown in the drawer | Not included |
| Who sees which cart | A different cart, or one block, by Market and by customer tag | One slide cart |
| Blocks | 40+, including order notes, a discount field, gift wrap and your own HTML | Trust badges, a timer, payment icons and a shipping-protection toggle |
## What to turn on first
Start with the offer you can explain in one sentence. "Add the pouch, shipping is free." "Three jars, the unit price drops." "Spend $75, the mini is included." Addy can hold all three. A shopper can only read one of them clearly. Pick that one, publish it, and add the second when the first is earning its place.
The merchandising notes are in the [cart drawer guide](/blog/shopify-cart-drawer-complete-guide.html) and in [free gifts with purchase](/blog/free-gift-with-purchase-strategy.html).
### FAQ
**How is Addy different from Kaching Cart Drawer?**
Both are slide carts that can upsell. Addy drafts the first layout from your catalogue, can show a delivery date, and can change the cart by market and customer tag.
**Can the drawer give a free gift?**
Yes. Free gifts, buy-one-get-one and volume deals sit in the drawer with progress toward the reward.
**Can a bundle app feed the drawer?**
Yes. Addly can own the bundle, and Addy can show it again in the cart.
## Addy vs Upcart: Building a Shopify Cart That Upsells
URL: https://ninety9.dev/blog/addy-vs-upcart.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Cart & Checkout · App: Addy: AI Cart Drawer & Bundles
Reading time: 3 minutes
Upcart and Addy both build a Shopify cart drawer. Addy drafts the first cart from your catalogue, then you edit offers, gifts, delivery dates and market rules.
[Upcart](https://apps.shopify.com/upcart-cart-builder) is named for the work: build a cart. The drawer is a canvas. The offers are blocks you place on it. [Addy](https://apps.shopify.com/addy-cart-drawer?src=ninety9dev) agrees with the canvas. It disagrees that the canvas should open empty. The app reads the shop and proposes a drawer that already contains the kind of blocks a cart needs, and you take it from there.
Builders reward people who enjoy layout. They punish people who needed the cart live before a sale. The useful version of a builder is one that lets you publish a competent cart on day one and refine the offers once you can see real behaviour.
## Empty canvases miss campaigns
A cart builder is the right tool when the theme cart cannot hold a recommendation, a gift and a shipping threshold. Upcart sits in that group. You construct the drawer, you choose the offers, you publish.
The risk is the blank page. Every hour spent on a corner radius is an hour the storefront still uses the theme cart, and the theme cart is where second items go to die. Addy spends that first hour on a draft. The draft comes from your products and the look of the brand. You can ignore it and rebuild. Most stores will edit it, which is faster than inventing the stack.
The blocks cover the commercial jobs: frequently bought together, cross-sells, volume prices, buy-one-get-one, free gifts with progress, and a free-shipping bar. There are more than 40 of them. Custom HTML and CSS are there when a preset cannot carry a brand detail. Live preview is how you know the preselected offer is the one you meant.
## Say when the order arrives
A builder that only restyles line items still sends shoppers to checkout to learn the delivery date. Addy can show that date in the drawer. The shopper is still in a place where changing the order is easy. A date they like becomes a reason to finish. A date they do not like becomes a reason to write to you, which is better than a silent exit on the payment step.
Put the date next to the total, not under a tooltip. If you sell anything with a deadline, treat the date as part of the offer.
## Build once, vary it by buyer
Cart builders get copied across a whole store, and then one market is wrong. Addy can keep the shared layout and vary the cart, or one block, by Shopify Market and by customer tag. France can have its own shipping goal. A VIP tag can see a gift the public cart does not. You are building a system of carts, and you are not maintaining five unrelated designs.
Prices follow the shopper's currency. The copy can be translated. The drawer does not hold up the product page while it loads.
## Addy and Upcart
| Feature | Addy | Upcart |
| --- | --- | --- |
| Starting point | A drawer drafted from your catalogue and brand | A cart you assemble |
| Offers | Bought-together sets, cross-sells, volume deals, BOGO, gifts and a shipping goal | The offers you place on the canvas |
| Delivery date | Shown in the drawer | You would have to build that block |
| Who sees which cart | A different cart, or one block, by Market and by customer tag | The cart you designed |
| Past the presets | 40+ blocks, plus your own HTML and CSS | The builder canvas |
| Price | Free to install | The Upcart builder |
## Ship the draft
Use Addy when you want a cart builder that does not begin with a blank drawer. Keep the blocks that match the catalogue. A single hero product needs a different cart from a 200-SKU apparel shop, and the draft gives you a place to start either way.
The design rules live in [cart drawer vs cart page](/blog/cart-drawer-vs-cart-page.html). When the offer is a bundle, put [Addly](/apps/addly.html) behind the drawer and let Addy present it.
### FAQ
**What does Addy give a merchant who wants a cart builder?**
A slide cart, in-cart upsells, quantity deals, gifts, a shipping bar, a delivery date, and separate carts for markets and customer tags. The first layout is generated.
**Can I still design the drawer myself?**
Yes. After the draft you move blocks, add your own HTML and CSS, and preview the cart on the store before it is public.
**Will a market see its own currency?**
Yes. Addy uses the shopper's currency and can be translated, so a market reads the drawer in its own money and language.
## Goalify vs Kai: Shipping Bars, Gifts and the Gap
URL: https://ninety9.dev/blog/goalify-vs-kai-progress-bar.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 3 minutes
Kai pairs a progress bar with shipping and gifts. Goalify stacks shipping, discounts and gifts, suggests a product to close the gap, and sets thresholds per country.
[Kai](https://apps.shopify.com/progress-bar-shipping-gift) puts shipping and gifts on a progress bar. That pairing is the natural one: spend a bit more, shipping drops, then a gift unlocks. [Goalify](https://apps.shopify.com/goalify?src=ninety9dev) keeps the pair and adds the middle reward stores actually run, a discount, plus a product aimed at whatever is still missing.
A gift with no path to it is a picture. The bar is the path. The recommended product is the step.
## Shipping and a gift are the rewards shoppers already believe
Kai's category is specific. The bar is free shipping and a gift, which are the two rewards shoppers already trust. Vague "rewards" bars train people to ignore them. Specific ones get read.
The missing piece on many of these bars is the discount the email already promised, and the product that would finish the goal. If the bar says $16 short and the recommendations are $80 jackets, the bar is decoration. Goalify suggests from order history, biased toward closing the gap. A $19 add-on next to a $16 gap is a fair ask. An $80 jacket is a different shop.
Stacking is a sequence. Shipping at $50, 10% at $75, a gift at $100. The shopper sees the next one, then the one after it once they cross. Qualification can be value, quantity, or specific products. A gift can depend on what is already in the cart.
## Countries and proof
One threshold for every country makes the domestic offer too high or the export offer too low. Goalify keeps a threshold per country. The bar can sit in the cart and as a block you embed on the theme. You can test copy and thresholds, and read the result.
Free under 10 monthly orders, then $3.99, $7.99, $11.99. Built for Shopify, rated 5.0 from 42 reviews.
## Goalify and Kai
| Feature | Goalify | Kai |
| --- | --- | --- |
| Price | Free under 10 orders, then $3.99, $7.99 and $11.99 | Starts at $5.99. No free plan. Pro is $7.99. Growth is $9.99 |
| AI | AI upsells on the free plan | AI recommendations on the $7.99 plan |
| Tests | Compare thresholds and copy | Not included |
| Countries | A different amount per country, from $3.99 | Multi-market and languages on the $5.99 plan |
| Cart drawer | Drawer, product page and cart page from $3.99 | The cart drawer is on the $9.99 plan |
| Rewards | Unlimited goals in one sequence | Discount tiers, a gift and free shipping |
## The gift is the last step
Goalify is the better bar when the gift is the last step in a sequence you can explain. Write that sequence using [free gift with purchase](/blog/free-gift-with-purchase-strategy.html) before you set the numbers. A gift that costs more than the extra margin is a popular bar and a bad week.
If the cart is [Addy](/apps/addy.html), keep the goal next to the line items so the path and the products are in one place.
### FAQ
**Does Goalify offer a free gift the way Kai does?**
Yes. A gift can be its own goal, stacked with free shipping and a discount. Rules can look at cart value, quantity or the products already in the cart.
**What does the suggestion do?**
It recommends products from order history that help the shopper reach the next goal.
**Is there a free plan?**
Goalify is free up to 10 orders a month, then $3.99, $7.99 or $11.99. It is Built for Shopify with a 5.0 rating from 42 reviews.
## Goalify vs Progressify: Cart Goals That Can Stack
URL: https://ninety9.dev/blog/goalify-vs-progressify.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 3 minutes
Progressify draws a Shopify progress bar. Goalify stacks free shipping, discounts and gifts, with country thresholds, products that close the gap, and tests.
[Progressify](https://apps.shopify.com/progressify) is a progress bar for Shopify incentives. The category is crowded because the widget is small and the lift is real. [Goalify](https://apps.shopify.com/goalify?src=ninety9dev) assumes you will outgrow a single fill, and it is designed so the second and third goals do not need a second app.
Small widgets get installed and forgotten. The ones worth keeping are the ones you can change by country and prove with a test. A bar you cannot edit for an export market will be wrong for a share of your orders, quietly, all quarter.
## A bar is a programme, even when it starts as one line
Progressify represents the modern version of the bar: a dedicated app, a goal, a visual fill. Merchants pick it when the theme's announcement bar cannot do the maths. The cart value changes. The message should change with it.
Goalify can be that single shipping line on day one. The discount and the gift are available when the calendar asks for them. You do not migrate. You add a threshold.
The programme can require cart value, quantity, or specific products. Suggestions from order history aim at the shortfall, so the bar and the product agree. Thresholds differ by country. Placement is a cart bar or a theme block, including the product page. Tests and analytics sit on the goal, so a new number is a decision and not a hunch.
Pricing stays modest as you add goals: free to 10 orders, then $3.99, $7.99 and $11.99. Built for Shopify, with a 5.0 rating from 42 reviews.
Keep the message to the next goal only. A thin bar has room for one promise. The promise after that appears when they cross this one.
## Goalify and Progressify
| Feature | Goalify | Progressify |
| --- | --- | --- |
| Price | Free under 10 orders, then from $3.99 | $5 a month. No free plan |
| Rewards | Free shipping, an order discount and a gift, stacked | A tiered bar and a gift with purchase |
| What they should add | The product from your orders that closes the gap | Product upsells |
| Tests | Compare thresholds and copy | Not included |
| Countries | A different threshold per country | Markets integration |
| Rules | Cart value, quantity, products or collections | The progress bar |
## The next promotion should be a setting
Choose Goalify if you want the progress-bar category and you want the next promotion to be a setting. Progressify's job, a clear incentive bar, is the job. Goalify holds that job when the incentive changes shape through the year.
The [free shipping bar guide](/blog/free-shipping-progress-bar-guide.html) is the setup checklist. If you use [Addy](/apps/addy.html), put the goal in the drawer so the reward and the products share a surface.
### FAQ
**Can Goalify be only a shipping bar?**
Yes. You can run a single free-shipping goal. You can also add a discount and a gift without installing another bar.
**How do product-specific goals work?**
A goal can require specific products, a quantity, or a cart value. Gift rules can follow what is already in the cart.
**Where can the bar appear?**
In the cart, and as a block elsewhere on the theme. If the cart is Addy's drawer, the goal still belongs next to the line items.
## Goalify vs Turbo Progress Bar on Shopify
URL: https://ninety9.dev/blog/goalify-vs-turbo-progress-bar.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 3 minutes
Turbo Progress Bar and Goalify both push carts toward a reward. Compare stacked shipping, discount and gift goals, country thresholds and products that close the gap.
[Turbo Progress Bar](https://apps.shopify.com/turbo-progress-bar) is a fast cart bar: show the goal, fill it, get the shopper to add something. [Goalify](https://apps.shopify.com/goalify?src=ninety9dev) is built for stores that run more than one goal at a time, and for stores where the domestic minimum and the export minimum are not the same number.
A visible bar is table stakes. The content of the goal is the strategy. Free shipping is the reward most stores reach for first, because shoppers already understand it. The gift and the discount you already emailed are the rewards the bar should be able to say next.
## One bar, a sequence of rewards
Turbo-style bars optimise for a lightweight progress indicator. The cart should feel closer to a reward after every add. That feeling is correct. Shipping-only bars leave money on the table when the brand also has a gift at a higher threshold, or a discount that should appear before the gift.
Goalify stacks free shipping, an order discount and a free gift in one programme. Qualify by cart value, by quantity, or by specific products. Gift rules can follow what was bought, including a buy-one-get-one style reward. When the shopper is short, suggestions from order history aim at the remaining amount. The product is chosen to finish the goal.
The bar can sit in the cart and as a block on the product page or the header. You can test a threshold. Analytics show whether the new number earned the change.
A $50 domestic goal and a $120 export goal can both be true. Goalify keeps a threshold per country, so an international cart is not judged by the home minimum. The message stays short. Shoppers do not read a paragraph inside a thin bar. They read the next reward.
Free under 10 orders a month, then $3.99, $7.99 and $11.99. Built for Shopify, 5.0 from 42 reviews.
## Goalify and Turbo
| Feature | Goalify | Turbo |
| --- | --- | --- |
| Rewards in one bar | Free shipping, then an order discount, then a gift | Free shipping, gifts and discounts |
| What they should add | The product from your orders that closes the remaining amount | Not included |
| Countries | A different threshold per country | Not included |
| Tests | Compare thresholds and copy, with analytics | Not included |
| Rules | Cart value, quantity, or specific products and collections | A live bar on the cart, the drawer and the product page |
| Gift behaviour | Auto-add, with control over which products qualify | Gifts auto-add |
## Set the sequence before you set the colour
Pick Goalify when the promotion calendar has more than one reward, or more than one country. Write the order down: shipping, then the discount, then the gift. Test one threshold change at a time. The colour of the bar is the last decision, and the least important one.
Set the sequence with the [progress bar guide](/blog/free-shipping-progress-bar-guide.html). If the cart is a drawer, the goal still belongs next to the line items in [Addy](/apps/addy.html).
### FAQ
**How does Goalify compare with Turbo Progress Bar?**
Both draw a reward bar. Goalify lets you stack shipping, discount and gift goals, set rules by value, quantity or product, and suggest items from order history to close the gap.
**Can I put the bar on a product page?**
Yes. Goalify ships as a cart bar and as a block you can place elsewhere on the theme.
**What does Goalify cost?**
Free up to 10 orders a month. Paid plans are $3.99, $7.99 and $11.99. The app is rated 5.0 from 42 reviews.
## Goalify vs Yaco: Free Shipping Bars and Cart Goals
URL: https://ninety9.dev/blog/goalify-vs-yaco-progress-bar.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Shipping & Fulfilment · App: Goalify: Free Shipping Bar PRO
Reading time: 3 minutes
Yaco is a progress bar that nudges the cart toward a reward. Goalify stacks free shipping, a discount and a gift, suggests what to add, and sets a threshold per country.
A progress bar has one job: show the distance between this cart and a reward. [Yaco](https://apps.shopify.com/upsellprogressbar) is that bar, pointed at an upsell. [Goalify](https://apps.shopify.com/goalify?src=ninety9dev) keeps the bar and lets the reward be free shipping, money off, a gift, or all three in a sequence.
One reward is easy to explain. Three rewards, in order, are how a $48 cart becomes a $72 cart. The shopper always sees the next finish line, and only the next one.
## A number is a nudge. A product closes the gap.
Yaco sits in the upsell-progress category. The bar fills as the cart grows, and the empty part of the bar is the pitch. Merchants use it because "you are $18 away" beats a generic row of related products.
The bar still needs something to add. "Add $18" with a grid of $80 jackets is a taunt. Goalify can suggest a product from your own order history that helps close the gap. The pouch that costs $22, next to a bar that needs $18, is a decision a shopper can make. The suggestion is there to finish the goal, which is a different job from filling a recommendation slot.
Rules can look at cart value, item quantity, or specific products. A gift can depend on what is already in the cart, including a buy-one-get-one style reward. The bar can live on the cart and as a block you place elsewhere on the theme.
## Stack the promotion you already promised
Shipping, a discount and a gift often exist in the same month because marketing already promised all three. If the bar can only say one thing, the other two become banners. Banners do not fill. Goalify stacks them: free shipping, then an order discount, then a gift. Each threshold crossed reveals the next.
Write the sequence so it can be read in a 28-pixel bar. Shipping at $50, 10% at $75, a gift at $100 is readable. Three unrelated badges are not. You can test a threshold and read the analytics, so the second number has to earn its place.
Country thresholds keep the sequence honest. A $50 domestic goal and a $120 export goal should not share a label. Goalify stores a threshold per country.
The app is free under 10 orders a month, then $3.99, $7.99 and $11.99. It is Built for Shopify, rated 5.0 from 42 reviews.
## Goalify and Yaco
| Feature | Goalify | Yaco |
| --- | --- | --- |
| Free plan | Shipping, a discount and a gift can run together, under 10 orders a month | 14 days of every tier, then 1 active tier |
| Price after that | From $3.99. Unlimited orders at $11.99 | Premium is $9.90. Testing is $9.95 now and $14.90 after the beta |
| What they should add | The product from your orders that closes the gap | Product recommendations |
| Countries | A different free-shipping amount per country | The bar can be targeted by market |
| Tests | Compare a threshold and the copy | A/B testing is on the Optimize plan |
| Rules | Cart value, item count, or specific products and collections | Targeting, markets and translations |
## Run a sequence, not a pile of badges
Use Goalify when the bar should survive more than one promotion. A store that only ever offers free shipping over one amount can live on a simple bar. A store that rotates a gift and a shipping threshold wants them in order, with the country rule stored on the goal.
The mechanics are in the [free shipping progress bar guide](/blog/free-shipping-progress-bar-guide.html) and [free gift with purchase](/blog/free-gift-with-purchase-strategy.html). Put the bar in the [Addy](/apps/addy.html) drawer if the cart itself is a slide-out.
### FAQ
**Is Goalify a Yaco alternative?**
Yes. Goalify is a free-shipping and cart-goal bar. It can run shipping, a discount and a gift at the same time, with rules on cart value, quantity or specific products.
**Can the threshold change by country?**
Yes. Goalify supports a threshold per country, so a domestic free-shipping minimum can differ from an international one.
**Can I test the bar?**
Yes. You can test the bar and read the results. Goalify is Built for Shopify, rated 5.0 from 42 reviews.
## Monet vs BA Popup Upsell: Offers at the Moment of Intent
URL: https://ninety9.dev/blog/monet-vs-ba-popup-upsell.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Monet • AI Popup Bundle Addons
Reading time: 3 minutes
BA Popup Upsell and Monet both show Shopify upsell popups. Monet can open on add to cart, at the start of checkout, and on exit, with product suggestions, free.
[BA Popup Upsell](https://apps.shopify.com/not-another-popup-upsell) appears when the shopper is already in a buying motion, usually around add to cart. That is the right family of popup. It continues a click they just made. [Monet](https://apps.shopify.com/monet?src=ninety9dev) keeps that standard and gives the offer three honest moments: the add, the start of checkout, and the exit.
A popup on a timer is an interruption. A popup after an add is a continuation. A popup as checkout starts is a last relevant ask. A popup as they leave is a smaller reason to stay. Those are different offers, and they should not share one creative.
## One trigger catches one kind of shopper
BA's category is the post-click upsell. The shopper did something commercial. The popup offers a bundle or a related product before the cart is the only surface. Add to cart catches the enthusiast. It misses the shopper who reached checkout and stalled, and the shopper whose pointer is already leaving.
Monet lets you assign the moment per offer.
A bundle belongs on the add. The shopper just committed to a hero product. The set is a second yes of the same size. A smaller add-on belongs when checkout starts. They have finished browsing. One product, one price, one button. Exit is for the offer you would rather make than lose the session, and it should be shorter and cheaper than the bundle you showed on the add.
Templates cover a bundle, a cross-sell and an add-on. Product suggestions can come from the app, so you are not maintaining the grid by hand as the season changes. Discounts, buy-one-get-one, volume offers and a countdown are there when the offer should expire. Geography and customer tags keep a wholesale tag away from a retail deal, and keep a domestic-only gift out of an export session.
You can read views, the add-to-cart rate and conversion. Monet works with cart drawers, so the popup and the drawer do not have to fight over the same click. The app is free to install.
## Monet and BA Popup Upsell
| Feature | Monet | BA Popup |
| --- | --- | --- |
| Price | Free, with no cap on added revenue | Free on development stores. Then $7.99, $14.99 and $29.99, capping added revenue at $100, $500 or $2,500 |
| Moments | Add to cart, checkout starting, and exit | Add to cart, exit, a timer, or hesitation |
| What the popup sells | A bundle, a cross-sell, or an add-on | Single product, multi-product, bundle and quantity breaks |
| Which product | AI recommendations, included free | AI recommendations on the paid plans |
| Offer maths | Percent, flat amount, BOGO, volume and a countdown | Discounts and bundles |
| Who sees it | Country and customer tag | Filter by product tag |
| Beside a drawer | Built to run with a cart drawer | Not included |
## One offer per moment
Run Monet when the upsell popup should meet shoppers in more than one honest moment. Design the add-to-cart version with [add to cart popup upsells](/blog/add-to-cart-popup-upsell.html), and the leaving version with [exit-intent popups](/blog/exit-intent-popups-shopify.html). A popup with four products is a second storefront. Put one product in the frame.
### FAQ
**When does a Monet popup show?**
When a shopper adds to cart, when checkout starts, or when they move to leave. You choose the moment per offer.
**What can the popup sell?**
A bundle, a cross-sell or an add-on. The offer can include a discount, buy-one-get-one, a volume deal or a countdown.
**Does Monet have a monthly fee?**
Monet is free to install.
## Monet vs EA Upsell Popup for Shopify Cross-Sells
URL: https://ninety9.dev/blog/monet-vs-ea-upsell-popup.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Monet • AI Popup Bundle Addons
Reading time: 2 minutes
EA Upsell Popup and Monet both cross-sell in a Shopify popup. Compare add to cart, checkout and exit, product suggestions, and a free install.
[EA Upsell Popup](https://apps.shopify.com/ea-upsell-popups-cross-sell) is a cross-sell in a popup. The shopper is looking at one product. The popup introduces the product that should ride along. [Monet](https://apps.shopify.com/monet?src=ninety9dev) uses that cross-sell and decides when it is allowed to appear: after the add, as checkout begins, or when the session is about to end.
Cross-sells fail when they are early. Offering a case before anyone has committed to the phone is a guess. Offering it after the phone is in the cart is a service.
## A companion product needs a commitment first
EA's job is the related product, accepted in one click. It is the right pattern for accessories, refills and the second step in a routine. The popup has to be specific. A grid of bestsellers is a collection page with a close button. Name the companion and the reason. "Add the refill, it ships with the bottle" is a cross-sell.
Timing decides whether that specific product feels helpful. The same case, offered on exit to someone who never added the phone, is noise. Monet separates the moments.
After add to cart, the companion belongs with the thing they just chose. As checkout starts, a single add-on with a plain price is easier to accept than it was on the product page, where they were still judging the hero. On exit, use a smaller offer than the one you showed on the add. The shopper is already halfway out.
Layouts cover cross-sell, bundle and add-on. Suggestions can fill the frame, or you can pin the SKU yourself. A discount, buy-one-get-one, a volume offer or a countdown can sit on it. Country and customer-tag rules decide who is eligible. Views, add-to-cart rate and conversion tell you if the companion is real. Monet works beside a cart drawer. It is free to install.
## Monet and EA
| Feature | Monet | EA Bundles & Upsell |
| --- | --- | --- |
| Price | Free | Free on development stores, then $9.99 a month |
| Moments | Add to cart, the start of checkout, and exit, each with its own offer | Upsell popups and checkout offers |
| Exit | A smaller offer when they move to leave | Not included |
| Which product | AI picks from purchase patterns | The products in the offer |
| Add-ons | A template for a warranty, gift wrap or protection | Bundles, BOGO and quantity breaks |
| Who sees it | Country and customer tag | Not included |
| What you measure | Views, add to cart and conversion per popup | Not included |
## Write the reason in the headline
Choose Monet when the companion is real and the moment might be the cart, the checkout, or the exit. Read [add to cart popup upsells](/blog/add-to-cart-popup-upsell.html) before you write the line. If you cannot name why the second product belongs, it is not a cross-sell yet.
### FAQ
**Can Monet do a cross-sell popup?**
Yes. Cross-sell is one of the three layouts, next to bundle and add-on. The moment can be add to cart, the start of checkout, or exit.
**How are products chosen?**
You can place them yourself or use Monet's product suggestions.
**Will it clash with a cart drawer?**
Monet is built to work with cart drawers, including a drawer that opens on the same add-to-cart click.
## Monet vs Kaching Upsell Popup: Product Offers at Intent
URL: https://ninety9.dev/blog/monet-vs-kaching-popup.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Monet • AI Popup Bundle Addons
Reading time: 2 minutes
Kaching's upsell popup and Monet both offer products in a Shopify overlay. Monet opens on add to cart, checkout and exit, with product suggestions, free.
[Kaching Upsell & Email Popup](https://apps.shopify.com/popup-upsell) sits in a suite merchants already know for bundles and carts. The popup is another surface for an offer. [Monet](https://apps.shopify.com/monet?src=ninety9dev) is that surface on its own, and it is strict about when the offer may appear.
A suite is convenient when you want one vendor for everything. A dedicated upsell popup is the better tool when the moment is the part you came to configure. Add to cart, the start of checkout, and exit are three configurations. They are three different shoppers.
## The product offer is the whole job
Kaching's popup extends an offer brand. If the bundles already live in that family, a matching popup feels tidy. Monet's job is narrower, and the narrowness is the point. The overlay exists to add a SKU.
It opens on add to cart, when checkout starts, or on exit. The layout is a bundle, a cross-sell or an add-on. The product can be a suggestion, so the frame stays relevant as the season changes, or a product you pin for a campaign. The offer can carry a discount, buy-one-get-one, a volume break or a countdown. Country and customer-tag rules decide who qualifies. Views, add-to-cart rate and conversion are the numbers that matter, because the success is another line item.
Monet is designed to sit beside a cart drawer. The drawer holds the cart. The popup makes the ask, then gets out of the way. It is free to install.
You can run it next to [Addly](/apps/addly.html) when the bundle itself is an Addly offer and the popup is only the invitation. The popup does not have to be the system of record for the discount. It has to be the moment.
## Monet and Kaching's popup
| Feature | Monet | Kaching Upsell Popup |
| --- | --- | --- |
| Price | Free | Free on development stores, then $4.99, $12.99 and $24.99 |
| Moments | Add to cart, checkout starting, and exit | Popups on the product page |
| Which product | AI recommendations | The products you place in the popup |
| Shape of the offer | Bundle, cross-sell or add-on | Upsell and cross-sell |
| Offer maths | Percent, flat amount, BOGO, volume and a countdown | Not included |
| Who sees it | Country and customer tag, included free | Advanced targeting on the paid plans |
| Beside a drawer | Built to run with a cart drawer | A product-page popup |
## Measure it on added revenue
Choose Monet when the offer you want is a product, and you want a moment for checkout and exit as well as the add. [Exit intent](/blog/exit-intent-popups-shopify.html) and [add to cart upsells](/blog/add-to-cart-popup-upsell.html) are the two writes-ups to read before you copy one offer onto every moment. The exit version should be smaller. The add-to-cart version can be the set.
### FAQ
**How is Monet different from Kaching's popup?**
Monet shows a bundle, cross-sell or add-on when the shopper adds to cart, starts checkout or exits. The product can come from a suggestion.
**Can I discount the upsell?**
Yes. Monet supports discounts, buy-one-get-one, volume offers and countdowns.
**Does Monet replace a cart drawer?**
The popup is the offer. The drawer is the cart. Monet is built to work beside a drawer.
## Monet vs PopupGenius: A Popup That Adds a Product
URL: https://ninety9.dev/blog/monet-vs-popupgenius.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Monet • AI Popup Bundle Addons
Reading time: 2 minutes
PopupGenius covers promotional popups. Monet stays on the product offer: add to cart, checkout and exit, with suggestions and a free install.
[PopupGenius](https://apps.shopify.com/popupgenius) comes from the broad popup tradition: announcements, offers, the overlay a promotion calendar needs. [Monet](https://apps.shopify.com/monet?src=ninety9dev) is narrower on purpose. It pops up to sell another product, at the moment the shopper adds, starts checkout, or leaves.
A promotion can greet a landing. A cross-sell should wait until there is a product in mind. Those are different successes. A store that mixes them in one overlay usually gets a close click.
## The only acceptable result is another line item
PopupGenius can carry a promotion. That is useful for a seasonal message. It is a weak shape for "this specific SKU belongs with the one you just added," because a product decision needs a picture, a price and one action.
Monet sells that decision.
A bundle, a cross-sell or an add-on. Opened by add to cart, the start of checkout, or exit. Filled by a product suggestion or by a SKU you choose. Priced with a discount, buy-one-get-one, a volume deal or a countdown. Limited by country or customer tag. Measured by views, add-to-cart rate and conversion. It sits beside a cart drawer, and it stays quiet until there is intent. It is free.
If the campaign is "10% off the site this weekend," this is the wrong app. Keep that message where you already run promotions. If the campaign is "the pouch is $18 and completes free shipping," Monet is the right one. [Goalify](/apps/goalify.html) can own the shipping maths. Monet can own the product ask.
## Monet and PopupGenius
| Feature | Monet | PopupGenius |
| --- | --- | --- |
| Price | Free. No view cap and no credit cap | Free plan is 1 popup, 500 views and 20 AI credits. Then $9.99, $19.99 and $39.99 |
| Moments | Add to cart, checkout starting, and exit | Popups |
| Shape of the offer | Bundle, cross-sell or add-on | Upsell and cross-sell popups |
| Who sees it | Country and customer tag, included | Advanced targeting starts at $9.99 |
| Offer maths | Percent, flat amount, BOGO, volume and a countdown | Not included |
| What you measure | Views, add to cart and conversion per popup | Not included |
## Put one product in the frame
Install Monet when the overlay has to add a SKU. The pattern is in [add to cart popup upsells](/blog/add-to-cart-popup-upsell.html). A popup that needs a scroll is a page. One product, one reason, one button.
### FAQ
**Is Monet a general popup builder?**
Monet shows product upsells: bundles, cross-sells and add-ons. It opens on add to cart, when checkout starts, or on exit.
**Can Monet target a segment?**
Yes. Offers can target by country and by customer tag.
**How much does Monet cost?**
It is free to install.
## Monet vs Uplift: Shopify Upsell Popups After the Click
URL: https://ninety9.dev/blog/monet-vs-uplift-popups.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Bundles & Upsells · App: Monet • AI Popup Bundle Addons
Reading time: 2 minutes
Uplift and Monet are Shopify upsell popups. Monet covers add to cart, the start of checkout and exit, with product suggestions, discounts and a free install.
[Uplift](https://apps.shopify.com/uplift-1) is named for the outcome: a higher order, offered in a popup after the shopper has leaned in. [Monet](https://apps.shopify.com/monet?src=ninety9dev) is aimed at that same lift, and it treats the moment as part of the offer. An add-to-cart bundle and an exit add-on are both upsells. They are not the same screen.
The first yes is the product. The popup asks for a second yes while the shopper is still in the flow. That is a better ask than a greeting on the landing page. Checkout stalls and exits are where a lot of Shopify revenue is actually decided, and a single trigger leaves those sessions alone.
## The second yes needs a shape
A bundle is a second yes to a set. A cross-sell is a second yes to a partner product. An add-on is a second yes to something small. One generic grid makes all three look like the same collection. Monet gives each shape a layout, and each layout a moment.
On add to cart, match the size of the yes they just made. A set, or the obvious companion. As checkout starts, ask for less. They are done browsing. One add-on, a plain price, a single button. On exit, ask for less again. A reason to stay should be cheaper and shorter than the offer you were proud of on the product page.
Suggestions can choose the product as the catalogue changes. You can still pin a SKU for a campaign. Discounts, buy-one-get-one, volume and a countdown cover the maths of the offer. Country and customer-tag rules keep the wrong shopper out of it. Views, add-to-cart rate and conversion tell you which moment is paying for itself. The popup works with a cart drawer. Monet is free.
## Monet and Uplift
| Feature | Monet | Uplift |
| --- | --- | --- |
| Moments | Add to cart, checkout starting, and exit | Add to cart |
| Which product | AI picks from purchase patterns | Complementary items in the popup |
| Shape of the offer | Bundle, cross-sell or add-on | An upsell or cross-sell popup |
| Offer maths | Percent, flat amount, BOGO, volume and a countdown | The upsell |
| Who sees it | Country and customer tag | Not included |
| Languages | Translations and the shopper's currency | English |
| Price | Free | Free plan, plus a $9.99 pay-what-you-want plan |
## Follow the step they are actually on
Use Monet when the lift should follow the shopper's step. [Exit-intent popups](/blog/exit-intent-popups-shopify.html) covers the leaving case. Keep that offer cheaper and shorter than the add-to-cart bundle. The shopper is already halfway out. Meeting them with the same four-product grid is how popups get closed on sight.
### FAQ
**What moments can Monet use?**
Add to cart, the start of checkout, and exit. Each offer can use the moment that matches it.
**Can the popup include a discount?**
Yes. Offers can include a discount, buy-one-get-one, a volume break or a countdown.
**Is Monet free?**
Yes. Monet is free to install.
## Reviso vs AE Order Editing: Customer Edits Before the Order Ships
URL: https://ninety9.dev/blog/reviso-vs-ae-order-editor.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 3 minutes
AE: Order Editing & Upsell is a paid Shopify editor from about $39 a month. Reviso covers the same customer edits, cancellation saves and product suggestions, free.
[AE: Order Editing & Upsell](https://apps.shopify.com/account-editor) puts the editor in the customer account and pairs it with an upsell. Paid plans start around $39 a month. [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) puts the same pair on the order. The customer fixes it. The screen can still sell. There is no monthly fee to begin.
Account editing is the right home for the tool. The customer is logged in. The order is theirs. A second login sends people back to email, which is the queue you were trying to shrink.
## The account page is where they already look
AE's name says account editor because that is where Shopify customers expect to manage an order. The upsell is there because the account page on most themes is a dead end: status, tracking, nothing to buy. A relevant product on that page is revenue with no extra ad spend.
Reviso lives in that same account, on a screen that looks like Shopify.
Customers can change the address, the items, the quantities, the variants and the shipping method. The controls close at fulfilment, so the account cannot rewrite a shipped order. Country, tag and order rules cover accounts that should not self-serve. A cancellation can be met with a discount or a gift. Suggestions and recently viewed products are the upsell. Recently viewed is the honest one. They looked at those products in this shop. A suggestion can add a second idea from similar orders.
Returns, exchanges and store credit stay in the same app. Reviso is free to install.
A customer who can fix a size without emailing you will forgive a quiet account page. A customer who cannot fix the size will not care how clever the upsell was. Open the edit first. Add the product once the edit is trusted.
## Reviso and AE
| Feature | Reviso | AE: Order Editing & Upsell |
| --- | --- | --- |
| Price | Free | From $39 a month, then $99, $179 and $249 |
| What they can change | Address, items, quantities, variants and shipping method | Shipping address |
| If they try to cancel | A discount or a free gift | Not included |
| Another product | AI suggestions and recently viewed | One-click upsell |
| After delivery | Returns, exchanges and store credit | Not included |
| Who can edit | Country, customer tag and order rules | Not included |
| Cutoff | Edits close at fulfilment | Not stated |
| Where they find it | Customer accounts | The account editor |
## Prove the ticket savings before you add a fee
Choose Reviso when you want account editing on a store that is still proving the ticket savings. Open the fields from the [order editing guide](/blog/shopify-order-editing-guide.html). Add the upsell after the edit itself is something customers can find in one look.
### FAQ
**Is Reviso an alternative to AE Order Editing?**
Yes. Customers can edit the order in a Shopify-style account experience until it is fulfilled, and they can see product suggestions and recently viewed products.
**What does AE cost compared with Reviso?**
AE's paid plans start at about $39 a month. Reviso is free to install.
**Can Reviso answer a cancellation?**
It can offer a discount or a gift when the customer tries to cancel, subject to the rules you set.
## Reviso vs Editly: Order Editing Without the Ticket
URL: https://ninety9.dev/blog/reviso-vs-editly.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 2 minutes
Editly and Reviso let Shopify buyers edit orders themselves. Reviso adds cancellation saves, product suggestions, returns and store credit, free to install.
[Editly](https://apps.shopify.com/editly-order-editing) is a self-serve editor. The customer fixes the order so you do not have to. [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) starts from that same inbox problem and keeps going through the cancel request and the return.
Support teams adopt editors to delete a ticket type. They abandon them when the editor cannot do the change customers actually request, or when it still allows a change the warehouse can no longer honour. The useful editor does the common edits, stops at fulfilment, and has an answer for cancel.
## "Can you change the address" is the expensive cheap ticket
The customer is motivated. The agent is copying fields. An editor on the order, inside customer accounts, removes the copy-paste. The screen should look like Shopify. A branded detour that asks for the order number again sends people back to email, which is the ticket you were trying to delete.
The ticket types next to the address are "cancel this" and "I want the other variant." Reviso covers address, line items, quantities, variants and shipping method. The controls disappear after fulfilment, so a printed pick list is not rewritten by a customer at 11pm.
A cancel attempt can be met with a discount or a gift. The customer who accepts 10% off never becomes a refund ticket. On the same screen, suggestions and recently viewed products give a warm buyer something to add. Recently viewed is what they already considered. The suggestion is the second idea. Neither should bury the address field.
Rules by country, tag and order keep the risky orders with your team. Returns, exchanges and store credit cover the relationship after delivery. Store credit is how a return can become the next order. Reviso is free to install.
## Reviso and Editly
| Feature | Reviso | Editly |
| --- | --- | --- |
| What they can change | Address, items, quantities, variants and shipping method | Address, variant, quantity and cancel |
| Shipping method | Yes | Not included |
| If they try to cancel | A discount or a free gift, instead of losing the order | Cancel the order |
| Another product | AI suggestions and recently viewed | Not included |
| Who can edit | Country, customer tag and order rules | Not included |
| After delivery | Returns, exchanges and store credit | Not included |
| Cutoff | Edits close when the order is fulfilled | Not stated |
| Price | Free, inside customer accounts | The Editly app |
## Move one ticket type first
Choose Reviso when the ticket you want to delete is the edit, the cancel and the simple return. [Self-serve order edits vs tickets](/blog/self-serve-order-edits-vs-tickets.html) is the rollout. Start with the address. Open quantities once the warehouse agrees on the cutoff.
### FAQ
**Is Reviso an Editly alternative?**
Yes. Customers edit the order from a Shopify-style screen, including in customer accounts, until fulfilment.
**Can Reviso handle a return as well as an edit?**
Yes. Returns, exchanges and store credit are part of Reviso, for the part of the relationship that happens after delivery.
**How much is Reviso?**
Free to install.
## Reviso vs Oat: Shopify Order Editing for Customers
URL: https://ninety9.dev/blog/reviso-vs-oat-order-editing.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 2 minutes
Oat and Reviso both offer Shopify order editing. Reviso lets buyers change address, items and shipping until fulfilment, with cancellation saves and product suggestions, free.
[Oat](https://apps.shopify.com/oat-order-editing) gives the customer an editor for the Shopify order they just placed. The problem is universal: checkout is finished, the address is wrong, the variant is wrong, and the customer does not want to email anyone. [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) is that editor, with rules for which orders qualify and a response when the click is "cancel."
Universal problems still have exceptions. A preorder, a wholesale tag, or an international shipment may need a person. The app should know that before the customer does.
## Simple for the customer, strict for the orders staff still own
Oat represents the straightforward editor. Find the order, change the field, save. Merchants want the smallest possible explanation for the customer. A screen that looks like Shopify helps, because it does not feel like a form from somewhere else.
Straightforward editors get risky at the boundary. Fulfilled. Partially fulfilled. Tagged do-not-edit. If the boundary is a help article, customers will cross it. If the boundary is the app, they will not see the control. Reviso hides the edit once the order is fulfilled.
Until then, the customer can change the address, the items, the quantity, the variant and the shipping method. Orders can be included or left alone using country, tag and order rules. A cancel attempt can be met with a discount or a gift. Suggestions and recently viewed products can sit on the same screen, without becoming the only thing on it. The edit is the task.
Returns, exchanges and store credit cover the order after that window. The interface lives in customer accounts. Reviso is free to install.
## Reviso and Oat
| Feature | Reviso | Oat |
| --- | --- | --- |
| What they can change | Address, items, quantities, variants and shipping method | Self-serve order editing |
| If they try to cancel | A discount or a free gift | Not described |
| Another product | AI suggestions and recently viewed | Not described |
| Who can edit | Country, customer tag and order rules | Not described |
| After delivery | Returns, exchanges and store credit | Not described |
| Cutoff | Edits close at fulfilment | Not described |
| Where they find it | Customer accounts, in a screen that looks like Shopify | The editor |
| Price | Free | The Oat app |
## One sentence the warehouse would sign
Pick Reviso when the editor has to be simple for the customer and strict for the orders your team still owns. Read the [order editing guide](/blog/shopify-order-editing-guide.html) and decide the boundary in one sentence. That sentence is the configuration.
### FAQ
**What can a customer change in Reviso?**
Shipping address, items, quantities, variants and shipping method, until the order is fulfilled.
**Can some orders be excluded?**
Yes. Rules can use country, customer tag and order conditions.
**Is there an offer on the edit screen?**
The edit screen can show product suggestions and products the customer recently viewed.
## Reviso vs Order Editing & Upsell: Self-Serve Edits Before Fulfilment
URL: https://ninety9.dev/blog/reviso-vs-order-editing-upsell.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 3 minutes
Order Editing & Upsell and Reviso both let Shopify customers fix an order. Reviso answers a cancellation with a discount or a gift, and suggests products on the edit screen. Free.
[Order Editing & Upsell](https://apps.shopify.com/order-editing-1) covers the two jobs that appear the hour after checkout: fix the order, and sell one more thing while the customer is still paying attention. [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) is built for those jobs, with a clear stop when the order ships, and a specific answer when the customer hits cancel.
Edits after fulfilment are how support tickets and warehouse mistakes get invented. Reviso closes the edit window when the order is fulfilled. The customer can fix what is still cheap to fix. The warehouse is not asked to rewrite a label that has already been printed.
## Fix it, or save it
The thank-you page and the customer account are a second storefront. The buyer can correct a mistake. The merchant can show another product. Both are cheaper than an inbox. The cancel button is the third job, and it usually waits until the refunds report.
A customer who meant "I picked the wrong size" should not walk the same path as a customer who meant "I changed my mind." Reviso can meet a cancellation with a discount or a gift. Some people take it. The order stays. The people who still cancel were not going to be saved by a slower form.
On the edit screen itself, Reviso can show suggestions and products the customer recently viewed. Recently viewed is the honest recommendation. They already looked at those products in this shop. A suggestion can sit beside that. The edit remains the task. A customer fixing an apartment number should still be able to find the address field first.
## Who is allowed to touch the order
Rules can use country, customer tag and the order itself. A wholesale tag, a preorder, or a shipment you do not want rewritten can stay with your team. Everyone else gets a screen that looks like Shopify, including inside customer accounts, so it does not feel like a third-party form asking for the order number twice.
After delivery, returns, exchanges and store credit stay in the same app. The relationship does not jump to a different brand of tool the day the parcel moves. Reviso is free to install.
## Reviso and Order Editing & Upsell
| Feature | Reviso | Order Editing & Upsell |
| --- | --- | --- |
| What they can change | Address, items, quantities, variants and shipping method | Address or quantities, from a thank-you block |
| Variants | Swap size or colour before it ships | Not included |
| Shipping method | Yes | Not included |
| If they try to cancel | A discount or a free gift | Not included |
| Another product | AI suggestions and recently viewed | Not included |
| Who can edit | Country, customer tag and order rules | Not included |
| After delivery | Returns, exchanges and store credit | Not included |
| Price | Free, and edits close at fulfilment | The thank-you page block |
## Write down what may change
Use Reviso when editing and the post-purchase offer are both in scope, and cancellations should be a conversation. The policy side is in the [Shopify order editing guide](/blog/shopify-order-editing-guide.html) and [self-serve edits vs tickets](/blog/self-serve-order-edits-vs-tickets.html). Open the fields your warehouse will still honour. Leave payment captures with your team.
### FAQ
**Can customers edit a Shopify order with Reviso?**
Yes. They can change the address, line items, quantities, variants and shipping method until the order is fulfilled.
**What happens if they try to cancel?**
Reviso can offer a discount or a free gift before the order is lost.
**Does Reviso have a monthly fee?**
Reviso is free to install.
## Reviso vs OrderEditing.com: Self-Serve Edits on a Store Budget
URL: https://ninety9.dev/blog/reviso-vs-orderediting.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 2 minutes
OrderEditing.com is a Shopify order-editing suite from about $99 a month. Reviso covers address, items, cancellation saves, suggestions and returns, and it is free to install.
[OrderEditing.com](https://apps.shopify.com/order-editing) is the suite end of Shopify order editing. Public plans start around $99 a month. [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) is the customer job inside that category: fix the order yourself, before it ships, without a ticket.
A suite earns a high price when a company needs a programme of modules and a team that lives in them. A store that needs customers to change an address needs a screen and a cutoff. The features people actually use are repetitive. Change the address. Swap the variant. Add one more unit. Stop the cancellation if a small offer would do it. Show something they already viewed.
## The edits that delete tickets
Reviso includes those edits at no monthly fee.
Customers can change the address, the line items, the quantities, the variants and the shipping method. The window closes at fulfilment, so a shipped order is not rewritten from the account page. A cancellation can be met with a discount or a free gift. The edit screen can show suggestions and recently viewed products. Rules by country, customer tag and order conditions keep exceptions with your team. The screen looks like Shopify and lives in customer accounts. Returns, exchanges and store credit stay on the same product.
You can put Reviso on a store this week and judge it on saved tickets. The platform fee does not start before the first edit.
## Reviso and OrderEditing.com
| Feature | Reviso | OrderEditing.com |
| --- | --- | --- |
| Price | Free | From $99 a month, then $199, $399 and $599 by order band |
| What they can change | Address, items, quantities, variants and shipping method | Self-serve order editing |
| If they try to cancel | A discount or a free gift | Not included |
| Another product | AI suggestions and recently viewed | One-click upsell |
| After delivery | Returns, exchanges and store credit | Not included |
| Who can edit | Country, customer tag and order rules | Not included |
| Cutoff | Edits close at fulfilment | Not stated |
## Start free, open the fields that matter
Switch to Reviso when you want customers editing orders on a store that should not be paying suite prices for address changes. For a first editor, free and pre-fulfilment is the practical default.
The [Shopify order editing guide](/blog/shopify-order-editing-guide.html) lists the fields worth opening. Open those. Leave internal notes and payment captures with staff.
### FAQ
**Is Reviso an alternative to OrderEditing.com?**
Yes, for self-serve Shopify order edits before fulfilment, plus a cancellation offer, recommendations on the edit screen, returns, exchanges and store credit.
**Why do stores compare the price?**
OrderEditing.com's public plans start around $99 a month. Reviso is free to install, with the edit window, the rules and the offer screen included.
**Do edits stay open after fulfilment?**
Reviso closes customer edits once the order is fulfilled. A change after that stays with your team.
## Reviso vs Vista: Order Editing, Returns and the Cancel Button
URL: https://ninety9.dev/blog/reviso-vs-vista-order-editing.html
Published: 2026-10-10 (updated 2026-10-10)
Category: Retention & Post-Purchase · App: Reviso: Order editing & Upsell
Reading time: 2 minutes
Vista and Reviso handle Shopify order edits. Reviso pairs the editor with cancellation saves, product suggestions, returns, exchanges and store credit, free.
[Vista](https://apps.shopify.com/vista-order-editing) lets the buyer correct a Shopify order without a ticket. [Reviso](https://apps.shopify.com/reviso-order-editor?src=ninety9dev) treats editing as the first chapter. The cancel attempt is the second. The return, the exchange and the store credit are the third.
Stores that buy an editor and a separate returns app often describe the same customer twice. The order is the object. One surface can follow it, from the wrong address this afternoon to the exchange next week.
## Customers experience one order, not two departments
Vista's category solves the correction before the parcel moves. Address, the item, the quantity. That is the highest-frequency request, and it deserves a dedicated flow.
Customers do not experience their problem as "before shipment" or "after shipment." They experience it as the order. Reviso keeps both chapters on one product. Before fulfilment they can change the address, the items, the quantities, the variants and the shipping method. When the order is fulfilled, those controls close. After delivery, returns, exchanges and store credit are the path.
A cancellation in the middle can be met with a discount or a gift. Suggestions and recently viewed items can appear on the edit screen for customers who are still in a buying mood. The address field stays findable. Audience rules use country, customer tag and order conditions, so the orders your team must touch never show the button.
The screen looks like Shopify and lives in customer accounts. Reviso is free to install.
Store credit is the quiet retention tool. A return that can become credit is a return that can become the next order. Keeping it with the editor means the two flows agree about what the customer is owed.
## Reviso and Vista
| Feature | Reviso | Vista |
| --- | --- | --- |
| Price | Free, with the edits below included | Free for 30 edits. Pro is $30. Premium is $100 |
| If they try to cancel | A discount or a free gift | Cancel the order |
| Another product | AI suggestions and recently viewed, included | One-click upsells on the $30 plan |
| After delivery | Returns, exchanges and store credit, included | Store credit on the $30 plan |
| Who can edit | Country, tag and order rules, included | Rule-based editing on the $30 plan |
| What they can change | Address, items, quantities, variants and shipping method | Address, contact, products, variants and delivery method |
| Cutoff | Edits close at fulfilment | A timeframe you set |
## Launch the field change, then the save
Use Reviso when you want the editing outcome and you also want the cancel and the return on that surface. The field change is the first thing to launch. The save offer is the second, because it pays for the project the first week someone accepts it.
[Self-serve edits versus tickets](/blog/self-serve-order-edits-vs-tickets.html) helps you sequence the launch so the warehouse is not surprised by a return flow they have not seen.
### FAQ
**Does Reviso include returns?**
Yes. Besides edits before fulfilment, Reviso supports returns, exchanges and store credit.
**Can Reviso save a cancellation?**
It can offer a discount or a free gift when the customer starts to cancel.
**Where does the customer edit?**
On a Shopify-style screen, including customer accounts, subject to country, tag and order rules.
## Free Shopify AI SEO Audit — Check If Models Can Read Your Store
URL: https://ninety9.dev/blog/free-shopify-ai-seo-audit.html
Published: 2026-09-09 (updated 2026-09-21)
Category: SEO & AI
Reading time: 6 minutes
Run a free Shopify AI SEO audit on any public page. See schema gaps, blocked AI bots and missing llms.txt before you rewrite another product description.
You do not need another paid “AI SEO” retainer to learn if your Shopify store is readable to models. You need a free Shopify AI SEO audit that reads the public page and returns a punch list you can staff. Open the [ChatGPT SEO check for Shopify stores](/chatgpt-seo/), paste any storefront URL, and fix schema gaps, blocked AI bots and a missing llms.txt before you rewrite another product description.
## What a free Shopify AI SEO audit should be
It should read the live page. It should not ask for collaborator access. It should not hide the findings behind a sales call. Focus on structured facts, crawler access and llms.txt — not a vanity “AI score” nobody can verify.
The public check on ninety9.dev is free and rate-limited. No credit card. It names what is missing so you or your developer can fix the theme, SEO app or robots.txt. It will not edit the theme for you.
Agencies may use it only on stores they are authorised to check. Merchants can opt out with a meta tag. The CRO audit tag (`content="no"` or `content="no,delete"`) also stops this check.
## Why “AI SEO” audits fail merchants
Agencies ship 40-page decks that mix Core Web Vitals, backlinks and “write for ChatGPT” fluff. You leave with homework and no single next click.
A useful free Shopify AI SEO audit is shorter: can a model fetch this URL, and are the facts on the page marked up so it does not guess? Keep Google Search Console for indexing and queries. This check does not replace it.
If you also care about the buy button, that is a different pass — the [CRO Audit](/cro-audit/) looks at what stops the sale on a product page. Do not mix the two punch lists in one ticket.
## What to check before you rewrite copy
Rewriting descriptions when the product has no Product JSON-LD is theatre. Unblocking GPTBot when the page is noindex is theatre. Publishing llms.txt while Organization markup is missing is incomplete.
Order of work for most stores:
1. Indexable page (no accidental noindex)
2. Consistent name / title / OG
3. Structured data for **that** page type
4. robots.txt allows the AI crawlers you care about
5. Optional llms.txt
Fix the page type you pasted: product markup for products, WebSite or Organization for the homepage. A green homepage does not prove the PDP is clean.
## How to run the free check
1. Open the [ChatGPT SEO check for Shopify stores](/chatgpt-seo/).
2. Paste yourstore.com or any Shopify page. No login. https:// is optional.
3. If the store is password-protected, paste the storefront password when asked.
4. Read the fails top to bottom. Each row is a merchant-facing outcome: “price missing in markup,” “GPTBot blocked,” “no llms.txt.”
5. Copy reds into your tracker with the URL and date.
6. Ship the theme or robots change. Re-paste the same URL.
7. Use the ask-assistant buttons and compare the answer to the live page.
Full click-path: [how to run the Shopify SEO & AI Audit](/blog/how-to-run-shopify-seo-ai-audit.html). For what the tool is and is not, see [what the ChatGPT SEO check actually is](/blog/what-is-chatgpt-seo-check-shopify.html).
Worked example: you are about to rewrite 40 product descriptions. You audit one bestseller first. Offer fails and GPTBot is Disallowed. You stop the copy sprint, unblock the crawler, restore Offer, re-audit, then rewrite. The descriptions now sit on a page a model can actually quote.
## What “good enough” looks like
You do not need a perfect score to ship. You need the page type’s essentials:
- **Product:** name, image, price, availability
- **Homepage:** shop identity and a way into the catalogue
- **robots.txt:** does not silence the bots you care about
- **llms.txt:** ideally present and useful, not empty fluff
Schedule optional rows (missing llms.txt, extra FAQ markup) behind the gates. Discovery without readable markup is still a hobby.
## What you should walk away with
A useful free audit ends in a staffed list, not a feeling. You should have:
- Four URLs checked (home, collection, product, policy)
- Reds copied into tickets with an owner
- A crawler policy written in one paragraph (allow or deny GPTBot and the others on purpose)
- A date to re-run after the theme or robots change ships
Optional: a short llms.txt draft sitting with marketing until `/llms.txt` is live.
You should not walk away with a promised “AI ranking,” a collaborator request, or a 40-page deck. If a vendor will not show you the live-page fails before the contract, they are selling anxiety.
## Common mistakes
- Paying for a retainer before a free public-page pass
- Auditing a preview theme you will not publish
- Treating the list as a citation rank
- Letting an agency run it on stores they do not have permission to check
- Rewriting all product copy while Offer markup and robots.txt are still red
After the list is green enough to ship, ask ChatGPT about the same product URL. If the answer is still wrong, you have a staleness or third-party-source problem — but you have already removed the excuse that your own page was unreadable.
Run the free audit once before the next content sprint. Paste the homepage and a bestseller, ticket the reds, and only then rewrite — discovery without readable markup is still a hobby.
### FAQ
**Is the Shopify AI SEO audit free forever?**
The public check on ninety9.dev is free and rate-limited. No credit card. Use it on the URLs you are authorised to check; merchants can opt out with a meta tag. The CRO audit tag (including content="no,delete") also stops this check.
**Will it fix my theme for me?**
No. It names what is missing so you or your developer can fix the theme, SEO app or robots.txt. Copy failing rows into a ticket; re-run the same URL after you ship.
**Does it replace Google Search Console?**
No. Keep Search Console for indexing and queries. This check is for AI-readable markup and crawler rules on the URL you paste.
**Can agencies use the free audit on client stores?**
Only on stores you are authorised to check. Merchants can opt out with a meta tag (readiness-specific, or the CRO audit no / no,delete tag). Treat it as a public-page review, not a backdoor into admin.
**What is a free Shopify AI SEO audit?**
It is a public-page pass/fail of whether models can fetch and understand a live Shopify URL: structured data for that page type, AI crawler rules in robots.txt, and optional llms.txt. It should not require collaborator access or a paid retainer to learn the basics.
**Which URL should I audit first?**
Paste the homepage for shop identity, then a bestseller for price and availability markup. Add a collection and a policy page before you rewrite copy. Each page type has different essentials.
**What does “good enough” look like?**
You do not need a perfect score to ship. You need the page type’s essentials: a product with name, image, price and availability; a homepage with shop identity; robots that do not silence the bots you care about; and ideally an llms.txt that points models at your best pages.
## What the ChatGPT SEO Check for Shopify Stores Actually Is
URL: https://ninety9.dev/blog/what-is-chatgpt-seo-check-shopify.html
Published: 2026-09-09 (updated 2026-09-21)
Category: SEO & AI
Reading time: 6 minutes
A free public-page check of schema, robots.txt and llms.txt — so you know if ChatGPT can read your Shopify store. Not a citation rank, not an admin login.
Merchants keep asking whether ChatGPT can “see” their catalogue. The useful answer is not a rumour about rankings — it is whether a live Shopify page exposes clear facts, allows the right crawlers, and publishes an optional llms.txt. That is what the [ChatGPT SEO check for Shopify stores](/chatgpt-seo/) (the SEO & AI Audit in the nav) is for: a free public-page check, not a citation score and not an admin login.
## What is the ChatGPT SEO check?
It is a readability audit of one live URL. You paste a Shopify homepage, collection, product, blog post or store page. The check reads public HTML, robots.txt and llms.txt, then returns a pass/fail list in merchant language.
It answers a quieter question than “get me ranked in ChatGPT.” Can a model fetch this page, and are the facts on it labelled so the model does not have to guess?
Step-by-step paste-and-read: [how to run the Shopify SEO & AI Audit](/blog/how-to-run-shopify-seo-ai-audit.html).
## What merchants get wrong about “ChatGPT SEO”
Most merchants hear “get found in ChatGPT” and buy a content rewrite. The quieter problem is simpler: the page ChatGPT would fetch has no clear product name in structured data, blocks GPTBot in robots.txt, or never published an llms.txt.
Rewriting descriptions while Offer markup is empty is theatre. Publishing blog posts while the homepage has no shop identity is theatre. The ChatGPT SEO check answers the quieter question first. Paste a URL. See what a model can read. Then ask ChatGPT yourself.
## What it is not
It is not a Shopify admin login. It does not install an app. It does not see checkout, orders or customers.
It is not a measure of how often ChatGPT already mentions your brand. Nobody outside OpenAI can promise that from a public crawl. We cannot see citations in ChatGPT, Claude, Gemini or Perplexity.
It is not a classic SEO PDF of 80 title-tag notes. Titles matter for Google; this check focuses on whether the page is *legible* to answer engines and crawlers that honour robots and structured data.
It is not the [CRO Audit](/cro-audit/). That looks at what stops the sale on a product page. This check looks at whether a model can understand the URL you pasted. Most fixes here are theme or SEO setup — Organization markup, robots rules, llms.txt, Open Graph. Apps are optional. It will not always recommend a Ninety9 app.
## What you paste
Homepage, collection, product, blog index, blog post, or a store page such as About. You do not need a product URL. The checks change with the page type — a product needs price and availability in markup; a homepage needs shop identity and catalogue links.
Password-protected stores work. Use the password shoppers type under Online Store → Preferences, not your Shopify login. Details: [password-protected Shopify audits](/blog/password-protected-shopify-ai-audit.html).
https:// is optional. Paste the exact path you care about so you are scoring that template.
## What you get back
A short pass/fail list: consistent names, canonical, Open Graph, descriptions, images in structured data, Organization or WebSite context, BreadcrumbList where it helps, indexability, whether robots.txt blocks GPTBot / ClaudeBot / PerplexityBot / Google-Extended, and whether llms.txt exists.
When the list is done, buttons open ChatGPT, Claude, Gemini or Perplexity in *your* browser with a short prompt about that URL. That is how you compare the model’s answer to the live catalogue — the tool does not call those APIs to score mentions.
Worked example: you paste a bestseller. Names disagree, Offer fails, GPTBot is allowed, llms.txt is missing. You align the product name, restore Offer in the theme, schedule llms.txt for later, and click Ask ChatGPT. If it still quotes an old blog price, you have a third-party staleness problem — but your PDP is no longer the excuse.
## How it fits next to Search Console and CRO
Keep Google Search Console for queries, coverage and inspections. The ChatGPT SEO check does not report impressions or click-through. It tells you whether the HTML on one URL is labelled clearly and whether AI crawlers are allowed.
Keep the CRO Audit for add-to-cart friction. A page can convert and still be unreadable to a model; a page can be perfectly marked up and still lose the sale. Staff them as two tickets.
Typical afternoon: homepage + bestseller in the SEO & AI Audit, same bestseller in the CRO Audit if the product page is where money happens, then one Search Console inspection on the URLs you just un-noindexed.
## When to run it (and when not to)
Run it before a theme update, after an SEO app install, before you scale ads on a collection, and on go-live day when the password drops. Re-run the same URLs so you can see what broke.
Do not use it as a substitute for Google Search Console. Do not expect it to edit the theme. Do not treat a green list as a promise that ChatGPT will recommend you.
If paid ads already work and the buy button is fine, this is the next free afternoon: make the same pages readable to models. If the shop is still a password page, you can still run a staging check — just do not skip the public re-run.
Start with the SEO & AI Audit on the homepage and one bestseller. Readability first — citations if you earn them.
### FAQ
**Does a high score mean ChatGPT recommends my store?**
No. We cannot see citations in ChatGPT, Claude, Gemini or Perplexity. We only read public HTML, robots.txt and llms.txt. A strong list means the page is readable, not that you are already mentioned.
**Is this the same as the CRO Audit?**
No. The CRO Audit looks at what stops the sale on a product page. This check looks at whether a model can understand the URL you pasted. Run both if you care about conversion and AI readability; they do not replace each other.
**Do I need a product URL for the ChatGPT SEO check?**
No. Paste the homepage, a collection, a product, a blog post or any store page. We check that URL. Checks change with page type — a product needs price and availability in markup; a homepage needs shop identity.
**Will it always recommend a Ninety9 app?**
No. Most fixes are theme or SEO setup — Organization markup, robots rules, llms.txt, Open Graph. Apps are optional.
**What is the ChatGPT SEO check for Shopify stores?**
It is a free public-page SEO & AI Audit: paste a live Shopify URL and see whether structured data, crawler rules and llms.txt make that page readable to answer engines. It is not an admin login and not a citation rank.
**Can I run it on a password-protected Shopify store?**
Yes. Use the password shoppers type under Online Store → Preferences, not your Shopify login. Treat the result as a staging review until the store is public, then re-run.
**What do I get after I paste a URL?**
A short pass/fail list covering names, canonical, Open Graph, descriptions, images in structured data, Organization or WebSite context, BreadcrumbList where it helps, indexability, AI bot blocks in robots.txt, and whether llms.txt exists. Then buttons open ChatGPT, Claude, Gemini or Perplexity in your browser.
## Can ChatGPT Read My Shopify Store? How to Check in Minutes
URL: https://ninety9.dev/blog/can-chatgpt-read-my-shopify-store.html
Published: 2026-09-08 (updated 2026-09-21)
Category: SEO & AI
Reading time: 6 minutes
Can ChatGPT read your Shopify store? Paste a public URL into the free SEO & AI Audit, then ask ChatGPT the same page yourself.
ChatGPT can read your Shopify store if three things are true: the page is public and not marked noindex, robots.txt does not disallow OpenAI's crawlers, and the facts on the page — name, price, availability, shop identity — are exposed in structured data rather than buried in theme HTML. You can check all three in minutes by pasting a public URL into the free SEO & AI Audit, then asking ChatGPT about the same URL and comparing the answer to reality.
## What does "readable by ChatGPT" actually mean?
For a merchant, readability has two layers. The first is fetchability: can a crawler or a user-triggered fetch load the page at all? Password protection, a noindex tag or a robots.txt Disallow all say no. The second is legibility: once the HTML is loaded, can a model find the product name, price, currency, stock status and the shop's identity without guessing from a soup of divs and app scripts?
Structured data — Product, Offer, Organization and WebSite JSON-LD — is how a page answers the second question. A visible price in a theme block is not the same as a price in an Offer that a model can parse with confidence.
## Why does it matter for a Shopify store?
Shoppers increasingly ask assistants "which brand ships to Ireland" or "is this candle vegan" before they ever open your site. If the assistant cannot fetch the page, you are absent. If it can fetch but cannot parse, it may quote an old price, the wrong variant or a competitor's terms. Neither outcome shows up in Google Search Console, which is why merchants often discover the problem only when a customer says "ChatGPT told me it was cheaper".
## Three reasons ChatGPT "cannot see" your store
**Blocked.** robots.txt turns away GPTBot or related OpenAI agents. Many stores inherit this from a copied "security" snippet or an SEO app preset — see [GPTBot and robots.txt on Shopify](/blog/gptbot-robots-txt-shopify.html).
**Hidden.** The page carries a noindex tag, is still behind the storefront password, or is an unlisted product that was never meant to be found.
**Ambiguous.** The theme shows a price, but there is no Offer in structured data, or two SEO apps emit conflicting Product blocks. The model either invents a value or skips the page as unreliable.
| Symptom you notice | Likely cause | Where to fix it |
|---|---|---|
| ChatGPT says it cannot access the page | robots.txt Disallow or password | robots.txt.liquid; Online Store → Preferences |
| ChatGPT describes the store but no products | Products noindex or no Product schema | SEO app settings; theme JSON-LD |
| ChatGPT quotes a wrong price or currency | Offer markup missing or mismatched | Theme Product schema; duplicate apps |
| ChatGPT uses an old product name | og:title and structured name disagree with H1 | Theme meta tags |
## How to check in five minutes
1. Open the [ChatGPT SEO check for Shopify stores](/chatgpt-seo/). No login is needed.
2. Paste your homepage URL and submit. This checks shop identity, robots.txt and llms.txt.
3. Paste your top product URL and submit. This checks offer clarity and product markup.
4. Note any row that fails on both runs — that is a theme-level problem, not a one-off.
5. Use the "ask ChatGPT" button and compare its answer to your real catalogue: price, stock, shipping countries.
If step 5 returns a confident wrong answer, go back to step 4. Confident wrong answers almost always trace to ambiguous markup, not to the model being contrary.
## A worked example
Say you sell a £29 ceramic mug and ChatGPT tells a shopper it costs £24 and ships free worldwide. You run the audit. The product page fails "price missing in markup" and the homepage fails "GPTBot blocked". The £24 was the launch price on a third-party listing that the model could reach; your own page was never fetched, and even if it had been, no Offer told the model the current price.
Fixing both rows — one robots.txt edit and one theme schema fix — gives the model a reason to fetch your page and a price it can trust. That is the whole mechanism.
## Common mistakes when checking
- Testing while logged into Shopify admin, which shows you pages a public bot cannot see.
- Checking only the homepage. The homepage almost never carries the price problem.
- Assuming a good Google ranking means AI bots are allowed. Googlebot and GPTBot are separate user agents with separate rules.
- Re-asking ChatGPT immediately after a fix. Give crawlers time to refetch, and confirm the markup change shipped by viewing the page source.
- Treating a green audit as a recommendation guarantee. Readable is the entry ticket, not the prize.
## What to tell your developer
Copy this into a ticket: "Make Product and Organization JSON-LD match the on-page name and price. Do not Disallow GPTBot unless we decided to. Add /llms.txt pointing at our best collection and policies." That is enough for a competent theme developer to scope the work, and the audit gives them a before-and-after check.
## When a readability check is not the answer
If your store is deliberately private, wholesale-only behind a password, or you have chosen to keep AI crawlers out for legal reasons, a red row is the correct result — document the decision and move on. And if the page is already readable but the product still does not convert, that is a conversion problem, not a discovery problem; the [CRO Audit](/cro-audit/) is the tool for that question.
Stop debating prompts. Check whether the store is readable, then ask.
### FAQ
**Can ChatGPT read my Shopify store?**
Yes, if the page is public, not marked noindex, and robots.txt does not disallow OpenAI's crawlers. Whether it reads the page accurately depends on structured data: a product page with clear name, price and availability markup is far less likely to be misquoted.
**I asked ChatGPT and it invented my price. Why?**
Usually the live page has no clear Offer markup, or the bot never fetched a fresh copy because it was blocked or the page was cached elsewhere. Fix structured data and crawler access first, then ask again.
**Does Shopify block ChatGPT by default?**
Do not assume either way. Themes and apps vary, and many stores inherit robots.txt rules from SEO or security apps that disallow GPTBot. Open yourstore.com/robots.txt and read it.
**Should I allow every AI bot on my Shopify store?**
That is a policy choice. The audit shows which of GPTBot, ClaudeBot, PerplexityBot and Google-Extended are blocked so you can decide deliberately rather than inherit a template's rule.
**Is a password-protected Shopify store invisible to ChatGPT?**
To the public web, yes. Nothing behind the storefront password can be fetched until you publish the store or share the password for a one-time check.
**How do I test whether ChatGPT can read a specific product page?**
Paste the product URL into the SEO & AI Audit and fix any failing rows. Then paste the same URL into a ChatGPT prompt, ask for the price, availability and shipping terms, and compare the answer to the page.
## llms.txt for Shopify Stores — What Merchants Should Publish
URL: https://ninety9.dev/blog/shopify-llms-txt-guide.html
Published: 2026-09-08 (updated 2026-09-21)
Category: SEO & AI
Reading time: 5 minutes
llms.txt tells AI systems which Shopify pages matter. Learn what to include, where to host it, and how the SEO & AI Audit checks the live file.
llms.txt is the short map at your domain root that tells AI systems which Shopify pages represent your brand. It is optional, increasingly expected, and easy to leave blank forever. Publish a handful of durable URLs — heroes, collections, policies — at `https://yourstore.com/llms.txt`, then confirm the file is live with the [ChatGPT SEO check for Shopify stores](/chatgpt-seo/).
## What is llms.txt?
llms.txt is a plain-text (often Markdown-like) file at the website root. Its job is to point language models at the public pages that matter: who you are, what you sell, how you ship and return, and a few flagship products.
It is not a sitemap of every SKU. It is not robots.txt. It is not structured data. Think of it as a receptionist’s note: “If you are a model, start here.”
Shopify does not generate a useful llms.txt automatically for every theme. If `/llms.txt` 404s or returns the theme’s 404 HTML, you have not published one yet.
## Why merchants care about llms.txt
Answer engines look for a machine-readable map when one exists. Without one, they lean on whatever HTML they fetched — often a promo homepage that says nothing durable about your catalogue.
A short file will not make ChatGPT recommend you. No file guarantees citations. It reduces guesswork about which URLs represent the brand, especially when the homepage is a campaign landing page that changes weekly.
Publish llms.txt **after** pages are [indexable](/blog/noindex-killing-ai-discovery-shopify.html) and [crawlers you want are allowed](/blog/gptbot-robots-txt-shopify.html). A map to noindex URLs is a map to nowhere.
## What to put in the file
Keep it short:
- One-line brand description (“We sell [category] for [who], from [where].”)
- Links to two or three best collections
- About
- Shipping and returns
- A few hero products that are in stock and meant to be public
Plain Markdown-style links are fine. Skip affiliate spam, password pages, discount-code dumps and every out-of-stock SKU. Catalogue schema covers the long tail; llms.txt highlights the spine.
Worked example:
```
# Northloom
Wool home textiles, woven in the UK.
- [Winter throws](https://northloom.example/collections/throws)
- [About](https://northloom.example/pages/about)
- [Shipping](https://northloom.example/policies/shipping-policy)
- [Returns](https://northloom.example/policies/refund-policy)
- [Flagship throw](https://northloom.example/products/merino-throw)
```
(Use your real domain. This is a shape, not a live store.)
## How Shopify stores usually publish it
What matters to crawlers and to the audit is that `https://yourstore.com/llms.txt` returns useful text, not a 404 and not a full theme page.
Common options:
1. **Theme template routed to `/llms.txt`** — a small template or page that serves text/plain (your developer’s usual path).
2. **Files / CDN URL plus a redirect** from `/llms.txt` to the hosted file.
3. **Hosting on the apex via your DNS / host** if the shop is on a custom domain and you can drop a root file there.
There is no single admin toggle labelled “llms.txt” on every plan and theme. If `/llms.txt` shows your theme’s 404, the route is not set up yet.
## How the SEO & AI Audit treats it
The ChatGPT SEO check fetches llms.txt and marks whether a real file is up. Missing file = optional fail you can schedule. Empty marketing fluff = still weak.
Pair the file with robots that allow the bots you want. A perfect map behind `Disallow: /` for GPTBot will not be fetched by that bot.
Re-run the audit after you publish. Open `/llms.txt` yourself in the browser and confirm you see the brand line and links, not HTML chrome.
## How to maintain the file
Treat llms.txt like a nav, not like a sitemap. Review it when you:
- Launch or retire a flagship product
- Change shipping countries or the returns window
- Replace the About story
- Move from a campaign homepage back to a catalogue homepage
A quarterly pass is enough for most shops. If marketing changes the homepage weekly, the file is how you keep a durable path to policies and heroes.
Do not auto-dump the whole catalogue. Out-of-stock and seasonal leftovers make the map look unmaintained. Three collections and three products that you would put on a trade-show one-pager is the right size.
When you add a URL, open it in incognito first. If it is noindex, password-gated or a tracking redirect, leave it out.
## Common mistakes and when not to bother yet
- Listing every SKU, including drafts and sold-out leftovers
- Linking to password-gated or noindex URLs
- Replacing Product schema with a map (“the file mentions the product, so markup can wait”)
- Publishing a slogan with no URLs
- Treating llms.txt as a ChatGPT ranking hack
- Hosting the file on a CDN path that never redirects from `/llms.txt`
If the store is still behind a password, wait until go-live — or draft the file now and publish when the gate drops. If Offer markup is missing on bestsellers, fix [product schema](/blog/shopify-product-schema-for-ai.html) first; the map is the second mile.
After publish, fetch `https://yourstore.com/llms.txt` on a phone network (or an incognito window) so you are not looking at a cached 404 from your own browser. Then re-run the SEO & AI Audit.
If the response is HTML with your header and footer, you served a theme page, not a map. The route still needs a text file (or a redirect to one). Crawlers that expected a short list of links will not treat a styled 404 as llms.txt.
Publish a short llms.txt this week. Then re-run the SEO & AI Audit to confirm the file is live — a map, not a manifesto.
### FAQ
**Is llms.txt required for Shopify?**
No. It is optional. Structured data and open robots rules matter more. llms.txt helps models prioritise which URLs represent your brand when they fetch the domain.
**Does Shopify generate llms.txt automatically?**
Not by default for every theme. Merchants add it deliberately via a theme route, a files/CDN URL with a redirect, or hosting on the apex via DNS. Check yourstore.com/llms.txt to see if anything is live.
**Will llms.txt make ChatGPT recommend my store?**
No file guarantees citations. It reduces guesswork about which URLs represent your brand. You still need indexable pages, honest product markup and proof the rest of the web can see.
**Can llms.txt replace schema?**
No. Publish both. Schema describes the page; llms.txt maps the site. A map to pages with empty Product markup still leaves models guessing the price.
**What should I put in a Shopify llms.txt?**
A one-line brand description, links to your best collections, About, shipping and returns, and a few hero products. Plain Markdown-style links are fine. Skip affiliate spam and every out-of-stock SKU.
**Where does llms.txt live on Shopify?**
What matters is that https://yourstore.com/llms.txt returns useful text. Options include a theme template routed to that path, a CDN file with a redirect, or hosting at the apex via your DNS provider.
**How does the SEO & AI Audit treat llms.txt?**
The ChatGPT SEO check for Shopify stores fetches llms.txt and marks whether a real file is up. A missing file is an optional fail you can schedule. Empty marketing fluff is still weak. Pair a real file with robots that allow the bots you want.
## GPTBot and robots.txt on Shopify — Are You Blocking AI by Accident?
URL: https://ninety9.dev/blog/gptbot-robots-txt-shopify.html
Published: 2026-09-07 (updated 2026-09-21)
Category: SEO & AI
Reading time: 6 minutes
Many Shopify stores block GPTBot, ClaudeBot or Google-Extended in robots.txt by accident. See who is blocked and why it matters for ChatGPT SEO.
Your Googlebot rules can look perfect while GPTBot is Disallowed on line 40 of robots.txt. That is how Shopify stores silently opt out of ChatGPT-related crawling: Search still works, ads still click, and assistants cannot refresh product facts from your shop. Open the live file, see whether you chose that block, and fix it if you did not.
## What is GPTBot, and what is robots.txt on Shopify?
GPTBot is OpenAI’s crawler user-agent. robots.txt is the public text file at `https://yourstore.com/robots.txt` that tells crawlers which paths they may fetch. Shopify serves that file for your domain. A `robots.txt.liquid` theme template and some SEO or security apps can add rules.
Googlebot is not GPTBot. Blocking GPTBot does not, by itself, hide you from Google. [Google-Extended](/blog/perplexity-claude-google-extended-shopify.html) is a different Google token related to AI/Gemini uses. Three decisions, not one.
## The accidental block
A well-meaning “security” snippet or an old SEO app preset Disallows GPTBot. Your Google rankings look fine. ChatGPT still cannot refresh your product facts, so it leans on stale third-party pages or invents a price.
That is the merchant bug: not “we decided against training crawlers,” but “a template decided for us.” Copied `User-agent: GPTBot` / `Disallow: /` blocks the whole storefront for that bot.
If legal or brand risk says keep GPTBot out, disallow on purpose and write it down. Then stop expecting ChatGPT to cite live stock and shipping from your HTML.
## Which bots the audit watches
The [SEO & AI Audit](/chatgpt-seo/) lists which of these are blocked:
- GPTBot
- ClaudeBot
- PerplexityBot
- Google-Extended
Those are the common agents merchants mean by “AI SEO.” The report names who is blocked so you are not guessing from a 200-line robots file. It does not edit the file for you.
## Merchant decision framework
**Allow** if you sell products people ask assistants about and you want accurate prices and policies cited. Pair allow with [indexable pages](/blog/noindex-killing-ai-discovery-shopify.html) and honest Offer markup — an open crawler on a noindex PDP still cannot put you in discovery.
**Disallow** if legal or brand risk outweighs discovery. Do it on purpose, not because a template said so. You can allow GPTBot and still block other AI bots; be explicit per user-agent.
| Goal | GPTBot | Googlebot |
|---|---|---|
| Search visibility | Independent | Must be allowed for Search |
| ChatGPT-related fetch | Allow if you want refresh | Independent |
| Keep training crawlers out | Disallow and document | Do not confuse with GPTBot |
## How to inspect and fix robots.txt on Shopify
1. Open `https://yourstore.com/robots.txt`.
2. Search for `GPTBot`. If you see `Disallow: /` under that user-agent and you never chose it, that is the accident.
3. In admin: Online Store → Themes → ⋯ → Edit code → `robots.txt.liquid` (if present). Remove or narrow the GPTBot block you do not want.
4. Check SEO and security apps for “block AI crawlers” or similar toggles. Turn off the ones you did not intend.
5. Publish the theme. Wait for caches.
6. Re-open `/robots.txt` and confirm the live file matches the policy.
7. Re-open the [ChatGPT SEO check for Shopify stores](/chatgpt-seo/) and confirm the AI-crawler row passes.
8. Ask ChatGPT about a product URL and compare price and availability to the live PDP.
If you cannot find `robots.txt.liquid`, the rule is coming from Shopify’s default file, an app, or the host. Apps are the usual hiding place.
## What a healthy robots.txt looks like for AI
A healthy file is boring. Shopify’s default rules still protect checkout and account paths. Googlebot can fetch products and collections. Each AI user-agent you care about is either absent (so default allow applies) or listed with an explicit, documented Disallow.
You should be able to explain every `User-agent: GPTBot` (or ClaudeBot, PerplexityBot, Google-Extended) line in one sentence. If you cannot, it is inherited clutter.
Watch for:
- `Disallow: /` under an AI bot — that is a full opt-out
- A wildcard user-agent block that is broader than you think
- Duplicate GPTBot groups from the theme and an app, one allowing and one denying
- Rules that Disallow `/products` or `/collections` for everyone, which harms Search as well as assistants
Copy the live file into a dated note the first time you clean it. The next surprise is then a diff, not a mystery.
## Common mistakes
- Checking a local `robots.txt.liquid` that is not the published theme
- Allowing GPTBot while the PDP is noindex, then wondering why discovery is still dead
- Blocking “all scrapers” with a snippet that also hits the assistants your customers actually use
- Never re-opening `/robots.txt` after uninstalling the SEO app that added the block
## After you edit, and how often to re-check
Re-check after every SEO or security app install or removal, and after theme updates. Those events rewrite robots more often than merchants notice.
Crawl load from GPTBot is usually minor versus ads traffic. If you are genuinely capacity-constrained, watch logs and rate-limit at the host — do not leave a forgotten sitewide Disallow as your performance plan.
When the crawler row passes, ask ChatGPT about a product URL the same day. If the answer is still stale, the file may be fine and the model may be using a third-party source — but you have removed the self-own.
Open yourstore.com/robots.txt today. If you see GPTBot Disallow and you never chose that, fix it — then re-run the check and ask ChatGPT about a real product URL.
### FAQ
**Should I allow GPTBot on my Shopify store?**
If you want ChatGPT-related crawlers to fetch product and policy pages, yes. If you want to keep training corpora out, disallow deliberately and document why. Accidental Disallow from a copied snippet is not a policy.
**Does blocking GPTBot hide me from Google?**
Not by itself. Googlebot is separate. Google-Extended is the Google AI-related token the audit also watches. You can rank in Search and still be closed to ChatGPT-related fetching.
**Where is robots.txt on Shopify?**
Shopify serves /robots.txt on your shop domain. Themes can include a robots.txt.liquid template, and apps can influence rules. Always view the live file at yourstore.com/robots.txt rather than a local copy.
**Can the SEO & AI Audit change robots.txt for me?**
No. It only reports which AI bots are blocked. You or your developer edit the theme file, the SEO app setting or the host rules, then re-run the check.
**How do I unblock GPTBot on Shopify?**
Open the live robots.txt, find the GPTBot user-agent block, and remove or narrow the Disallow in robots.txt.liquid or in the app that added it. Publish, wait for caches, re-open the ChatGPT SEO check and confirm the AI-crawler row passes.
**Which AI bots should I look for besides GPTBot?**
ClaudeBot, PerplexityBot and Google-Extended are the other agents the audit watches — the ones merchants mean when they say AI SEO. Search the live file for each name.
**Will allowing GPTBot slow my Shopify store down?**
Crawl traffic is usually small next to shoppers and ads. If you have a specific capacity problem, handle it at the host with monitoring — not with a silent sitewide Disallow you forgot about.
## Shopify Product Schema for AI — What Merchants Need on the PDP
URL: https://ninety9.dev/blog/shopify-product-schema-for-ai.html
Published: 2026-09-07 (updated 2026-09-21)
Category: SEO & AI
Reading time: 5 minutes
ChatGPT and Google lean on product structured data. See which PDP facts to verify: name, image, price, availability and variants — then audit the URL.
Shoppers forgive a messy DOM. Models do not. Product schema — name, image, price, availability — is how a Shopify PDP becomes quotable instead of guessable. Paste the live `/products/handle` into the [ChatGPT SEO check for Shopify stores](/chatgpt-seo/) and fix whatever fails before you rewrite the description.
## What is Shopify product schema?
Product schema is structured data (usually JSON-LD) on the product page that labels the item for machines: this is a Product, this is its name, this is its image, this Offer has this price and this availability.
Your theme designer sees a pretty PDP. ChatGPT sees tokens. If price lives only in a JavaScript widget, the model invents or refuses. Schema is the label on the box; the visible price is what the shopper sees. They must match.
Modern themes often emit JSON-LD. Apps and customisations break it. Dawn is not a guarantee after three SEO apps. Always verify a live URL.
## Why product schema is a merchant problem
This is not “developer trivia.” When ChatGPT invents a price, shoppers blame the brand. When Google cannot form a product result, ads and organic both suffer. The people who own the catalogue — merchandisers, founders — are the ones who notice first.
Typical causes:
- SEO app plus theme plus reviews app emitting three Product graphs
- Price in Liquid but no Offer in JSON-LD
- Variant picker on the page, one SKU in markup
- Review stars in schema, no reviews visible
## The facts that matter on a product URL
Non-negotiables for most stores:
1. **Consistent product name** across H1, og:title and structured `name`
2. **Absolute image URLs** that load
3. **An Offer** with price and availability that match the shopper view
4. **Breadcrumbs** for category context when you show a trail
5. **Organization** so the seller is not anonymous
SKU is helpful when you have one. The audit prioritises identity, media and offer clarity first.
Deep dive on money fields: [price and availability in structured data](/blog/shopify-structured-data-price-availability.html). For the rest of the page types, use the [JSON-LD checklist](/blog/shopify-json-ld-checklist-merchants.html).
## Variants without the drama
If the shopper picks Size / Colour, structured data should represent those options. The audit flags when the theme shows options but markup pretends there is one SKU.
You do not need a novel in the JSON. You need the options that exist on the PDP to exist in the graph, and the Offer to reflect the variant the URL is showing. If each variant has its own URL, audit more than one.
Reviews: markup only if reviews are on the page. Stars in schema with an empty reviews app is a mismatch.
## How to verify on a live PDP
1. Open `/products/handle` in incognito as a customer. Note name, price, sold-out state, options.
2. Paste that exact URL into the SEO & AI Audit. It scores the URL you paste — not a guessed bestseller.
3. If price shows on the page but Offer fails, ticket structured data, not the Liquid price span.
4. Fix the theme snippet or the SEO app. Keep **one** Product graph.
5. Re-paste until the rows you care about pass.
6. Use the ask-ChatGPT button. Compare name, price and availability to the live offer.
Microdata-only setups are harder to audit and easier to mix with JSON-LD. Prefer JSON-LD as the single format.
## Where the markup lives in Shopify
Most Product JSON-LD comes from a theme snippet — often a file with `json`, `schema` or `product` in the name — included from the product template. SEO apps inject a second graph in the head. Reviews apps sometimes inject a third.
Your job as a merchant is not to memorise Liquid. It is to insist on **one** Product graph that matches the PDP. In Online Store → Themes → Edit code, search the theme for `ld+json` or `"Product"`. If you find more than one Product block on the live page, disable the extras in app settings rather than stacking patches.
Settings that feed the graph: product title, featured image, price, inventory policy, and variant options. If you change the title in admin, re-check that H1, og:title and JSON-LD `name` still agree — some apps cache an old SEO title.
## Common mistakes and when not to over-mark
- Checking the theme editor instead of the live PDP
- Fixing one product and assuming every template is fixed (bundles, preorders, gift cards often use other templates)
- Faking compare-at discounts in schema
- Adding every optional schema.org property before name/image/offer work
- Marking up a placeholder image when the gallery has loaded a real photo for shoppers
If the product is unlisted or the store is password-gated, schema is for staging. Public assistants will not fetch it until you publish. If the page is [noindex](/blog/noindex-killing-ai-discovery-shopify.html), fix that first.
Worked example: the PDP shows £48, In stock, sizes S–XL. JSON-LD has no Offer and a single unnamed Product. ChatGPT answers “around £40” from a blog roundup. You restore Offer (£48, InStock), list sizes, re-audit, and ask again. The description never needed rewriting.
Treat product schema like packaging: if the label is wrong, nobody trusts the box — including models. Match the PDP, then ask ChatGPT the same URL.
### FAQ
**Does the Dawn theme include Product schema?**
Modern Shopify themes often emit JSON-LD, but apps and customisations break it. Always verify on a live product URL rather than assuming Dawn (or any theme) is still clean after app installs.
**Is microdata enough for Shopify product SEO?**
JSON-LD is what most merchants and the audit look for. Mixed formats — microdata plus JSON-LD plus an app — confuse everyone. Prefer one Product graph in JSON-LD.
**My price shows on the page but the audit fails. Why?**
Then Offer markup is missing, incomplete or disagrees with the visible price. Fix the structured data, not only the Liquid price. Models read the Offer; shoppers read the span.
**Do I need SKU in Shopify product schema?**
Helpful when you have one. The audit prioritises identity, media and offer clarity first: name, image, price, availability. Add SKU when it is stable and visible to operations.
**What product schema do I need for ChatGPT to read a Shopify PDP?**
A Product with a matching name, a loadable image, and an Offer that states price and availability. Add variants when the shopper picks Size or Colour, and add review markup only if reviews are on the page.
**Should review stars go in JSON-LD if reviews are in a popup?**
Only mark up reviews that shoppers can see on the page. Hidden or app-only reviews in schema without on-page reviews is a mismatch. Put the reviews on the PDP or leave them out of markup.
**How do I verify Shopify product schema without a developer?**
Paste the /products/handle URL into the ChatGPT SEO check for Shopify stores, fix fails, and re-paste. Then use the ask-ChatGPT button and see whether the answer matches your real offer.
## Shopify JSON-LD Checklist for Merchants (No Developer Jargon)
URL: https://ninety9.dev/blog/shopify-json-ld-checklist-merchants.html
Published: 2026-09-06 (updated 2026-09-21)
Category: SEO & AI
Reading time: 5 minutes
A plain-English JSON-LD checklist for Shopify: shop identity, products, collections, articles, breadcrumbs and FAQs — plus a free audit per URL.
You do not need to speak “schema.org” fluently. You need a Shopify JSON-LD checklist per page type and a habit of verifying live URLs. JSON-LD is the hidden label that names the shop, the product, the price and the article so Google and AI assistants do not have to guess from theme HTML. Print the list below, then run each URL type through the [ChatGPT SEO check for Shopify stores](/chatgpt-seo/).
## What is JSON-LD on Shopify?
JSON-LD is a small block of structured data in the page source, usually inside a `