Each section below is a symptom. Work through its checks in order. Most reports are explained by one of the first three checks in the first section.
Test in a private or incognito window, and close the browser between attempts. A normal window remembers dismissed popups, session state and an old cart, and any of those makes a working feature look broken.

Start here: the three usual causes

Before anything else, rule these out. Between them they account for most “it does not work” reports.
Nothing CartSella does reaches the storefront without it. Go to Online Store → Themes → Customize, open the theme settings icon at the bottom of the left sidebar, then App embeds, and check that CartSella — App embed is on. Click Save.The fastest check is inside CartSella: Settings → Theme blocks shows the embed’s status at the top, with a one click Activate app embed button.
The App embeds panel in the Shopify theme editor with the CartSella app embed toggle switched on
If you recently switched, duplicated or installed a theme, the embed is off on the new one even though it was on before.
Your theme carries a copy of the CartSella storefront code, and it refreshes when the theme is saved. A theme that has not been saved since a CartSella update can be running older code.Open the theme editor and click Save, even with no changes. Then retest in a fresh browser session.
Most CartSella surfaces need a block on a specific template. An offer with no block on the page has nothing to render into.Open Settings → Theme blocks in CartSella. Every block shows Added or Not added against your published theme, and Add to theme opens the theme editor with the block already placed on the right template, so all you do is click Save.A block added to a draft or unpublished theme still reads Not added, because that is not the theme your shoppers see.

My offer or upsell is not showing

App embed on, theme saved recently, block added to the published theme. If any of those is the cause, nothing below will help.
A Draft, Inactive, Archived or Expired item never reaches the storefront. Drafts do not even have an ID to paste into a block.If it says paused and you did not pause it, jump to The offer switched itself off.
A start date in the future, or an end date already in the past, hides it. An item past its end date is treated as expired everywhere on the storefront.
Re-copy the ID from CartSella and paste it again. A trailing space is enough to break the match.Blocks are not interchangeable. The Bundles block only accepts bundles, the Upsell block only accepts upsells, and the Offers block accepts every non-bundle offer type. Pasting the wrong kind of ID renders nothing, or shows “Offer unavailable”.
A CartSella Offers block selected in the Shopify theme editor with the offer ID pasted into its ID setting
Each block belongs somewhere: the Offers block on the product page, the cart upsell and the progress bar in the cart, the announcement bar and countdown wherever you want them. A block on the wrong template renders nothing. The table in Storefront blocks has them all.
The Offers and Upsells pages show “X / Y active on your plan”. At the cap, activating one more will not go through. Pause something you are no longer running, or upgrade. See Plans and billing.
Open the Eligibility section. A customer location rule, a markets rule or a traffic source rule can be excluding the exact way you are testing.Customer tag and order history rules are the exception: on the storefront they do not hide anything from a logged out shopper. See Customer rules behave differently before checkout.
A “cart reaches an amount” trigger needs a cart above that amount. A “specific product” trigger needs that exact product, in that quantity. Add the qualifying item and check again.
If every CartSella surface disappeared at once, this is a store level block, not an offer problem. See Everything stopped at once.

The free gift is not added to the cart

The gift is added in the shopper’s browser as the cart changes, so the checks are different from a display problem.
App embed on, theme saved, offer active, dates current, store not blocked. All of them apply here too.
An out of stock variant cannot be added. CartSella switches off an offer whose gift has run out, and switches it back on by itself once stock returns. Check the offer for an Out of stock badge.
Buying 2 of the trigger product when the condition says 3 adds nothing.The main condition multiplies by complete sets. If the condition is “buy 2”, then 4 units give 2 gifts and 5 units still give 2. See Gift quantity is not what I expected.
A minimum cart total in the Eligibility section is a gate, not a multiplier. It blocks the gift below the threshold and releases it above, and it removes the gift again if the cart drops back under. The same goes for minimum item count, weight and required products.
The gift is added just after the cart changes, not in the same instant. Open the cart drawer or reload the cart page before concluding it failed.
Close the browser, reopen it, and build the cart from scratch. A cart carrying state from an earlier test is the single most common false alarm.
Shoppers cannot delete a free gift line themselves. If a gift disappears, the cart stopped qualifying. Bundle and pack reward lines are different: those can be removed, and removing one also removes the bundle discount from the paid lines, because the shopper has undone the bundle.

Gift quantity is not what I expected

Two rules explain nearly every surprise here, and they behave differently on purpose. So “buy 2 shirts, get a free cap” gives a shopper with 6 shirts three caps. Adding “and spend at least 100” to the same offer does not give them more caps for spending 300, it only decides whether they get any.
If you want one gift no matter how many qualifying units are bought, set the gift quantity so it does not scale with the trigger, in the offer’s reward settings. If you want a cap regardless of configuration, there is a store wide Maximum gift units per order in Settings → Discount alerts.

The discount is not applied at checkout

