> ## Documentation Index
> Fetch the complete documentation index at: https://docs.senderz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Installing popups on your store

> Enable the Senderz runtime on Shopify, WordPress, WooCommerce, Konimbo or another site, then confirm your popups are actually serving.

Popups are drawn by a single Senderz runtime that loads on your storefront. You install it once. Every popup you publish afterwards appears without touching your theme again.

## Before you start

* **Your store or site must be connected in Senderz.** The runtime identifies your site by its address and asks Senderz which popups belong to it. A site that is not connected gets nothing back, so no popup can render. Connect it under **Settings → Integrations**.
* **You need at least one published popup** whose targeting matches the page you are testing on.

## Where the install instructions live

Open the popup, click **Publish or schedule** in the builder header, and read the **Install** card in the panel that opens. Senderz shows the path for your platform, so you do not have to guess which one applies to you.

## Shopify

<Warning>
  Do not paste a script into your Shopify theme. Shopify serves the Senderz
  runtime through a theme app embed. There is no snippet to copy, and editing
  Liquid files is not a supported install path.
</Warning>

<Steps>
  <Step title="Connect Shopify">
    Install Senderz from the Shopify App Store, or connect it under **Settings →
    Integrations**. See [Shopify](/en/integrations/shopify) for the full connect
    flow.
  </Step>

  <Step title="Turn on the app embed">
    In your Shopify admin go to **Online Store**, then **Themes**, choose
    **Customize** on your published theme, open **App embeds** and switch on
    **Senderz App Embed**. Senderz can take you straight there: the Shopify
    integration card has an **Open theme editor** button, and the Senderz app
    inside Shopify admin has **Enable in theme editor**.
  </Step>

  <Step title="Save the theme">
    Click **Save** in the theme editor. Nothing is applied until you save.
  </Step>

  <Step title="Check it back in Senderz">
    Return to Senderz and click **Check again**. The **Senderz App Embed** row
    should change to **Enabled**.
  </Step>
</Steps>

<Note>
  Senderz checks your **published** theme. Enabling the embed on a draft or
  unpublished theme leaves the row at **Not enabled yet**, even though the
  toggle looks on in the editor you were working in.
</Note>

<Info>
  Enabling the embed makes popups possible on the storefront. It does not
  publish a draft popup. Each popup still has to be published on its own.
</Info>

## WordPress and WooCommerce

One plugin covers both. It is called **Senderz Marketing** and it works on any WordPress site, with or without WooCommerce.

<Steps>
  <Step title="Install the plugin">
    In WordPress go to **Plugins**, then **Add New**, search for **Senderz
    Marketing**, and install and activate it. If the site cannot reach the
    plugin directory, use the **Download the WordPress plugin** link in the
    Senderz install card and upload it under **Plugins → Add New → Upload
    Plugin**.
  </Step>

  <Step title="Open the plugin screen">
    Open **Senderz Marketing** in the WordPress admin menu. With WooCommerce
    active it sits under **Marketing**. Without WooCommerce it is its own
    top-level menu item.
  </Step>

  <Step title="Connect to Senderz">
    On the **Connection** tab click **Connect to Senderz**, then approve the
    request in your Senderz workspace. The tab then reads **Connected**.
  </Step>
</Steps>

<Note>
  **Site not reachable from the internet?** Use **Manual setup** on the same
  screen. It asks for your Workspace ID and an API key, both of which come from
  Senderz under **Settings → API Tokens**. This is the path for staging and
  local sites that the approval redirect cannot reach.
</Note>

<Info>
  Nothing leaves your site until you connect it. On a fresh install the plugin
  makes no outbound request of any kind, so no storefront script loads and no
  popup can appear before that step.
</Info>

If you were running the older WooCommerce-only Senderz plugin, installing this one takes over automatically. Your settings carry across and the old plugin is deactivated. Connect from the **Senderz Marketing** screen so the site is linked to your workspace directly.

The WooCommerce connection has two halves that are set up and reported separately: the store data connection and the plugin. See [WooCommerce](/en/integrations/woocommerce) for both.

<Tip>
  Once a WordPress or WooCommerce site is connected, the install card
  disappears from the publish panel. That is not a fault. There is nothing left
  to install, so Senderz stops showing the instructions.
</Tip>

## Konimbo

Paste one snippet into your theme footer, under **Settings and custom scripts**:

```html theme={"system"}
<script async src="https://cdn.senderz.app/snippets/konimbo.js"></script>
```

Add it once. It covers every popup you publish after that.

The snippet reports whatever address the visitor is browsing. If your live storefront runs on a custom domain but you connected a different address in Senderz, name the connected address explicitly:

```html theme={"system"}
<script async src="https://cdn.senderz.app/snippets/konimbo.js" data-shop="yourstore.konimbo.com"></script>
```

<Warning>
  Two popup features are unavailable on Konimbo. **Cart targeting rules** need a
  cart the site exposes to the browser, and a **push subscribe** block needs a
  service worker served from your own domain. Konimbo has neither, so the cart
  rules control is hidden in the builder and a push subscribe block stays
  inert. Everything else works normally.
</Warning>

See [Konimbo](/en/integrations/konimbo) for the store connection itself.

## Any other platform

The install card offers the two routes that exist: install the **Senderz Marketing** plugin if the site runs on WordPress, or open **Integrations** and connect a supported store.

