Why can't I add a popup or upsell offer without installing an app?

Themes stay deliberately lean on marketing widgets. Here's why upsell and popup features live in apps instead, and how to add one without wrecking your store's speed.

themesappspopupsupsellperformance

What's going on

A common frustration for merchants building out a new store: the theme looks polished, the product pages are clean, the homepage is nice, but there's no built-in way to show a discount popup when someone is about to leave, or an upsell offer when they add something to cart. So they go digging through theme settings looking for an upsell or popup toggle and find nothing, which feels like a strange gap for something this common in ecommerce.

This isn't a bug or an oversight in any particular theme. Shopify's theme architecture separates layout and design from marketing behavior and logic. Themes distributed through the Shopify Theme Store are held to performance and code-quality standards, and features like popups, exit-intent offers, and cross-sell logic are treated as app territory rather than theme territory, precisely because they tend to add scripts and third-party calls that hurt page speed if baked into every theme by default.

The practical result is that merchants have to install a separate app to get popup or upsell functionality, which comes as a surprise to anyone coming from page builders or all-in-one platforms where marketing widgets are built into the site editor itself.

Why it happens

Shopify draws a firm line between the theme layer and the app layer. Themes handle layout, styling, and content rendering; apps handle behavior that varies a lot merchant to merchant and carries an ongoing performance or third-party-script cost. Popups and dynamic upsell logic fall into that second bucket, so Shopify routes that functionality out to apps that integrate through theme app extensions, meaning app blocks and app embeds you can turn on in the theme editor, rather than shipping it in every theme's default code.

It's also a Theme Store policy matter. Themes submitted to the Theme Store are held to performance benchmarks, and shipping every theme with popup or upsell scripts by default would make those checks much harder to pass consistently, and would add page weight for merchants who never wanted a popup in the first place.

5 ways to fix it

1

Add the popup through a theme app extension, not by editing theme code

Install an app that ships a theme app extension, then turn it on yourself under Online Store > Themes > Customize > App embeds (or App blocks, depending on where the app places it). This keeps the popup logic out of your theme files, so a theme update or a future theme switch won't break it or silently turn it off. Most reputable popup, upsell, and cart-drawer apps work this way instead of injecting a script tag directly into your theme.

2

Check whether Shopify's native tools already cover what you need

Not every upsell needs a popup app. Shopify's checkout supports discount-driven messaging, and Shopify Functions can power things like cart transforms and checkout customizations on plans that support them. If your real goal is just reminding shoppers about a related product rather than showing a flashy modal, a manually curated recommendations section using your theme's native product recommendations block often does the job with no added scripts at all.

3

Weigh the performance cost before you install anything

Every popup or upsell app adds at least one script, and often a check that runs on every page load. Before installing, look at the app's listing for any published speed-impact data, and re-run your own store's speed test right after activating it using a tool like PageSpeed Insights. Shopify holds themes distributed through the Theme Store to performance standards, so a poorly built popup app can visibly slow down a store that was fast before, and a slower store tends to convert worse than the upsell gains back.

4

Favor apps that load lazily and uninstall cleanly

When comparing options, prefer apps that only load their popup script after a trigger condition is met, rather than on every single page view, and that remove themselves completely on uninstall, without leftover app embed blocks, metafields, or stray script tags. Test the install and uninstall on a duplicate or development theme first so you're not left cleaning up orphaned code later.

5

If you have checkout extensibility, look there for some upsell use cases

On plans with checkout extensibility, certain upsell and cross-sell scenarios, like post-purchase offers or in-checkout recommendations, can be built with checkout UI extensions instead of a storefront popup. That keeps the logic out of your theme's page load entirely and subjects it to Shopify's own review and performance rules for extensions.

Bottom line

Shopify keeps popup and upsell logic out of themes on purpose: that behavior lives in the app layer (through theme app extensions and, for some cases, checkout UI extensions) so it can be added, updated, or removed without touching your theme's code or putting every store's speed at risk. Start with native recommendation blocks and discount tools if your needs are simple, and reach for a lightweight, lazy-loading popup app only when you need real behavioral triggers like exit intent or a cart value threshold. A narrowly-scoped popup app is usually a safer performance bet than a bundled all-in-one marketing suite.

Still Stuck?

Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.