Quick answer
Check the published theme app embed first. Then confirm that a live campaign version exists, the current URL and visitor qualify, the frequency rule has not suppressed the popup, and the selected trigger has actually occurred. Only after those checks should you investigate a rendering or network failure.
“Not shown” is often the correct result of a page, audience, schedule, frequency, consent, or trigger rule. Good diagnostics should identify that rule.
Use the storefront decision order
| Stage | What to verify | Typical result |
|---|---|---|
| Installation | The app is installed for the same shop you are viewing. | An old or different development-store installation cannot serve the expected campaign. |
| Theme embed | The popup app embed is enabled on the published theme. | Installed app, no storefront runtime. |
| Campaign | A live immutable version is active now. | A saved draft alone should not display. |
| Page and audience | The URL, device, country, schedule, and other qualifications match. | The visitor is correctly excluded. |
| Frequency | The popup was not already shown, closed, or completed under the chosen rule. | Session or visitor suppression applies. |
| Trigger | The delay, scroll threshold, exit signal, or immediate event occurred. | The runtime is still waiting. |
| Render | The decision request succeeded and validated content can mount. | A genuine runtime or content error appears. |
1. Confirm the app embed on the published theme
Shopify theme app embeds are disabled by default after installation. A merchant must activate the embed in the theme editor, and it must be enabled on the theme currently published—not only on a draft theme used for preview.
- Open Shopify Admin → Online Store → Themes.
- Open Customize for the published theme.
- Open Theme settings → App embeds.
- Enable the popup app embed.
- Save the theme.
- Open the real storefront in a new tab.
Shopify documents this default activation behavior in its theme app extension configuration guide.
2. Confirm a live campaign—not only a complete draft
A draft can reach 100% completion without being a live storefront version. Confirm the campaign status, current publication time, start and end schedule, and whether publication created an immutable version successfully.
If a newer draft exists after publication, the storefront should continue receiving the last successfully published version until the merchant publishes again. Do not assume that editing a draft changes the live popup.
3. Test the exact page and visitor conditions
Open the same path type that the campaign targets. A homepage, product page, collection page, cart, password page, and theme preview can produce different decisions.
- Confirm the path rule matches without relying on query parameters.
- Check device targeting at the actual viewport width.
- Check country and availability rules.
- Check campaign start and end time using the configured timezone.
- Check product-view or engagement thresholds.
- Confirm the visitor is not an excluded staff, preview, or test context.
4. Check frequency suppression
If you already saw or closed the popup, once-per-session, once-per-visitor, repeat-after-days, or conversion suppression can correctly hide it. Refreshing does not necessarily create a new session or visitor.
Use the app’s test mode or decision diagnostics when available. Incognito mode can be useful for comparison, but it changes storage and consent conditions, so it is evidence—not proof that production is broken.
5. Reproduce the selected trigger
- Immediate: wait for the eligibility request and storefront runtime to finish.
- Delay: remain on the page for the configured duration without navigating.
- Scroll depth: use a page long enough to reach the threshold.
- Exit intent: test with a pointer on desktop; mobile requires a separate fallback because there is no cursor departure.
Read the trigger timing guide before switching to immediate display simply to make testing easier.
6. Investigate runtime and app conflicts last
After eligibility is confirmed, inspect the browser console and network log for a failed decision request, invalid response, content validation failure, blocked asset, or rendering exception. Also check whether another app has locked body scrolling, placed a full-screen overlay above the popup, or created a conflicting global style.
A cookie banner, chat widget, loyalty launcher, cart drawer, and another popup can all compete for fixed positioning and z-index. Disable them one at a time on a duplicate theme to isolate the cause rather than editing the published theme blindly.
Run one clean verification
- Use the published theme and a known eligible storefront URL.
- Confirm app embed activation.
- Publish a short test window with a visible but non-destructive offer.
- Select once-per-session and a short delay.
- Open a new browser context.
- Record the decision reason, trigger event, render, close, and CTA result.
- Repeat once on a mobile viewport.
If PrimePopup remains invisible, send the shop domain, campaign name, tested URL, local time, viewport, and a screenshot to support@primepopups.com. Do not send Shopify access tokens or shopper data.