<Note>
  On-site popups run on connected Shopify and Konimbo stores, and on any
  WordPress site using the plugin. There is no generic paste-anywhere popup
  snippet for other platforms today. If your site is none of those, use an
  [embedded form](/en/integrations/embedded-forms) instead. It is a native form
  you place in your own page markup, and it works anywhere.
</Note>

## Confirm it is live

<Steps>
  <Step title="Check the popup's own status">
    A popup only serves when its status is **Live** and its publish window is
    open. **Draft**, **Paused**, **Scheduled** and **Ended** all serve nothing.
    A popup you scheduled is set to Live, but its chip reads **Scheduled**
    until its start time passes, and **Ended** once its end date does.
  </Step>

  <Step title="Open your storefront in a private window">
    A private window clears the browser memory of popups this visitor has
    already seen or submitted, which is the single most common reason a popup
    looks broken to the person who built it. Make sure the page, device and any
    other targeting rules actually match.
  </Step>

  <Step title="Watch impressions rise">
    The popups list shows **Impressions**, **Conversions** and **CVR** per
    popup. On Shopify, the Senderz app inside Shopify admin also shows **Last
    storefront event**, **Last popup impression** and **Last popup
    conversion**, which read **No event yet** until the first one arrives.
  </Step>

  <Step title="Check the runtime loaded">
    Open your browser's developer console on the storefront and type
    `window.SenderzStorefront`. If it is undefined, the runtime is not on the
    page and the problem is the install step, not the popup.
  </Step>

  <Step title="Check which popups the site received">
    `window.SenderzStorefront.activePopups` lists the popups the runtime
    fetched for this site. An empty list means the runtime loaded and reached
    Senderz, but nothing live and in-window came back.
  </Step>
</Steps>

To force a popup open without waiting for its trigger:

```js theme={"system"}
window.SenderzStorefront.openForm("welcome");
```

The argument is the popup's handle, set under **Targeting and display → Display → Custom trigger**, or its id. The call skips the timing rules and the show-again frequency, because you have explicitly decided this is the moment. It still honours audience, page, device, cart, schedule and the do-not-show-again-once-submitted rule, so a public handle cannot widen a targeted popup. It returns `false` when nothing matches or a popup is already open.

## Troubleshooting

| Symptom                                                                   | What to check                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Nothing appears, and the console says `SenderzStorefront` is undefined    | The runtime is not loading. On Shopify, confirm the app embed is on the **published** theme and that you clicked Save. On WordPress, confirm the **Senderz Marketing** screen reads **Connected**. On Konimbo, confirm the snippet is in the live theme.                                                                                                                                                                                       |
| The runtime is there but `activePopups` is empty                          | Nothing live matched this site. Confirm at least one popup is **Live**, its start time has passed, its end date has not, and the address the site reports is the same one you connected in Senderz.                                                                                                                                                                                                                                            |
| The site address does not match                                           | On WordPress open **Senderz Marketing → Advanced** and set **Site address**. Leave it blank to use the site's own address, and set it only if you connected Senderz with a different one, for example www versus non-[www](http://www). On Konimbo, add `data-shop` to the snippet.                                                                                                                                                            |
| The popup shows on some pages and not others                              | URL rules under **Targeting**. A rule containing `://` is matched against the whole page address, a rule without it against the path only. Check the mode is include or exclude as you intended.                                                                                                                                                                                                                                               |
| It appeared once and never again                                          | Expected. Senderz remembers that this browser has already been shown the popup and, by default, will not show it again for a day. Setting **Frequency** to `0` shows it on every visit. If **Do not show again once submitted** is on, submitting hides it in that browser for good. Test in a private window.                                                                                                                                 |
| Popups work but a feature you just set up does not, and only on WordPress | A page optimiser or minifying plugin has cached its own copy of the Senderz runtime and is serving a frozen version. Purge the optimiser's cache once. The fingerprint is that cart and checkout pages behave correctly while product and category pages do not, because most optimisers exclude cart and checkout by default. Current plugin versions mark the runtime as do-not-optimise, so this only affects a site that cached it before. |
| Impressions stay at zero while sign-ups still arrive                      | A tracking or ad blocker is dropping the impression signal. See [Popup testing and results](/en/messaging/popup-testing-and-analytics) for how Senderz reports that case rather than inventing a rate.                                                                                                                                                                                                                                         |
| Visitors briefly see a try-again message on submit                        | The storefront abuse limits refused a burst. One store may submit 60 sign-ups a minute and 5,000 a day, and run 120 game draws a minute. A refusal is honest to the visitor rather than showing a thank-you for a sign-up that was never saved.                                                                                                                                                                                                |
| Shopify says **Unavailable on the published theme**                       | The published theme does not support app embeds. Update or switch to a theme that does, publish it, enable Senderz on that theme, then check again.                                                                                                                                                                                                                                                                                            |

## Next

<CardGroup cols={2}>
  <Card title="Build a popup" icon="window-restore" href="/en/messaging/popups">
    Steps, targeting, triggers, games and rewards.
  </Card>

  <Card title="Test and read results" icon="flask" href="/en/messaging/popup-testing-and-analytics">
    Pre-launch checks, A/B variations and the step funnel.
  </Card>

  <Card title="Embedded forms" icon="input-text" href="/en/integrations/embedded-forms">
    A native form for sites the popup runtime does not cover.
  </Card>

  <Card title="Web push" icon="bell" href="/en/channels/push">
    Browser notifications, including the push opt-in block inside a popup.
  </Card>
</CardGroup>