Several offers can qualify for one cart. Priority in Advanced options decides which one applies: the range is 1 to 10, 1 wins, and the default is 5. Two offers both left at 5 are a coin toss you did not intend.
Combinations in the Advanced section decides whether a CartSella discount can sit alongside Shopify order, product and shipping discounts, including discount codes your shoppers enter.
This setting is store wide, not per offer. Shopify allows one combination setting per app, so changing it on one offer changes it for every CartSella offer in your store. The editor shows a banner saying exactly that.
If codes stopped working across the whole store right after you edited one offer, this is why.
Two apps creating automatic discounts compete for the same slot, and Shopify picks the winner. The symptom looks like an intermittent CartSella bug: it applies on some carts and not others. Check your Shopify Discounts page for automatic discounts you did not create in CartSella, including old ones you forgot about. See Compatibility.
An offer whose total usage cap is spent switches itself off. An offer with a per customer cap simply stops applying for that customer, while staying live for everyone else. Per customer caps only count shoppers with an account, so a guest checkout is never limited by one.
An offer gated on customer tags or order history shows to logged out shoppers on the storefront, but the checkout re-checks against the real customer. A guest who does not qualify sees the offer and then does not get the discount. This is deliberate, see the next section.
Country, market and delivery rules are evaluated at checkout against the address the shopper actually entered, which may not be the one you tested with.
An offer that ended between the shopper adding to cart and checking out no longer applies.

Customer rules behave differently before checkout

This is intended behaviour, and it surprises people, so it is worth knowing before you report it as a bug. An offer gated on customer tags or order history:
  • On the storefront, does not hide itself from a logged out shopper. The rule needs a known customer, and a logged out visitor has none, so hiding it would make the offer invisible to every visitor who has not signed in.
  • At checkout, is enforced properly. Shopify has resolved who the buyer is by then, so a shopper who does not qualify does not get the discount, and a free gift they do not qualify for is taken back out.
The practical consequence: a guest can see an offer they will not receive. Nothing is mispriced and no money leaks, because the discount is decided at checkout, not on the page.
If a reward absolutely must be guaranteed to everyone who sees it, do not gate it on customer tags or order history. Use a rule that the storefront can evaluate for anyone, such as products in the cart or the cart total.

The offer switched itself off

CartSella pauses an offer for exactly three reasons, and each one leaves a banner in the editor telling you which. Nothing is deleted in any of these cases, and a paused offer stops counting toward your plan’s active item cap.
Upsells can also switch themselves off when their total usage cap is spent, but they carry no explanatory badge. An upsell that quietly went inactive is worth checking against its usage limit first.

Everything stopped at once

Every offer, every upsell, every block, all at the same time, and the CartSella navigation shows only Pricing. Your store is blocked. There are two causes, and the Pricing page tells you which:
  1. You crossed your monthly order limit. Crossing it blocks immediately, with no grace period on the storefront. Every block stops rendering and the CartSella discounts are removed from Shopify.
  2. A Shopify charge is unpaid, declined or cancelled.
The CartSella Pricing page showing the blocked notice and the Current usage card with the order limit reached
Upgrading restores everything within a few minutes, and so does the start of a new billing window. Your configuration is untouched throughout: nothing is deleted, nothing is reset to draft, and you do not need to re-save anything. Full detail in Plans and billing.

The block is not in the theme editor

CartSella needs an Online Store 2.0 theme. Vintage themes cannot host app blocks or the app embed, so CartSella cannot run on them at all. See Compatibility.
The list of CartSella blocks is filtered by template. The progress bar is offered in the cart, the Offers block on the product page, and so on. Check the table in Storefront blocks.
Settings → Theme blocks in CartSella gives every block an Add to theme button that opens the theme editor with the block already placed. It removes the guesswork about templates entirely.
If the app was installed before a block existed and never re-authorized, reinstall it from Settings → Apps and sales channels. Reinstalling rebuilds your discounts and storefront data automatically, so nothing is lost.

Prices or discounts look wrong on the page

A pack selector or bundle widget shows what the shopper will pay once the discount applies. Shopify applies the actual discount in the cart and at checkout, so a line can read full price until then. Take the checkout total as the truth.
A struck-through price comes from the product’s compare-at price in Shopify, not from CartSella. Fix it on the product.
Set Priority in Advanced options so the intended offer wins. Lower numbers win, and the default is 5.
Thresholds are set in your store currency. A shopper in another market converts at your Shopify market rates, so the number they see may not be the number you typed.

The popup never appears

The boost popup, the offers hub and the floating bubble all run through the app embed. Check the embed first, not your theme sections.
A boost popup set to “Once per session” or “Once only” will not come back for you after the first time. Use a private window.
A site entry popup with a 20 second delay needs 20 seconds. An add to cart popup limited to specific products needs one of those products.
The offers hub has a Show on pages setting. Set to Cart only, it will not appear on a product page.

Analytics does not match my Shopify reports

The numbers are supposed to differ. CartSella reports on a slice of your store, not all of it.
Only orders CartSella was attributed to, meaning an offer, an upsell or a campaign link was involved. Orders with no CartSella involvement are not in Analytics at all.
CartSella aggregates by UTC day, Shopify reports in your store time zone. Near the edges of a range that alone explains a gap.
Revenue is before refunds. Use Net of refunds for the after refunds figure. Fully cancelled orders are excluded from revenue.
On a multi-currency store, money is reported in your dominant selling currency only, so mixed totals stay coherent. Orders in other currencies count toward order numbers but not toward that money figure.
It is a cost figure shown on its own. It is never subtracted from Revenue, which is already what the customer paid.
Analytics starts the day CartSella was installed. There is no backfill from before then.
If a discounted order is genuinely missing rather than just different, email us the order number.

Still stuck

Email [email protected] with:
  • your store domain,
  • the name of the offer or upsell,
  • what you expected and what happened,
  • the order number, if it involves a specific order.