# Welcome

Create product labels, badges, trust badges, highlights, and banners for your Shopify store.

Sami Product Labels helps you highlight promotions, product information, and trust signals across your Shopify storefront.

{% hint style="info" %}
A **label** appears inside the product image, while a **badge** appears outside the product image.
{% endhint %}

## Features

* [**Badges & Labels**](/badges-and-labels/overview) — Create image or text designs and control where and when they appear.
* [**Badge Groups**](/badge-groups/overview) — Arrange multiple labels in a horizontal or vertical group.
* [**Extra Features**](/extra-features/trust-badge-overview) — Add trust badges, product highlights, and promotional banners to your storefront.
* [**AI Features**](/ai-features/overview) — Generate, edit, and translate badge content with AI.
* [**Analytics**](/analytics/overview) — Review the performance of your app content.

## Get started

{% stepper %}
{% step %}

### Enable the app

[Enable the app in your Shopify theme](/getting-started/enable-app-in-theme).
{% endstep %}

{% step %}

### Create a badge or label

Open **Badges and Labels**, select **Create new badge/label**, then choose a text or image design.
{% endstep %}

{% step %}

### Configure and publish

Select the products and display conditions, preview the result, then select **Save & Enable**.
{% endstep %}
{% endstepper %}

For complete steps, see the [Quickstart guide](/getting-started/quickstart).

## Support

See [Troubleshooting](/help/troubleshooting), read the [FAQ](/help/faq), or [contact support](/help/contact-support).

* [Shopify App Store](https://apps.shopify.com/product-labels-badges-samita)
* [Privacy Policy](https://samita.io/pages/privacy-policy)
* [Terms and Conditions](https://samita.io/pages/terms-and-conditions)


# What's new

Explore the latest features and improvements in Sami Product Labels.

Updates are listed from newest to oldest.

## August 24, 2026

### Version 4.4.0

#### Manage Extra Features in one place

Version 4.4.0 brings **Trust Badges**, **Highlights**, and **Banners** together in a redesigned **Extra Features** area, making them easier to find and manage:

* [**Trust Badges**](/extra-features/trust-badge-overview) — build trust with payment, security, shipping, and guarantee badges using the refreshed interface and featured templates.
* [**Highlights**](/extra-features/highlight-overview) — present product benefits in a scannable block with customizable icons and layouts.
* [**Banners**](/extra-features/overview) — publish basic or infinite-scroll announcements and control where they appear on your storefront.

<figure><img src="/files/yE7ms3TJuCAlDEsctBdo" alt="The redesigned Extra Features page with navigation for Trust Badges, Highlights, and Banners"><figcaption><p>Trust Badges, Highlights, and Banners are now organized together in Extra Features.</p></figcaption></figure>

## August 3, 2026

### Version 4.3.7

#### Create badge groups

Combine multiple badges into one group and display them together outside the product image. You can:

* Choose a horizontal or vertical layout.
* Adjust badge size and spacing.
* Align the group to match your product page.
* Place the group below important product elements or in a custom theme position.

Use it to group related messages—such as free shipping, secure checkout, and a guarantee—in one section.

[Learn how to create a badge group](/badge-groups/create-badge-group)

## May 2026

### Version 4.3.0

#### Understand how badges and labels perform

The new **Analytics** dashboard measures the results of your badges and labels. Review:

* Total Add to Cart actions.
* Total orders.
* Total revenue.
* Results for an individual badge or label.
* Performance changes compared with the previous period.

[Learn about analytics](/analytics/overview)

## March 2026

### Version 4.1.5

#### Translate text labels with AI

Translate label text into multiple store languages without editing each language tab manually. Select **Auto Translate** in the label settings to generate translations from your original text.

Review translations before publishing to keep product names, brand terms, and campaign messages on-tone.

#### Smoother dashboard navigation

Small interface and performance improvements make everyday tasks clearer and smoother.

## December 2025

### Version 4.1.0

#### Create label images with AI

Turn a text prompt into a label image. Describe the wording, colors, shape, and visual style you want, then generate a design for your campaign.

[Learn how to generate a badge image with AI](/ai-features/generate-image)

#### Clearer dashboard experience

Light interface and performance updates make the dashboard easier to navigate.

## November 2025

### Version 4.0.6

#### Show label content from metafields

Display product-specific content from a product or variant metafield. A single label can show a different value for each product or variant without requiring separate labels or theme-code changes.

For example, use metafields to display material, origin, care instructions, delivery information, or another custom product value.

[Learn how to show metafield values in dynamic text](/badges-and-labels/dynamic-variables)

## October 2025

### Version 4.0.5

#### Faster storefront loading

The new storefront API improves response times, so labels and badges appear sooner while shoppers browse your store.

#### Cleaner setup experience

Refined interface elements make settings easier to understand and common tasks quicker.

## July 2025

### Version 4.0.4

#### Organize multiple labels into a group

Label Groups let you display three or four labels together. Arrange them horizontally or vertically, adjust their size and spacing, and choose whether the group uses each label's existing conditions or its own display conditions.

[Learn how to create a label group](/badge-groups/create-badge-group)

#### Control label priority

Set priority rules to decide which eligible label shoppers see first when multiple labels match the same product.

#### Improved mobile dashboard

Updated button layouts make the app easier to navigate and manage from a mobile device.


# Quickstart

Install the app, build your first badge, and see it live on your storefront in a few minutes.

This walkthrough takes you from installing **Sami AI Product Labels & Badge** to a badge live on your product pages.

{% stepper %}
{% step %}

## Install the app

Open the [Shopify App Store listing](https://apps.shopify.com/product-labels-badges-samita) and click **Install**, then review and approve the requested permissions.

<figure><img src="/files/QY7f51H3F5MTUzTPpDSR" alt="Sami AI Product Labels listing in the Shopify App Store"><figcaption><p>Click Install on the app listing page.</p></figcaption></figure>
{% endstep %}

{% step %}

## Enable the app embed

{% hint style="warning" %}
Do this first. Badges never render on your storefront until the app embed is on — even a badge set to **Active** stays invisible without it.
{% endhint %}

On the **Dashboard**, check the status chip beside **Explore outstanding features**. If it reads **App embed inactive**, turn the embed on in your theme editor.

<figure><img src="/files/OEPZgUM95RTqPzk3TdfA" alt="Shopify theme editor showing the App embeds panel with Sami Product Labels toggled on"><figcaption><p>Toggle on the app embed and click Save in the theme editor.</p></figcaption></figure>

Full instructions: [Enable app in theme](/getting-started/enable-app-in-theme).
{% endstep %}

{% step %}

## Create your first badge

Go to **Badges & Labels** in the app sidebar and click **Create badge**. The **Choose badge type** dialog offers two options — click **Create** on the one you want.

| Type                          | Description                                                 |
| ----------------------------- | ----------------------------------------------------------- |
| **Text badge** (most popular) | Sale, new, or limited badges with editable text and styles. |
| **Image badge**               | Your own artwork, ready-made badge graphics, or AI designs. |

<figure><img src="/files/qI18aLmbQt3rwkMveMG2" alt="Choose badge type dialog with Text badge and Image badge options"><figcaption><p>Pick a badge type, then click Create.</p></figcaption></figure>
{% endstep %}

{% step %}

## Design the badge

The editor opens on the **Design** tab, with a live preview on the right that updates as you type.

* **Text badges** — enter the **Badge text**, pick a font and text color, set the **Background color**, then choose a shape from **Choose template**.
* **Image badges** — upload your own image, pick one from the library, or generate one with AI.

Under **Position**, choose where the badge sits:

| Option                    | What you get                                                                                                        |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **Inside product image**  | A 3 × 3 grid of nine positions, from top-left to bottom-right. Tick **Use Custom Position** for exact coordinates.  |
| **Outside product image** | A **Predefined position** dropdown — for example *Below the product price* — plus left, center, or right alignment. |

<figure><img src="/files/qHrwEMAKhrdJjhmLTycM" alt="Badge editor Design tab with color, template, and position controls"><figcaption><p>Set the text, colors, shape, and position on the Design tab.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose which products show it

Switch to the **Products** tab and pick one of three options under **Choose products to show this badge**:

| Option                           | What it does                                                                                |
| -------------------------------- | ------------------------------------------------------------------------------------------- |
| **All products**                 | Shows the badge on every product in your store.                                             |
| **Specific products**            | Hand-pick individual products.                                                              |
| **Products matching conditions** | Build rules from product title, type, vendor, price, tag, inventory, collections, and more. |

<figure><img src="/files/21e01Unjjv6y8EE1fw55" alt="Products tab showing the three selection options"><figcaption><p>Target every product, a hand-picked list, or a rule.</p></figcaption></figure>

See [Condition operators reference](/reference/condition-operators-reference) for every field and operator.
{% endstep %}

{% step %}

## Activate and check your storefront

Set the status switch above the preview to **Active**, then click **Save** in the top-right corner.

Open your storefront in a new tab — the badge appears on your product images within a few seconds.

<figure><img src="/files/LJk1haxGspIMpCyElREz" alt="Storefront product page showing a live badge on the product image"><figcaption><p>Your badge is now live on your storefront.</p></figcaption></figure>

{% hint style="success" %}
That's it — your first badge is live on your product and collection pages.
{% endhint %}
{% endstep %}
{% endstepper %}

## Next steps

* [Create a text badge](/badges-and-labels/create-text-badge) — all the text badge design options.
* [Create an image badge](/badges-and-labels/create-image-badge) — upload artwork or use the built-in library.
* [Badges & Labels overview](/badges-and-labels/overview) — the full feature set.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Enable the app in your theme

Turn on the Sami Product Labels app embed in your Shopify theme so badges, banners, and trust badges render on your storefront.

**Sami Product Labels** renders everything through Shopify's **App Embed** block. Until that block is enabled in your active theme, nothing the app creates appears on your storefront.

{% hint style="warning" %}
This is the single most common reason a badge doesn't show. A badge set to **Active** still stays invisible while the app embed is off.
{% endhint %}

{% stepper %}
{% step %}

## Open the app

In your Shopify admin, find **Sami Product Labels** under **Apps** in the left sidebar and open it. The app opens on its **Dashboard**.

<figure><img src="/files/uHQjqef1UAbdofoc75ph" alt="Shopify Admin Apps section showing Sami Product Labels"><figcaption><p>Open the app from your Shopify admin.</p></figcaption></figure>
{% endstep %}

{% step %}

## Check the status chip

On the Dashboard, look at the chip beside the **Explore outstanding features** heading:

| Chip                   | Meaning                                                |
| ---------------------- | ------------------------------------------------------ |
| **App embed active**   | The embed is on for your current theme — you are done. |
| **App embed inactive** | The embed is off. Continue to the next step.           |

The refresh icon next to the chip rechecks the status without reloading the page.

<figure><img src="/files/ZVH6QjKUrblLBUbLT7OI" alt="Dashboard Explore outstanding features panel showing the App embed active status chip"><figcaption><p>The chip beside "Explore outstanding features" reports the embed status.</p></figcaption></figure>
{% endstep %}

{% step %}

## Turn on the app embed

In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. Then:

1. Open **App embeds** in the left sidebar of the theme editor.
2. Find **Sami Product Labels** in the list.
3. Toggle the switch **On**.
4. Click **Save** in the top-right corner.

<figure><img src="/files/OEPZgUM95RTqPzk3TdfA" alt="Shopify theme editor showing the App embeds panel with Sami Product Labels toggled on"><figcaption><p>Toggle on the app embed, then save the theme.</p></figcaption></figure>

{% hint style="danger" %}
Saving is what applies the change. Closing the theme editor without clicking **Save** leaves the embed off.
{% endhint %}
{% endstep %}

{% step %}

## Verify

Go back to the app Dashboard and click the refresh icon beside the status chip. It should now read **App embed active**.

Still inactive? Reload the page, then repeat the previous step and confirm you clicked **Save** in the theme editor.
{% endstep %}
{% endstepper %}

## Working with more than one theme

The app embed is a per-theme setting.

{% hint style="warning" %}
Enable it separately in every theme you publish. Switching your active theme, duplicating a theme, or installing a new one means repeating these steps for that theme — badges will silently stop showing otherwise.
{% endhint %}

{% hint style="info" %}
App embeds require an **Online Store 2.0** theme. If yours doesn't support them, contact us at <support@samita.io> for alternative installation methods.
{% endhint %}

## Next steps

* [Quickstart](/getting-started/quickstart) — create your first badge.
* [Troubleshooting](/help/troubleshooting) — what to check when a badge still doesn't show.
* [Badges & Labels overview](/badges-and-labels/overview) — the full feature set.


# Badges & Labels overview

Learn how badges and labels help you highlight products and drive sales in your Shopify store.

Badges and labels are visual elements on your product images that grab attention and communicate key information at a glance — a sale, low stock, a new arrival.

<figure><img src="/files/r9qbqV01geCUehwOj34J" alt="Badges and Labels list with a draft image badge"><figcaption><p>The Badges &#x26; Labels list shows each badge's type, priority, position, status, creation date, and actions.</p></figcaption></figure>

## Two types of badges

### Text badges

Text badges display customizable text on a shape background. Write the message, pick a shape, and style it with your brand colors. Good for dynamic info like discount percentages, inventory counts, or short promo messages.

### Image badges

Image badges use a graphic instead of text. Browse a library of thousands of pre-designed badges, upload your own image, or generate one with AI. Good for eye-catching visuals like "New," "Hot," or seasonal promotions.

## Key capabilities

| Capability                 | Description                                                                                                                |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Dynamic variables**      | Automatically display real product data like discount percentage, inventory count, or vendor name inside your text badges. |
| **Scheduled visibility**   | Set start and end dates so badges appear and disappear automatically.                                                      |
| **Product targeting**      | Control which products show a badge using conditions like collection, product type, tags, price, and more.                 |
| **Animation**              | Add attention-grabbing animations to make badges stand out on your storefront.                                             |
| **Custom positioning**     | Place badges exactly where you want them on the product image.                                                             |
| **Multi-language support** | Show different badge content based on the customer's language.                                                             |
| **AI image generation**    | Generate unique badge images using AI prompts.                                                                             |

## Explore badges & labels

### Create badges

* [Create a text badge](/badges-and-labels/create-text-badge) — Build a badge with custom text on a shape background.
* [Create an image badge](/badges-and-labels/create-image-badge) — Use a library image, upload your own, or generate one with AI.

### Design and customize

* [Use dynamic variables](/badges-and-labels/dynamic-variables) — Insert live product data into your text badges.
* [Change badge position](/badges-and-labels/change-position) — Move your badge to the perfect spot on the product image.
* [Change badge style](/badges-and-labels/change-style) — Customize fonts, opacity, and other visual settings.
* [Change badge size](/badges-and-labels/change-size) — Adjust the width and height of your badges.

### Target and schedule

* [Target products](/badges-and-labels/target-products) — Set conditions to control which products display each badge.
* [Schedule badge visibility](/badges-and-labels/schedule-visibility) — Automate when badges appear and disappear.

### Manage

* [Duplicate and manage badges](/badges-and-labels/duplicate-badges) — Change status, duplicate, or delete selected badges.
* [Use badge groups](/badge-groups/overview) — Organize badges into groups for easier management.


# Create a text badge

Step-by-step guide to creating a text badge with custom text, shape, and colors.

Text badges let you display a custom message on a solid, shape, or image background directly on your product images. Follow these steps to create one in Sami Product Labels.

{% hint style="info" %}
You can also start from a trending template. On the Badges & Labels list page, browse the trending templates section and click one to use it as a starting point. The template pre-fills the text, shape, and colors so you can customize from there.
{% endhint %}

{% stepper %}
{% step %}

## Go to Badges & Labels

In the Sami Product Labels navigation, click **Badges & Labels** to open the badges list page.

<figure><img src="/files/Yf6vcYzpK3ZJr0xwGat4" alt="Sidebar with Badges and Labels highlighted"><figcaption><p>Select Badges &#x26; Labels from the sidebar navigation.</p></figcaption></figure>
{% endstep %}

{% step %}

## Start a new badge

If the list is empty, click **Add a new label/badge**. If you already have badges, click **Create badge**.

<figure><img src="/files/NbqLf0QMwIwbpFjQn0as" alt="Create button on the badges list page"><figcaption><p>Click Create to start building a new badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Select "Text badge"

In **Choose badge type**, find **Text badge** and click **Create**.

<figure><img src="/files/AZfznS7p5wFzo8YEUzcx" alt="Badge type selection with Text option"><figcaption><p>Choose Text to create a text-based badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Name the badge

The editor opens with a default name such as **New Badge**. The name field sits in the toolbar above the preview — click it and type a descriptive internal name such as "Summer Sale" or "Low Stock Warning", up to 50 characters. A counter beside the field shows how much you have used. This name never appears on your storefront.

<figure><img src="/files/EA8d9a4Q5jQNCjoeGiAu" alt="Badge name input field"><figcaption><p>Enter a descriptive name to identify your badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Edit text content

Use the rich text editor to write your badge message, with bold, italic, and other styling options.

To show live product data, insert dynamic variables like `{sale}` for the discount percentage or `{inventory}` for the stock count. Variables are replaced with real values on your storefront.

<figure><img src="/files/dpBIGgX1lkZu9C73o7jD" alt="Rich text editor with dynamic variable options"><figcaption><p>Write your badge text and insert dynamic variables for live product data.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose a template background

Under **Fill type**, select **Shape**, then click **Choose from library**. The **Template gallery** includes filters such as Sales, Autotext, Stock, Free shipping, and Pre-order. Choose one template and continue customizing it in the editor.

<figure><img src="/files/MSXmb1DSI7deTpRSUcpF" alt="Design panel with Choose from library highlighted"><figcaption><p>In Style, click Choose from library to open the Template gallery.</p></figcaption></figure>

<figure><img src="/files/b0W8H2DMPCk3IOiOztId" alt="Template gallery with badge template filters"><figcaption><p>Browse the Template gallery and select a background preset.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the background color

For a solid background, select **Solid** and choose its color. For a gradient, select **Shape**, set the **Start color** and **End color**, then choose a **Gradient direction**.

<figure><img src="/files/JpckbQSvVeiecP5Onipu" alt="Background color picker with gradient options"><figcaption><p>Set a solid color or gradient for your badge background.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the text color

Pick a text color that contrasts well with your background color to keep your badge text easy to read.

<figure><img src="/files/5tEB8CLRi4ESfzXefIU5" alt="Text color picker"><figcaption><p>Choose a text color that stands out against the background.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose which products show the badge

Open **Products**, then choose one targeting mode:

* **All products** — Show the badge on every product in your store.
* **Specific products** — Click **Browse**, search or filter your catalog, select the product checkboxes, then click **Select**. You can also use the **Search products** field to find products directly.
* **Products matching conditions** — Click **Add conditions**, create one or more rules, then choose whether products must match **all conditions** or **any condition**.

<figure><img src="/files/YO8Lku30Squ9Hs6MVh9r" alt="Products tab showing all products, specific products, and products matching conditions"><figcaption><p>Choose the product scope for your text badge.</p></figcaption></figure>

<figure><img src="/files/PSgMPLZnFjjE9M35Rq3A" alt="Select products dialog with search, filters, and product checkboxes"><figcaption><p>For Specific products, select products from the picker and click Select.</p></figcaption></figure>

{% hint style="info" %}
If you choose **Specific products**, select at least one product. An empty selection does not apply the badge to all products. For more targeting examples, see [Target specific products](/badges-and-labels/target-products).
{% endhint %}
{% endstep %}

{% step %}

## Save your badge

Set the status switch above the preview to **Active**, then click **Save** in the top-right corner. Leave it on **Draft** if the badge is not ready for your storefront — it saves without going live.

Customer, page, language, country, device, schedule, and priority settings live on the **Display** tab.

<figure><img src="/files/oU49PDqg6DllcgMWHCH7" alt="Save button on badge editor"><figcaption><p>Click Save to finish creating your text badge.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Next steps

* [Target specific products](/badges-and-labels/target-products) — Learn more about manual product selection and condition-based targeting.
* [Use dynamic variables](/badges-and-labels/dynamic-variables) — Insert live product data like discount percentages and inventory counts into your badge text.
* [Change badge position](/badges-and-labels/change-position) — Move your badge to the exact location you want on the product image.
* [Change badge style](/badges-and-labels/change-style) — Customize fonts, opacity, animation, and other visual settings.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Create an image badge

Step-by-step guide to creating an image badge using the library, your own upload, or AI generation.

Image badges display a graphic on your product images instead of text. Pick from a library of pre-designed badges, upload your own image, or generate one with AI.

{% stepper %}
{% step %}

## Go to Badges & Labels

In the Sami Product Labels navigation, click **Badges & Labels** to open the badges list page.

<figure><img src="/files/dRUfezLJdXtlySA8quPG" alt="Sidebar with Badges and Labels highlighted"><figcaption><p>Select Badges &#x26; Labels from the sidebar navigation.</p></figcaption></figure>
{% endstep %}

{% step %}

## Start a new badge

If the list is empty, click **Add a new label/badge**. If you already have badges, click **Create badge**.

<figure><img src="/files/NbqLf0QMwIwbpFjQn0as" alt="Create button on the badges list page"><figcaption><p>Click Create to start building a new badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Select "Image badge"

In **Choose badge type**, find **Image badge** and click **Create**.

<figure><img src="/files/23m2Ptzcbxl0oTu8ZT6U" alt="Badge type selection with Image option"><figcaption><p>Choose Image to create an image-based badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose an image

The **Select Image** dialog lets you choose, upload, or import a badge image:

**Browse the image library**

Use **Library** to browse pre-designed images. Search by name, filter by image type, category, or color, and change the sort order. Select an image, then click **Select Image** to apply it to the badge.

**Upload your own image**

Open **Design your Images** to use your own artwork: click **Upload image** to pick a file from your computer, or **Upload from URL** to import a direct image link. The editor recommends PNG, JPG, or SVG files up to 5 MB and 512 × 512 px. A transparent PNG usually works best on product images. See [Upload your own badge image](/badges-and-labels/upload-badge-image) for the detailed steps.

**Create or reuse an AI image**

Use **Create AI Image** to generate a new badge image or **View AI images** to reuse an existing result. The usage counter shown beside **AI Badge Generator** reflects the allowance for the current store.

<figure><img src="/files/0ZUkJPxm7H1Qr583XpaR" alt="Selected badge image with Create AI Image, View AI images, Change Image, and Remove controls"><figcaption><p>Manage the selected image or open the AI image tools from the Content section.</p></figcaption></figure>

<figure><img src="/files/gi9xOoS8CpRjcsHQlUHK" alt="Select Image dialog with Library and Design your Images sources"><figcaption><p>Search the library or open Design your Images to use your own artwork.</p></figcaption></figure>
{% endstep %}

{% step %}

## Adjust the size

Use the **Size** slider or **Width** field, then choose `px` or `%`. Keep **Lock aspect ratio** enabled to preserve the image proportions.

<figure><img src="/files/5AzCkBXy4EenN5LwmWbg" alt="Image badge size controls with Lock aspect ratio enabled"><figcaption><p>Adjust the image width and keep the aspect ratio locked to avoid distortion.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the badge position

Expand **Position**, then choose **Inside product image** or **Outside product image**.

For an image overlay, keep **Inside product image** selected and choose one of the nine preset positions. Use **Badge placement** to apply the same position to collection and product pages, or configure each page type separately. Enable **Use Custom Position** or adjust **Margin** and **Padding** when you need finer control.

<figure><img src="/files/KGkOxW2Ym8ghf4B01v1M" alt="Image badge Position section with placement options and the nine-position grid"><figcaption><p>Choose where the image badge appears and whether collection and product pages share the same position.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose which products show the badge

Open **Products**, then choose one targeting mode:

* **All products** — Show the image badge on every product.
* **Specific products** — Click **Browse**, select the product checkboxes, then click **Select**.
* **Products matching conditions** — Click **Add conditions**, create one or more rules, then choose whether products must match **all conditions** or **any condition**.

<figure><img src="/files/naHOSE6aVElaQagXQ65a" alt="Products tab showing All products, Specific products, and Products matching conditions"><figcaption><p>Choose the products that should display the image badge.</p></figcaption></figure>

{% hint style="info" %}
If you choose **Specific products**, select at least one product. An empty selection does not apply the badge to all products. See [Target specific products](/badges-and-labels/target-products) for more examples.
{% endhint %}
{% endstep %}

{% step %}

## Configure display conditions

Open **Display** to control when and where the badge appears. Configure customer and page conditions, language or country restrictions, device and product-image settings under **Other conditions**, a visibility schedule, and priority when multiple badges target the same product.

Leave a section unchanged when you do not need that restriction.

<figure><img src="/files/TdL0Cdw36u5a08eWAgcH" alt="Display tab with customer, page, language, country, visibility, and priority conditions"><figcaption><p>Use Display conditions only when the badge needs additional audience, page, device, schedule, or priority restrictions.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save your badge

Review the preview, then choose **Active** to publish the badge or **Draft** to keep it hidden from the storefront. Click **Save** to finish creating the badge.

<figure><img src="/files/hs947tMWtr72gLqHk97y" alt="Save button on badge editor"><figcaption><p>Click Save to finish creating your image badge.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Next steps

* [Upload your own badge image](/badges-and-labels/upload-badge-image) — Use your own artwork from a file or a direct image link.
* [Change badge position](/badges-and-labels/change-position) — Move your badge to the exact location you want on the product image.
* [Change badge size](/badges-and-labels/change-size) — Fine-tune the width and height of your badge.
* [Target specific products](/badges-and-labels/target-products) — Learn more about manual product selection and condition-based targeting.
* [Control display by device and page](/badges-and-labels/display-device-page) — Add page, device, image, and priority conditions.
* [Generate an image with AI](/ai-features/generate-image) — Create unique badge graphics using AI prompts.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Upload your own badge image

Use your own artwork on an image badge by uploading a file from your computer or importing it from a direct image link.

Besides the built-in image library, Sami Product Labels lets you use your own artwork on an image badge. You can **upload a file from your computer** or **import an image from a URL**. Uploaded images are saved in your own image list, so you can reuse them on other badges later.

## Before you start

Prepare an image that matches the recommendations shown in the badge editor:

| Requirement  | Recommended value |
| ------------ | ----------------- |
| File formats | PNG, JPG, SVG     |
| Maximum size | 5 MB              |
| Dimensions   | 512 × 512 px      |

{% hint style="info" %}
A square **PNG with a transparent background** looks best, because the badge sits on top of the product image.
{% endhint %}

## Open the image picker

{% stepper %}
{% step %}

## Open Badges & Labels

In Shopify admin, open **Sami Product Labels > Badges & Labels**.
{% endstep %}

{% step %}

## Create an image badge

Click **Create badge**, then in **Choose badge type** click **Create** on the **Image badge** card.

To change the image of an existing badge instead, click the pencil icon in that badge's row, then click **Change Image** in the **Content** section.

<figure><img src="/files/qnd2I4C5h6Kz8saySjL2" alt="Choose badge type dialog with the Image badge option"><figcaption><p>Select Image badge to start a badge that uses a graphic.</p></figcaption></figure>
{% endstep %}

{% step %}

## Switch to "Design your Images"

The **Select Image** panel opens on the right with a default image already applied. Next to **Source**, click **Design your Images**.

This tab holds everything that belongs to your store: images you uploaded, images imported from a URL, and AI-generated images. The first two tiles are the actions **Upload from URL** and **Upload image**.

<figure><img src="/files/F7XJ2U8rkSRFkDkEwwmk" alt="Select Image panel with the Library and Design your Images source tabs"><figcaption><p>Design your Images contains your own artwork, plus the Upload from URL and Upload image actions.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Add your image

Choose the way that fits your artwork.

{% tabs %}
{% tab title="Upload from your computer" %}
{% stepper %}
{% step %}

## Click "Upload image"

Click the **Upload image** tile. Your computer's file picker opens.

<figure><img src="/files/UnIgDJZBrtiLmuS0X4YP" alt="Upload image tile in the Design your Images tab"><figcaption><p>Click Upload image to browse files on your computer.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose the file

Select a PNG, JPG, or SVG file up to 5 MB, then confirm in the file picker. The image is uploaded and appears as a new tile in **Design your Images**.
{% endstep %}

{% step %}

## Apply the image

Click the new tile — a green check mark appears on it and the badge preview updates immediately. Click **Select Image** at the bottom of the panel to confirm and close it.

<figure><img src="/files/dqkfsPrzUTWkwZMt7Ok5" alt="Selected image tile with a green check mark and the Select Image button"><figcaption><p>Click the tile, then click Select Image to apply it to the badge.</p></figcaption></figure>
{% endstep %}
{% endstepper %}
{% endtab %}

{% tab title="Import from a URL" %}
Use this when your artwork is already online, for example in your Shopify **Content > Files** library.

{% stepper %}
{% step %}

## Click "Upload from URL"

Click the **Upload from URL** tile. A small **Upload from URL** panel opens with the field **Paste a direct image link**.

<figure><img src="/files/ohztoNjLg9UnqJOuzDgu" alt="Upload from URL panel with the image link field and the Add image button"><figcaption><p>Paste a direct image link, then click Add image.</p></figcaption></figure>
{% endstep %}

{% step %}

## Paste a direct image link

Paste a link that ends with the image file itself, such as `https://example.com/badge.png`. A link to a web page that merely *shows* the image does not work.

{% hint style="info" %}
To get a direct link from Shopify, go to **Content > Files**, upload your image, then copy its link.
{% endhint %}
{% endstep %}

{% step %}

## Click "Add image"

The message **The image uploaded** appears and the image is added to **Design your Images** as a new tile named **Custom Image**.

If you see **Something went wrong, please try again**, the link could not be downloaded — see [Troubleshooting](#troubleshooting) below.

<figure><img src="/files/83YnnjypS3OFnimW72oF" alt="Imported image added as a new tile named Custom Image"><figcaption><p>The imported image is saved to your image list and can be reused later.</p></figcaption></figure>
{% endstep %}

{% step %}

## Apply the image

Click the new tile, then click **Select Image**. The **Content** section now shows the image name with the **Change Image** and **Remove** actions.

<figure><img src="/files/c8a9r3pkYOEWpZBerOVS" alt="Content section showing the applied custom image with Change Image and Remove"><figcaption><p>The badge now uses your own image.</p></figcaption></figure>
{% endstep %}
{% endstepper %}
{% endtab %}
{% endtabs %}

## Manage your uploaded images

Hover over any tile in **Design your Images** to reveal two icons:

* **Pencil** — rename or edit the image.
* **Trash** — delete the image from your list.

You can also click **Edit with AI** at the bottom of the panel to modify the selected image with the AI editor.

{% hint style="warning" %}
Deleting an image that a badge already uses removes that artwork from the badge, so check where it is used first.
{% endhint %}

## Finish the badge

After the image is applied:

1. Set the badge size in the **Size** section — keep **Lock aspect ratio** ticked so the image is not stretched.
2. Adjust **Position**, then set targeting on the **Products** and **Display** tabs.
3. Choose **Active** or **Draft**, then click **Save**.

See [Create an image badge](/badges-and-labels/create-image-badge) for the full set of steps.

## Troubleshooting

| Problem                                    | What to do                                                                                                                                                                                 |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Something went wrong, please try again** | The link is not a direct image link, the file is private, or the host blocks other sites from loading its images. Try another host, or download the file and use **Upload image** instead. |
| The badge looks blurry                     | Upload a larger image — around 512 × 512 px — instead of enlarging a small one.                                                                                                            |
| The image has a white box around it        | Use a PNG or SVG with a transparent background.                                                                                                                                            |
| The file is rejected                       | Check that it is PNG, JPG, or SVG and smaller than 5 MB.                                                                                                                                   |

## Next steps

* [Create an image badge](/badges-and-labels/create-image-badge) — The complete image badge workflow.
* [Change badge size](/badges-and-labels/change-size) — Fine-tune how large the image appears.
* [Change badge position](/badges-and-labels/change-position) — Move the badge on the product image.
* [Generate an image with AI](/ai-features/generate-image) — Create badge artwork from a prompt.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Use dynamic variables

Reference for dynamic variables that auto-populate text badges with live product and customer data.

Dynamic variables insert live product, inventory, and customer data into your text badges. Instead of writing a static message like "20% Off," use `{sale}` and the badge automatically shows the correct discount percentage for each product.

## Available variables

| Variable                  | Description                                                                      | Example output      |
| ------------------------- | -------------------------------------------------------------------------------- | ------------------- |
| `{sale}`                  | Discount percentage off the compare-at price                                     | 25%                 |
| `{sale_amount}`           | Discount amount off the compare-at price                                         | $10.00              |
| `{inventory}`             | Total items available in inventory                                               | 12                  |
| `{product_vendor}`        | Product vendor                                                                   | Nike                |
| `{product_type}`          | Product type                                                                     | T-Shirt             |
| `{product_sku}`           | Product SKU                                                                      | SKU-12345           |
| `{product_variant_count}` | Number of variants                                                               | 5                   |
| `{customer_order_total}`  | Customer's total order count                                                     | 8                   |
| `{customer_spent_total}`  | Customer's total spend                                                           | $450.00             |
| `{countdown}`             | Countdown based on the visibility date; choose Style 1 or Style 2 before copying | 12Days 20Hrs 50Mins |
| `{product_metafield}`     | Value from a selected product metafield                                          | Organic Cotton      |
| `{variant_metafield}`     | Value from a selected variant metafield                                          | Size EU 42          |

## How to insert a variable

{% stepper %}
{% step %}

## Open a text badge

Create a **Text badge** or open an existing one. In **Design**, expand **Content** and find the **Badge text** editor.

<figure><img src="/files/CsRvXMGCfNAXu4S8QVNc" alt="Choose badge type dialog with Text badge highlighted"><figcaption><p>In Choose badge type, select Text badge to create a badge that supports dynamic variables.</p></figcaption></figure>
{% endstep %}

{% step %}

## Open Insert Dynamic Text

Click **Insert Dynamic Text** in the Badge text toolbar. The **Variables** dialog lists each available token, its sample output, and a **Copy** button.

<figure><img src="/files/kRD3Yu2OKmStkvW6QMEJ" alt="Insert Dynamic Text button in the Badge text toolbar"><figcaption><p>Click Insert Dynamic Text to open the Variables dialog.</p></figcaption></figure>

<figure><img src="/files/VANM3QqvtFqIEPwE7PRW" alt="Variables dialog showing dynamic tokens, sample values, and Copy buttons"><figcaption><p>Review the available variables and their sample output in the Variables dialog.</p></figcaption></figure>
{% endstep %}

{% step %}

## Configure the variable if needed

Most variables are ready to copy immediately. These variables have additional options:

* **Sale variables** — For `{sale}` or `{sale_amount}`, enable the corresponding **Hide label if the product/variant is not on sale** option when the badge should disappear for full-price products.
* **Product or variant metafield** — Expand `{product_metafield}` or `{variant_metafield}`, click **Add metafield**, then select a metafield from the dropdown.
* **Countdown** — Under `{countdown}`, choose **Style 1** or **Style 2** before copying the token.

<figure><img src="/files/SosJh9oYH0CHKiyX2tpd" alt="Expanded product metafield variable with Add metafield, metafield dropdown, and Copy button"><figcaption><p>Add and select the metafield whose value should appear in the badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Copy and paste the token

Click **Copy** beside the variable. The Variables dialog closes after copying. Click the desired location in the rich text editor, then paste the token into your badge message.

For example, paste `{inventory}` into `Only {inventory} left!` or `{sale}` into `Save {sale}!`.

{% hint style="info" %}
**Copy does not insert the token automatically.** You still need to paste it into the Badge text editor.
{% endhint %}

<figure><img src="/files/k1TbMvorabMctVfUgWz0" alt="Dynamic variable token pasted into the Badge text rich text editor"><figcaption><p>Paste the copied token at the position where the live value should appear.</p></figcaption></figure>
{% endstep %}

{% step %}

## Preview and save

Check the badge preview after pasting the token. Configure **Products** and **Display** as needed, choose **Active** or **Draft**, then click **Save**.
{% endstep %}
{% endstepper %}

You can also type a standard token such as `{sale}` or `{inventory}` directly into the editor. Type it exactly as shown, including the curly braces. Use **Insert Dynamic Text** for metafields and countdown styles so the app can generate the correct token.

## Important notes

{% hint style="info" %}
**Sale variables and product visibility:** The `{sale}` and `{sale_amount}` variables include an option to auto-hide the badge when the product isn't on sale. Enable it so the badge only shows on products with a compare-at price higher than the current price.
{% endhint %}

{% hint style="info" %}
**Countdown timer setup:** The countdown variables use the visibility date configured under **Display > Visibility Date & Countdown**.
{% endhint %}

{% hint style="info" %}
**Metafield variables:** Expand the product or variant metafield item in **Insert Dynamic Text**, click **Add metafield**, select a metafield definition, and click **Copy**. Paste the app-generated token instead of typing the generic `{product_metafield}` or `{variant_metafield}` placeholder manually.
{% endhint %}

{% hint style="warning" %}
**Variables are case-sensitive.** Type or paste them exactly as copied, including the curly braces. For example, `{sale}` works, while `{Sale}` and `{SALE}` do not.
{% endhint %}

## Example use cases

Here are some common ways merchants use dynamic variables in their text badges:

| Badge text                                  | What customers see     | Use case                                                   |
| ------------------------------------------- | ---------------------- | ---------------------------------------------------------- |
| Save {sale}!                                | Save 25%!              | Highlight the discount percentage on sale items            |
| Only {inventory} left!                      | Only 3 left!           | Create urgency with low-stock warnings                     |
| Ships from {product\_vendor}                | Ships from Nike        | Show the product vendor for multi-vendor stores            |
| {product\_variant\_count} options available | 5 options available    | Let customers know a product comes in multiple variants    |
| {countdown} left!                           | 2d 05h 30m left!       | Create urgency with a countdown to the end of a sale       |
| VIP: {customer\_order\_total} orders        | VIP: 8 orders          | Reward loyal customers with personalized badges            |
| You have spent {customer\_spent\_total}     | You have spent $450.00 | Show customers their spending history for loyalty programs |

## Next steps

* [Dynamic variables reference](/reference/dynamic-variables-reference) — Review the complete variable list and availability notes.
* [Create a text badge](/badges-and-labels/create-text-badge) — Build a text badge and insert dynamic variables.
* [Schedule badge visibility](/badges-and-labels/schedule-visibility) — Set start and end dates to control when badges appear, and pair with the countdown variable.
* [Target products](/badges-and-labels/target-products) — Control which products display each badge using conditions.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Schedule badge visibility

Schedule when a badge appears and disappears, restrict it to recurring weekday time windows, and add a countdown to the end time.

Use **Visibility Date & Countdown** to control the overall period when a badge can appear. For recurring campaigns, you can also limit the badge to selected weekdays and a specific time window on those days.

## Schedule a badge

{% stepper %}
{% step %}

## Open the badge editor

In **Sami Product Labels**, open **Badges & Labels**, then create a badge or click **Edit badge/label** for an existing one.
{% endstep %}

{% step %}

## Open Visibility Date & Countdown

Select the **Display** tab, then expand **Visibility Date & Countdown**.

<figure><img src="/files/XqmNzA94JYrfnvXKPoTX" alt="Visibility Date and Countdown section expanded in the Display tab"><figcaption><p>Open Display > Visibility Date &#x26; Countdown to configure the overall visibility period.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the start date and time

Click **Start**, select a date in the calendar, then choose the **Hours** and **Minutes**. The badge remains hidden until this time.

The field uses the format `YYYY-MM-DD HH:mm`.

<figure><img src="/files/YPItr46I8m9jfKCP0zal" alt="Start date picker with calendar, Hours, and Minutes controls"><figcaption><p>Select the date, hour, and minute when the badge should start appearing.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the end date and time

Click **End** and select the date, **Hours**, and **Minutes** when the badge should stop appearing. The **End** time must be later than the **Start** time.

<figure><img src="/files/yC3PfVJ42cRpadY6KpEe" alt="End date picker with calendar, Hours, and Minutes controls"><figcaption><p>Select when the badge should stop appearing on the storefront.</p></figcaption></figure>
{% endstep %}

{% step %}

## Optional: add a recurring weekday schedule

Enable **Daily recurring timer** when the badge should appear only on certain days and during the same time window on each selected day.

1. Under **Weekday**, keep the days when the badge should appear and clear the other days. All seven days are selected by default.
2. Under **Start time**, enter the **Hours**, **Minutes**, and **Seconds** when the daily window begins.
3. Under **End time**, enter the **Hours**, **Minutes**, and **Seconds** when the daily window ends.

The recurring weekday and time rules apply inside the overall **Start** and **End** visibility period. For example, a Monday-to-Friday window from 09:00:00 to 11:00:00 displays the badge only during those hours on those weekdays, and only while the overall date range is active.

<figure><img src="/files/TLrcUKoAgU0lqo0Yi5UZ" alt="Daily recurring timer with weekday selection and Start time and End time fields"><figcaption><p>Select the active weekdays and set one recurring time window shared by those days.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose a status and save

Choose **Active** to make the badge eligible to appear according to the schedule, or **Draft** to keep it hidden. Click **Save** to apply the configuration.
{% endstep %}
{% endstepper %}

## Add a countdown to a text badge

The countdown is separate from the visibility controls. **Visibility Date & Countdown** defines the schedule, while the `{countdown}` variable renders the remaining time inside a text badge.

1. Make sure the badge has a valid **End** date and time. The countdown counts down to this value.
2. Return to **Design**, expand **Content**, and click **Insert Dynamic Text** in the **Badge text** toolbar.
3. Find `{countdown}`, choose **Style 1** or **Style 2**, then click **Copy**.
4. Paste the copied token into the **Badge text** editor, preview the result, and save the badge.

<figure><img src="/files/SjgQq4vPPapyzQg843ZB" alt="Countdown variable with Style 1 and Style 2 options in Insert Dynamic Text"><figcaption><p>Choose a countdown style, copy the generated token, and paste it into the badge text.</p></figcaption></figure>

{% hint style="warning" %}
The storefront countdown needs an **End** date and time. If **End** is not configured, the countdown value is blank.
{% endhint %}

For the complete variable workflow, see [Dynamic Variables](/badges-and-labels/dynamic-variables).

## How the visibility rules work together

| Configuration                                     | When the badge can appear                                                                   |
| ------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| **Start** and **End** only                        | At any time inside the overall date and time range                                          |
| **Start**, **End**, and **Daily recurring timer** | Inside the overall range, on a selected weekday, and inside the recurring daily time window |
| **Draft** status                                  | Never, even when the schedule matches                                                       |
| **Active** status                                 | When the schedule and all other product and display conditions match                        |

{% hint style="info" %}
The overall **Start** and **End** pickers use minute precision. The recurring **Start time** and **End time** fields also include seconds.
{% endhint %}

## Next steps

* [Dynamic Variables](/badges-and-labels/dynamic-variables) — Insert `{countdown}` and other live values into a text badge.
* [Target Products](/badges-and-labels/target-products) — Choose which products are eligible to display the scheduled badge.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Change badge position

Place a badge inside or outside the product image, use preset or custom positions, and fine-tune its spacing.

Use the **Position** section to place a text or image badge over the product image, below a product-page element, or next to a custom theme element.

## Open the Position section

{% stepper %}
{% step %}

## Open Badges & Labels

In Shopify admin, open **Sami Product Labels > Badges & Labels**.
{% endstep %}

{% step %}

## Create or select a badge

To create a badge, click **Create badge**, then choose **Text badge** or **Image badge**.

To update an existing badge, click **Edit badge/label** in that badge's row.
{% endstep %}

{% step %}

## Expand Position

In the badge editor, stay on the **Design** tab, scroll to **Position**, and expand the section.

<figure><img src="/files/IhtkC69LeabhVjumq3Yl" alt="Position section in the Design tab of the badge editor"><figcaption><p>Open the Design tab and expand Position.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Place the badge inside the product image

Select **Inside product image** when the badge should overlay the product image.

### Choose where the setting applies

Use **Badge placement** to choose one of these modes:

* **Use the same position for collection page and product page** — One position applies to both page types.
* **Set different position for collection page and product page** — Use the **Listing pages** and **Product page** tabs to configure each position separately.

{% hint style="info" %}
The current editor labels the first per-page tab **Listing pages**, not **Collection page**.
{% endhint %}

<figure><img src="/files/2qWaG20dFpsZ1Dzpx9wj" alt="Badge placement selector with Listing pages and Product page tabs"><figcaption><p>Apply one inside-image position everywhere or configure Listing pages and Product page separately.</p></figcaption></figure>

### Choose a preset position

Under **Badge position**, select one of the nine points in the position grid.

| Position          | Placement on the image    |
| ----------------- | ------------------------- |
| **Top left**      | Upper-left corner         |
| **Top center**    | Center of the top edge    |
| **Top right**     | Upper-right corner        |
| **Center left**   | Center of the left edge   |
| **Center**        | Center of the image       |
| **Center right**  | Center of the right edge  |
| **Bottom left**   | Lower-left corner         |
| **Bottom center** | Center of the bottom edge |
| **Bottom right**  | Lower-right corner        |

<figure><img src="/files/28YdQv4lZgXUOK1JxvgY" alt="Nine-point Badge position grid for an inside-image badge"><figcaption><p>Select one of nine preset positions inside the product image.</p></figcaption></figure>

### Set a custom position by percentage

Turn on **Use Custom Position** when the nine presets are not precise enough. The editor replaces the grid with:

* A vertical anchor: **Top** or **Bottom**.
* A horizontal anchor: **Left** or **Right**.
* A percentage slider for the offset from each selected anchor.

Use the change-position buttons to switch anchors, then adjust the sliders while checking the preview.

<figure><img src="/files/P1Kzu4hPF9DccpJsTbZc" alt="Use Custom Position enabled with vertical and horizontal percentage controls"><figcaption><p>Choose the vertical and horizontal anchors, then set their percentage offsets.</p></figcaption></figure>

## Place the badge outside the product image

Select **Outside product image** when the badge should appear beside product information instead of overlaying the image.

Open **Predefined position** and choose one of these options:

| Option                           | Placement on the product page                                 |
| -------------------------------- | ------------------------------------------------------------- |
| **Below the product image**      | Directly below the product image                              |
| **Below the product title**      | Directly below the product title                              |
| **Below the product price**      | Directly below the product price                              |
| **Below the product quantity**   | Directly below the quantity control                           |
| **Below the add to cart button** | Directly below the add-to-cart button                         |
| **Below the buy now button**     | Directly below the buy-now button                             |
| **Custom**                       | Next to an element identified by an ID or class in your theme |

Under **Badge position**, choose left, center, or right alignment for the badge.

<figure><img src="/files/nOVX2yy7OQGn2DZpBNhS" alt="Outside product image selected with the Predefined position menu"><figcaption><p>Choose a product-page element, then align the badge to the left, center, or right.</p></figcaption></figure>

### Place the badge with a theme selector

Choose **Custom** from **Predefined position** to target an element from your theme. Enter the relevant ID or class in any field you need:

| Field                           | Page type        |
| ------------------------------- | ---------------- |
| **Position in product page**    | Product pages    |
| **Position in home page**       | Home page        |
| **Position in collection page** | Collection pages |
| **Position in other page**      | Other page types |

For example, enter `.product-form` for a class or `#ProductInfo` for an ID. Add a value for each page type where the badge needs this custom placement.

{% hint style="warning" %}
Theme IDs and classes vary. Inspect your storefront theme to find a stable selector, then verify the result on every page type where the badge should appear.
{% endhint %}

<figure><img src="/files/Dokb5mHr8mvFtdtcKdU2" alt="Custom outside-image position fields for product, home, collection, and other pages"><figcaption><p>Enter the theme ID or class for each page type that needs a custom badge position.</p></figcaption></figure>

## Adjust margin and padding

Expand **Margin** to change the outside spacing in pixels. The editor shows the sides relevant to the selected position.

Expand **Padding** to change the space between the badge content and its edges. You can set the top, bottom, left, and right values independently.

<figure><img src="/files/s2dJlEAeTep80pfVDq4B" alt="Expanded Margin and Padding controls in the Position section"><figcaption><p>Fine-tune the badge with pixel-based margin and padding values.</p></figcaption></figure>

## Preview and save

Use the preview controls to check **Collection page** and **Product page**, then switch between **Desktop view** and **Mobile view**. When the badge appears in the intended location, click **Save**.

## Next steps

* [Change Badge Size](/badges-and-labels/change-size) — Resize the badge for different viewports and page types.
* [Change Badge Style](/badges-and-labels/change-style) — Customize fonts, colors, borders, and backgrounds.
* [Display by Device & Page](/badges-and-labels/display-device-page) — Control which devices and pages show the badge.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Change badge size

Resize text and image badges for desktop, mobile, product pages, and listing pages.

Use the **Size** section in the badge editor to resize a badge everywhere or set a different size for each device and page type.

## Open the Size section

{% stepper %}
{% step %}

## Open Badges & Labels

In Shopify admin, open **Sami Product Labels > Badges & Labels**.
{% endstep %}

{% step %}

## Select a badge

Find the badge you want to resize, then click **Edit badge/label** in its row.

To resize a new badge instead, click **Create badge** and choose **Text badge** or **Image badge**.
{% endstep %}

{% step %}

## Expand Size

In the badge editor, stay on the **Design** tab, scroll to **Size**, and expand the section.

<figure><img src="/files/l2r959fhpTQUsFLaWRd5" alt="Size section in the Design tab of the badge editor"><figcaption><p>Open a badge, stay on Design, and expand Size.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Use one size on desktop and mobile

Under **Responsive size**, keep **Use same size on desktop and mobile** selected when the badge should use one set of dimensions on every device and supported page preview.

* For a **text badge**, set **Width** and **Height** separately.
* For an **image badge** with **Lock aspect ratio** enabled, use the **Size** slider or **Width** field. The height changes automatically to preserve the image proportions.

<figure><img src="/files/HnkNNVjaEhSprL58bCni" alt="Use same size on desktop and mobile selected for a text badge"><figcaption><p>Use one set of dimensions for desktop and mobile.</p></figcaption></figure>

## Customize each device and page type

Select **Customize desktop and mobile separately** when the badge needs different dimensions in different contexts.

1. Choose **Desktop** or **Mobile**.
2. Choose **Product page size** or **Listing pages size**.
3. Set the dimensions for that combination.
4. Repeat for the other device and page combinations as needed.

| Selection                        | Where the size applies                                |
| -------------------------------- | ----------------------------------------------------- |
| **Desktop > Product page size**  | Product pages on desktop                              |
| **Desktop > Listing pages size** | Listing pages, including collection pages, on desktop |
| **Mobile > Product page size**   | Product pages on mobile                               |
| **Mobile > Listing pages size**  | Listing pages, including collection pages, on mobile  |

{% hint style="info" %}
The editor uses the label **Listing pages size**. Use this tab for collection-page and other product-list previews.
{% endhint %}

<figure><img src="/files/UzMYuZKg9jgFGsrjP7Rg" alt="Separate size controls for desktop, mobile, product pages, and listing pages"><figcaption><p>Select a device and page type, then set the size for that combination.</p></figcaption></figure>

## Choose a size unit

Each dimension can use one of these units:

| Unit   | Use it when                                                                                                                |
| ------ | -------------------------------------------------------------------------------------------------------------------------- |
| **px** | You need an exact dimension in pixels.                                                                                     |
| **%**  | You want the badge to scale relative to the available product-image area. Preview the result on each page type and device. |

For a text badge, **Width** and **Height** have their own unit selectors. They do not need to use the same unit.

## Adjust text badge size

Text badges provide additional controls below **Width** and **Height**:

* **Auto-fit text to badge** off — Set **Text size** as a fixed font size in pixels.
* **Auto-fit text to badge** on — The app automatically resizes the text to fit the badge background, and **Text size** becomes a percentage control.
* **Letter spacing** — Increase or reduce the space between characters in pixels.

{% hint style="info" %}
Turn on **Auto-fit text to badge** when badge text can change length, such as text that contains `{inventory}` or another dynamic variable.
{% endhint %}

<figure><img src="/files/f4zHID0V1lEQYTKuvhzK" alt="Auto-fit text to badge enabled with percentage-based text size"><figcaption><p>Enable Auto-fit text to badge to keep changing text inside the badge background.</p></figcaption></figure>

## Keep or change an image badge's proportions

For image badges, **Lock aspect ratio** is enabled by default.

* Keep it enabled to resize the image with one **Size** or **Width** control while preserving the source proportions.
* Turn it off only when you need to set **Width** and **Height** independently. Changing them to a different ratio can stretch or squash the image.

<figure><img src="/files/hWP7aADhAGigkh4A9lf5" alt="Image badge Size controls with Lock aspect ratio enabled"><figcaption><p>Keep Lock aspect ratio enabled to resize an image badge without distorting it.</p></figcaption></figure>

## Preview and save

Use the preview toolbar to switch between **Product page** and **Collection page**, then check both **Desktop view** and **Mobile view**. When the badge looks correct in every required preview, click **Save**.

{% hint style="warning" %}
If you use separate responsive sizes, preview all four device and page combinations before saving.
{% endhint %}

## Next steps

* [Change badge position](/badges-and-labels/change-position) — Place your badge at the right location on product images or page elements.
* [Change badge style](/badges-and-labels/change-style) — Customize fonts, colors, borders, and visual effects.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Change badge style

Customize fonts, colors, backgrounds, borders, opacity, and rotation for text and image badges.

Use the **Design** tab to change how a badge looks. Text badges provide font, color, background, border, opacity, and rotation controls. Image badges provide opacity and rotation controls for the selected artwork.

## Open a badge in the editor

{% stepper %}
{% step %}

## Open Badges & Labels

In Shopify admin, open **Sami Product Labels > Badges & Labels**.
{% endstep %}

{% step %}

## Select a badge

Find the badge you want to update, then click **Edit badge/label** in its row.

To style a new badge instead, click **Create badge**, then choose **Text badge** or **Image badge**.

<figure><img src="/files/01EXSi3i7J72pX3PiWPz" alt="Badges and Labels list with the Edit badge or label action highlighted"><figcaption><p>Click Edit badge/label for the badge you want to customize.</p></figcaption></figure>
{% endstep %}

{% step %}

## Stay on the Design tab

The editor opens on **Design**. The available sections depend on whether you selected a text badge or an image badge.
{% endstep %}
{% endstepper %}

## Customize a text badge

### Choose a font and text color

Use the controls below **Badge text** to customize the text:

* **Font picker** — Choose a font from the built-in list.
* **Use Custom Font Style** — Enable this option to enter a font family in **Font**, then choose an available font style or weight, such as Regular or Bold.
* **Text color** — Open the color picker and choose a color that remains readable against the badge background.

<figure><img src="/files/aGZmIqvH14gyGi6aAJPJ" alt="Text badge controls for the font picker, custom font style, and text color"><figcaption><p>Choose a built-in font or enable Use Custom Font Style, then set the text color.</p></figcaption></figure>

Text size and letter spacing are configured in **Size**. See [Change badge size](/badges-and-labels/change-size) for those controls.

### Choose a background

Expand **Style**, then select a **Fill type**:

| Fill type | Use it for                                                          |
| --------- | ------------------------------------------------------------------- |
| **Solid** | A single background color or a color preset.                        |
| **Shape** | A template shape with a solid or gradient color treatment.          |
| **Image** | A texture, pattern, or artwork used as the text badge's background. |

<figure><img src="/files/Ux2L3sUM3PaINAyhd1mO" alt="Style section with Solid, Shape, and Image fill types"><figcaption><p>Expand Style and select the background type for the text badge.</p></figcaption></figure>

#### Use a solid background

Select **Solid**, then choose a **Background color**. You can also select one of the presets under **Choose template**.

#### Use a shape or gradient background

Select **Shape**, then configure the following:

* **Choose from library** — Open the template gallery and filter designs by categories such as Sales, Autotext, Stock, Free shipping, Pre-order, and more.
* **Start color** and **End color** — Use the same color for a flat treatment or two different colors for a gradient.
* **Gradient direction** — Choose Left to right, Top to bottom, Diagonal, or Radial.
* **Choose template** — Apply a shape preset directly from the editor.

<figure><img src="/files/uFvcq5V3oPkJNidMtMqw" alt="Shape background controls with the template library, start and end colors, and gradient direction"><figcaption><p>Choose a shape, set its colors, and select the gradient direction.</p></figcaption></figure>

#### Use an image background

Select **Image**, then click **Select Image** to choose a custom background. The editor accepts PNG, JPG, or SVG files up to 5 MB. Click **Remove** to clear the selected background.

{% hint style="info" %}
This image is used only as the background of a text badge. To display standalone artwork without editable text, use an image badge instead.
{% endhint %}

<figure><img src="/files/DlJH0XnDg5w66sE3FMRf" alt="Custom badge background controls with Select Image and Remove buttons"><figcaption><p>Select artwork to use as the background of a text badge.</p></figcaption></figure>

### Add a border or round the corners

Expand **Border & corners**. Both options can be enabled independently:

| Option            | Available controls                                                                                   |
| ----------------- | ---------------------------------------------------------------------------------------------------- |
| **Add border**    | Set **Border width** from 0 to 8 px, choose a **Border color**, and select Solid, Dotted, or Dashed. |
| **Round corners** | Set **Corner radius** from 0 to 100 px.                                                              |

<figure><img src="/files/P36BQTSQsnodGjWKKCoY" alt="Border and corners section with border width, color, style, and corner radius controls"><figcaption><p>Add a border, round the corners, or use both settings together.</p></figcaption></figure>

## Style an image badge

Image badges do not show the text badge's font, background, or **Border & corners** controls. Use **Content** at the top of the **Design** tab to change the badge artwork, then use **Advanced settings** to adjust its opacity or rotation.

For image dimensions and placement, see [Change badge size](/badges-and-labels/change-size) and [Change badge position](/badges-and-labels/change-position).

## Adjust opacity or rotation

These effects are available for both text badges and image badges:

1. Expand **Advanced settings**.
2. Under **Effects**, enable the option you need.
3. Adjust the value while checking the live preview.

| Effect             | Range      |
| ------------------ | ---------- |
| **Adjust opacity** | 0% to 100% |
| **Rotate badge**   | 0° to 360° |

<figure><img src="/files/TT6YbRf7ft9hZJGDD68s" alt="Advanced settings Effects section with Adjust opacity and Rotate badge"><figcaption><p>Enable Adjust opacity or Rotate badge, then set the effect value.</p></figcaption></figure>

{% hint style="info" %}
The **Effects** section also includes **Use animation**. See [Add animation to a badge](/badges-and-labels/add-animation) for the complete animation workflow.
{% endhint %}

## Preview and save

Use the preview toolbar to check the badge on **Collection page** and **Product page**, then switch between **Desktop view** and **Mobile view**. When the badge looks correct in every required preview, click **Save**.

{% hint style="warning" %}
Check text contrast after changing colors or opacity. A style that is readable on one product image may be difficult to read on another.
{% endhint %}

## Next steps

* [Change badge size](/badges-and-labels/change-size) — Resize the badge and adjust text size or letter spacing.
* [Change badge position](/badges-and-labels/change-position) — Move the badge and adjust its margin or padding.
* [Add animation to a badge](/badges-and-labels/add-animation) — Apply an animation effect and configure its speed and repeat count.
* [Use custom CSS](/badges-and-labels/custom-css) — Fine-tune the badge with custom CSS.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Add animation to a badge

Add animation effects like pulse to your badges to grab customer attention on your storefront.

Add animation effects to draw customer attention to sales, limited-time offers, and important product information.

## How to add an animation

{% stepper %}
{% step %}

## Open the badge editor

From **Sami Product Labels**, go to **Badges & Labels**. Click **Edit badge/label** for an existing badge, or click **Create badge** and complete the initial badge setup.
{% endstep %}

{% step %}

## Open Design

The editor opens on **Design** by default. If you are on another tab, click **Design**.
{% endstep %}

{% step %}

## Expand Advanced settings

Scroll to the bottom of **Design**, then click **Advanced settings**.

<figure><img src="/files/ywMsYpZKxFiuUipgnJEe" alt="Advanced settings section at the bottom of the Design tab"><figcaption><p>Expand Advanced settings to find the animation controls under Effects.</p></figcaption></figure>
{% endstep %}

{% step %}

## Enable Use animation

Under **Effects**, turn on **Use animation**. The animation type, speed, and repeat controls appear.
{% endstep %}

{% step %}

## Select the animation type

Choose one of the 13 available effects: **Pulse**, **Flash**, **Bounce in**, **Bounce out**, **Swing**, **Wobble**, **Flip**, **Gelatine**, **Roll in**, **Roll out**, **Rotate in down left**, **Rotate in up left**, or **Hi there**.

<figure><img src="/files/rnWXb5ybq6hggDn80rBM" alt="Animation type, speed, and repeat controls"><figcaption><p>Choose an animation effect, then adjust its speed and repeat count.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the animation speed

Use the **Animation speed** slider or number field to set a value from 0 to 10. Watch the live preview as you adjust it so the effect remains noticeable without distracting from the product.
{% endstep %}

{% step %}

## Set the repeat count

Use the **Animation Repeat** slider or number field to set a value from 0 to 100.
{% endstep %}

{% step %}

## Save and preview

Check the effect in the live preview. You can switch between collection and product page previews and between desktop and mobile views. When the animation looks right, click **Save** at the top of the editor.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Also verify the saved badge on the storefront. Theme CSS and page layout can affect how an animation feels in context.
{% endhint %}

## Next steps

* [Change badge style](/badges-and-labels/change-style) — Customize fonts, colors, borders, and backgrounds for your badge.
* [Use custom CSS](/badges-and-labels/custom-css) — Use custom CSS for advanced styling and animation fine-tuning.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Use custom CSS

Use custom CSS, z-index control, tooltip text, and SEO alt text for advanced badge customization.

For styling that goes beyond the visual editor, **Sami Product Labels** includes a built-in CSS editor. You can also control badge layering with z-index, add hover tooltips, and set alt text for image badges.

## How to add custom CSS

{% stepper %}
{% step %}

## Open the badge editor

From **Sami Product Labels**, go to **Badges & Labels**. Select **Create badge**, or select the **Edit badge/label** icon in the **Actions** column for an existing badge.
{% endstep %}

{% step %}

## Go to the Design tab

Select **Design** in the badge editor. This tab is selected by default when the editor opens.
{% endstep %}

{% step %}

## Scroll to Advanced Settings

Expand **Advanced settings** near the bottom of the Design tab.
{% endstep %}

{% step %}

## Enable "Custom css"

Under **Advanced**, turn on **Custom css**.
{% endstep %}

{% step %}

## Insert a selector and add your CSS

The CSS editor appears with three options under **CSS reference**:

* `.samita_productLabel-content` styles the entire badge.
* `.samita_productLabel-content-text` styles text badges.
* `.samita_productLabel-content img` styles image badges.

Select the option you need. The app inserts a selector scoped with the current badge ID, such as `.__content--94129`, into the editor. Keep that badge-specific part of the selector, then add only the declarations you need inside the braces.

```css
/* Use the badge ID inserted by the app in place of YOUR_BADGE_ID. */
.samita_productLabel-content.__content--YOUR_BADGE_ID {
  box-shadow: 0 0 15px rgba(255, 215, 0, 0.6);
}

.samita_productLabel-content.__content--YOUR_BADGE_ID:hover {
  transform: scale(1.1);
  transition: transform 0.2s ease;
}
```

<figure><img src="/files/QJp2DfzeOEXz7qIRoibH" alt="Custom CSS editor and CSS reference selectors"><figcaption><p>Select a class under CSS reference to insert a badge-scoped selector into the Custom CSS editor.</p></figcaption></figure>
{% endstep %}

{% step %}

## Preview and save

Check the live preview while you edit. When the result looks correct, select **Save**, then verify the badge on the relevant collection or product page in your storefront.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Custom CSS is saved with this badge, but its selectors still determine which storefront elements it can affect. Keep the badge-scoped selector generated by the app. A broad selector such as `.samita_productLabel-content` on its own can also match other badges.
{% endhint %}

## Z-index control

Fix a badge that's hidden behind a product image overlay, sticky header, or another badge.

1. In **Advanced settings**, enable **Z-index**.
2. Enter a value from 1 to 100. Higher values place the badge in front of elements with lower z-index values.

<figure><img src="/files/uV2AE95ipEvnAKRhNQLs" alt="Z-index control toggle and value field"><figcaption><p>Set a z-index value to control badge layering.</p></figcaption></figure>

{% hint style="info" %}
Z-index is also affected by the stacking context created by your theme. If raising the badge value does not bring it forward, a parent container in the theme may need its own CSS adjustment.
{% endhint %}

## Tooltip on hover

Add a tooltip that appears when customers hover over your badge — useful for explaining what "New Arrival" or "Limited Edition" means without cluttering the product image.

1. In **Advanced settings**, enable **Show tooltip on hover**.
2. Enter the tooltip text that should appear on hover.

<figure><img src="/files/iLqzjNXrL2bsouRHuwm9" alt="Tooltip toggle and text field in Advanced Settings"><figcaption><p>Add tooltip text that displays when customers hover over the badge.</p></figcaption></figure>

Do not put essential information only in the tooltip. Touchscreen users and customers navigating with a keyboard may not trigger a hover state.

## SEO alt text for image badges

Set alt text so screen readers can describe the meaning of an image badge. Descriptive alt text can also support image SEO.

1. In **Advanced settings**, enable **Seo alt text**.
2. Enter a concise description of the message conveyed by the badge, such as "20% off sale badge" or "Free shipping label". Avoid keyword stuffing and phrases such as "image of."

<figure><img src="/files/XBMyP9lHYFJWg3rnqBBQ" alt="Alt text field for badge SEO and accessibility"><figcaption><p>Set alt text for accessibility and SEO.</p></figcaption></figure>

## Next steps

* [Change badge style](/badges-and-labels/change-style) — Customize your badge using the visual editor controls.
* [Change badge position](/badges-and-labels/change-position) — Place your badge at the right location on the page.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Target specific products

Learn how to select which products display your badge or label in Sami Product Labels.

Every badge needs a product scope. You can apply it to all products, pick products manually, or use conditions that update the matched set automatically.

## Targeting modes

The **Products** tab offers three targeting modes:

| Mode                             | Description                                                                                                                                 |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **All products**                 | Show the badge on every product.                                                                                                            |
| **Specific products**            | Search or browse the Shopify product picker and select individual products.                                                                 |
| **Products matching conditions** | Match products automatically by title, type, vendor, price, inventory, metafield, variant data, collection, and other supported attributes. |

## How to set product targeting

{% stepper %}
{% step %}

## Open the badge editor

From **Sami Product Labels**, open a badge or create a new one.
{% endstep %}

{% step %}

## Go to the Products tab

Click the **Products** tab in the badge editor to access targeting settings.

<figure><img src="/files/MUyZYkihClTweAz1ZSDO" alt="Products tab in the badge editor"><figcaption><p>The Products tab lets you choose which products display your badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose your targeting mode

Select one of the three targeting modes:

* **All products** — Apply the badge store-wide.
* **Specific products** — Manually search and select individual products from your catalog.
* **Products matching conditions** — Define rules that automatically target products based on their attributes.
  {% endstep %}

{% step %}

## For Specific products: search or browse

Search for products by name in the search field, or click **Browse** to open the Shopify product picker and select from your full catalog.

<figure><img src="/files/4ExdhXtodQ2ooYEpjI7R" alt="Specific products section with search field and Browse button"><figcaption><p>Search by name or click Browse to find products from your catalog.</p></figcaption></figure>
{% endstep %}

{% step %}

## For Products matching conditions: add rules

Select whether products must match **all conditions** or **any condition**, then click **Add conditions** to create a rule. Choose the condition, operator, and value. Add more rows as needed.

<figure><img src="/files/fHPpKABR4e76ntA3OdS9" alt="Conditions section with all/any selector and Add conditions button"><figcaption><p>Choose the match mode and click Add conditions to define targeting rules.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save your badge

Click **Save** to apply your targeting. The badge appears immediately on the targeted products in your storefront.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Choose **All products** explicitly for a store-wide promotion. An empty **Specific products** selection is not the same as choosing all products.
{% endhint %}

## Next steps

* [Target by product attribute](/badges-and-labels/target-by-attribute) — Filter products by title, type, vendor, price, inventory, and more.
* [Target by customer](/badges-and-labels/target-by-customer) — Show badges based on who is browsing your store.
* [Target by country & language](/badges-and-labels/target-by-country-language) — Display badges for specific regions or languages.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Target by collection, tag, or vendor

Target badges to products based on attributes like title, type, vendor, price, tags, inventory, and more.

Condition-based targeting automatically shows badges on products that match rules you define — no need to hand-pick products one by one.

## Available product conditions

The condition picker currently includes:

* Product title, type, vendor, option, and tag
* Product price, compare price, sale price, and weight
* Product created and published dates
* Product inventory and collections
* Product and variant metafields
* Product variants and variant inventory

The operator list changes with the selected condition. Text conditions include operators such as **contains** and **starts with**; numeric conditions include **is greater than** and **is less than**; inventory conditions include stock-specific choices.

## How to add a condition

{% stepper %}
{% step %}

## Open the Products tab

In the badge editor, go to **Products**.

<figure><img src="/files/lWV4BoNkLWTnDnua36wR" alt="Products tab in the badge editor"><figcaption><p>Open the Products tab in the badge editor.</p></figcaption></figure>
{% endstep %}

{% step %}

## Select "Products matching conditions"

Under **Choose products to show this badge**, select **Products matching conditions** (instead of **All products** or **Specific products**).

<figure><img src="/files/qWQKR9SJlSkV9GcLuolu" alt="Products matching conditions option selected"><figcaption><p>Select Products matching conditions to enable condition-based targeting.</p></figcaption></figure>
{% endstep %}

{% step %}

## Click "Add conditions"

Click **Add conditions** to create a new rule.

<figure><img src="/files/hXfJ2DuVkHZngnOabFvX" alt="Add conditions button in the targeting panel"><figcaption><p>Click Add conditions to define a product targeting rule.</p></figcaption></figure>
{% endstep %}

{% step %}

## Select the condition type

Choose the attribute you want to target from the dropdown menu (for example, **Product price** or **Product type**).

<figure><img src="/files/vZc72hc40wc4deiceTaA" alt="Condition type dropdown"><figcaption><p>Choose the product attribute to target.</p></figcaption></figure>
{% endstep %}

{% step %}

## Select the operator

Choose how the condition should evaluate the attribute. For example, select **is greater than** for a price condition or **contains** for a title condition.

<figure><img src="/files/9KDAAfo0JqY1U5zjWnJz" alt="Operator dropdown"><figcaption><p>Choose the operator for the condition.</p></figcaption></figure>
{% endstep %}

{% step %}

## Enter the value

Type the value to match against. For price conditions, enter a number. For text conditions like title or vendor, enter the text to match.

<figure><img src="/files/SyEX4GDs57jP1L7aswdQ" alt="Example condition rule targeting products with price greater than 50"><figcaption><p>A condition rule targeting products priced above 50.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save

Click **Save** to apply the condition. Products matching your rule will automatically display the badge.

<figure><img src="/files/Vd490fmMusfT5NcOyKak" alt="Save button applying the condition"><figcaption><p>Click Save to apply the condition rule.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## AND vs OR logic

When you add multiple conditions, you can choose how they work together:

| Logic mode               | Behavior                                                                                                         |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------- |
| **All conditions** (AND) | The product must match **every** rule for the badge to appear. Use this when products need to meet all criteria. |
| **Any condition** (OR)   | The product only needs to match **one** rule. Use this for broader targeting.                                    |

### Examples

**All conditions (AND):**

* Product type **is equal to** "T-Shirt" **AND** Product price **is greater than** 30
* Result: Only t-shirts priced above $30 show the badge.

**Any condition (OR):**

* Product vendor **is equal to** "Nike" **OR** Product vendor **is equal to** "Adidas"
* Result: All Nike and Adidas products show the badge.

<figure><img src="/files/V3wfTeCEA4N70B3oS2Bf" alt="All conditions and Any condition toggle"><figcaption><p>Choose between All conditions (AND) or Any condition (OR) logic for your rules.</p></figcaption></figure>

## Common use cases

* **Sale badge on discounted items** — **Product compare price** `is greater than` 0 badges everything with an active sale.
* **Low stock warning** — **Product inventory** with `stock availability is less than` 5 shows an "Almost Gone" badge.
* **New arrivals** — **Product created** with `is less than` 30, which matches anything added in the last 30 days.
* **Collection-specific badge** — **Collections** `is equal to` "Summer Collection".

{% hint style="info" %}
**Product created** and **Product published** are measured in **day(s) counted back from today**, not as a calendar date. A smaller number means more recent.
{% endhint %}

## Next steps

* [Condition operators reference](/reference/condition-operators-reference) — every field and operator, and which values each accepts.
* [Target by customer](/badges-and-labels/target-by-customer) — show badges based on login status and customer tags.
* [Target by country and language](/badges-and-labels/target-by-country-language) — display badges for specific regions or languages.
* [Target products](/badges-and-labels/target-products) — return to the product targeting overview.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Target by customer

Show badges to specific customer segments based on login status, order history, spending, tags, and more.

Customer-based targeting lets you show different badges depending on who is browsing your store — login status, order count, spend, and other customer attributes.

## Available customer conditions

| Condition type            | Operators                                                      | Value field                                              |
| ------------------------- | -------------------------------------------------------------- | -------------------------------------------------------- |
| **Customer**              | Is Logged In / Not Logged In                                   | —                                                        |
| **Customer tag**          | is equal to / is not equal to                                  | Multi-select list of your existing Shopify customer tags |
| **Customer order count**  | is equal to / is not equal to / is greater than / is less than | Number                                                   |
| **Customer total spent**  | is equal to / is not equal to / is greater than / is less than | Number                                                   |
| **Customer purchase**     | Product already purchased / Product not purchased              | —                                                        |
| **Customer company name** | is equal to / is not equal to                                  | Text                                                     |

{% hint style="info" %}
There is no **contains** or **starts with** operator for customer conditions. **Customer tag** and **Customer company name** only support exact matching (**is equal to** / **is not equal to**).
{% endhint %}

{% hint style="info" %}
**Customer purchase** checks whether the customer has ever placed an order in your store — it is not tied to any particular product. **Product already purchased** matches customers with at least one past purchase; **Product not purchased** matches customers who have never bought anything.
{% endhint %}

## How to set up customer targeting

{% stepper %}
{% step %}

## Open the Display tab

In the badge editor, open **Display**, then expand **Customer conditions**.

<figure><img src="/files/JhYAhBtF4eCFnHGJiEmM" alt="Display tab with the Customer conditions section expanded"><figcaption><p>Open the Display tab and expand Customer conditions.</p></figcaption></figure>
{% endstep %}

{% step %}

## Add a customer condition

Click **Add conditions**. A new rule row appears, pre-filled with **Customer** / **Is Logged In**. Open the first dropdown to choose a different customer condition.

<figure><img src="/files/RiErsrL42iOK2zeUNl1j" alt="Customer condition menu in the Display tab"><figcaption><p>Choose Customer, Customer tag, Customer order count, Customer total spent, Customer purchase, or Customer company name.</p></figcaption></figure>
{% endstep %}

{% step %}

## Configure the operator and value

Choose the operator in the second dropdown, then enter or select the value in the third field. For example, set **Customer order count** to **is greater than** with a value of **10**.

For **Customer tag**, the third field is a searchable list of the customer tags that already exist in your store — tick one or more tags instead of typing free text.

**Customer** and **Customer purchase** have no third field: the operator alone defines the rule. **Customer purchase** looks at whether the customer has bought anything before, so there is no product to pick.

<figure><img src="/files/cVeMGFebg2PDOkhSmqjZ" alt="Show the badge to customers whose tag equals wholesale"><figcaption><p>Example: show the badge to customers whose tag equals wholesale.</p></figcaption></figure>
{% endstep %}

{% step %}

## Add more conditions (optional)

Click **Add conditions** again to stack more rules. Customer conditions are always combined with **AND** — a shopper must match **every** customer rule you add. There is no any/all switch in this section.

<figure><img src="/files/W32rISGqOrqaXt38N26e" alt="Two customer conditions stacked in the Customer conditions section"><figcaption><p>Multiple customer conditions must all match.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save

Click **Save** to apply the customer targeting. The badge will only appear for visitors who match your conditions.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Customer conditions that rely on account data (order count, total spent, purchase history, tags, company name) only work for **logged-in customers**. Visitors who are not logged in will not match these conditions.
{% endhint %}

## Use cases and examples

### VIP badge for loyal customers

Show a "VIP" or "Loyal Customer" badge to shoppers who have placed 10 or more orders:

* **Condition:** Customer order count **is greater than** 9
* **Result:** Logged-in customers with 10+ orders see the VIP badge on targeted products.

{% hint style="info" %}
There is no "greater than or equal to" operator, so use **is greater than** with the value one below your threshold.
{% endhint %}

### Welcome back badge for returning visitors

Display a "Welcome Back" badge for any customer who is logged in:

* **Condition:** Customer **Is Logged In**
* **Result:** All logged-in customers see a personalized welcome badge.

### Exclusive deal for high spenders

Show a "Special Price" badge to customers who have spent over $500:

* **Condition:** Customer total spent **is greater than** 500
* **Result:** High-value customers see exclusive pricing badges.

### Wholesale badge for B2B customers

Display wholesale pricing badges for customers who belong to a specific company:

* **Condition:** Customer company name **is equal to** "Wholesale Partners Ltd"
* **Result:** B2B customers from that company see relevant badges.

{% hint style="info" %}
The company name must match exactly. To cover several companies, add a separate badge for each one — customer conditions inside a single badge are combined with AND, so stacking two company names in one badge would never match.
{% endhint %}

### Tag-based targeting

Use Shopify customer tags to target a saved customer segment:

* **Condition:** Customer tag **is equal to**, then tick **VIP** in the tag list
* **Result:** Only customers tagged VIP in Shopify see the badge.

### Welcome offer for first-time buyers

Show a "First Order Discount" badge only to customers who have never bought from you:

* **Condition:** Customer purchase **Product not purchased**
* **Result:** The badge appears only for logged-in customers with no purchase history.

### Thank-you badge for existing customers

Show a "Thanks for coming back" badge to anyone who has ordered before:

* **Condition:** Customer purchase **Product already purchased**
* **Result:** The badge appears for logged-in customers with at least one past order.

## Combining customer and product conditions

You can combine customer conditions with product attribute conditions in the same badge. For example:

* **Customer order count** is greater than 5 **AND** **Product type** is equal to "Premium"
* Result: Only returning customers with 5+ orders see the badge, and only on premium products.

Set the product scope separately in **Products** and the customer rule in **Display**. A shopper must satisfy the customer rule while viewing a product included by the product scope. The **all conditions / any condition** selector described in [Target by product attribute](/badges-and-labels/target-by-attribute) belongs to product matching rules only — it does not apply to customer conditions.

## Next steps

* [Target by product attribute](/badges-and-labels/target-by-attribute) — Filter badges based on product title, type, vendor, price, and more.
* [Target by country & language](/badges-and-labels/target-by-country-language) — Show badges for visitors from specific countries or store languages.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Target by country or language

Display badges based on your visitor's country or the language they are viewing your store in.

Show badges based on where a visitor is located or which language version of your store they're browsing — useful for region-specific promotions and multilingual content.

Both settings live in the **Display** tab of the badge editor, as two separate sections: **Language conditions** and **Country conditions**. Each one is a switch you turn on, not a rule you add.

<figure><img src="/files/71Q885gntdzbYE1l93OK" alt="Display tab showing the Language conditions and Country conditions sections"><figcaption><p>The Display tab: Language conditions and Country conditions each have their own on/off toggle.</p></figcaption></figure>

## Country targeting

### How to set up country targeting

{% stepper %}
{% step %}

## Open the Display tab

In the badge editor, open **Display**.
{% endstep %}

{% step %}

## Turn on Country conditions

Click the toggle on the right of the **Country conditions** row. The section expands to show an **Operator** dropdown and a country search field.
{% endstep %}

{% step %}

## Choose the operator

Leave **Operator** on **Equals** to show the badge only in the countries you pick, or switch it to the opposite option to exclude them instead.
{% endstep %}

{% step %}

## Select the countries

Click **Search country...** to open the country list. Every country is listed with its ISO code — for example `Vietnam (VN)`, `South Africa (ZA)` — and each has a checkbox. Type to filter the list, then tick the countries you want.

Selected countries appear as removable chips inside the field. The list stays open after each pick, so you can tick several countries in one go; remove one by clicking the **×** on its chip.

<figure><img src="/files/2d6vlv3rP2a2CgNw9kQP" alt="Country list filtered to Vietnam with the checkbox ticked"><figcaption><p>Search the country list and tick one or more countries. Each entry shows the country name and its ISO code.</p></figcaption></figure>

<figure><img src="/files/BfuLB8wcnF91AjOrIqHX" alt="Vietnam selected as a chip in the country field"><figcaption><p>Selected countries appear as chips you can remove with the × button.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save

Click **Save** in the top-right corner. A **Badge/Label updated** confirmation appears, and the badge will only show for visitors detected in the selected countries.
{% endstep %}
{% endstepper %}

### Country targeting use cases

| Use case                          | Setup                                                               |
| --------------------------------- | ------------------------------------------------------------------- |
| **Region-specific promotion**     | Show a "Free Shipping to US" badge only for US visitors             |
| **Local holiday sale**            | Display a holiday badge only in countries where the holiday applies |
| **Compliance notice**             | Show a regulatory badge only in countries where it is required      |
| **Market-specific pricing badge** | Display "Best Price in EU" only for European customers              |

## Language targeting

Language targeting shows badges only when the storefront is viewed in a selected language.

### How to set up language targeting

{% stepper %}
{% step %}

## Open the Display tab

In the badge editor, open **Display**. **Language conditions** sits just above **Country conditions**.
{% endstep %}

{% step %}

## Turn on Language conditions

Click the toggle on the **Language conditions** row. The section expands to show an **Operator** dropdown and a language search field.

<figure><img src="/files/izRtQInV5qrldZdHVV5t" alt="Language conditions toggle switched on"><figcaption><p>Turn on the Language conditions toggle to reveal the operator and language list.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose the operator

Leave **Operator** on **Equals** to show the badge only in the languages you pick, or switch it to the opposite option to exclude them instead.
{% endstep %}

{% step %}

## Select the languages

Click **Search language...** to open the language list. Languages are listed with their ISO codes — `English (en)`, `German (de)`, `Hindi (hi)` — with a checkbox each. Type to filter, then tick the languages you want.

Selected languages appear as removable chips inside the field.

<figure><img src="/files/lLUpXc8M7TJt861H7XlG" alt="Language list showing languages with ISO codes"><figcaption><p>The language list covers all ISO languages, not only the ones published in your store.</p></figcaption></figure>

<figure><img src="/files/hPYajzSMdfQISEAkMw8S" alt="English selected as a chip in the language field"><figcaption><p>Example: target the badge to visitors browsing the English version of the store.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save

Click **Save** in the top-right corner. The badge will only appear when the store is viewed in the selected languages.
{% endstep %}
{% endstepper %}

### Language targeting use cases

| Use case                       | Setup                                                                  |
| ------------------------------ | ---------------------------------------------------------------------- |
| **Localized promotion**        | Show a badge with French text only on the French version of your store |
| **Language-specific campaign** | Run a promotion visible only to Spanish-speaking customers             |
| **Translated badge content**   | Create separate badges for each language with matching translated text |

{% hint style="warning" %}
The language list contains every ISO language, not just the ones your store publishes. Picking a language you have not published means the badge will never appear — confirm the locale is live in your Shopify **Markets** and **Languages** settings first.
{% endhint %}

## Combining country and language conditions

Country and language conditions can be turned on at the same time and are saved together. They also work alongside the product scope from the **Products** tab. For example:

* **Country** is "Canada" **AND** **Language** is "French"
* Result: The badge appears only for visitors in Canada who are viewing the store in French.

Useful for multilingual markets like Canada, Belgium, or Switzerland.

<figure><img src="/files/QBOFvNTY0hXxQ6pcExxJ" alt="Language and Country conditions both enabled in the Display tab"><figcaption><p>Both sections turned on at once: the visitor must match the language rule and the country rule.</p></figcaption></figure>

{% hint style="warning" %}
Turning a toggle off **clears** the countries or languages you had selected — switching it back on gives you an empty list. Don't use the toggle to pause a rule you plan to reuse; you would have to pick everything again.

If you turned a toggle off by mistake, click **Discard** (next to **Save**) and confirm **Discard changes** to restore the last saved setup.
{% endhint %}

## Next steps

* [Target by variant & metafield](/badges-and-labels/target-by-variant-metafield) — Target badges based on product variants and metafield values.
* [Target by product attribute](/badges-and-labels/target-by-attribute) — Filter badges by product title, type, vendor, price, and more.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Target by variant or metafield

Target badges by product variants, variant inventory, or the metafield values you have defined in Shopify.

Variant and metafield targeting gives you the most granular control over which products display your badge — target products by their variants and stock levels, or match them against custom metafield attributes you have defined in Shopify.

Both are condition types inside the **Products** tab of the badge editor, so the setup is the same as any other product condition — only the fields you fill in are different.

{% hint style="info" %}
New to condition-based targeting? Read [Target by product attribute](/badges-and-labels/target-by-attribute) first — it explains the condition builder, operators, and AND/OR logic that this page builds on.
{% endhint %}

## Before you start

* Open the badge you want to edit from **Badges & Labels**, or create a new one. See [Target products](/badges-and-labels/target-products) if you are not sure how to open the editor.
* For metafield targeting, the metafield must already exist in Shopify. Create it under **Settings → Custom data** first — see [Finding your metafield namespace and key](#finding-your-metafield-namespace-and-key).

## Available conditions

| Condition                    | What it targets                       | Typical options                                                                              |
| ---------------------------- | ------------------------------------- | -------------------------------------------------------------------------------------------- |
| **Select specific variants** | Individual variants you pick by hand  | search or browse · tick the variants that should show the badge                              |
| **Product variants**         | Whether a product has variants at all | products with variants · product has no variants                                             |
| **Variant inventory**        | Stock level of individual variants    | in stock · out of stock · stock availability greater than · stock availability less than     |
| **Product metafield**        | A metafield defined on the product    | is equal to · is not equal to · contains · does not contain · is greater than · is less than |
| **Variant metafield**        | A metafield defined on the variant    | is equal to · is not equal to · contains · does not contain · is greater than · is less than |

{% hint style="info" %}
The option list changes with the condition you pick: **Select specific variants** opens a picker so you can tick individual variants, **Product variants** offers only the two yes/no choices, inventory conditions offer stock-specific choices, and metafield conditions offer the full text and number operators.
{% endhint %}

## Product variant targeting

Show badges based on variant-level data rather than product-level data — useful when only certain sizes, colors, or configurations should trigger the badge.

### How to set up variant targeting

{% stepper %}
{% step %}

## Open the Products tab

In the badge editor, click **Products** in the tab row at the top of the left panel (next to **Design** and **Display**).

<figure><img src="/files/JWPjwWpbEI8vNXDslIqP" alt="Products tab in the badge editor"><figcaption><p>The badge editor tabs: Design, Products, and Display.</p></figcaption></figure>
{% endstep %}

{% step %}

## Select "Products matching conditions"

Under **Choose products to show this badge**, select **Products matching conditions**. A **Conditions** card appears below.

<figure><img src="/files/FNTBG2d34zlebRWw9Oiv" alt="Products matching conditions selected, with the Conditions card below"><figcaption><p>Choosing Products matching conditions reveals the Conditions card.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose how the rules combine

Next to **Products must match**, pick **all conditions** (AND) or **any condition** (OR). Leave it on **all conditions** if you are adding a single rule.
{% endstep %}

{% step %}

## Add the condition

Click **+ Add conditions**, then choose **Product variants** or **Variant inventory** from the condition dropdown.
{% endstep %}

{% step %}

## Configure the condition

For **Product variants**, choose **products with variants** or **product has no variants**.

For **Variant inventory**, choose the stock operator and — for the "greater than" and "less than" operators — enter the stock threshold.

<figure><img src="/files/ebAVve61H94pbu9dGeFC" alt="Variant inventory condition set to stock availability less than 3"><figcaption><p>Example: target variants with fewer than 3 units left in stock.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save

Click **Save** in the top-right corner. A **Badge/Label updated** confirmation appears and the rule takes effect on your storefront.
{% endstep %}
{% endstepper %}

## Metafield targeting

Metafield conditions target products based on custom data stored in Shopify metafields — any custom attribute you have defined for your products or variants.

### Finding your metafield namespace and key

You need the metafield's reference before you can target it:

1. In Shopify admin, go to **Settings → Custom data**.
2. Select **Products** (or **Variants** for a variant metafield).
3. Open the metafield definition you want to use.
4. Copy its **namespace** and **key** — the app expects them together as `namespace.key`, for example `custom.material`.

<figure><img src="/files/sfcZnpv7H1zlxjWSO5yu" alt="Shopify Settings, Custom data, product metafield definition showing its namespace and key"><figcaption><p>The namespace and key are shown on the metafield definition page in Shopify admin.</p></figcaption></figure>

{% hint style="warning" %}
The app does not autocomplete metafield names. If the namespace, the key, or the value does not match exactly — including capitalization — the condition matches nothing and the badge simply will not appear.
{% endhint %}

### How to set up metafield targeting

{% stepper %}
{% step %}

## Open the Products tab and select "Products matching conditions"

Same as for variant targeting: **Products** tab → **Products matching conditions** → choose **all conditions** or **any condition**.
{% endstep %}

{% step %}

## Add the condition

Click **+ Add conditions**, then choose **Product metafield** or **Variant metafield**.
{% endstep %}

{% step %}

## Enter the namespace and key

Type the metafield reference in the **namespace.key** format. For example:

* `custom.material` — a custom material metafield
* `custom.certification` — a certification status metafield
* `descriptors.subtitle` — a product subtitle metafield

<figure><img src="/files/fPRAvQw6NPuvzdVhxNKe" alt="Product metafield condition with the namespace key field filled in"><figcaption><p>Enter the metafield reference using the namespace.key format.</p></figcaption></figure>
{% endstep %}

{% step %}

## Select the operator and value

Choose the operator (**is equal to**, **contains**, **is greater than**, and so on) and type the value to match against. Use the number operators only for metafields that store numbers.

<figure><img src="/files/2qoN8079XLMi7wNNk2WX" alt="Metafield condition with operator and value set"><figcaption><p>A finished metafield rule: custom.material is equal to Organic.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save

Click **Save** in the top-right corner. A **Badge/Label updated** confirmation appears.
{% endstep %}
{% endstepper %}

### Metafield targeting examples

| Metafield (namespace.key)  | Operator        | Value   | Use case                                       |
| -------------------------- | --------------- | ------- | ---------------------------------------------- |
| `custom.material`          | is equal to     | Organic | Show an "Organic" badge on organic products    |
| `custom.certification`     | contains        | ISO     | Badge all ISO-certified products               |
| `custom.country_of_origin` | is equal to     | Italy   | Show a "Made in Italy" badge                   |
| `custom.is_bestseller`     | is equal to     | true    | Display a "Bestseller" badge                   |
| `custom.rating`            | is greater than | 4       | Show a "Top Rated" badge on highly rated items |

## Combining variant and metafield conditions

Variant and metafield conditions can be combined with each other and with any other product condition. Add each rule with **+ Add conditions**, then set **Products must match** to **all conditions** so every rule has to be true.

* **Variant inventory** stock availability less than 3 **AND** **Product metafield** `custom.is_featured` is equal to `true`
* Result: a "Last Few Left" badge that appears only on featured products with fewer than 3 units left at the variant level.

<figure><img src="/files/NwsLWUdX9J53dWV4nVJs" alt="Two conditions combined with all conditions selected"><figcaption><p>Two rules combined with all conditions (AND) logic.</p></figcaption></figure>

{% hint style="warning" %}
If the badge does not appear after saving, check the metafield reference and value first, then confirm the products really match the rule. You can also click **Discard** next to **Save** to roll back to the last saved setup.
{% endhint %}

## Next steps

* [Target by product attribute](/badges-and-labels/target-by-attribute) — Filter badges by product title, type, vendor, price, and more.
* [Target by country & language](/badges-and-labels/target-by-country-language) — Show badges to visitors in specific countries or languages.
* [Dynamic variables](/badges-and-labels/dynamic-variables) — Use live data like price, discount, and inventory count in your badge text.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Control display by device and page

Control which pages and devices your badge appears on, exclude theme elements, and decide which badge wins when several apply to the same product.

The **Display** tab of the badge editor decides *where* and *when* a badge shows, after the **Products** tab has decided *which products* it applies to.

The tab is a list of collapsible sections:

| Section                         | What it controls                                                   | Documented in                                                                 |
| ------------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------- |
| **Customer conditions**         | Which shoppers see the badge (logged in, tags, specific customers) | [Target by customer](/badges-and-labels/target-by-customer)                   |
| **Page conditions**             | Which page types the badge appears on                              | This page                                                                     |
| **Language conditions**         | The storefront language the visitor is browsing in                 | [Target by country & language](/badges-and-labels/target-by-country-language) |
| **Country conditions**          | The visitor's country                                              | [Target by country & language](/badges-and-labels/target-by-country-language) |
| **Other conditions**            | Product image, device, and excluded theme elements                 | This page                                                                     |
| **Visibility Date & Countdown** | Start/end dates and countdown timers                               | [Schedule visibility](/badges-and-labels/schedule-visibility)                 |
| **Priority conditions**         | Which badge wins when several apply to one product                 | This page                                                                     |

<figure><img src="/files/Lu8T4TurlukNN4ani7nG" alt="Display tab of the badge editor with all sections collapsed"><figcaption><p>The Display tab. Sections with a chevron expand; sections with a switch are turned on first.</p></figcaption></figure>

{% hint style="info" %}
Sections with a **chevron** (⌄) simply expand. Sections with a **switch** (Language, Country, Priority) must be turned on before their fields appear.
{% endhint %}

## Open the Display tab

{% stepper %}
{% step %}

## Open the app

In your Shopify admin, go to **Apps** → **Sami Product Labels**.
{% endstep %}

{% step %}

## Open Badges & Labels

In the app's left menu, click **Badges & Labels**. The list shows every badge with its Id, name, preview, type, priority, position, and status.

<figure><img src="/files/MVtZ3MdkM8P7sdH7232T" alt="Badges &#x26; Labels list with the edit pencil highlighted"><figcaption><p>The Badges &#x26; Labels list. Click the pencil icon in the Actions column to edit a badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Edit the badge

Click the **pencil** icon in the **Actions** column of the badge you want to configure. The editor opens with three tabs: **Design**, **Products**, **Display**.
{% endstep %}

{% step %}

## Go to Display

Click the **Display** tab.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
The **Save** and **Discard** buttons in the top-right corner only appear once you change something. If you want to abandon your edits, click **Discard** → **Discard changes**.
{% endhint %}

## Page conditions

By default a badge shows on every page where the product appears. Add a page condition to limit it to certain page types.

### How to add a page condition

{% stepper %}
{% step %}

## Expand Page conditions

Click the **Page conditions** row to expand it. An **+ Add conditions** button appears.

<figure><img src="/files/yA1TyEyNIbU3Zqt59VSW" alt="Page conditions section expanded showing the Add conditions button"><figcaption><p>An empty Page conditions section — no rule yet, so the badge shows everywhere.</p></figcaption></figure>
{% endstep %}

{% step %}

## Click + Add conditions

A condition row appears with three fields: **Page** (fixed), an operator, and a page type. The defaults are `Page` `is equal to` `Index page`.

<figure><img src="/files/YqmTDTTbYNQShxQYt5r3" alt="A page condition row with Page, is equal to, and Index page"><figcaption><p>Each click on <strong>+ Add conditions</strong> adds one row. Use the trash icon at the end of a row to remove it.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose the operator

* **is equal to** — show the badge only on the selected page type.
* **is not equal to** — show the badge everywhere *except* the selected page type.
  {% endstep %}

{% step %}

## Choose the page type

| Option                                | Where the badge appears                      |
| ------------------------------------- | -------------------------------------------- |
| **Index page**                        | Your storefront home page                    |
| **Collection page**                   | Collection / category listing pages          |
| **Product page**                      | Individual product pages                     |
| **Article Page**                      | Blog article pages                           |
| **Blog page**                         | Blog listing pages                           |
| **Cart page (including cart drawer)** | The cart page and the slide-out cart drawer  |
| **Search page**                       | Search results pages                         |
| **Specific pages**                    | Only the exact URL you enter (see next step) |

<figure><img src="/files/ukbR67LIahlg8cxs7F5U" alt="Page type dropdown listing all eight options"><figcaption><p>The eight page types available for a page condition.</p></figcaption></figure>
{% endstep %}

{% step %}

## For Specific pages, enter the URL

Choosing **Specific pages** adds a fourth field. Enter the full storefront URL of the page, for example `https://your-store.myshopify.com/pages/summer-sale`. The placeholder shows your own store's URL as a guide.

<figure><img src="/files/4KK7ZPstxu3tTIejdubB" alt="Specific pages selected with the URL field beside it"><figcaption><p><strong>Specific pages</strong> adds a URL field — paste the full page URL, not just the path.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save

Click **Save** in the top-right corner.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
A badge still needs to match the **Products** tab as well. A page condition narrows *where* a matching product shows its badge — it never makes the badge appear on products it does not apply to.
{% endhint %}

## Other conditions

Expand **Other conditions** to control which product image carries the badge, which devices see it, and which theme elements to skip.

| Setting                    | Options                                 | Behavior                                                                                                                                                         |
| -------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Show on (product page)** | All images / First image                | Show the badge on every gallery image, or only on the first (main) product image.                                                                                |
| **Device targeting**       | All devices / Desktop / Mobile          | Limit the badge to desktop or mobile shoppers, or show it on all devices.                                                                                        |
| **Do not show label on**   | CSS class list — `.CLASS1, .CLASS2,...` | The badge is not rendered on any element matching these classes. Useful when a slider, quick-view, or upsell section in your theme doesn't suit badge placement. |

<figure><img src="/files/kPXlZfWlbPlujMWDH0Dk" alt="Other conditions section with Show on, Device targeting, and Do not show label on fields"><figcaption><p>Image, device, and exclusion settings all live under Other conditions.</p></figcaption></figure>

{% hint style="info" %}
**Do not show label on** expects CSS **class** selectors separated by commas, each starting with a dot — for example `.product-card__slider, .quick-view`. Inspect the element in your theme to find the class name.
{% endhint %}

## Priority conditions

When several badges match the same product, priority decides which one is displayed.

{% stepper %}
{% step %}

## Turn on Priority conditions

Click the switch on the **Priority conditions** row. A **Priority value** field appears.
{% endstep %}

{% step %}

## Enter a priority value

Type a number from **0 to 100**. **0 is the highest priority, 100 is the lowest.** The app shows the same tip under the field.

<figure><img src="/files/MAyT7lX7un0pW2DbwUOq" alt="Priority conditions turned on with the Priority value field and tip"><figcaption><p>Lower number = higher priority. A badge is hidden if the product already has a higher-priority badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save

Click **Save**. The value now shows in the **Priority** column of the Badges & Labels list, so you can compare all your badges at a glance.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Badges with priority turned **off** show as `None` in the list and are not part of the comparison. If you want one badge to reliably win over another, set a priority value on **both**.
{% endhint %}

### Priority example

| Badge           | Priority value | Result on a product matching both |
| --------------- | -------------- | --------------------------------- |
| **Sale off**    | `0`            | Shown                             |
| **Best seller** | `10`           | Hidden                            |

## Next steps

* [Change badge position](/badges-and-labels/change-position) — Adjust where the badge sits on the product image.
* [Target products](/badges-and-labels/target-products) — Choose which products display your badge.
* [Schedule visibility](/badges-and-labels/schedule-visibility) — Set start and end dates for a badge.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Duplicate and manage badges

Duplicate badges and use the bulk actions available on the Badges & Labels list: set as active, set as draft, and delete.

The **Badges & Labels** list in Sami Product Labels lets you duplicate badges, change their status, or delete them — for one badge or for several at once.

## Duplicate badges

Duplicating creates an exact copy of one or more badges, including all design settings, targeting rules, and display options.

{% stepper %}
{% step %}

## Open Badges & Labels

In Shopify admin, open **Sami Product Labels > Badges & Labels**.
{% endstep %}

{% step %}

## Select the badges to duplicate

Tick the checkbox at the start of each badge row. To select every badge on the page, tick the checkbox in the table header.

A bar appears above the table showing how many badges are selected, for example **1 of 8 selected**.

<figure><img src="/files/MyHcoYOxvlRaZiP14aj4" alt="Badge rows selected in the Badges &#x26; Labels list"><figcaption><p>Tick one or more rows to reveal the bulk action bar.</p></figcaption></figure>
{% endstep %}

{% step %}

## Click Duplicate

In the bulk action bar, click **Duplicate**. There is no confirmation dialog — the copies are created immediately and the message **Badges/Labels duplicated** appears.

<figure><img src="/files/nWh4A21Gs0zyfDZ8WlwZ" alt="Duplicate button in the bulk action bar"><figcaption><p>Click Duplicate to copy every selected badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Edit the duplicated badge

Each copy appears at the top of the list with a new **Id**, today's date in **Created at**, the **same name** as the original, and the **same status** as the original.

If the original was **Active**, the copy is active right away and can already show in your store. Click the pencil icon (**Edit**) in the copy's row to rename it and adjust its design or targeting.

<figure><img src="/files/78LnW8FqxcmePjSYwbLq" alt="Duplicated badge at the top of the Badges &#x26; Labels list"><figcaption><p>The copy keeps the original name, so rename it to tell them apart.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
A copy of an active badge is active immediately. If you want to review it first, select it and click **Set as draft** before editing.
{% endhint %}

{% hint style="info" %}
Duplicate first, then modify the copy — it is faster than building a similar badge from scratch.
{% endhint %}

## Bulk actions

The bulk action bar appears as soon as at least one badge is selected.

| Action            | Description                                                                  | Confirmation |
| ----------------- | ---------------------------------------------------------------------------- | ------------ |
| **Set as active** | Sets every selected badge to **Active** so it can appear in your store       | Yes          |
| **Set as draft**  | Sets every selected badge to **Draft** — it stops showing but is not deleted | Yes          |
| **Duplicate**     | Creates a copy of every selected badge                                       | No           |
| **Delete**        | Permanently removes every selected badge                                     | Yes          |

<figure><img src="/files/mXbxe0GqCS2SICxMRg64" alt="Bulk action bar with Set as active, Set as draft, Duplicate, and Delete"><figcaption><p>The bulk action bar: Set as active, Set as draft, Duplicate, Delete.</p></figcaption></figure>

### Change the status of several badges

{% stepper %}
{% step %}

## Select the badges

Tick the badges whose status you want to change.
{% endstep %}

{% step %}

## Click Set as active or Set as draft

A confirmation dialog opens, for example **Set 1 badge(s)/label(s) as draft?**.

<figure><img src="/files/tQrHdcaDzfhgpSFhdOpK" alt="Confirmation dialog for setting badges as draft"><figcaption><p>Confirm the status change in the dialog.</p></figcaption></figure>
{% endstep %}

{% step %}

## Confirm

Click **Set as draft** (or **Set as active**) in the dialog. The message **Badge/Label updated** appears and the **Status** column changes for every selected row.
{% endstep %}
{% endstepper %}

### Delete badges

{% stepper %}
{% step %}

## Select the badges

Tick the badges you want to remove. To delete a single badge without selecting it, click the trash icon in its row instead.
{% endstep %}

{% step %}

## Click Delete

The dialog **Delete selected badge(s)/label(s)?** opens and warns that the action cannot be undone.

<figure><img src="/files/fL2rZL5pW2LaA9ANTOlG" alt="Delete confirmation dialog"><figcaption><p>Deleting badges cannot be undone.</p></figcaption></figure>
{% endstep %}

{% step %}

## Confirm

Click **Delete**. The message **Badges/Labels deleted** appears and the badges disappear from the list.
{% endstep %}
{% endstepper %}

{% hint style="danger" %}
Deleting badges is permanent and cannot be undone. Use **Set as draft** when you only need to stop a badge from displaying.
{% endhint %}

## Next steps

* [Badges & labels overview](/badges-and-labels/overview) — Return to the main overview of badges and labels.
* [Create a text badge](/badges-and-labels/create-text-badge) — Learn how to create a new text badge from scratch.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Badge groups overview

Bundle multiple badges and labels into one group, then design and target them as a single unit.

A badge group bundles several badges and labels together so they display as one block on your products — with a shared layout, position, and (optionally) a single set of display conditions.

<figure><img src="/files/S3KX6ED4x0XrrPvxIbIU" alt="Badge groups page with the empty state"><figcaption><p>Open <strong>Badge groups</strong> from the app sidebar to see all your groups.</p></figcaption></figure>

## Why use badge groups?

Promotions often need several badges on the same product at once — a "Sale" badge, a "Limited time" label, and a "Free shipping" badge together. A group keeps them aligned and manageable:

* **One layout for all of them** — stack the badges horizontally or vertically, control the gap, and place the whole set with a single position setting.
* **One set of conditions (optional)** — override each label's own targeting and show the whole group based on one condition instead.

{% hint style="info" %}
Badges and labels must already exist before you can add them to a group. See [Badges & Labels](/badges-and-labels/overview) to create them first.
{% endhint %}

## Plan availability

| Plan    | Number of label groups |
| ------- | ---------------------- |
| FREE    | 1                      |
| GOLD    | 1                      |
| DIAMOND | Unlimited              |

Deleted groups still count toward the limit. See [Pricing plans](/settings/pricing-plans) for the full comparison.

## What you can configure

The group editor has two tabs: **Design** and **Placement**.

{% tabs %}
{% tab title="Design" %}

| Setting                            | What it does                                                                  |
| ---------------------------------- | ----------------------------------------------------------------------------- |
| **Inside / Outside product image** | Choose whether the group sits on top of the product image or below it.        |
| **Label Selection**                | Use **Add labels to group** to pick the badges and labels the group contains. |
| **Select layout**                  | **Horizontal** or **Vertical** — how the badges stack within the group.       |
| **Item size**                      | The size of each badge in the group, as a percentage or fixed value.          |
| **Label gap**                      | The spacing between badges in the group, in pixels.                           |
| **Predefined position**            | One of nine anchor points for the whole group on the product image.           |
| **Margin**                         | Fine-tune the offset from the top, bottom, left, and right.                   |
| **Advance Section**                | Add custom CSS for the group (developer zone).                                |

<figure><img src="/files/SHrW6LJ5m9vu28jX10hi" alt="Design tab of the badge group editor"><figcaption><p>The Design tab controls which labels are in the group and how they are laid out.</p></figcaption></figure>
{% endtab %}

{% tab title="Placement" %}
Under **Condition type**, choose how the group decides when to appear:

| Option                               | Behavior                                                                                                          |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------- |
| **Keep individual label conditions** | Each label in the group is shown or hidden based on its own condition.                                            |
| **Set a custom group condition**     | Overrides the individual label conditions and controls visibility using only the condition defined for the group. |

Choosing **Set a custom group condition** reveals the group-level condition sections: **Product conditions**, **Customer conditions**, **Page conditions**, **Language conditions**, **Country conditions**, and **Other conditions**.

<figure><img src="/files/oiCOfAThXvtc3o0Kbqi5" alt="Placement tab showing the two condition types"><figcaption><p>Pick between per-label conditions and a single condition for the whole group.</p></figcaption></figure>
{% endtab %}
{% endtabs %}

## Rename and preview

Open the **…** menu in the editor to **Rename** the group or **Preview product**.

<figure><img src="/files/HE7lzouy4Kuz8Tcwbifw" alt="Editor overflow menu with Rename and Preview product"><figcaption><p>Use the … menu to rename the group or preview it on a product.</p></figcaption></figure>

## Next steps

* [Create a label group (inside product image)](/badge-groups/create-label-group) — overlay a group on the product photo.
* [Create a badge group (outside product image)](/badge-groups/create-badge-group) — place a group beside the product information.
* [Badges & Labels overview](/badges-and-labels/overview) — create the badges you want to bundle.
* [Set up group conditions](/badge-groups/set-group-conditions) — control the whole group with one rule set.
* [Target products](/badges-and-labels/target-products) — how conditions work for individual labels.


# Create a label group

Bundle several labels into one group that sits on top of the product image.

Choose **Inside product image** when the group should overlay the product photo — the usual choice for "Sale", "New", or "Best seller" labels stacked in a corner of the image.

{% hint style="info" %}
Create your labels first in [Badges & Labels](/badges-and-labels/overview). The group only bundles labels that already exist.
{% endhint %}

{% stepper %}
{% step %}

### Open Badge groups

In your Shopify admin, open **Sami Product Labels** and click **Badge groups** in the app sidebar.

<figure><img src="/files/S3KX6ED4x0XrrPvxIbIU" alt="App sidebar with Badge groups selected"><figcaption><p>Badge groups sits between Badges &#x26; Labels and Extra Features in the sidebar.</p></figcaption></figure>
{% endstep %}

{% step %}

### Click Create badge group

On an empty store you'll see **Create your first badge group**. Click **Create badge group** to open the editor.

<figure><img src="/files/8xvglgTGZnekS8W8lDUb" alt="Badge groups empty state"><figcaption><p>Click Create badge group to open the group editor.</p></figcaption></figure>
{% endstep %}

{% step %}

### Select Inside product image

At the top of the **Design** tab, pick **Inside product image**. The group will be positioned over the product photo.
{% endstep %}

{% step %}

### Name the group

The group is called **Label group** by default. Open the **…** menu above the preview, click **Rename**, and type a name of up to 50 characters — for example "Summer sale labels".
{% endstep %}

{% step %}

### Add labels to the group

In **Label Selection**, click **Add labels to group**. Search by name, tick the labels you want, then click **Select**.

<figure><img src="/files/bpQjo0MfjMxx7vPsOzYf" alt="Add labels to group dialog"><figcaption><p>Tick each label to include, then click Select.</p></figcaption></figure>
{% endstep %}

{% step %}

### Design the group

Open the **Design** section and set how the labels look together:

| Setting                 | What it controls                                                         |
| ----------------------- | ------------------------------------------------------------------------ |
| **Select layout**       | **Horizontal** or **Vertical** stacking.                                 |
| **Item size**           | The size of each label, as a percentage or a fixed value.                |
| **Label gap**           | The spacing between labels, in pixels.                                   |
| **Predefined position** | One of nine anchor points on the product image (corners, edges, center). |
| **Margin**              | Top, bottom, left, and right offset from the anchor.                     |

Check the live preview on the right while you adjust. Use the **Product page / Collection page** menu and the desktop/mobile icons to see the group in each context.

<figure><img src="/files/w11ifKXtueiqYglCG9oT" alt="Design section with layout, size, gap, and the nine-point position grid"><figcaption><p>The nine-point grid anchors the whole group on the product image.</p></figcaption></figure>
{% endstep %}

{% step %}

### Add custom CSS (optional)

Expand **Advance Section** to add your own CSS for the group. Skip this unless you need styling the settings above can't produce.
{% endstep %}

{% step %}

### Choose how the group is targeted

Switch to the **Placement** tab and pick a **Condition type**:

| Option                               | Behavior                                                                 |
| ------------------------------------ | ------------------------------------------------------------------------ |
| **Keep individual label conditions** | Each label is shown or hidden by its own targeting rules.                |
| **Set a custom group condition**     | Ignores the individual rules and uses one condition for the whole group. |

Choosing the second option reveals **Product**, **Customer**, **Page**, **Language**, **Country**, and **Other** conditions for the group — see [Set up group conditions](/badge-groups/set-group-conditions).

<figure><img src="/files/oiCOfAThXvtc3o0Kbqi5" alt="Placement tab with the two condition types"><figcaption><p>Use a custom group condition when the whole set should follow one rule.</p></figcaption></figure>
{% endstep %}

{% step %}

### Save the group

Click **Save** in the top-right corner. The group appears on matching product pages immediately.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
FREE and GOLD plans allow 1 label group; deleted groups still count toward the limit. Upgrade to DIAMOND for unlimited groups.
{% endhint %}

## Next steps

* [Create a badge group (outside product image)](/badge-groups/create-badge-group) — place a group beside the product information instead.
* [Badge groups overview](/badge-groups/overview) — what every setting in the editor does.
* [Target products](/badges-and-labels/target-products) — how conditions work for individual labels.


# Create a badge group

Bundle several badges into one group placed next to the product information, outside the product image.

Choose **Outside product image** when the group should sit in the product information column — below the price, under the add-to-cart button, and so on — instead of overlaying the photo. This suits trust and shipping badges that belong with the buying details.

{% hint style="info" %}
Create your badges first in [Badges & Labels](/badges-and-labels/overview). The group only bundles badges that already exist.
{% endhint %}

{% stepper %}
{% step %}

### Open Badge groups

In your Shopify admin, open **Sami Product Labels** and click **Badge groups** in the app sidebar.

<figure><img src="/files/S3KX6ED4x0XrrPvxIbIU" alt="App sidebar with Badge groups selected"><figcaption><p>Badge groups sits between Badges &#x26; Labels and Extra Features in the sidebar.</p></figcaption></figure>
{% endstep %}

{% step %}

### Click Create badge group

On an empty store you'll see **Create your first badge group**. Click **Create badge group** to open the editor.
{% endstep %}

{% step %}

### Select Outside product image

At the top of the **Design** tab, pick **Outside product image**. The Label Selection button changes to **Add badges to group**, and a **Badge group replacement** menu appears in the Design section.

<figure><img src="/files/98I51KzRf1O3k25hQGxx" alt="Outside product image option selected"><figcaption><p>Outside product image places the group in the product information column.</p></figcaption></figure>
{% endstep %}

{% step %}

### Name the group

The group is called **Label group** by default. Open the **…** menu above the preview, click **Rename**, and type a name of up to 50 characters — for example "Checkout trust badges".
{% endstep %}

{% step %}

### Add badges to the group

In **Label Selection**, click **Add badges to group**. Search by name, tick the badges you want, then click **Select**.

<figure><img src="/files/5xsosBorht1rKWXps2vB" alt="Add badges to group dialog"><figcaption><p>Tick each badge to include, then click Select.</p></figcaption></figure>
{% endstep %}

{% step %}

### Choose where the group appears on the page

In the **Design** section, open **Badge group replacement** and pick the product-page element the group attaches to. The default is **Below the product price**; the menu offers the same anchors used for individual badges — see [Change badge position](/badges-and-labels/change-position) for the full list.

Then use **Predefined position** to align the group **left**, **center**, or **right** within that element.

<figure><img src="/files/trxF3KFuBqTLrU5uZ0jg" alt="Badge group replacement menu and left/center/right alignment"><figcaption><p>Pick a product-page element, then align the group within it.</p></figcaption></figure>
{% endstep %}

{% step %}

### Design the group

Set how the badges sit together:

| Setting           | What it controls                                                  |
| ----------------- | ----------------------------------------------------------------- |
| **Select layout** | **Horizontal** or **Vertical** stacking.                          |
| **Item size**     | The size of each badge, as a percentage or a fixed value.         |
| **Label gap**     | The spacing between badges, in pixels.                            |
| **Margin**        | Top, bottom, left, and right offset from the surrounding content. |

Check the live preview on the right. Use the **Product page / Collection page** menu and the desktop/mobile icons to confirm the group lands where you expect in each context.
{% endstep %}

{% step %}

### Add custom CSS (optional)

Expand **Advance Section** to add your own CSS — useful when a theme's spacing around the chosen element needs a small adjustment.
{% endstep %}

{% step %}

### Choose how the group is targeted

Switch to the **Placement** tab and pick a **Condition type**:

| Option                               | Behavior                                                                 |
| ------------------------------------ | ------------------------------------------------------------------------ |
| **Keep individual badge conditions** | Each badge is shown or hidden by its own targeting rules.                |
| **Set a custom group condition**     | Ignores the individual rules and uses one condition for the whole group. |

Choosing the second option reveals **Product**, **Customer**, **Page**, **Language**, **Country**, and **Other** conditions for the group — see [Set up group conditions](/badge-groups/set-group-conditions).

<figure><img src="/files/oiCOfAThXvtc3o0Kbqi5" alt="Placement tab with the two condition types"><figcaption><p>Use a custom group condition when the whole set should follow one rule.</p></figcaption></figure>
{% endstep %}

{% step %}

### Save the group

Click **Save** in the top-right corner. The group appears on matching product pages immediately.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
If the group doesn't appear where you expect, your theme may not expose the element you chose. Try a different **Badge group replacement** option, or use a theme selector as described in [Change badge position](/badges-and-labels/change-position).
{% endhint %}

## Next steps

* [Create a label group (inside product image)](/badge-groups/create-label-group) — overlay a group on the product photo instead.
* [Badge groups overview](/badge-groups/overview) — what every setting in the editor does.
* [Change badge position](/badges-and-labels/change-position) — the full list of product-page anchors.


# Set up group conditions

Use one set of rules to control when a whole badge group appears, instead of relying on each label's own targeting.

The **Placement** tab of the group editor decides *when and where* the group appears. By default every label in the group keeps its own targeting; a group condition replaces all of it with one rule set.

## Choose a condition type

Open the group, click the **Placement** tab, and pick a **Condition type**:

| Option                               | Behavior                                                                                                          | Use it when                                                                       |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| **Keep individual label conditions** | Each label in the group is shown or hidden based on its own condition.                                            | The labels already target the right products and you only want to share a layout. |
| **Set a custom group condition**     | Overrides the individual label conditions and controls visibility using only the condition defined for the group. | The whole set belongs to one campaign — one audience, one product scope.          |

<figure><img src="/files/rq8tPhKeQWvBf0cU1s4a" alt="Condition type section with the two options"><figcaption><p>Selecting Set a custom group condition reveals the condition sections below.</p></figcaption></figure>

{% hint style="warning" %}
**Set a custom group condition** ignores each label's own rules completely — not in addition to them. A label that normally shows only on sale items will appear wherever the group's condition matches.
{% endhint %}

## The condition sections

Choosing **Set a custom group condition** reveals six sections. Sections with a **chevron** (⌄) expand; **Language** and **Country** have a **switch** that must be turned on first.

| Section                 | Controls                                           |
| ----------------------- | -------------------------------------------------- |
| **Product conditions**  | Which products the group appears on                |
| **Customer conditions** | Which shoppers see it                              |
| **Page conditions**     | Which page types it appears on                     |
| **Language conditions** | The storefront language the visitor is browsing in |
| **Country conditions**  | The visitor's country                              |
| **Other conditions**    | Product image, device, and excluded theme elements |

{% hint style="info" %}
Group conditions have no scheduling or priority settings. Start and end dates stay on the individual labels — see [Schedule visibility](/badges-and-labels/schedule-visibility).
{% endhint %}

## Product conditions

The section starts with one row: **All Products** with the note *Enable this for all products*. Leave it as is to show the group on your whole catalog, or change the row to narrow the scope.

{% stepper %}
{% step %}

### Choose how rows combine

Set **Products must match** to **all conditions** (every row must be true) or **any condition** (one row is enough).
{% endstep %}

{% step %}

### Pick a condition

Open the first dropdown and choose a field. The list is grouped:

| Group                     | Options                                                                                                                                                                                                                                                     |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Product conditions**    | All Products, Select Products, Product title, Product type, Product vendor, Product price, Product compare price, Product sale price, Product option, Product tag, Product weight, Product created, Product published, Product inventory, Product metafield |
| **Variant conditions**    | Product variants, Variant inventory, Variant metafield                                                                                                                                                                                                      |
| **Collection conditions** | Collections                                                                                                                                                                                                                                                 |

<figure><img src="/files/QPD8rl2M4xXSakHuCVY3" alt="Product condition dropdown showing the grouped option list"><figcaption><p>Product, variant, and collection fields all live in the same dropdown.</p></figcaption></figure>
{% endstep %}

{% step %}

### Set the operator and value

The fields beside the condition change with your choice — a text value for **Product title**, a number for **Product price**, a picker for **Select Products** or **Collections**.
{% endstep %}

{% step %}

### Add or remove rows

Click **+ Add conditions** for another row, or the trash icon at the end of a row to delete it.
{% endstep %}
{% endstepper %}

## Customer conditions

Expand **Customer conditions** and click **+ Add conditions**. A row appears with the defaults `Customer` `Is Logged In`.

| Condition                 | Targets by                                          |
| ------------------------- | --------------------------------------------------- |
| **Customer**              | Login state — **Is Logged In** or **Not Logged In** |
| **Customer tag**          | Tags on the customer record                         |
| **Customer order count**  | How many orders the customer has placed             |
| **Customer total spent**  | Lifetime spend                                      |
| **Customer purchase**     | Products the customer has bought                    |
| **Customer company name** | The company on a B2B customer record                |

<figure><img src="/files/Ub1FGK0EX1sSxNKTKCr6" alt="Customer conditions with a condition row"><figcaption><p>Each row pairs a customer field with its own operator and value.</p></figcaption></figure>

## Page conditions

Expand **Page conditions** and click **+ Add conditions**. A row appears with the defaults `Page` `is equal to` `Index page`.

* **is equal to** — show the group only on that page type.
* **is not equal to** — show it everywhere *except* that page type.

The page types are the same ones used for individual badges (Index, Collection, Product, Article, Blog, Cart, Search, Specific pages) — see [Display by device & page](/badges-and-labels/display-device-page) for what each one covers.

<figure><img src="/files/dNHqgjMJzer3oHhHuzsD" alt="Page conditions row with Page, is equal to, and Index page"><figcaption><p>Add one row per page type you want to include or exclude.</p></figcaption></figure>

## Language and Country conditions

Turn on the switch on the **Language conditions** or **Country conditions** row. Each shows an **Operator** (default **Equals**) and a search field — type to find a language or country and select it.

<figure><img src="/files/KFGIhYfXMDuNXymIpAFm" alt="Language and Country conditions turned on with operator and search fields"><figcaption><p>Both sections stay inactive until you turn the switch on.</p></figcaption></figure>

{% hint style="info" %}
Language targeting relies on your store's localized versions. See [Target by country & language](/badges-and-labels/target-by-country-language).
{% endhint %}

## Other conditions

| Setting                    | Options                                 | Behavior                                                                             |
| -------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------ |
| **Show on (product page)** | All images / First image                | Show the group on every gallery image, or only on the first one.                     |
| **Device targeting**       | All devices / Desktop / Mobile          | Limit the group to desktop or mobile shoppers.                                       |
| **Do not show label on**   | CSS class list — `.CLASS1, .CLASS2,...` | Skip any theme element matching these classes, such as a slider or quick-view block. |

<figure><img src="/files/q9A1MNJYpShaPuv5d4hY" alt="Other conditions with image, device, and exclusion fields"><figcaption><p>Image, device, and exclusion settings for the whole group.</p></figcaption></figure>

## Save

Click **Save** in the top-right corner. The group appears on matching product pages immediately.

## Next steps

* [Create a label group (inside product image)](/badge-groups/create-label-group) — build a group that overlays the product photo.
* [Create a badge group (outside product image)](/badge-groups/create-badge-group) — build a group beside the product information.
* [Target products](/badges-and-labels/target-products) — the equivalent settings for a single badge.


# Trust badge overview

Learn what trust badges are, when to use them, and how to get started.

Trust badges are icons that help shoppers feel more confident about buying from your store. Use them to highlight secure payments, guarantees, shipping benefits, accepted payment methods, and store policies.

They work best near purchase controls, where they can answer common concerns without adding more text to the product page.

<figure><img src="/files/m96nNZJmiGuYENs0G1YV" alt="Trust badges displayed near the purchase controls on a product page"><figcaption><p>Trust badges reassure shoppers at the moment they decide to buy.</p></figcaption></figure>

## What you can show

Common trust badge types include:

* **Security** — secure checkout and protected payments.
* **Payment** — accepted methods such as Visa, Mastercard, or PayPal.
* **Guarantee** — money-back guarantees and warranties.
* **Shipping** — free shipping, fast delivery, or free returns.
* **Endorsement** — reviews, awards, certifications, or partner logos.

<figure><img src="/files/j8cIKzhnk5l0pHVgJfLh" alt="Examples of security, payment, guarantee, shipping, and endorsement badges"><figcaption><p>Combine the badge types that address your customers' most common concerns.</p></figcaption></figure>

## Get started

In Shopify admin, open **Sami Product Labels → Extra Features → Trust Badges**. Create a trust badge from scratch, or select a design from **Featured templates**.

<figure><img src="/files/hgtjVXCJpZuR2YFbR3e7" alt="Extra Features page with the Trust Badges tab selected"><figcaption><p>Open the Trust Badges tab to create and manage your trust badges.</p></figcaption></figure>

{% hint style="info" %}
Trust badges are unlimited on every plan.
{% endhint %}

## Next steps

* [Create a trust badge](/extra-features/create-trust-badge) — add icons and customize the design.
* [Place a trust badge with shortcode](/extra-features/place-with-shortcode) — display it at an exact position in your theme.


# Create a trust badge

Create and customize a trust badge from scratch or a featured template in Sami Product Labels.

A trust badge is a block of payment, security, shipping, guarantee, or policy icons with an optional title and description. The editor has two tabs: **Design** for content and styling, and **Placement** for the built-in product-page position and shortcode.

{% stepper %}
{% step %}

## Open Trust Badges

In your Shopify admin, open **Sami Product Labels**, select **Extra Features** in the app navigation, then select the **Trust Badges** tab.

If you already have trust badges, the page shows them in a table. If the list is empty, the page shows a **Create your first trust badge** panel instead.

<figure><img src="/files/CcZiJhYgbbGCjWliC57C" alt="Extra Features page with the Trust Badges tab selected"><figcaption><p>The Trust Badges tab contains the create action, saved trust badges, and featured templates.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose how to start

{% tabs %}
{% tab title="Start from scratch" %}
Click **Create trust badge**. The button appears in the page header when the table is visible, or in the empty-state panel when you have not created a trust badge yet.
{% endtab %}

{% tab title="Use a template" %}
Scroll to **Featured templates**. Click **View all templates** to show all four designs: **Eco-Friendly template**, **With payment method**, **Policies store template**, and **Badge box template**. Click **Select** on a template to open it with its icons and styling already applied.
{% endtab %}
{% endtabs %}

Both options open the editor on the **Design** tab.

<figure><img src="/files/leMnYwO7b7WuzLEw5M3F" alt="Create trust badge button and Featured templates section"><figcaption><p>Create a trust badge from scratch, or select one of the four featured templates.</p></figcaption></figure>
{% endstep %}

{% step %}

## Name the trust badge

The name field appears above the preview. Replace **New Trust Badge** with a name of up to 50 characters. This name is only used to identify the trust badge in the app and is not shown to customers.

<figure><img src="/files/7YVAjLnyH8q2yy9GNsIg" alt="Trust badge name field above the editor preview"><figcaption><p>Use a clear internal name so the trust badge is easy to find in the table.</p></figcaption></figure>
{% endstep %}

{% step %}

## Add a title and description

In **Content & Badges**, open **Title** and **Description** and enter the optional text that appears above the icons. Both fields support bold, italic, underline, emoji, text alignment, and source mode.

The fields are language-specific. Their labels show the active language, for example **Title (en)**. Use the language selector above the preview to edit another language.

Leave both fields empty if you want to show only the icons.

<figure><img src="/files/dsuRZFSZtWTgY6Kw0sfB" alt="Title and Description rich-text editors in Content and Badges"><figcaption><p>Title and Description are optional rich-text fields edited separately for each language.</p></figcaption></figure>
{% endstep %}

{% step %}

## Add badge icons

Under **Badges**, click **Add Badge**, then choose:

| Option                 | What it does                             |
| ---------------------- | ---------------------------------------- |
| **Select badge image** | Opens the **Select Image** dialog.       |
| **Line break**         | Starts the following icons on a new row. |

In **Select Image**, use **Search images** to find an icon. The **Library** source contains more than 400 payment, security, shipping, guarantee, and policy images; the current item count appears next to the source name. Select one or more images, then click **Select Image**.

Switch to **Design your Images** to use uploaded, URL-imported, or related custom designs. After selecting an image, click **Edit with AI** if you want to create a variation before adding it.

<figure><img src="/files/EvwDWTtql63qgHJdKujf" alt="Select Image dialog with Search images, Library, Design your Images, Edit with AI, and Select Image controls"><figcaption><p>Search the built-in library or switch to Design your Images, then confirm your selection.</p></figcaption></figure>
{% endstep %}

{% step %}

## Reorder and configure each icon

Each icon appears as a row in the **Badges** list. Drag a row by its handle to change the display order, or click **Delete** to remove it. Use **Line break** items to control where a new row starts.

Click the row's **General** button to open its settings:

* **Change Image** — replace the selected icon.
* **Link** — make the icon open a URL; use the external-link option to open it in a new tab.
* **Tooltip** — add up to 150 characters shown when a shopper points to the icon.
* **Layout colors** — recolor supported layers in built-in SVG icons.

<figure><img src="/files/LjQq6AfRtZnx2TfIx5mY" alt="Badges list and General settings panel for one trust badge icon"><figcaption><p>Drag icons to reorder them, and use General to change the image, link, tooltip, or supported colors.</p></figcaption></figure>
{% endstep %}

{% step %}

## Style the trust badge block

Use the collapsible design sections to match the trust badge to your theme:

| Section                        | Main settings                                                                                          |
| ------------------------------ | ------------------------------------------------------------------------------------------------------ |
| **Design Main Section**        | Block width, margin, padding, border size/style/color, shadow, and corner radius.                      |
| **Design title & description** | Custom font, color, font size, and line height for the title and description.                          |
| **Design Badge**               | Mono, mono card, original, or original card style; alignment; width and height; margin; and animation. |
| **Responsive size**            | Separate icon width and height for tablet and mobile.                                                  |
| **Advance Section**            | Custom CSS and a clickable CSS reference for the trust badge selectors.                                |

The available animations are **SlideInUp**, **SadeInDown**, **BounceIn**, **FlipInX**, and **ZoomIn**. Turn on **Animation**, select an effect, and use the play button to preview it.

<figure><img src="/files/5XCitF7FZMtVX6nlr6Cb" alt="Trust badge editor showing the collapsible design sections"><figcaption><p>Open each design section to style the container, text, icons, responsive sizes, and custom CSS.</p></figcaption></figure>

{% hint style="info" %}
In **Advance Section**, click a selector in **CSS reference** to insert its scoped rule into the custom CSS editor.
{% endhint %}
{% endstep %}

{% step %}

## Choose where the trust badge appears

Switch to the **Placement** tab:

| Option           | What it does                                                                                       |
| ---------------- | -------------------------------------------------------------------------------------------------- |
| **Product page** | Turn on the switch to display the trust badge at the app's built-in position on all product pages. |
| **Shortcode**    | Copy the snippet when you want to place the trust badge at a custom position in your theme.        |

An unsaved trust badge uses `data-id="new"` in its shortcode. Save the trust badge before placing that snippet in your theme.

<figure><img src="/files/ZGx9TqKu5TmHV1LYIDpW" alt="Placement tab with the Product page switch and Shortcode section"><figcaption><p>Use the built-in product-page position or copy the shortcode for a custom position.</p></figcaption></figure>

{% hint style="info" %}
See [Place a trust badge with shortcode](/extra-features/place-with-shortcode) for the complete theme-editor flow.
{% endhint %}
{% endstep %}

{% step %}

## Preview and save

Use the controls above the preview to:

* switch the editing language;
* preview the **Product page**;
* switch between desktop and mobile views;
* show or hide the sample product;
* set the trust badge to **Active** or **Draft**.

Check the preview, then click **Save** in the top-right corner. Click **Discard** if you want to leave without keeping your unsaved edits.

<figure><img src="/files/8n6g60Mam3PEyYDUcFba" alt="Trust badge editor with preview controls, Active and Draft status, Discard, and Save"><figcaption><p>Preview the result, choose Active or Draft, then save the trust badge.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Next steps

* [Trust badge overview](/extra-features/trust-badge-overview) — manage saved trust badges, templates, status, and placement.
* [Place a trust badge with shortcode](/extra-features/place-with-shortcode) — add the trust badge at an exact position in your theme.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Place a trust badge with shortcode

Place a trust badge at an exact position in your Shopify theme using its shortcode.

Turn on **Product page** in the trust badge editor when the app's built-in position works for your store. When you need the trust badge somewhere else — for example directly below the buy buttons — copy its shortcode and add the **Samita Trust Badge** app block at that exact position in your theme.

## Where to find the shortcode

The shortcode is available in two places:

* **Trust badge table** — open **Sami Product Labels → Extra Features → Trust Badges**. Copy the snippet from the **Shortcode** column of the trust badge you want to place.
* **Trust badge editor** — click the row's edit action, open **Placement**, then click **Copy** in the **Shortcode** section.

<figure><img src="/files/L0SZm50DHCQeXEsZMm3r" alt="Trust badge table with the Shortcode column and copy button"><figcaption><p>Copy the shortcode directly from the updated Trust Badges table.</p></figcaption></figure>

<figure><img src="/files/wKttq9eQYB7FSl9JpCUL" alt="Placement tab with the Product page switch and Shortcode section"><figcaption><p>The Placement tab also provides the shortcode and a Copy button.</p></figcaption></figure>

{% hint style="warning" %}
Save the trust badge before copying its shortcode. An unsaved trust badge uses `data-id="new"`, which will not render on your storefront.
{% endhint %}

## Place the shortcode in your theme

{% stepper %}
{% step %}

## Copy the saved trust badge's shortcode

Copy the snippet from the table or the editor. It looks like this, with a unique ID for your trust badge:

```html
<div class="samitaPL-trustBadge" data-id="4477"></div>
```

Do not reuse a snippet from another row. Each trust badge has its own `data-id`.
{% endstep %}

{% step %}

## Open the theme editor

In your Shopify admin, open **Online Store**. Find the theme you want to update and click **Edit theme**.

<figure><img src="/files/MDKSwsLBJBM1xdqcQ4iu" alt="Online Store page with Edit theme on the selected theme"><figcaption><p>Open the theme that should display the trust badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Open the product template

Use the page selector at the top of the theme editor, then choose **Products → Default product** or another product template used by your store.

In the sections panel, expand **Product information**. The existing blocks — such as **Title**, **Price**, **Buy buttons**, and **Description** — show where the trust badge can be inserted.

<figure><img src="/files/uCtHqnGPndHb1TrADYYs" alt="Shopify theme editor with Default product selected and Product information expanded"><figcaption><p>Open the product template and expand Product information before adding the app block.</p></figcaption></figure>
{% endstep %}

{% step %}

## Add the Samita Trust Badge block

Click **Add block**, select the **Apps** tab, then choose **Samita Trust Badge** from **Sami Product Labels**. Drag the new block to the position you want, such as directly below **Buy buttons**.

<figure><img src="/files/7AOMOQSEsEuR72cQVF10" alt="Add block dialog on the Apps tab with Samita Trust Badge from Sami Product Labels"><figcaption><p>Select Samita Trust Badge from the Apps list, then place it in Product information.</p></figcaption></figure>
{% endstep %}

{% step %}

## Paste the shortcode and save the theme

Select the **Samita Trust Badge** block and paste the complete snippet into its **Shortcode** field. Click **Save** in the theme editor.

<figure><img src="/files/raaUfEcauF1yaJySRsK3" alt="Samita Trust Badge app block with the shortcode pasted into its Shortcode field"><figcaption><p>Paste the complete shortcode into the app block, then save the theme.</p></figcaption></figure>

{% hint style="info" %}
The app block also provides **Check how to get embed code** to reopen this guide and **Manage app** to return to Sami Product Labels.
{% endhint %}
{% endstep %}

{% step %}

## Check the storefront

Open a product that uses the edited template and confirm that the trust badge appears in the expected position.

If it does not appear, verify that:

* the trust badge is **Active**, not Draft;
* the shortcode contains the saved trust badge's exact `data-id`;
* the full `<div class="samitaPL-trustBadge" ...></div>` snippet is in the **Shortcode** field;
* the product uses the theme template you edited;
* the **Samita Trust Badge** block is visible and the theme changes were saved.
  {% endstep %}
  {% endstepper %}

## Built-in placement vs. shortcode

| Method           | How it works                                                                                                                                   |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| **Product page** | Turn on the switch in **Placement** to show the trust badge at the app's built-in position on all product pages. No theme editing is required. |
| **Shortcode**    | Paste the saved trust badge's snippet into a **Samita Trust Badge** app block to control its exact position.                                   |

If you enable both methods on the same product template, the trust badge can appear twice. Use the product-page switch for the built-in position or the shortcode app block for a custom position.

## Next steps

* [Create a trust badge](/extra-features/create-trust-badge) — create the content and design before placing it.
* [Trust badge overview](/extra-features/trust-badge-overview) — manage saved trust badges and copy shortcodes from the table.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Highlight overview

Use highlights to give shoppers a short, scannable list of your product's most relevant selling points.

Highlights are short bulleted lists of the most relevant selling points of your products. Each item pairs an icon with a title and a short description, and the items are arranged in a grid you can style to match your theme.

Good highlights are easily consumable, quick-to-scan sentence fragments that answer the most common customer questions or focus on the most important attributes of the product.

<figure><img src="/files/3zS5r2LhMTcfx4Gd7bKN" alt="Highlight block showing icons with titles and descriptions on a product page"><figcaption><p>A highlight block summarizes a product's key benefits at a glance.</p></figcaption></figure>

## What a highlight item contains

| Element         | Purpose                                                             |
| --------------- | ------------------------------------------------------------------- |
| **Icon**        | A visual cue chosen from the built-in icon library.                 |
| **Title**       | A short heading for the feature, for example "Handcrafted quality". |
| **Description** | One or two lines explaining the benefit.                            |

## Why highlights help

Offering **additional services** — free shipping, an extended warranty, a lifetime guarantee — sets you apart from other businesses in the same industry. Highlights put those differences where shoppers actually see them, next to the product they are considering.

{% hint style="info" %}
Keep each highlight to a fragment rather than a full sentence. Shoppers scan this block; they don't read it.
{% endhint %}

## Plan availability

| Feature    | FREE | GOLD      | DIAMOND   |
| ---------- | ---- | --------- | --------- |
| Highlights | 2    | Unlimited | Unlimited |

{% hint style="warning" %}
On FREE, deleted highlights still count toward the limit of 2.
{% endhint %}

## Next steps

* [Create a highlight](/extra-features/create-highlight) — build a highlight block and style its grid.
* [Target highlight display](/extra-features/target-highlight-display) — choose which products and pages show the block.
* [Trust badge overview](/extra-features/trust-badge-overview) — add payment, security, and shipping badges too.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Create a highlight

Step-by-step guide to creating a highlight block in Sami Product Labels.

A highlight block is a grid of feature items — each with an image, a title, and a description — that you place on your product pages to showcase benefits and selling points. The editor has two tabs: **Design** (content and styling) and **Placement** (where and to whom it appears).

{% stepper %}
{% step %}

## Open the Highlights tab

In your Shopify admin, open the **Sami Product Labels** app, click **Extra Features** in the app sidebar, then switch to the **Highlights** tab.

<figure><img src="/files/vXFyt588SxfPO83XwTYz" alt="Extra Features page with the Highlights tab selected"><figcaption><p>The Highlights tab lists every highlight block you have created.</p></figcaption></figure>
{% endstep %}

{% step %}

## Click Create highlights

Click **Create highlights**. The full-screen editor opens on the **Design** tab.

{% hint style="info" %}
Scroll to **Featured templates** and click **View all templates** to start from a ready-made block such as *Free Delivery* instead of building one from scratch.
{% endhint %}

<figure><img src="/files/P6U8Pbcl6DIvZKKa4gYO" alt="Create highlights button and the Featured templates section"><figcaption><p>Create a highlight from scratch, or start from a featured template.</p></figcaption></figure>
{% endstep %}

{% step %}

## Name the highlight

The name field sits above the preview. Replace **New Highlight** with a name of up to 50 characters. This name is internal — it identifies the block in your list and is not shown to customers.
{% endstep %}

{% step %}

## Add a heading and description

In **Content & Badges**, fill in **Title** and **Description** — these are the heading and intro text for the whole block, for example "Why Choose Us". Both are rich-text editors with **bold**, *italic*, underline, emoji, alignment, and an HTML view (`</>`), and both are per-language, so the label shows the active language, for example `Title (en)`.

Both are optional; leave them empty to show the items only.

<figure><img src="/files/uP0WxLzvoND9ETM2Jqqd" alt="Title and Description rich-text editors in the Content and Badges section"><figcaption><p>The block heading and description are rich-text fields, edited per language.</p></figcaption></figure>
{% endstep %}

{% step %}

## Add highlight items

Under **Badges**, click **Add highlight**, then choose:

| Option                 | What it does                                               |
| ---------------------- | ---------------------------------------------------------- |
| **Select badge image** | Opens the image picker to add one or more items.           |
| **Line break**         | Inserts a break so the following items start on a new row. |

In the picker, the **Library** holds 1,800+ images. Search by name, or narrow the list with the **Images**, **Free Labels**, **All colors**, and **Latest** filters (**Clear** resets them). Click the images you want, then click **Select Image**. You can also switch the source to **Design your Images** to use your own, or click **Edit with AI** to modify the selected image.

<figure><img src="/files/7ZI8U6YQvwynotdzR2cl" alt="Select Image panel with the library filters and search box"><figcaption><p>Filter or search the library, then pick the images for your highlight items.</p></figcaption></figure>
{% endstep %}

{% step %}

## Write the title and description for each item

Each item appears as a row in the **Badges** list. Click a row's gear icon to open its panel, where you can set:

* **Image** — click **Change** to swap it for another one.
* **Title** — the short heading for that feature, per language.
* **Description** — up to 250 characters, per language.

Use **Delete** in the panel to remove the item, and drag a row by its handle to reorder the grid.

<figure><img src="/files/wFcRVUE9OoqFoAIlcawq" alt="Highlight item panel with image, title, and description fields"><figcaption><p>Each item gets its own image, title, and description.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the grid and block styling

Open **Design Main Section** to control the block as a whole:

| Setting                      | What it does                                   |
| ---------------------------- | ---------------------------------------------- |
| **Alignment**                | Left, center, or right.                        |
| **Column**                   | How many items appear per row.                 |
| **Width**                    | The block width, in `%` or `px`.               |
| **Background Heading Color** | Background behind the heading and description. |
| **Background Color**         | Background of the items area.                  |
| **Margin** / **Padding**     | Spacing outside and inside the block.          |
| **Border & corners**         | Border style, color, and corner radius.        |

<figure><img src="/files/jux38Rz0RL1duU7szzjK" alt="Design Main Section with alignment, column, width, and background colors"><figcaption><p>Design Main Section controls the grid and the block container.</p></figcaption></figure>
{% endstep %}

{% step %}

## Style the highlight items

Open **Design Badge** to style the items themselves:

| Setting                                         | What it does                                                                                       |
| ----------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| **Alignment**                                   | How each item's content is aligned.                                                                |
| **Style**                                       | Four image styles: monochrome, monochrome on a card, original color, and original color on a card. |
| **Background Color**                            | Background of each item.                                                                           |
| **Size**                                        | **Width** and **Height** of the image, in `px` or `%` (50 px by default).                          |
| **Positions**                                   | Where the image sits relative to the text, for example **Image Position Top**.                     |
| **Margin** / **Padding** / **Border & corners** | Spacing and border for each item.                                                                  |
| **Title** / **Description**                     | Font, color, size, and line height for the item text.                                              |

<figure><img src="/files/Efot3LmASoKUKWVXggdS" alt="Design Badge section with alignment, style, size, and positions"><figcaption><p>Design Badge styles the individual highlight items.</p></figcaption></figure>
{% endstep %}

{% step %}

## Style the block heading (optional)

Open **Design title & description**. **Design Title** and **Design Description** each have their own font, color, size, and line height for the block-level heading and intro text.
{% endstep %}

{% step %}

## Set responsive sizes and custom CSS (optional)

* **Responsive size** — override the sizing on tablet and mobile.
* **Advance Section** — add **Custom CSS (Developer Zone)**. The **CSS reference** below the editor lists the selectors you can target, such as `.samita_highlight_container`; click one to insert it.

<figure><img src="/files/W29EuBMODcJNhLKMia7B" alt="Advance Section with the custom CSS editor and the CSS reference list"><figcaption><p>The CSS reference lists the selectors available for custom styling.</p></figcaption></figure>
{% endstep %}

{% step %}

## Choose where the highlight appears

Switch to the **Placement** tab:

* **Product page** — turn on to display the block at the app's built-in position on every product page.
* **Shortcode** — copy the snippet and paste it into your theme to place the block at an exact position.
* **Conditions** — **Product**, **Customer**, **Page**, **Language**, and **Country** conditions narrow down who sees the block and where.

{% hint style="info" %}
See [Target highlight display](/extra-features/target-highlight-display) for how the condition sets work.
{% endhint %}

<figure><img src="/files/iZQw7kBWkD49DgFhmp5f" alt="Placement tab with condition sections, the Product page toggle, and the shortcode"><figcaption><p>The Placement tab combines display conditions, the product page toggle, and the shortcode.</p></figcaption></figure>
{% endstep %}

{% step %}

## Preview and save

Above the preview you can switch the **language**, choose which page to preview, toggle **desktop / mobile**, and hide the sample product with the eye icon. Set the block to **Active** or **Draft**, then click **Save** in the top right. Use **Discard** to drop unsaved changes.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
The FREE plan includes 2 highlights, and deleted ones still count toward that limit. Upgrade to GOLD or DIAMOND for unlimited highlights.
{% endhint %}

## Next steps

* [Place a highlight with shortcode](/extra-features/place-highlight-with-shortcode) — position the block at a custom location in your theme.
* [Target highlight display](/extra-features/target-highlight-display) — control which pages and customers see your highlights.
* [Highlight overview](/extra-features/highlight-overview) — what highlights are and when to use them.
* [Create a trust badge](/extra-features/create-trust-badge) — add payment and security icons to your product pages.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Place a highlight with shortcode

Place a highlight block at an exact position in your theme using its shortcode.

By default a highlight block is shown at the app's built-in position on your product pages. When you need it somewhere else — above the description, further down the page, on another template — copy the block's shortcode and place it there yourself.

## Where to find the shortcode

The shortcode is available in two places:

* **In the editor** — open the highlight and go to the **Placement** tab. The **Shortcode** card at the bottom shows the snippet with a **Copy** button.
* **In the list** — on the **Extra Features** page, the **Highlights** tab has a **Shortcode** column with a copy icon for each block.

<figure><img src="/files/vN4Mhik2BfmlpZdRiGYI" alt="Placement tab of the highlight editor showing the Shortcode card with a Copy button"><figcaption><p>The Shortcode card sits below the Product page toggle on the Placement tab.</p></figcaption></figure>

{% hint style="warning" %}
Save the highlight before copying its shortcode. On an unsaved block the snippet reads `data-id="new"`, which will not render anything on your storefront.
{% endhint %}

## Place the shortcode in your theme

{% stepper %}
{% step %}

## Copy the shortcode

Open the highlight, switch to the **Placement** tab, and click **Copy**. The snippet looks like this, with your block's own ID:

```html
<div class="samitaPL-highlight" data-id="4482"></div>
```

Each highlight has its own `data-id`, so copy the snippet from the block you actually want to display.
{% endstep %}

{% step %}

## Open the theme editor

In your Shopify admin, go to **Online Store** and click **Edit theme** on the theme you want to change.

<figure><img src="/files/QpHJWvl3yv37gHWlgJSv" alt="Online Store page with the Edit theme button on the live theme"><figcaption><p>Open the theme you want to add the highlight to with Edit theme.</p></figcaption></figure>
{% endstep %}

{% step %}

## Add the Samita Highlight block

Navigate to the page and section where you want the block — for example **Product information** on the product template. Click **Add block**, switch to the **Apps** tab, and choose **Samita Highlight** (from Sami Product Labels). Drag the block to the exact position you want, such as between **Buy buttons** and **Description**.

<figure><img src="/files/voHJyh2A5lp3ODlgcm49" alt="Add block menu on the Apps tab with Samita Highlight selected"><figcaption><p>Pick Samita Highlight from the Apps tab of the Add block menu.</p></figcaption></figure>
{% endstep %}

{% step %}

## Paste the shortcode into the block

With the block selected, paste the snippet into its **Shortcode** field, then click **Save**.

<figure><img src="/files/bvPRsxo5Mn573N50967C" alt="App block settings with the highlight shortcode pasted into the Shortcode field"><figcaption><p>Paste the highlight shortcode into the block's Shortcode field and save.</p></figcaption></figure>
{% endstep %}

{% step %}

## Check your storefront

Open the page on your storefront and confirm the block renders in the right place. If nothing appears, check that:

* the highlight status is **Active**, not Draft;
* the `data-id` in the block matches the highlight;
* the conditions on the **Placement** tab do not exclude this page — see [Target highlight display](/extra-features/target-highlight-display).
  {% endstep %}
  {% endstepper %}

## Built-in placement vs. shortcode

| Method                  | How it works                                                                                                                                |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Product page toggle** | Turn on **Product page** on the Placement tab to show the highlight at the app's built-in position on every product page. No theme editing. |
| **Shortcode**           | Paste the snippet into an app block for an exact position. Use it when the built-in position isn't where you want the block.                |

Display conditions still apply either way — the shortcode controls *where* the block sits, the conditions control *whether* it shows.

## Next steps

* [Create a highlight](/extra-features/create-highlight) — build the block and style its grid.
* [Target highlight display](/extra-features/target-highlight-display) — control which pages and customers see it.
* [Place a trust badge with shortcode](/extra-features/place-with-shortcode) — the same flow for trust badges.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Target highlight display

Control where a highlight block appears and who sees it, using the conditions on the Placement tab.

Every highlight block has its own display rules. You set them on the **Placement** tab of the highlight editor, which holds five condition groups plus the two placement options.

<figure><img src="/files/PEsrfviLohHGIZAZCg4Y" alt="Placement tab of the highlight editor with all condition sections"><figcaption><p>The Placement tab combines display conditions with the product page toggle and the shortcode.</p></figcaption></figure>

{% hint style="info" %}
Leave every condition group empty to show the highlight everywhere it is placed. Conditions only narrow it down.
{% endhint %}

## Product conditions

Decide which products the highlight appears on.

Set **Products must match** to **all conditions** (every rule must be true) or **any condition** (one rule is enough), then click **Add conditions** to build a rule row:

| Field         | Options                                                                          |
| ------------- | -------------------------------------------------------------------------------- |
| **Condition** | **Select Products**, **Product tag**, **Product compare price**, **Collections** |
| **Operator**  | **is equal to** / **is not equals to**                                           |
| **Value**     | Click **select items** to pick the products, tags, or collections                |

Use the trash icon at the end of a row to remove that rule.

<figure><img src="/files/989wFyZRiA4VyjhbA5cG" alt="Product conditions with the all conditions and any condition options"><figcaption><p>Choose whether products must match all conditions or any condition.</p></figcaption></figure>

## Customer conditions

Decide who sees the highlight. Click **Add conditions** — the row is pre-filled with **Customer** / **Is Logged In**.

| Condition        | Operators                                  |
| ---------------- | ------------------------------------------ |
| **Customer**     | **Is Logged In** / **Not Logged In**       |
| **Customer tag** | Pick the customer tags the rule applies to |

{% hint style="info" %}
Highlights support these two customer conditions only. Badges and labels have a larger set — order count, total spent, purchase history, and company name. See [Target by customer](/badges-and-labels/target-by-customer).
{% endhint %}

## Page conditions

Decide which page types show the highlight. Click **Add conditions**, then pick the page:

| Field        | Options                                                                                                            |
| ------------ | ------------------------------------------------------------------------------------------------------------------ |
| **Operator** | **is equal to** / **is not equals to**                                                                             |
| **Page**     | Index page, Collection page, Product page, Article Page, Blog page, Cart page (including cart drawer), Search page |

<figure><img src="/files/Bi4Su3V6e6zQI0f6ZcNr" alt="Page conditions with the page type dropdown open"><figcaption><p>Limit the highlight to specific page types, or exclude them.</p></figcaption></figure>

## Language conditions

Turn on the **Language conditions** toggle, set the **Operator**, then search for and select the languages the rule applies to.

## Country conditions

Turn on the **Country conditions** toggle, set the **Operator**, then search for and select the countries the rule applies to.

<figure><img src="/files/lU7UPlRLCmcSQbGiHypm" alt="Language and country conditions with their operator and search fields"><figcaption><p>Language and country conditions are off by default — switch them on to use them.</p></figcaption></figure>

## Where the highlight is placed

Conditions decide *whether* the block shows; these two settings decide *where*:

| Option           | What it does                                                                                                                                                                            |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Product page** | Turn on to display the highlight at the app's built-in position on every product page.                                                                                                  |
| **Shortcode**    | Copy `<div class="samitaPL-highlight" data-id="…"></div>` and place it in your theme yourself — see [Place a highlight with shortcode](/extra-features/place-highlight-with-shortcode). |

{% hint style="warning" %}
Save the highlight before copying its shortcode — on an unsaved block the snippet reads `data-id="new"` and will not render.
{% endhint %}

## Next steps

* [Create a highlight](/extra-features/create-highlight) — build the block and style its grid.
* [Highlight overview](/extra-features/highlight-overview) — what highlights are and when to use them.
* [Pricing plans](/settings/pricing-plans) — what each plan includes.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Banners overview

Display promotional banners across your store with basic or infinite scroll styles and advanced placement targeting.

Banners let you display announcements, promotions, and important messages as a bar on your store pages — pinned to the top, fixed at the bottom, or placed anywhere with a shortcode. **Sami Product Labels** offers two banner types, each designed for a different use case.

## Banner types

### Basic banner

A basic banner displays one or more content groups in a static or rotating format.

| Feature                               | Description                                                         |
| ------------------------------------- | ------------------------------------------------------------------- |
| **Single or multiple content groups** | Display one message or rotate through several.                      |
| **Close button**                      | Let customers dismiss the banner with a customizable close button.  |
| **Click-through URL**                 | Link the entire banner to a page, opening in the same or a new tab. |
| **Custom styling**                    | Control fonts, colors, padding, and alignment.                      |

<figure><img src="/files/j10FLsVIDSFG6eRHpmpL" alt="A basic banner displayed at the top of a Shopify store"><figcaption><p>A basic banner with a promotional message and close button.</p></figcaption></figure>

### Infinite scroll banner

An infinite scroll banner loops its content continuously from right to left, like a news ticker. Use it for scrolling announcements, free-shipping notices, or repeating short messages.

| Feature                      | Description                                |
| ---------------------------- | ------------------------------------------ |
| **Seamless looping**         | Content scrolls continuously without gaps. |
| **Adjustable speed**         | Set how long one full loop takes.          |
| **Pattern image background** | Tile an image behind the scrolling text.   |
| **Close button**             | Customizable dismiss button for customers. |

{% hint style="info" %}
An infinite scroll banner holds a single content section. For several messages that rotate one after another, use a basic banner.
{% endhint %}

<figure><img src="/files/Uyr3CtCLNsmyfgvmwlDk" alt="An infinite scroll banner with ticker-style scrolling text"><figcaption><p>An infinite scroll banner looping promotional messages across the page.</p></figcaption></figure>

## Placement targeting

Both banner types share the same **Placement** tab. Start by choosing a display position — **Top**, **Top Sticky**, **Top Overlay**, **Overlay Sticky**, **Bottom Sticky**, or **Custom** — then narrow the audience with:

* **Product conditions** — target specific products, tags, or collections.
* **Customer conditions** — target specific customer segments.
* **Page conditions** — choose which store pages display the banner.
* **Language conditions** — show banners for specific store languages.
* **Country conditions** — show banners to visitors from specific countries.
* **Other conditions** — additional rules such as device type.
* **Visibility date** — schedule when the banner starts and stops showing.

Combine conditions with AND/OR logic for precise control.

{% hint style="info" %}
To place a banner at an exact spot in your theme, choose the **Custom** position and use the snippet from the **Shortcode** panel. See [Shortcode placement](/extra-features/configure-display-conditions#shortcode-placement).
{% endhint %}

## Plan availability

| Feature | FREE | GOLD      | DIAMOND   |
| ------- | ---- | --------- | --------- |
| Banners | 2    | Unlimited | Unlimited |

{% hint style="warning" %}
On FREE, deleted banners still count toward the limit of 2.
{% endhint %}

## Next steps

* [Create a basic banner](/extra-features/create-basic-banner) — set up a static or rotating announcement banner.
* [Create an infinite scroll banner](/extra-features/create-infinite-scroll-banner) — build a ticker-style scrolling banner.
* [Configure banner display conditions](/extra-features/configure-display-conditions) — choose which pages and customers see the banner.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Create a basic banner

Build a basic banner from content elements, style the bar, add a close button or click-through link, and choose where it appears.

A basic banner is a bar you build from **content elements** — headings, messages, buttons, countdowns, images — grouped into one or more sections. The editor has two tabs: **Design** (content and styling) and **Placement** (where and to whom the bar appears).

{% stepper %}
{% step %}

## Open the Banners page

In your Shopify admin, open the **Sami Product Labels** app, click **Extra Features** in the app sidebar, then switch to the **Banners** tab.

<figure><img src="/files/x0pSJCS45M2TbQ2tIYcH" alt="The Banners section in the app sidebar"><figcaption><p>Open Banners from the Sami Product Labels sidebar.</p></figcaption></figure>
{% endstep %}

{% step %}

## Click Create banners, then choose Basic

Click **Create banners**. In the **Select Type** dialog, click **Select** next to **Basic** — the type that supports single or multiple content groups.

<figure><img src="/files/5cvTWG854kQ2M0D2QWqY" alt="The Select Type dialog with the Basic and Infinite Scroll options"><figcaption><p>Choose Basic to build a standard announcement bar.</p></figcaption></figure>

{% hint style="info" %}
Prefer not to start from scratch? On the Banners page, use **Featured templates** or **View all templates** to open a ready-made banner and edit it instead.
{% endhint %}
{% endstep %}

{% step %}

## Name the banner

The full-screen editor opens on the **Design** tab. Replace **New Banner** in the name field above the preview with a name of up to 50 characters. This name is internal — it identifies the banner in your list and is never shown to customers.

Next to the name you also get a language selector, desktop and mobile preview toggles, and the **Active** / **Draft** status switch.

<figure><img src="/files/qYIFw5h6cmOn8TGf00TP" alt="The banner editor toolbar with the name field, language selector, preview toggles, and Active/Draft switch"><figcaption><p>The toolbar above the preview holds the banner name, language, preview device, and status.</p></figcaption></figure>
{% endstep %}

{% step %}

## Build the content

Under **Content**, **Section 1** lists the elements that make up the bar. Click any element to edit its text and styling, drag the handle on the left to reorder, or use the icons on the right of a row to hide, duplicate, or delete it.

Click **Add element** to add a new one:

| Element        | What it adds                               |
| -------------- | ------------------------------------------ |
| **Message**    | A line of body text.                       |
| **Heading**    | A large headline.                          |
| **Line break** | Vertical spacing between elements.         |
| **Button**     | A call-to-action button with its own link. |
| **Countdown**  | A days / hours / minutes / seconds timer.  |
| **Image**      | An image or logo.                          |

<figure><img src="/files/1wtq1rfbFbHaKJ6cvrWB" alt="The Content panel listing the elements in Section 1 next to the live preview"><figcaption><p>Add, reorder, and edit the elements that make up the bar.</p></figcaption></figure>
{% endstep %}

{% step %}

## (Optional) Add more content groups

Click **Add Group** to create **Section 2**, **Section 3**, and so on. Each section is a separate message, and the banner rotates through them — control the timing under **Animation** in the next steps.

Leave a single section if you only want one static message.
{% endstep %}

{% step %}

## Style the bar

In the **Style** panel:

* **Background Type** — choose **Single Color**, **Gradient Color**, or **Pattern Image**, then set the color or image.
* **Font Style** — set the typeface, size, weight, and text color.
* **Padding** — control the spacing inside the bar.

<figure><img src="/files/HnowOE3L6Nf4hZVi011q" alt="The Style panel with Background Type, Font Style, and Padding options"><figcaption><p>Set the background, fonts, and padding for the whole bar.</p></figcaption></figure>
{% endstep %}

{% step %}

## Add a close button or make the bar clickable

Both options live in the **Button** panel and are off by default:

* Tick **Include Close Button** to place an "x" on the bar so customers can dismiss it. Two fields appear: **Color** and **Hover Color**.
* Tick **Bar Clickable** to make the whole bar a link. A **Link URL** field appears — enter the destination, and use the toggle beside it to open the link in a new tab.

<figure><img src="/files/1IfwHunZF6fDEqfcxi7Y" alt="The Button panel with Include Close Button and Bar Clickable enabled"><figcaption><p>Enabling each checkbox reveals its settings — close button colors, or the link URL.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the animation timing

In the **Animation** panel, choose a **Horizontal** or **Vertical** transition, then set the timings in seconds:

| Field                            | What it controls                                         |
| -------------------------------- | -------------------------------------------------------- |
| **Disappear After**              | How long the bar stays on screen before hiding.          |
| **Interval Between Bar Display** | The gap before the bar reappears.                        |
| **Time For The Bar To Fade In**  | The length of the fade-in animation.                     |
| **Time Per Group**               | How long each section shows before rotating to the next. |

{% hint style="info" %}
Leave a field at `0` to disable that behaviour — for example, `Disappear After = 0` keeps the bar visible until the customer closes it.
{% endhint %}
{% endstep %}

{% step %}

## (Optional) Add custom CSS

Open **Advance Section** to write your own CSS in the **Custom CSS (Developer Zone)** box. The **CSS reference** list below it shows the available selectors — click one to insert it.
{% endstep %}

{% step %}

## Choose where the banner appears

Switch to the **Placement** tab and pick a display position:

| Position           | Behaviour                                              |
| ------------------ | ------------------------------------------------------ |
| **Top**            | Pushes page content down.                              |
| **Top Sticky**     | Pushes content down and stays visible while scrolling. |
| **Top Overlay**    | Overlaps the top of the page content.                  |
| **Overlay Sticky** | Overlaps content and stays visible while scrolling.    |
| **Bottom Sticky**  | Fixed at the bottom of the page.                       |
| **Custom**         | Place the bar anywhere using a shortcode.              |

Below the position picker, narrow the audience with **Product conditions**, **Customer conditions**, **Page conditions**, **Language conditions**, **Country conditions**, **Other conditions**, and **Visibility date**. The **Shortcode** panel gives you the snippet to paste into your theme when you choose **Custom**.

See [Configure display conditions](/extra-features/configure-display-conditions) for the full breakdown of each condition type.

<figure><img src="/files/KKgP8g4lnAyEvx2RjucT" alt="The Placement tab showing the six display positions and the condition panels"><figcaption><p>Pick a display position, then add conditions to control who sees the banner.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save and activate

Set the status switch above the preview to **Active**, then click **Save** in the top-right corner. Leave it on **Draft** to keep working without publishing.

{% hint style="warning" %}
Banners only render on your storefront if the app embed is enabled in your theme. See [Enable the app in your theme](/getting-started/enable-app-in-theme).
{% endhint %}
{% endstep %}
{% endstepper %}

## Next steps

* [Configure display conditions](/extra-features/configure-display-conditions) — set up detailed targeting rules for your banner.
* [Create an infinite scroll banner](/extra-features/create-infinite-scroll-banner) — try a ticker-style scrolling bar instead.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Create an infinite-scroll banner

Build an infinite scroll banner that loops its content seamlessly for ticker-style announcements and promotions.

An infinite scroll banner is a bar whose content loops continuously from right to left, like a news ticker. Use it for repeating promotions, free-shipping notices, or short announcements you want customers to notice.

{% hint style="info" %}
An infinite scroll banner has a **single content section** — there is no **Add Group** option. If you need several messages that rotate one after another, use a [basic banner](/extra-features/create-basic-banner) instead.
{% endhint %}

{% stepper %}
{% step %}

## Open the Banners page

In your Shopify admin, open the **Sami Product Labels** app, click **Extra Features** in the app sidebar, then switch to the **Banners** tab.

<figure><img src="/files/x0pSJCS45M2TbQ2tIYcH" alt="The Banners section in the app sidebar"><figcaption><p>Open Banners from the Sami Product Labels sidebar.</p></figcaption></figure>
{% endstep %}

{% step %}

## Click Create banners, then choose Infinite Scroll

Click **Create banners**. In the **Select Type** dialog, click **Select** next to **Infinite Scroll** — the type that loops banner content infinitely for a seamless scrolling effect.

<figure><img src="/files/SIdTRsJnLD9CyEyMTU30" alt="The Select Type dialog with Infinite Scroll selected"><figcaption><p>Choose Infinite Scroll to build a ticker-style bar.</p></figcaption></figure>
{% endstep %}

{% step %}

## Name the banner

The full-screen editor opens on the **Design** tab. Replace **New Banner** in the name field above the preview with a name of up to 50 characters. This name is internal and is never shown to customers.

Next to the name you also get a language selector, desktop and mobile preview toggles, and the **Active** / **Draft** status switch.

<figure><img src="/files/95jLGGzi63xBpDTnBII7" alt="The banner editor toolbar with the name field, language selector, preview toggles, and Active/Draft switch"><figcaption><p>The toolbar above the preview holds the banner name, language, preview device, and status.</p></figcaption></figure>
{% endstep %}

{% step %}

## Edit the scrolling content

**Section 1** starts with a single **Description** element containing sample text such as `✨ Free ship on order $40+ ✨`. Click it to open its settings on the right:

* **Content** — a rich-text editor with bold, italic, underline, emoji, alignment, and an HTML view (`</>`). The language chip shows which language you are editing.
* **Text** — font **Size** and **Color**.
* **Padding** and **Margin** — spacing around the element, in pixels.

Click **Add element** to add more items to the loop — **Message**, **Heading**, **Line break**, **Button**, **Countdown**, or **Image** — and drag the handle on the left of a row to reorder them.

<figure><img src="/files/SmetU6HVsw6h1ozeGz89" alt="The Content panel with the Description element next to the scrolling preview"><figcaption><p>Edit the element that loops across the bar, or add more to the sequence.</p></figcaption></figure>
{% endstep %}

{% step %}

## Style the bar

In the **Style** panel:

* **Background Type** — choose **Single Color**, **Gradient Color**, or **Pattern Image**. Infinite scroll banners default to **Pattern Image**; use **Change Image** to swap the tile or **Remove** to clear it.
* **Font Style** — set the typeface, weight, and default text color.
* **Padding** — control the spacing inside the bar.

{% hint style="info" %}
Pattern images should be PNG, JPG, or SVG, at most 5 MB, and 512 × 512 px.
{% endhint %}
{% endstep %}

{% step %}

## Add a close button or make the bar clickable

Both options live in the **Button** panel and are off by default:

* Tick **Include Close Button** to place an "x" on the bar so customers can dismiss it. Two fields appear: **Color** and **Hover Color**.
* Tick **Bar Clickable** to make the whole bar a link. A **Link URL** field appears — enter the destination, and use the toggle beside it to open the link in a new tab.

<figure><img src="/files/YmiUZ5TtCju9MBLa0zje" alt="The Button panel with Include Close Button and Bar Clickable enabled"><figcaption><p>Enabling each checkbox reveals its settings — close button colors, or the link URL.</p></figcaption></figure>
{% endstep %}

{% step %}

## Set the scroll speed and timing

All four fields in the **Animation** panel are in seconds:

| Field                            | What it controls                                                      |
| -------------------------------- | --------------------------------------------------------------------- |
| **Scroll speed**                 | How long one full loop takes. A **higher** number scrolls **slower**. |
| **Disappear After**              | How long the bar stays on screen before hiding.                       |
| **Interval Between Bar Display** | The gap before the bar reappears.                                     |
| **Time For The Bar To Fade In**  | The length of the fade-in animation.                                  |

{% hint style="info" %}
Leave a field at `0` to disable that behaviour — for example, `Disappear After = 0` keeps the bar visible until the customer closes it.
{% endhint %}

<figure><img src="/files/9yTmR4YPUYLZEEZsmWmG" alt="The Animation panel with the Scroll speed and timing fields"><figcaption><p>Scroll speed sets the duration of one loop — increase it to slow the ticker down.</p></figcaption></figure>
{% endstep %}

{% step %}

## (Optional) Add custom CSS

Open **Advance Section** to write your own CSS in the **Custom CSS (Developer Zone)** box. The **CSS reference** list below it shows the available selectors — including `.samita_banner_groups.infinityScroll`, the wrapper used when infinite scrolling is enabled. Click a selector to insert it.
{% endstep %}

{% step %}

## Choose where the banner appears

Switch to the **Placement** tab and pick a display position:

| Position           | Behaviour                                              |
| ------------------ | ------------------------------------------------------ |
| **Top**            | Pushes page content down.                              |
| **Top Sticky**     | Pushes content down and stays visible while scrolling. |
| **Top Overlay**    | Overlaps the top of the page content.                  |
| **Overlay Sticky** | Overlaps content and stays visible while scrolling.    |
| **Bottom Sticky**  | Fixed at the bottom of the page.                       |
| **Custom**         | Place the bar anywhere using a shortcode.              |

Below the position picker, narrow the audience with **Product conditions**, **Customer conditions**, **Page conditions**, **Language conditions**, **Country conditions**, **Other conditions**, and **Visibility date**. The **Shortcode** panel gives you the snippet to paste into your theme when you choose **Custom**.

See [Configure display conditions](/extra-features/configure-display-conditions) for the full breakdown of each condition type.

<figure><img src="/files/RnmmijbKkwC2g0sgXOEU" alt="The Placement tab showing the six display positions and the condition panels"><figcaption><p>Pick a display position, then add conditions to control who sees the banner.</p></figcaption></figure>
{% endstep %}

{% step %}

## Save and activate

Set the status switch above the preview to **Active**, then click **Save** in the top-right corner. Leave it on **Draft** to keep working without publishing.

{% hint style="warning" %}
Banners only render on your storefront if the app embed is enabled in your theme. See [Enable the app in your theme](/getting-started/enable-app-in-theme).
{% endhint %}
{% endstep %}
{% endstepper %}

## Next steps

* [Configure display conditions](/extra-features/configure-display-conditions) — control where and to whom your banner appears.
* [Create a basic banner](/extra-features/create-basic-banner) — build a static or rotating announcement bar instead.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Configure banner display conditions

Control where each banner appears and who sees it, using the position picker and the condition panels on the Placement tab.

The **Placement** tab of the banner editor controls two things: **where** the bar sits on the page, and **who** sees it. Both banner types — basic and infinite scroll — use the same tab.

## Open the Placement tab

While creating or editing a banner in **Sami Product Labels**, click **Placement** at the top of the left panel.

<figure><img src="/files/W8816SuuvrCihBpdKgS5" alt="The Placement tab showing the six display positions and the condition panels"><figcaption><p>The Placement tab: a position picker at the top, condition panels below.</p></figcaption></figure>

## Choose a display position

**Position** is the first panel, and it is required — every banner has one.

| Position           | Behaviour                                                                                                               |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| **Top**            | Sits above your page content and pushes it down.                                                                        |
| **Top Sticky**     | Pushes content down and stays visible while the customer scrolls.                                                       |
| **Top Overlay**    | Overlaps the top of your page content instead of pushing it.                                                            |
| **Overlay Sticky** | Overlaps content and stays visible while the customer scrolls.                                                          |
| **Bottom Sticky**  | Fixed to the bottom of the viewport.                                                                                    |
| **Custom**         | Renders nowhere by default — you place it yourself with the shortcode. See [Shortcode placement](#shortcode-placement). |

## Condition panels

Everything below the position picker is optional. Leave a panel empty and it places no restriction — the banner shows to everyone, everywhere the position allows.

### Product conditions

Restrict the banner to products that match a rule. Click **Add conditions**, then build a row from three parts: a field, an operator (**is equal to** / **is not equal to**), and a value.

| Field                     | Value you pick                                      |
| ------------------------- | --------------------------------------------------- |
| **Select Products**       | Individual products from your catalog.              |
| **Product tag**           | One or more product tags.                           |
| **Product compare price** | A compare-at price, for targeting discounted items. |
| **Collections**           | One or more collections.                            |

Use the delete icon at the end of a row to remove it, and **Add conditions** again to stack more rows.

{% hint style="info" %}
**Product tag** conditions require the GOLD plan or above.
{% endhint %}

### Match all conditions or any condition

When a panel holds more than one row, the **Products must match** radio decides how they combine:

* **all conditions** — every row must be true (AND). For example, a product tagged `sale` **and** in the `Clearance` collection.
* **any condition** — one row is enough (OR). For example, a product tagged `sale` **or** in the `Clearance` collection.

<figure><img src="/files/hzU1sx7pCMFNhiDXUuHE" alt="The Products must match radio with all conditions and any condition options"><figcaption><p>Switch between AND and OR logic for the rows in a panel.</p></figcaption></figure>

See [Condition operators reference](/reference/condition-operators-reference) for the full behaviour of each operator.

### Customer conditions

Restrict the banner by who is browsing. Click **Add conditions**, then choose a field:

| Field            | Options                                |
| ---------------- | -------------------------------------- |
| **Customer**     | **Is Logged In** or **Not Logged In**. |
| **Customer tag** | Match one or more customer tags.       |

{% hint style="info" %}
Customer tag conditions require the GOLD plan or above.
{% endhint %}

### Page conditions

Restrict the banner to certain page types. Each row is **Page** + an operator + a page type:

| Page type           | Where it applies                                   |
| ------------------- | -------------------------------------------------- |
| **Index page**      | Your store's home page.                            |
| **Collection page** | Pages listing the products in a collection.        |
| **Product page**    | Individual product detail pages.                   |
| **Article Page**    | Blog article pages.                                |
| **Blog page**       | Blog listing pages.                                |
| **Cart page**       | The shopping cart page, including the cart drawer. |
| **Search page**     | Search results.                                    |
| **Specific pages**  | Any other page, matched by the URL you enter.      |

{% hint style="info" %}
There is no "all pages" option — leaving **Page conditions** empty is what shows the banner everywhere.
{% endhint %}

### Language conditions

Switch the panel on with its toggle, choose an **Operator** — **Equals** or **Not equals** — then search for and select your store's languages. The banner shows only when the customer's active language matches.

{% hint style="info" %}
Language targeting requires the DIAMOND plan. On other plans, banners display for all languages.
{% endhint %}

### Country conditions

Switch the panel on with its toggle, pick an **Operator** — **Equals** or **Not equals** — then search for and select countries. Useful for region-specific shipping or promotional messages.

### Other conditions

Holds a single **Device targeting** setting: **All devices**, **Desktop**, or **Mobile**.

### Visibility date

Schedule the banner with a **Start** and an **End** date and time, both in `YYYY-MM-DD HH:mm` format. Leave a field empty to leave that end of the window open — set only **End**, for example, to run a banner until a sale finishes.

## Shortcode placement

Choose the **Custom** position when you need the banner at an exact spot in your theme rather than pinned to the top or bottom of the page.

{% stepper %}
{% step %}

## Copy the shortcode

Open the **Shortcode** panel at the bottom of the Placement tab and click **Copy**. The snippet looks like this:

```html
<div class="samitaPL-banner" data-id="YOUR_BANNER_ID"></div>
```

You can also copy it from the **Shortcode** column on the banners list.
{% endstep %}

{% step %}

## Paste it into your theme

In Shopify admin, go to **Online Store > Themes > Edit code** and paste the snippet into the Liquid template — or into a Custom HTML section — at the position where the banner should appear.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Only use the shortcode when you need exact placement. For everything else, one of the five built-in positions is enough on its own.
{% endhint %}

## Tips for effective targeting

* **Start broad, then narrow.** Pick the position first, confirm the banner shows, and only then add conditions.
* **Remember that panels combine.** Conditions in different panels must all pass — a product condition plus a page condition means both have to match.
* **Check both devices.** Use the mobile preview toggle above the editor, and set **Device targeting** if a message only makes sense on one.
* **Test on your storefront.** Activate the banner and load the affected pages to confirm it appears where you expect.

## Next steps

* [Create a basic banner](/extra-features/create-basic-banner) — build a static or rotating announcement bar.
* [Create an infinite scroll banner](/extra-features/create-infinite-scroll-banner) — build a ticker-style bar.
* [Banners overview](/extra-features/overview) — return to the banners hub.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# AI features overview

Generate badge images from a text prompt, or edit an existing image with AI, without any design skills.

**Sami Product Labels** includes AI tools that create and modify badge images for you. Describe what you want in a few short fields — or in your own prompt — and the AI produces an image you can apply straight to a badge.

{% hint style="info" %}
AI image features require the **DIAMOND** plan, listed there as **Create images with AI generation**. Your plan includes 50 AI uses per month. See [Pricing plans](/settings/pricing-plans).
{% endhint %}

## Available AI features

### AI Badge Generator

Open the **AI Image Generator** from the **AI Badge Generator** panel in the badge editor, describe the badge you want, and click **Generate**.

| Feature             | Description                                                                                               |
| ------------------- | --------------------------------------------------------------------------------------------------------- |
| **Guided fields**   | Describe your badge with five short fields — Background color, Shape, Text, Text color, and Illustration. |
| **Your own prompt** | Tick **Use own prompt** to replace the guided fields with a single free-form prompt.                      |
| **All AI images**   | Reuse anything you have generated before, from any badge, via **View AI images**.                         |

Your usage is shown as **Current usage credits** with an **x/50 used** badge at the top of the dialog.

<figure><img src="/files/NiBuZLsRSX5rdGen7Wmz" alt="The AI Image Generator dialog with the guided fields and a Generate button"><figcaption><p>Fill in the guided fields — or your own prompt — and click Generate.</p></figcaption></figure>

### Edit AI Image

Reach the **Edit AI Image** dialog through **Change Image > Edit with AI**. It uses the same guided fields and **Use own prompt** option, but applies them to the badge's current image and shows the outcome in a **Preview** panel.

Common uses:

* Removing an image background with the dedicated **Remove background** action.
* Adjusting colors or styling on an existing badge image.
* Refining an AI-generated image with a follow-up edit.

<figure><img src="/files/fdGz5KXCkr78jY9jdxov" alt="The Edit AI Image dialog with guided fields on the left and a preview on the right"><figcaption><p>Describe the change, then review it in the preview before applying.</p></figcaption></figure>

## Monthly quota

Your DIAMOND plan includes **50 AI uses per month**, shared between image generation and image editing. The counter appears as **Current usage credits** in both dialogs.

## Next steps

* [Generate an AI image](/ai-features/generate-image) — create a badge image from a description.
* [Edit an image with AI](/ai-features/edit-image) — modify the image already on a badge.
* [Create an image badge](/badges-and-labels/create-image-badge) — set up an image-based badge.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Generate a badge image with AI

Generate a custom badge image from a short description or your own prompt, using the AI Image Generator.

The **AI Image Generator** creates a badge image from a description — no design skills needed. Fill in five short guided fields, or switch to a single free-form prompt.

{% hint style="info" %}
Generating an image uses one of your 50 monthly AI credits. The dialog shows your usage as **Current usage credits**, with an **x/50 used** badge.
{% endhint %}

{% stepper %}
{% step %}

## Open an image badge

In **Sami Product Labels**, go to **Badges & Labels** and open a badge that uses an image, or click **Create badge** to start a new one. The editor opens on the **Design** tab.
{% endstep %}

{% step %}

## Click Create AI image

In the **Content** panel, find the **AI Badge Generator** box directly beside the badge image. It shows your remaining credits and two links: **Create AI image** and **View AI images**.

Click **Create AI image** to open the **AI Image Generator** dialog.

<figure><img src="/files/OGTqclWxr2Mn14PoXDRL" alt="The AI Badge Generator box in the Content panel with the Create AI image and View AI images links"><figcaption><p>The AI Badge Generator box sits next to the badge image in the Content panel.</p></figcaption></figure>
{% endstep %}

{% step %}

## Describe the badge with the guided fields

Fill in as many of the five fields as apply. Each one takes a short free-text description — there is no fixed list to pick from.

| Field                | Example                     |
| -------------------- | --------------------------- |
| **Background color** | Red, green, blue, etc.      |
| **Shape**            | Circle, round corners, etc. |
| **Text**             | Save 36%                    |
| **Text color**       | White, black, etc.          |
| **Illustration**     | Related to Black Friday     |

<figure><img src="/files/uscXcvYJBVt0BTwEznmi" alt="The AI Image Generator dialog with the five guided fields"><figcaption><p>Describe the badge you want, then click Generate.</p></figcaption></figure>
{% endstep %}

{% step %}

## (Optional) Write your own prompt instead

Tick **Use own prompt**. The five guided fields grey out and a single **Type your prompt here...** text area takes their place, giving you full control over the description sent to the AI.

{% hint style="info" %}
The dialog's own tip: *be descriptive and specific with style, colors, and composition for best results.*
{% endhint %}
{% endstep %}

{% step %}

## Click Generate

Click **Generate** at the bottom of the dialog. **Close** discards the dialog without generating.
{% endstep %}

{% step %}

## Apply the result

When the image is ready, use the preview panel to finish:

| Action                | Result                                                |
| --------------------- | ----------------------------------------------------- |
| **Apply**             | Uses the image on your badge and closes the dialog.   |
| **Remove background** | Strips the background from the generated image first. |
| **View all**          | Opens your full **All AI images** gallery.            |

<figure><img src="/files/0CRZlpVfqNEV7QME5i31" alt="The generated image in the preview panel with Apply and Remove background actions"><figcaption><p>Review the generated image, then apply it to the badge.</p></figcaption></figure>
{% endstep %}

{% step %}

## Reuse images from All AI images

Every image you generate is saved. Click **View AI images** in the **AI Badge Generator** box to open the **All AI images** gallery, pick any previous image, and click **Apply** — from any badge, at any time, without spending another credit.

<figure><img src="/files/YAckcU3vustNa8y7TjPY" alt="The All AI images gallery listing previously generated images"><figcaption><p>Reuse a previously generated image instead of spending a new credit.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Tips for better results

* **Be specific.** Fill in as many guided fields as you can, or name colors, shapes, text, and style in your own prompt.
* **Ask for a transparent background.** Badges blend into your theme better without a solid backdrop — or use **Remove background** afterwards.
* **Iterate.** If the first result misses, adjust the description and generate again.
* **Check the gallery first.** Reusing an image from **All AI images** costs no credit.

## Next steps

* [Edit an image with AI](/ai-features/edit-image) — refine a generated image or change an existing one.
* [Create an image badge](/badges-and-labels/create-image-badge) — set up an image-based badge.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Edit a badge image with AI

Modify a badge's current image with AI — remove the background, change colors, or restyle it.

The **Edit AI Image** dialog changes the image already on your badge — whether you uploaded it, picked it from the library, or generated it with AI. It uses the same guided fields as the generator, plus a live **Preview** of the result.

{% hint style="info" %}
AI editing draws on the same 50 monthly AI credits as image generation. The dialog shows your usage as **Current usage credits**.
{% endhint %}

{% stepper %}
{% step %}

## Open the badge image picker

Open your badge in **Sami Product Labels**. In the **Content** panel of the **Design** tab, click **Change Image** below the badge image. The **Select Image** panel slides in from the right.

<figure><img src="/files/rQLX89TonPwR19DVRVi7" alt="The Content panel with the Change Image link below the badge image"><figcaption><p>Click Change Image to open the image picker.</p></figcaption></figure>
{% endstep %}

{% step %}

## Click Edit with AI

At the bottom of the **Select Image** panel, next to **Cancel** and **Select Image**, click **Edit with AI**. The **Edit AI Image** dialog opens with your current image already loaded in the **Preview** panel on the right.

<figure><img src="/files/YPzg1ubqB1r5tioO6tm9" alt="The Select Image panel with the Edit with AI button in the footer"><figcaption><p>Edit with AI sits in the footer of the image picker.</p></figcaption></figure>
{% endstep %}

{% step %}

## Describe the change with the guided fields

Fill in the fields that describe how the image should look afterwards. Leave the rest blank.

| Field                | Example                     |
| -------------------- | --------------------------- |
| **Background color** | Red, green, blue, etc.      |
| **Shape**            | Circle, round corners, etc. |
| **Text**             | Save 36%                    |
| **Text color**       | White, black, etc.          |
| **Illustration**     | Related to Black Friday     |

<figure><img src="/files/QSxOmzKGqfE7Gu5mehaU" alt="The Edit AI Image dialog with guided fields on the left and the current image preview on the right"><figcaption><p>Describe the change on the left; the current image sits in the preview on the right.</p></figcaption></figure>
{% endstep %}

{% step %}

## (Optional) Write your own prompt instead

Tick **Use own prompt** to describe the edit in a single free-form text area instead — for example, "make the ribbon gold" or "flatten this into a minimalist style."
{% endstep %}

{% step %}

## Click Edit

Click **Edit** at the bottom of the dialog. **Close** dismisses it without changing anything.

{% hint style="info" %}
To strip a background, you do not need a prompt at all — click **Remove background** in the preview panel directly.
{% endhint %}
{% endstep %}

{% step %}

## Review and apply

Check the result in the **Preview** panel. If it is not right, adjust the fields or prompt and click **Edit** again.

| Action                | Result                                        |
| --------------------- | --------------------------------------------- |
| **Apply**             | Uses the edited image on your badge.          |
| **Remove background** | Strips the background from the current image. |
| **View all**          | Opens your **All AI images** gallery.         |

Once applied, carry on adjusting size, position, and the rest of the badge in the editor — then click **Save**.

<figure><img src="/files/qj1ugMNJgRAMKphzjXFj" alt="The edited image shown in the preview panel with the Apply and Remove background actions"><figcaption><p>Review the edited image before applying it to the badge.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Common editing use cases

| Use case           | How to do it                                                                                |
| ------------------ | ------------------------------------------------------------------------------------------- |
| Background removal | Click **Remove background** — no prompt needed.                                             |
| Color adjustment   | **Background color** or **Text color**, or a prompt like "change the red elements to blue". |
| Shape change       | **Shape**, for example "circle" or "round corners".                                         |
| Text change        | **Text** and **Text color**.                                                                |
| Style change       | Own prompt, for example "make the image look more minimalist".                              |

## Next steps

* [Generate an AI image](/ai-features/generate-image) — create a brand-new badge image from a description.
* [AI Features overview](/ai-features/overview) — return to the AI features hub.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Analytics overview

Track add-to-cart events, orders, and revenue attributed to your badges, filtered by badge and date range.

The **Analytics** page shows how your badges affect shopper behaviour — how often products carrying a badge were added to cart, how many orders included them, and how much revenue they brought in.

{% hint style="info" %}
Analytics requires the **DIAMOND** plan, listed there as **Analytics & Reporting**. See [Pricing plans](/settings/pricing-plans).
{% endhint %}

## Open the Analytics page

In your Shopify admin, open the **Sami Product Labels** app, then click **Analytics** in the app sidebar. Key figures also appear at the top of the app **Dashboard**.

## What you can track

Three metrics, each shown both as a summary card and as its own chart:

| Metric                | What it counts                                                                  |
| --------------------- | ------------------------------------------------------------------------------- |
| **Total Add to Cart** | Times a customer added a product to their cart while it was displaying a badge. |
| **Total Orders**      | Completed orders that included products with an active badge.                   |
| **Total Revenue**     | Revenue from those orders, in your store's currency.                            |

## Filter the data

Two controls sit directly above the summary cards.

### Badge filter

The first control scopes the page to one badge instead of your whole catalogue. It reads **All badges & labels** by default, which is what you want for a store-wide view.

### Date range

The second control is the date range, set to **Today** by default. Click it to pick a preset:

| Preset            | Period                       |
| ----------------- | ---------------------------- |
| **Today**         | The current day so far.      |
| **Yesterday**     | The previous full day.       |
| **Last 7 days**   | The past week.               |
| **Last 30 days**  | The past month.              |
| **Last month**    | The previous calendar month. |
| **Last 90 days**  | The past quarter.            |
| **Last 365 days** | The past year.               |

For anything else, use the calendar beside the presets to set a start and end date, then click **Apply**. **Cancel** closes the picker without changing the range.

## Reading the charts

Each metric gets its own line chart below the summary cards, with the period total repeated in the card heading.

Every chart plots **two lines**: a solid line for the period you selected, and a dotted line for the equivalent period before it. The legend below the chart labels both. That comparison is what tells you whether a badge is gaining or losing traction — a solid line consistently above the dotted one means this period is outperforming the last.

The x-axis follows the range you picked: hours of the day for **Today** or **Yesterday**, and dates for the longer presets.

{% hint style="info" %}
Data collection starts when you activate your first badge. A brand-new store shows zeros across the board until badges go live and shoppers interact with them.
{% endhint %}

## Next steps

* [Pricing plans](/settings/pricing-plans) — compare plans and upgrade to unlock analytics.
* [Badges & Labels overview](/badges-and-labels/overview) — create and manage the badges these metrics measure.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Pricing plans

Compare the FREE, GOLD, and DIAMOND plans, switch between them, and apply a discount code.

**Sami Product Labels** offers three plans. Start on FREE, then upgrade as your store grows.

| Plan        | Price           | Best for                                                                                                                      |
| ----------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **FREE**    | $0              | Basic labels and badges with simple customization — small stores starting out or testing visual promotions on a few products. |
| **GOLD**    | $9.9 USD/month  | Unlimited labels with smart targeting.                                                                                        |
| **DIAMOND** | $14.9 USD/month | AI-powered labels with full control at scale.                                                                                 |

{% hint style="info" %}
Use the **Monthly / Annually** toggle at the top of the page to switch billing periods — annual billing saves 17%.
{% endhint %}

## Plan comparison

Click **Show Pricing Details** at the bottom of the Pricing plans page to expand the full comparison table. It is grouped into five sections.

### Limits & Resources

| Feature                                 | FREE      | GOLD      | DIAMOND   |
| --------------------------------------- | --------- | --------- | --------- |
| **Number of Badges/Labels**             | 5         | Unlimited | Unlimited |
| **Number of Label groups**              | 1         | 1         | Unlimited |
| **Number of Highlights**                | 2         | Unlimited | Unlimited |
| **Number of Banners**                   | 2         | Unlimited | Unlimited |
| **Number of Trust Badges**              | Unlimited | Unlimited | Unlimited |
| **Images samples**                      | 1000 +    | 5000 +    | 10000 +   |
| **Select product from collections/tag** | —         | ✓         | ✓         |
| **Choose product variants**             | —         | —         | ✓         |
| **Create images with AI generation**    | —         | —         | ✓         |

{% hint style="warning" %}
Deleted items still count toward the FREE limits on badges, label groups, highlights, and banners.
{% endhint %}

### Badge/Label Design

| Feature                                    | FREE | GOLD | DIAMOND |
| ------------------------------------------ | ---- | ---- | ------- |
| **Add custom text Badges/Labels**          | ✓    | ✓    | ✓       |
| **Design your images with the editor**     | ✓    | ✓    | ✓       |
| **Adjust dimensions of Labels**            | ✓    | ✓    | ✓       |
| **Display in 9 predefined positions**      | ✓    | ✓    | ✓       |
| **Animation for Badge/Label/Trust Badge**  | ✓    | ✓    | ✓       |
| **Countdown timer for Labels and Badges**  | —    | ✓    | ✓       |
| **Text hover for Badges/Labels**           | —    | ✓    | ✓       |
| **Customize unlimited position of Labels** | —    | —    | ✓       |
| **Multi-language**                         | —    | —    | ✓       |

### Label Display On

| Page                            | FREE | GOLD | DIAMOND |
| ------------------------------- | ---- | ---- | ------- |
| **Related products block**      | ✓    | ✓    | ✓       |
| **Collection pages**            | ✓    | ✓    | ✓       |
| **Search page**                 | ✓    | ✓    | ✓       |
| **Home page**                   | ✓    | ✓    | ✓       |
| **Article Page**                | ✓    | ✓    | ✓       |
| **Cart page**                   | ✓    | ✓    | ✓       |
| **Product pages (All images)**  | ✓    | ✓    | ✓       |
| **Product pages (First image)** | —    | ✓    | ✓       |

### Display Conditions

| Condition                                       | FREE | GOLD      | DIAMOND   |
| ----------------------------------------------- | ---- | --------- | --------- |
| **All products**                                | ✓    | ✓         | ✓         |
| **Specific products**                           | 50   | Unlimited | Unlimited |
| **Include/Exclude from Product Tag**            | —    | ✓         | ✓         |
| **Inventory Status** (in stock / out of stock)  | —    | ✓         | ✓         |
| **Sale products within specific ranges**        | —    | ✓         | ✓         |
| **Include/Exclude customers with specific tag** | —    | ✓         | ✓         |
| **Products Created/Published**                  | —    | ✓         | ✓         |
| **Set visibility date time**                    | —    | ✓         | ✓         |
| **Set visibility country restriction**          | —    | ✓         | ✓         |
| **Specific languages**                          | —    | —         | ✓         |
| **Specific metafields**                         | —    | —         | ✓         |

### Analytics & Reporting

| Feature                 | FREE | GOLD | DIAMOND |
| ----------------------- | ---- | ---- | ------- |
| **Analytics dashboard** | —    | —    | ✓       |

## Change your plan

{% stepper %}
{% step %}

## Open the Pricing plans page

In your Shopify admin, open the **Sami Product Labels** app, then click **Pricing plans** in the app sidebar.

<figure><img src="/files/LOQOXm7P3exJu9prj0QQ" alt="The Pricing plans page showing the GOLD and DIAMOND cards and the FREE row"><figcaption><p>The Pricing plans page lists every tier with its headline features.</p></figcaption></figure>
{% endstep %}

{% step %}

## Pick a billing period

Use the **Monthly / Annually** toggle in the top-right corner. Annual billing is 17% cheaper, and the prices on the cards update as you switch.
{% endstep %}

{% step %}

## Choose a plan

Each plan card carries a button telling you what that choice would do:

* **Current plan** — greyed out; this is the plan you are on.
* **Downgrade** — moves you to a cheaper tier.
* The equivalent button on a higher tier starts an upgrade.
  {% endstep %}

{% step %}

## Confirm through Shopify billing

Shopify takes over from here and shows its own billing confirmation page. Review the charges and approve them to activate the new plan.
{% endstep %}
{% endstepper %}

## Apply a discount code

Click **Have a discount code?** beside the **Choose your plan** heading. Enter your code in the **Apply Discount Code** dialog and click **Apply** — do this *before* you select a plan so the reduced price is used.

<figure><img src="/files/T6uWQbCWtR0AlconKgEu" alt="The Apply Discount Code dialog with its input field and Apply button"><figcaption><p>Apply a discount code before selecting a plan.</p></figcaption></figure>

## What every plan gets you

Regardless of tier, every plan includes 24/7 email support, live edit previews, help docs, and access to the image sample library.

## Next steps

* [Badges & Labels overview](/badges-and-labels/overview) — start creating badges.
* [Quickstart guide](/getting-started/quickstart) — get your first badge live in minutes.

{% hint style="success" %}
**Need support?**

If you run into any difficulty while following these steps, contact us at <support@samita.io>.
{% endhint %}


# Troubleshooting

Fix the most common problems with badges, banners, trust badges, and highlights not displaying as expected.

Work through the checks below in order — the first two solve most cases.

## Badge not showing on the storefront

{% hint style="warning" %}
Start here: on the app **Dashboard**, look at the status chip beside **Explore outstanding features**. If it reads **App embed inactive**, nothing the app creates will render. See [Enable the app in your theme](/getting-started/enable-app-in-theme).
{% endhint %}

| Check                 | What to look for                                                                                                                                                 |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Badge status**      | The status switch in the badge editor must be **Active**. **Draft** badges never render.                                                                         |
| **Product targeting** | On the **Products** tab, confirm the product you are viewing actually matches your conditions — if you targeted a collection, check the product belongs to it.   |
| **Page conditions**   | On the **Display** tab, confirm the page you are viewing is selected. Targeting product pages only will not show the badge on collection pages or the home page. |
| **Schedule**          | Under **Display > Visibility Date & Countdown**, make sure the current time falls inside the start/end window.                                                   |
| **Browser cache**     | Reload in an incognito window — a cached page can still show the old storefront.                                                                                 |
| **Page builder**      | On pages built with PageFly, GemPages, or Shogun, adjust the page conditions on the **Display** tab.                                                             |

## Badge showing in the wrong position

1. Check the position setting on the **Design** tab — **Inside product image** or **Outside product image**, then the predefined position.
2. For **Outside product image**, check the **Predefined position** dropdown (for example *Below the product price*) and the left/center/right alignment control.
3. If you are using a custom position, confirm your theme actually has the element you anchored to — themes do not share the same product-page HTML.
4. For non-standard layouts, use a CSS selector override in **Advanced settings** to place the badge exactly.

## Badge looks different on mobile and desktop

1. Open the **Size** section on the **Design** tab and check **Responsive size**. **Use same size on desktop and mobile** applies one size to both.
2. Switch **Responsive size** to the custom option to set separate sizes per device.
3. Use the desktop/mobile preview toggles above the preview to check mobile before publishing.

## Banner not showing

1. Confirm the banner status is **Active**, not **Draft**.
2. On the **Placement** tab, check the display **Position** — a banner set to **Custom** renders nowhere until you paste its shortcode into your theme.
3. Check the condition panels. Conditions in different panels must *all* pass.
4. Under **Visibility date**, confirm today falls inside the start/end window.

See [Configure display conditions](/extra-features/configure-display-conditions).

## Trust badge or highlight not appearing

1. Confirm the trust badge or highlight status is **Active**.
2. If you placed it with a shortcode, verify the snippet sits at the exact spot in your theme's Liquid file where you expect it.
3. On the **Placement** tab, confirm the page type and position match where you are looking.

## Theme integration issues

1. On the **Dashboard**, check the status chip beside **Explore outstanding features**.
2. If it reads **App embed inactive**, enable the app embed in your theme editor — see [Enable the app in your theme](/getting-started/enable-app-in-theme).
3. If your theme does not support app embeds, contact <support@samita.io> for alternative installation methods.

## Next steps

* [Frequently asked questions](/help/faq) — quick answers to common questions.
* [Contact support](/help/contact-support) — send us the details and we will investigate.

{% hint style="success" %}
**Need support?**

If none of these fixes work, contact us at <support@samita.io> with your store URL and the product page where the problem appears.
{% endhint %}


# FAQ

Answers to the questions merchants ask most about Sami Product Labels.

## Plans and limits

<details>

<summary>How many badges can I create?</summary>

It depends on your plan. **FREE** allows up to **5 badges**; **GOLD** and **DIAMOND** allow unlimited badges.

Deleted badges still count toward the FREE limit. See [Pricing plans](/settings/pricing-plans) for the full comparison.

</details>

<details>

<summary>What happens to my badges if I downgrade?</summary>

Badges that rely on features your new plan doesn't include stop displaying, but nothing is deleted. Upgrade again and they reactivate with their settings intact.

</details>

<details>

<summary>How do I apply a discount code?</summary>

Open **Pricing plans**, click **Have a discount code?** beside the **Choose your plan** heading, enter your code in the **Apply Discount Code** dialog, and click **Apply**. Do this before you select a plan so the reduced price is used.

</details>

## Targeting and display

<details>

<summary>Can I show different badges for different countries?</summary>

Yes, on **GOLD** and above. Set a country restriction in the badge's display conditions so it only shows to visitors from the countries you choose.

See [Target by country and language](/badges-and-labels/target-by-country-language).

</details>

<details>

<summary>Can I show a countdown timer on my badge?</summary>

Yes, on **GOLD** and above. Insert the `{countdown}` variable into a text badge, then set the end date under **Display > Visibility Date & Countdown**.

See [Use dynamic variables](/badges-and-labels/dynamic-variables) and [Schedule badge visibility](/badges-and-labels/schedule-visibility).

</details>

<details>

<summary>Can I use the app with a page builder like PageFly?</summary>

Yes — PageFly, GemPages, Shogun, and similar builders all work. You may need to adjust the page conditions in the badge's **Display** tab so badges appear on the pages the builder generates.

</details>

## Images and content

<details>

<summary>What image formats can I upload?</summary>

PNG, JPG, and SVG, up to **5 MB**. The recommended size is **512 × 512 px**. The app shows these requirements beneath the image field in the editor.

</details>

<details>

<summary>Can I move badges between stores?</summary>

Not directly — there is no export or import action, so badges cannot be transferred between stores. Within a single store, use **Duplicate** to copy a badge.

See [Duplicate and manage badges](/badges-and-labels/duplicate-badges).

</details>

## Performance

<details>

<summary>Will the app slow down my store?</summary>

No. The app uses Shopify's App Embed and delivers badge data through metafields, so badges load as part of your theme without extra API calls or external scripts.

</details>

## Next steps

* [Troubleshooting](/help/troubleshooting) — fix the most common display problems.
* [Contact support](/help/contact-support) — reach the team directly.

{% hint style="success" %}
**Need support?**

If you run into any difficulty, contact us at <support@samita.io>.
{% endhint %}


# Contact support

Reach the Sami Product Labels support team through the in-app form, live chat, or email.

Three ways to reach us: the in-app contact form, live chat, or email.

## In-app contact form

The fastest route, because it sends us your store details along with your message.

{% stepper %}
{% step %}

## Open Contact Us

In your Shopify admin, open the **Sami Product Labels** app, then click **Contact Us** in the app sidebar.
{% endstep %}

{% step %}

## Choose a topic

Under **What do you need help with?**, pick the option that matches your problem:

* Badge/label not showing
* Display or position issue
* Product targeting issue
* Sale, discount, or stock badge issue
* Design/customization request
* Theme or app conflict
* Pricing, plan, or feature question
* Other

The rest of the form appears once you choose. To pick a different topic later, click **Change topic** on the right.
{% endstep %}

{% step %}

## Narrow it down

Use the **Which issue best describes your problem?** dropdown to pick a specific issue within your topic. This is required, and it routes your request to the right person.
{% endstep %}

{% step %}

## Check your contact details

**Your name** and **Your email** are filled in from your Shopify account. Both are required — correct them if we should reply somewhere else.
{% endstep %}

{% step %}

## Add the page and describe the problem

| Field                         | What to put in it                                                                                     |
| ----------------------------- | ----------------------------------------------------------------------------------------------------- |
| **Product or page URL**       | A link to a page where the problem is visible, for example `https://your-store.com/products/example`. |
| **Collaborator request code** | Optional. Lets us request admin access if we need to fix or customize your theme.                     |
| **Describe your issue**       | Required. What happened, and what you expected instead.                                               |

{% hint style="info" %}
Find your collaborator request code in **Shopify admin > Settings > Users and permissions > Collaborators**. Supplying it up front saves a round trip on theme-related issues.
{% endhint %}
{% endstep %}

{% step %}

## Attach a screenshot or video

Under **Screenshot or video**, click **Add files**. The field accepts image and video files — a recording of the problem is usually the fastest way for us to diagnose it.
{% endstep %}

{% step %}

## Submit

Click **Submit**. The button stays disabled until every required field is filled. We reply by email.
{% endstep %}
{% endstepper %}

## Live chat

Click the chat widget in the bottom-right corner of the app for real-time help.

## Email

Write to <support@samita.io>. Include your store URL and a description of the issue for the fastest response.

{% hint style="info" %}
**VIP support** is included on the **GOLD** and **DIAMOND** plans. Every plan includes 24/7 email support.
{% endhint %}

## Next steps

* [Troubleshooting](/help/troubleshooting) — try the common fixes first.
* [Frequently asked questions](/help/faq) — quick answers to common questions.


# How it works

A simple overview of how Sami Product Labels works behind the scenes to display badges on your storefront.

This page explains how **Sami Product Labels** delivers badges, labels, trust badges, highlights, and banners to your storefront — no coding knowledge required.

## App Embed block

When you install the app, it adds an **App Embed block** to your Shopify theme -- a standard Shopify mechanism for running app functionality on your storefront.

Toggle the App Embed on or off anytime from your Shopify theme editor under **App embeds**. Off means no badges show; on means the app handles everything automatically.

{% hint style="info" %}
The app does **not** edit, overwrite, or inject code into your theme files. Everything runs through the App Embed block, which Shopify manages separately from your theme.
{% endhint %}

## How configurations are delivered

Every badge, label, trust badge, highlight, and banner you create is saved as a **Shopify metafield** attached to your store -- Shopify's built-in system for storing custom data.

This means:

* **No external API calls at page load** — configurations are already stored in Shopify, so there's no third-party server to wait on.
* **Fast performance** — badges load as fast as any other part of your theme.
* **Reliability** — badges stay available as long as your store is online, with no external server to go down.

## How badges appear on your storefront

When a customer visits your store:

1. The App Embed script loads as part of your theme.
2. The script reads your badge configurations from the stored metafields.
3. It evaluates your **targeting rules** — which products, collections, pages, or customer segments should see each badge.
4. The matching badges are rendered on the page in the positions you configured.

This entire process happens in the customer's browser and takes only milliseconds.

## Analytics tracking

**Sami Product Labels** tracks two key events to measure badge performance:

* **Add to cart** — records which badge was displayed when a customer adds a badged product to their cart.
* **Order placed** — records the conversion when a customer completes a purchase with a badged product.

These events power your **Analytics dashboard**, showing which badges drive engagement and sales.

{% hint style="info" %}
Analytics tracking is available on the DIAMOND plan. The app only tracks aggregate events — it does not store personal customer information.
{% endhint %}

## Country detection

The app detects the visitor's country, powering **country-based targeting** so you can show different badges by region.

For example, you could display a "Free Shipping" badge only to customers in the United States, or show a "Local Pickup Available" badge to customers in your home country.

## What the app does NOT do

* **Does not modify your theme files** — no Liquid code is injected.
* **Does not slow down your store** — data is stored in Shopify metafields, not fetched from external servers.
* **Does not collect personal customer data** — it uses customer tags and order counts for targeting only, never names, emails, or payment info.

***

## Next steps

* [Permissions and data access](/reference/permissions-and-data) — learn what data the app accesses and how it is handled.
* [Enable the app in your theme](/getting-started/enable-app-in-theme) — get started by turning on the App Embed block.


# Permissions and data

Details on the Shopify permissions Sami Product Labels requires and how your data is handled.

**Sami Product Labels** requests only the Shopify permissions it needs. This page covers each permission, the webhooks the app subscribes to, and how your store data is used.

## Required permissions

| Permission                   | What it's used for                                                                                                                                                    |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `read_products`              | Access product data (title, type, vendor, tags, price, inventory, variants, collections, metafields) to evaluate targeting rules and render badges on the storefront. |
| `read_themes`                | Check whether the app's App Embed block is enabled in your theme, so the app can prompt you to enable it if needed.                                                   |
| `read_files` / `write_files` | Upload and manage badge images (including AI-generated images) through Shopify's file system.                                                                         |

{% hint style="info" %}
Sami Product Labels does **not** request a customer-data permission (`read_customers`). Customer-based targeting — login status, customer tags, order history — is evaluated from your storefront's own customer context at render time, not via Shopify's customer data API.
{% endhint %}

## Webhooks

The app subscribes to these Shopify webhooks:

| Webhook                                                     | Purpose                                                                                                                                                |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `app/uninstalled`                                           | Triggers cleanup of your stored badge, label, and analytics data when you uninstall the app.                                                           |
| `orders/create`                                             | Attributes completed orders to the badges displayed on their products, to power the [Analytics](/analytics/overview) dashboard.                        |
| `customers/redact`, `shop/redact`, `customers/data_request` | Shopify's mandatory GDPR compliance webhooks. Since the app does not store customer personal information, these are handled as no-op acknowledgements. |

## Data handling

### What data we store

* **Badge, label, badge group, trust badge, highlight, and banner configurations** — the settings, styles, targeting rules, and content you create.
* **Image assets** — badge images you upload or generate with AI, stored through Shopify's file system.
* **Analytics events** — aggregate add-to-cart and order events linked to badge displays, for the analytics dashboard (DIAMOND plan).

### What data we access

* **Product catalog data** — product titles, types, vendors, tags, prices, inventory levels, variants, and metafields to evaluate targeting rules.
* **Theme structure** — to check App Embed status and ensure proper integration.
* **Storefront metafields** — the app writes your badge, label, and trust badge configurations to shop metafields (namespace `SamitaLabels`) so your theme's App Embed block can render them without extra requests.

### What we do NOT store

* **Customer personal information** — no names, emails, addresses, or phone numbers.
* **Payment details** — no credit card numbers, billing information, or payment methods.
* **Order specifics** — beyond aggregate analytics counts, no individual order details are retained.

{% hint style="warning" %}
Data is processed under Shopify's data protection requirements. Uninstalling removes your stored configurations and analytics data per Shopify's mandatory deletion policies.
{% endhint %}

## Privacy and terms

* [Privacy Policy](https://samita.io/pages/privacy-policy)
* [Terms and Conditions](https://samita.io/pages/terms-and-conditions)

For any questions about data handling or permissions, contact us at **<support@samita.io>**.

***

## Next steps

* [How it works](/reference/how-it-works) — understand how the app delivers badges to your storefront.
* [FAQ](/help/faq) — answers to common questions about the app.


# Dynamic variables reference

Complete reference for all dynamic variables you can use in badge and label text content.

Dynamic variables display live product and customer data inside your badge text, replaced with the actual value when a customer views the product.

For example, a badge with the text `Save {sale}!` would display as **Save 25%!** on a product that is 25% off.

## Variable reference table

| Variable                  | Description             | Example output | Plan    |
| ------------------------- | ----------------------- | -------------- | ------- |
| `{product_vendor}`        | Product vendor name     | "Nike"         | FREE    |
| `{product_type}`          | Product type            | "T-Shirt"      | FREE    |
| `{product_sku}`           | Product SKU             | "SKU-12345"    | FREE    |
| `{inventory}`             | Total items in stock    | "42"           | FREE    |
| `{sale}`                  | Discount percentage     | "25%"          | FREE    |
| `{sale_amount}`           | Discount amount         | "$10.00"       | FREE    |
| `{product_variant_count}` | Number of variants      | "3"            | FREE    |
| `{customer_order_total}`  | Customer's total orders | "5"            | FREE    |
| `{customer_spent_total}`  | Customer's total spent  | "$250.00"      | FREE    |
| `{product_metafield}`     | Product metafield value | (varies)       | DIAMOND |
| `{variant_metafield}`     | Variant metafield value | (varies)       | DIAMOND |
| `{countdown}`             | Countdown to end date   | "2d 5h 30m"    | GOLD    |

## Notes

{% hint style="info" %}
**Sale variables and auto-hide**\
`{sale}` and `{sale_amount}` support an option to auto-hide the badge when the product isn't on sale, avoiding "0%" or "$0.00" on full-price products.
{% endhint %}

{% hint style="info" %}
**Metafield variables**\
`{product_metafield}` and `{variant_metafield}` require the DIAMOND plan. Selecting one shows a field for the metafield's **namespace and key** — for example, `custom.material` or `custom.care_instructions`. The app pulls that value for each product or variant.
{% endhint %}

{% hint style="info" %}
**Countdown timer**\
`{countdown}` requires the GOLD plan and an **end date** set under **Display > Visibility Date & Countdown** in the badge editor. It updates in real time, showing the remaining time until that date. Choose **Style 1** or **Style 2** in **Insert Dynamic Text** before copying the token.
{% endhint %}

{% hint style="warning" %}
**Variables are case-sensitive** — type them exactly as shown, including the curly braces. `{sale}` works; `{Sale}` or `{SALE}` will not.
{% endhint %}

***

## Next steps

* [Using dynamic variables](/badges-and-labels/dynamic-variables) — learn how to add variables to your badge text step by step.
* [Create a text badge](/badges-and-labels/create-text-badge) — build your first text-based badge with dynamic content.


# Condition operators reference

Every condition field and operator available when building targeting rules for badges.

A targeting rule is a row with three parts: a **field**, an **operator**, and a **value**. The operators offered depend on the field you pick — text fields get *contains* and *starts with*, numeric fields get *is greater than*, and so on.

You build these rows on the badge editor's **Products** tab, after selecting **Products matching conditions**.

## Condition fields

The field dropdown is grouped into three sections.

### Product conditions

| Field                     | What it matches                                  |
| ------------------------- | ------------------------------------------------ |
| **Product title**         | The product's name.                              |
| **Product type**          | Shopify's product type field.                    |
| **Product vendor**        | The vendor name.                                 |
| **Product price**         | The current price.                               |
| **Product compare price** | The compare-at price.                            |
| **Product sale price**    | The discounted price.                            |
| **Product option**        | A product option such as size or color.          |
| **Product tag**           | Any tag on the product.                          |
| **Product weight**        | The product's weight.                            |
| **Product created**       | How long ago the product was created, in days.   |
| **Product published**     | How long ago the product was published, in days. |
| **Product inventory**     | Stock level and stock status.                    |
| **Product metafield**     | A product metafield value.                       |

### Variant conditions

| Field                 | What it matches                          |
| --------------------- | ---------------------------------------- |
| **Product variants**  | Whether the product has variants at all. |
| **Variant inventory** | Stock level of individual variants.      |
| **Variant metafield** | A variant metafield value.               |

### Collection conditions

| Field           | What it matches                         |
| --------------- | --------------------------------------- |
| **Collections** | The collections the product belongs to. |

## Operators by field type

### Text fields

Product title, type, vendor, option, tag.

| Operator             | Meaning                               |
| -------------------- | ------------------------------------- |
| **is equal to**      | Exactly matches the value you enter.  |
| **is not equal to**  | Does not match the value.             |
| **starts with**      | Begins with the text you enter.       |
| **ends with**        | Ends with the text you enter.         |
| **contains**         | Includes the text anywhere within it. |
| **does not contain** | Does not include the text.            |

### Numeric fields

Product price, compare price, sale price, weight.

| Operator            | Meaning                              |
| ------------------- | ------------------------------------ |
| **is equal to**     | Exactly the number you enter.        |
| **is not equal to** | Any number except the one you enter. |
| **is greater than** | Above the number you enter.          |
| **is less than**    | Below the number you enter.          |

### Inventory

| Operator                               | Meaning                                       |
| -------------------------------------- | --------------------------------------------- |
| **in stock**                           | The product currently has inventory.          |
| **out of stock**                       | Inventory has reached zero.                   |
| **continue selling when out of stock** | The product is set to keep selling past zero. |
| **stock availability is greater than** | Stock is above the threshold you enter.       |
| **stock availability is less than**    | Stock is below the threshold you enter.       |

The first three take no value — the operator *is* the condition.

### Date fields

Product created, Product published. The value is a number of **day(s)** counted back from today, not a calendar date.

| Operator            | Meaning                                                                         |
| ------------------- | ------------------------------------------------------------------------------- |
| **is less than**    | Created or published fewer than N days ago — use this for "new arrival" badges. |
| **is greater than** | Created or published more than N days ago.                                      |
| **is in range**     | Falls between two day counts.                                                   |

### Product variants

| Operator                              | Meaning                                          |
| ------------------------------------- | ------------------------------------------------ |
| **is equal to** / **is not equal to** | Compares against a specific variant count.       |
| **products with variants**            | The product has more than one variant.           |
| **product has no variants**           | The product has only the single default variant. |

## Combining conditions

Add as many rows as you need with **Add conditions**, then use the **Products must match** radio above them to decide how they combine:

{% columns %}
{% column %}

### all conditions (AND)

Every row must be true. Narrows the match.

**Example:** Product type `is equal to` "T-Shirt" **and** Product vendor `is equal to` "Nike" → only Nike T-shirts.
{% endcolumn %}

{% column %}

### any condition (OR)

One row is enough. Widens the match.

**Example:** Product tag `is equal to` "new-arrival" **or** Product tag `is equal to` "featured" → products with either tag.
{% endcolumn %}
{% endcolumns %}

{% hint style="info" %}
The setting applies to the whole rule — you cannot mix AND and OR within a single set of conditions. Banners use the same pattern on their **Placement** tab.
{% endhint %}

***

## Next steps

* [Target products by attribute](/badges-and-labels/target-by-attribute) — set up attribute conditions step by step.
* [Target specific products](/badges-and-labels/target-products) — hand-pick individual products instead.
* [Plan comparison](/reference/plan-comparison) — check which conditions your plan includes.


# Plan comparison

Side-by-side comparison of every feature across the FREE, GOLD, and DIAMOND plans.

**Sami Product Labels** has three plans. This page mirrors the comparison table you get by clicking **Show Pricing Details** on the app's **Pricing plans** page.

| Plan        | Price           | Positioning                                                       |
| ----------- | --------------- | ----------------------------------------------------------------- |
| **FREE**    | $0              | Basic product label and badge features with simple customization. |
| **GOLD**    | $9.9 USD/month  | Unlimited labels with smart targeting.                            |
| **DIAMOND** | $14.9 USD/month | AI-powered labels with full control at scale.                     |

{% hint style="info" %}
Annual billing saves 17%. Switch with the **Monthly / Annually** toggle on the Pricing plans page.
{% endhint %}

## Limits and resources

| Feature                                 | FREE      | GOLD      | DIAMOND   |
| --------------------------------------- | --------- | --------- | --------- |
| **Badges / Labels**                     | 5         | Unlimited | Unlimited |
| **Label groups**                        | 1         | 1         | Unlimited |
| **Highlights**                          | 2         | Unlimited | Unlimited |
| **Banners**                             | 2         | Unlimited | Unlimited |
| **Trust badges**                        | Unlimited | Unlimited | Unlimited |
| **Image samples**                       | 1000 +    | 5000 +    | 10000 +   |
| **Select product from collections/tag** | —         | ✓         | ✓         |
| **Choose product variants**             | —         | —         | ✓         |
| **Create images with AI generation**    | —         | —         | ✓         |

{% hint style="warning" %}
On FREE, deleted items still count toward the limits on badges, label groups, highlights, and banners.
{% endhint %}

## Badge and label design

| Feature                                    | FREE | GOLD | DIAMOND |
| ------------------------------------------ | ---- | ---- | ------- |
| **Add custom text badges/labels**          | ✓    | ✓    | ✓       |
| **Design your images with the editor**     | ✓    | ✓    | ✓       |
| **Adjust dimensions of labels**            | ✓    | ✓    | ✓       |
| **Display in 9 predefined positions**      | ✓    | ✓    | ✓       |
| **Animation for badge/label/trust badge**  | ✓    | ✓    | ✓       |
| **Countdown timer for labels and badges**  | —    | ✓    | ✓       |
| **Text hover for badges/labels**           | —    | ✓    | ✓       |
| **Customize unlimited position of labels** | —    | —    | ✓       |
| **Multi-language**                         | —    | —    | ✓       |

## Label display on

| Page                            | FREE | GOLD | DIAMOND |
| ------------------------------- | ---- | ---- | ------- |
| **Related products block**      | ✓    | ✓    | ✓       |
| **Collection pages**            | ✓    | ✓    | ✓       |
| **Search page**                 | ✓    | ✓    | ✓       |
| **Home page**                   | ✓    | ✓    | ✓       |
| **Article page**                | ✓    | ✓    | ✓       |
| **Cart page**                   | ✓    | ✓    | ✓       |
| **Product pages (all images)**  | ✓    | ✓    | ✓       |
| **Product pages (first image)** | —    | ✓    | ✓       |

## Display conditions

| Condition                                       | FREE | GOLD      | DIAMOND   |
| ----------------------------------------------- | ---- | --------- | --------- |
| **All products**                                | ✓    | ✓         | ✓         |
| **Specific products**                           | 50   | Unlimited | Unlimited |
| **Include/exclude from product tag**            | —    | ✓         | ✓         |
| **Inventory status** (in stock / out of stock)  | —    | ✓         | ✓         |
| **Sale products within specific ranges**        | —    | ✓         | ✓         |
| **Include/exclude customers with specific tag** | —    | ✓         | ✓         |
| **Products created/published**                  | —    | ✓         | ✓         |
| **Set visibility date time**                    | —    | ✓         | ✓         |
| **Set visibility country restriction**          | —    | ✓         | ✓         |
| **Specific languages**                          | —    | —         | ✓         |
| **Specific metafields**                         | —    | —         | ✓         |

## Analytics and reporting

| Feature                 | FREE | GOLD | DIAMOND |
| ----------------------- | ---- | ---- | ------- |
| **Analytics dashboard** | —    | —    | ✓       |

## Included on every plan

24/7 email support, live edit previews, help docs, and access to the image sample library. **VIP support** is listed on the GOLD and DIAMOND plans.

***

## Next steps

* [Pricing plans](/settings/pricing-plans) — change your plan or apply a discount code.
* [Condition operators reference](/reference/condition-operators-reference) — every operator you can build conditions from.

{% hint style="success" %}
**Not sure which plan fits?**

Contact us at <support@samita.io>.
{% endhint %}


# Getting started

Start protecting Shopify storefront content with Sami B2B Lock, Password Protect.

**Sami B2B Lock, Password Protect** lets you control who can view content and purchase products in your Shopify store. Use a Lock to protect a whole website, selected products, collections, pages, blogs, custom URLs, the cart page, or checkout—then decide which visitors can continue and what everyone else sees.

The app is designed for stores that need experiences such as wholesale-only pricing, members-only pages, private product launches, password-protected collections, customer-specific content, or checkout restrictions.

## What you can do

With Sami B2B Lock, Password Protect, you can:

* Protect your whole website or a specific part of your storefront.
* Lock all products, selected products, variants, product tags, vendors, collections, pages, blogs, articles, URLs, the cart page, or checkout.
* Grant access with customer login, customer tags, B2B customer status, selected customers, passcodes, secret links, subscriptions, confirmation prompts, and other conditions.
* Limit access by date, weekly schedule, country, IP address, storefront language, order history, cart contents, cart quantity, or cart total.
* Hide price, Add to cart, product listings, navigation links, or search-engine visibility for blocked visitors.
* Send visitors to another page after access is granted, or add tags to an eligible Shopify customer account.
* Let visitors request a passcode or secret link, then review and send access from the app.
* Customize the Lock's messages, colors, templates, and translations for each storefront language.

## How a Lock works

Every Lock has three parts:

| Part                | What it decides                  | Example                                              |
| ------------------- | -------------------------------- | ---------------------------------------------------- |
| **Content to lock** | What needs protection            | A wholesale collection or one product variant        |
| **Access rules**    | Who is allowed through           | A signed-in customer with the `wholesale` tag        |
| **Lock behavior**   | What blocked visitors experience | Hide price and Add to cart, then show a login prompt |

When a visitor opens protected content, Sami Lock checks the configured conditions. If all required conditions are satisfied, the visitor can continue. If not, the Lock applies the selected behavior, such as showing a message, hiding product information, displaying a passcode field, or redirecting the visitor.

{% hint style="info" %}
For Checkout Locks, conditions work differently: they decide when the checkout error message should appear and checkout should be blocked. See [Checkout](/b2b-lock-password-protect/content-to-lock/checkout) for the complete flow.
{% endhint %}

## Before you begin

Before creating a Lock, make sure you have:

1. Installed the app in the Shopify store where the Lock will be used.
2. Enabled the **Sami Lock** app embed on the Shopify theme you want to protect.
3. Identified the storefront content to protect and the customer audience that should be allowed through.
4. Prepared any Shopify data required for the rule, such as customer tags, products, collections, or test customer accounts.

{% hint style="warning" %}
Creating a Lock in the app does not affect the storefront until the Sami Lock app embed is enabled on the relevant theme.
{% endhint %}

## Start here

Follow these guides in order when setting up the app for the first time:

1. [Install the app](/b2b-lock-password-protect/quick-start/installation) from the Shopify App Store and approve its permissions.
2. [Enable the app embed](/b2b-lock-password-protect/quick-start/enable-app-embed) from the app Dashboard so Sami Lock can run on the storefront.
3. [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart) with a simple product and logged-in-customer example.
4. [Learn how locks work](/b2b-lock-password-protect/quick-start/how-locks-work) before creating more advanced rules.

## Choose the right guide

After the initial setup, use the guide that matches your goal:

| Your goal                                                                | Start with                                                                                         |
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| Protect products, variants, collections, pages, blogs, URLs, or checkout | [Content to lock](/b2b-lock-password-protect/locks/overview#content-types-you-can-lock)            |
| Decide which customers can access protected content                      | [Access rules overview](/b2b-lock-password-protect/access-rules/overview)                          |
| Hide prices, menus, product links, or configure redirects                | [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)                        |
| Send passcodes or secret links after a visitor asks for access           | [Request access overview](/b2b-lock-password-protect/request-access/overview)                      |
| Change colors, templates, messages, or translations                      | [Design & customization](/b2b-lock-password-protect/design-and-customization/colors-and-templates) |
| Check an issue with the Lock or app embed                                | [FAQ](/b2b-lock-password-protect/help/faq)                                                         |

## Need help?

If you encounter an issue while setting up a Lock, start with [Troubleshooting & FAQ](/b2b-lock-password-protect/help/faq). You can also contact <support@samita.io> with your store URL, Lock name, affected page, expected result, actual result, and a screenshot.


# What's new

Latest Sami B2B Lock product updates.

This page summarizes the latest product changes that affect Lock setup and daily use. New releases are added at the top, so the most recent changes are always shown first.

## Version 4.0.0

Released June–July 2026.

* New Lock Details interface with support for multiple conditions.
* Improved Checkout Lock behavior and condition handling.
* Weekly schedule conditions.
* Subscribe to unlock with Shopify, Klaviyo, and Mailchimp.
* Confirmation prompt access.
* IP address and shop domain conditions.
* Purchased items and order quantity conditions.
* Additional customer and order access controls.

{% hint style="info" %}
Some features may depend on your app plan or Shopify store capabilities. Open the relevant feature in the app to see whether it is available for your store.
{% endhint %}

## Related docs

* [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Weekly schedule](/b2b-lock-password-protect/access-rules/weekly-schedule)
* [Subscribe to unlock](/b2b-lock-password-protect/access-rules/subscribe)
* [Checkout](/b2b-lock-password-protect/content-to-lock/checkout)


# Installation

Install Sami B2B Lock, Password Protect from the Shopify App Store and open it for the first time.

Sami B2B Lock, Password Protect installs like any other Shopify app, directly from the Shopify App Store.

1. Open the app's listing page: [Sami B2B Lock, Password Protect](https://apps.shopify.com/b2b-wholesale-lock-hide-price).
2. Click **Add app** (or **Install app**) and sign in to your Shopify admin if prompted.
3. Review the permissions the app requests — these let it read the products, collections, pages, and customers you'll use to build locks, and let it update your theme to deliver the lock screen on your storefront. Click **Install app** to approve them.
4. Shopify redirects you back into the app, which opens on the **Locks** page inside your Shopify admin.

{% hint style="info" %}
For a plain-language summary of exactly what each permission is used for, see [Permissions and data](/b2b-lock-password-protect/reference/permissions-and-data).
{% endhint %}

The app isn't protecting your storefront yet at this point — one more setup step is required before any lock can take effect.

## Next steps

Continue to [Enable the app embed](/b2b-lock-password-protect/quick-start/enable-app-embed) to turn on storefront protection.


# Enable the app embed

Turn on the theme app embed so Sami B2B Lock, Password Protect can actually enforce locks on your storefront.

Sami B2B Lock, Password Protect protects your storefront through a Shopify theme app extension embed. In your theme editor's App embeds list, you'll see it listed as **Sami Lock**. Turning this embed on is what lets the app run on every storefront page and actually enforce your locks.

{% hint style="warning" %}
Locks you create in the app won't take effect on your storefront until this embed is turned on. Everything else in the app will work — you can still build and save locks — but shoppers won't see them enforced until you complete this step.
{% endhint %}

## Turn on the embed

1. Open the app. On the dashboard, find the **Setup guide** card and its step 2, **Integrate with theme** — it spells out that "The app will not work on the online store until you enable it on your theme."

   <figure><img src="/files/aqEe7tZR6OhhBQOl1v22" alt="Step 2 of the app&#x27;s Setup guide, Integrate with theme, with its Intergrate theme button"><figcaption><p>Step 2 of the dashboard's Setup guide takes you straight to the right place.</p></figcaption></figure>
2. Click **Intergrate theme**. This opens your theme editor in a new tab, already scrolled to the **App embeds** panel with the app's embed filtered in — you don't have to hunt for it.
3. Find **Sami Lock** in the App embeds panel and switch its toggle on.

   <figure><img src="/files/fSDQ626lbVoBUvdDaSlC" alt="Shopify theme editor App embeds panel with the Sami Lock embed and its toggle"><figcaption><p>Turn on the Sami Lock embed in the theme editor's App embeds panel.</p></figcaption></figure>
4. Click **Save** in the theme editor to apply the change.

{% hint style="info" %}
The embed has no settings of its own — the panel says "This app embed doesn't have customizable settings." Everything about how your locks look and behave is configured inside the app, not here. All you do in the theme editor is switch the embed on.
{% endhint %}

## Enabling it on another theme

The button in step 2 targets the theme you're currently working with. If you run more than one theme — say a live theme plus a draft you're preparing — open the theme editor for each theme you want protected and turn the **Sami Lock** embed on there too.

{% hint style="info" %}
Themes you create after installing the app are covered automatically — you don't need to repeat this setup for every new theme, only for themes that existed before you enabled the embed on them (or if you want to double-check a newly published theme).
{% endhint %}

## Next steps

* [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart)
* [How locks work](/b2b-lock-password-protect/quick-start/how-locks-work)


# Create your first lock

Build and verify your first lock in a few minutes, using a real example — hiding a product's price from guests.

This walkthrough builds one simple, common lock: hide the price and **Add to cart** button on a single product so only logged-in customers can see them. It's a good first lock because it uses the three pieces every lock is built from — content to lock, an access rule, and a lock behavior — without any extra complexity.

Make sure you've already [enabled the app embed](/b2b-lock-password-protect/quick-start/enable-app-embed) on your theme, or the lock you create here won't take effect on your storefront yet.

{% stepper %}
{% step %}

### Open Locks and start a new lock

Open the app and go to the **Locks** page, then click **Create Lock**.

<figure><img src="/files/Aaz1PJ2IRkwJ4qbyC7fI" alt="Locks page with the Create Lock button highlighted"><figcaption><p>Start a new lock from the Locks page.</p></figcaption></figure>
{% endstep %}

{% step %}

### Name your lock

Give the lock a name you'll recognize later, for example "Members-only pricing." This name is only for your own reference in the admin — shoppers never see it.
{% endstep %}

{% step %}

### Choose Products as the content to lock

Set **Content to lock** to **Products**, then pick the single product you want to protect from the product picker.

<figure><img src="/files/Qr8dcvbFSeFvyRzXwomb" alt="Content to lock picker with Products selected and one product chosen"><figcaption><p>Pick Products as the content type, then choose the specific product to protect.</p></figcaption></figure>
{% endstep %}

{% step %}

### Add the Logged-in customers access rule

Add an access rule and choose **Logged-in customers**. Leave it set to match **If** the visitor is signed in — this is the default and the setting this example needs.

<figure><img src="/files/tZu8Vjxptiz5GmRqSioK" alt="Access rule picker with Logged-in customers selected"><figcaption><p>Add the Logged-in customers access rule to the lock.</p></figcaption></figure>
{% endstep %}

{% step %}

### Turn on Hide price and Add to cart

In the lock's behavior settings, turn on both **Hide price** and **Hide Add to cart**. Guests who don't pass the access rule will see the product page with the price and button replaced, instead of being blocked entirely.
{% endstep %}

{% step %}

### Save the lock

Review the summary of what you've configured — content, access rule, and behavior — then click **Save**.

<figure><img src="/files/QnyrZphDmzJlDVflAVnI" alt="Lock summary screen before saving, showing content, access rule, and behavior"><figcaption><p>Review the lock summary before saving.</p></figcaption></figure>
{% endstep %}

{% step %}

### Verify it on your live storefront

Open an incognito or private browser window and visit the product page on your live storefront. You should see the price and **Add to cart** button replaced with a "Login to see price" / "Login to Add to cart" prompt instead of the normal buy box.

Now log in with a customer account (in that same window, or any browser where you're signed in) and reload the product page. The price and **Add to cart** button should reappear normally, since you now pass the Logged-in customers rule.
{% endstep %}
{% endstepper %}

{% hint style="success" %}
If the price and Add to cart button stayed hidden for the signed-out visitor and reappeared once you logged in, your first lock is working correctly on both sides — denied and allowed.
{% endhint %}

## Next steps

* [How locks work](/b2b-lock-password-protect/quick-start/how-locks-work)
* [Locks overview](/b2b-lock-password-protect/locks/overview)


# How locks work

The three building blocks behind every lock in Sami B2B Lock, Password Protect — content, access rules, and behavior.

Every lock you create in Sami B2B Lock, Password Protect is made of the same three pieces. Once these three concepts click, every other page in these docs is just a variation on one of them.

## 1. Content to lock

This is *what* you're protecting: your whole website, specific products or variants, collections, pages, blogs and articles, a specific URL, or checkout. A lock always protects exactly one content type, and you can carve out exceptions with an exclude list (specific URLs or products that stay open even though the rest of that content type is locked).

See [Locks overview](/b2b-lock-password-protect/locks/overview) for the full list of content types and how to combine them across multiple locks.

## 2. Access rules

This is *who or what* must be true about the visitor before the content unlocks. Access rules check things like whether the visitor is logged in, has a specific customer tag, knows a passcode, is browsing from a particular country, or has a certain product in their cart.

Rules are grouped into **access keys**:

* Rules inside the **same** access key are combined with **AND** — the visitor must satisfy every rule in that key. Use this to build something like "must be logged in AND tagged wholesale."

Most rules also have an **If / Unless** setting: **If** means the rule is satisfied when the visitor matches the condition, and **Unless** inverts that — satisfied when the visitor does *not* match. This doesn't apply to the action-based rules (Passcode, Secret link, Subscribe to unlock, Confirmation prompt, Custom liquid), since those work through their own verification step rather than a simple yes/no match.

See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue of rules, and [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules) for more on how multiple conditions are evaluated.

## 3. Lock behavior

This is *what actually happens* to a visitor who doesn't pass your access rules. Depending on the content type, that can mean:

* The price and/or **Add to cart** button are hidden, with a message or styled button shown in their place.
* A lock screen or message appears asking the visitor to sign in, enter a passcode, subscribe, confirm a statement, or otherwise verify themselves.
* The visitor is redirected to a different page or URL.
* The item is hidden from storefront menus and/or from on-site search and sitemaps, so it's not just blocked but not discoverable either.

You can combine several behaviors on the same lock — for example, hiding a product's price and Add to cart button while also removing it from your navigation menu.

See [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for the full list of behaviors and how they interact.

{% hint style="info" %}
Put together, a lock reads like a sentence: "On \[content to lock], require \[access rules], and if the visitor doesn't pass, do \[lock behavior]." The quickstart example builds "On this product, require the visitor to be logged in, and if they're not, hide the price and Add to cart button."
{% endhint %}

## Related docs

* [Locks overview](/b2b-lock-password-protect/locks/overview)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)


# Locks overview

What a lock is in Sami B2B Lock, Password Protect, and where to go next to build one.

A **lock** is the core building block of Sami B2B Lock, Password Protect. Every lock combines three things:

1. **Content to lock** — what part of your storefront the lock protects (the whole site, specific products, a collection, a page, blog content, a custom URL, the cart page, or checkout).
2. **Access rules** — the conditions a visitor must meet to get through (logged in, tagged, has a passcode, arrived via a secret link, and many more). When you add multiple conditions to an access key, the visitor must satisfy all of them.
3. **Lock behavior** — what happens to the protected content and to blocked visitors (hide price and Add to cart, hide from menus and search engines, redirect, tag the customer, or set how long access is remembered).

The lock editor is two tabs: **Lock setup**, where you name the lock and choose its content type, and **Unlock rules**, where you add access rules and — right alongside them, in the same tab — configure the lock's blocked-visitor behavior. Fill in both tabs, then save. All of your locks live on the [Manage locks](/b2b-lock-password-protect/locks/manage-locks) list, where you can enable, disable, duplicate, preview, or delete them.

{% hint style="info" %}
New to the app? [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart) walks through building one from scratch, and [How locks work](/b2b-lock-password-protect/quick-start/how-locks-work) explains the underlying logic in more detail.
{% endhint %}

## Content types you can lock

Each content type has its own guide with the full setup, including the options specific to that type. Some content types may require a paid plan.

| Content type          | What it protects                                                                                                  | Guide                                                                           |
| --------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| Whole Website         | Your entire storefront, with an option to still allow the home page                                               | [Whole website](/b2b-lock-password-protect/content-to-lock/whole-website)       |
| Products and variants | All products, manually selected products, specific variants, or (from the create picker) by product tag or vendor | [Products and variants](/b2b-lock-password-protect/content-to-lock/overview)    |
| Collections           | One or more specific collections                                                                                  | [Collections](/b2b-lock-password-protect/content-to-lock/collections)           |
| Pages                 | Specific storefront pages                                                                                         | [Pages](/b2b-lock-password-protect/content-to-lock/pages)                       |
| Blogs and articles    | An entire blog or specific articles within it                                                                     | [Blogs and articles](/b2b-lock-password-protect/content-to-lock/blogs-articles) |
| Specific URL          | Any custom URL or path on your store                                                                              | [Specific URL](/b2b-lock-password-protect/content-to-lock/specific-url)         |
| Cart page             | The storefront cart page itself                                                                                   | [Cart page](/b2b-lock-password-protect/content-to-lock/cart-page)               |
| Checkout              | Checkout itself, using its own condition builder                                                                  | [Checkout](/b2b-lock-password-protect/content-to-lock/checkout)                 |

## The other two pieces of every lock

Once you've picked what to lock, every lock needs:

* **Access rules** — the conditions that decide who gets through. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue and how multiple conditions are evaluated together.
* **Lock behavior** — what a blocked visitor sees and what happens after someone passes. See [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview).

## Managing your locks

Once you have one or more locks, head to [Manage locks](/b2b-lock-password-protect/locks/manage-locks) to view, enable/disable, duplicate, preview, or delete them, and to use the Quick Setup templates if you're starting from scratch.

## Related docs

* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart)


# Manage locks

View, enable, disable, duplicate, preview, and delete your locks from the Locks list.

The **Locks** page is where every lock you create lives. It's the first screen you land on when you open the app, and the place to come back to whenever you need to check on, adjust, or clean up your locks.

<figure><img src="/files/GWU4YoDBpzO4zIwytweE" alt="The Locks list showing several locks with their status, content type, and action icons."><figcaption><p>The Locks list shows every lock you've created, with its status and quick actions.</p></figcaption></figure>

## Viewing your locks

Each row in the list shows a lock's name, its status (**Active** or **Disable**), and the content type it protects. Click anywhere on a row to open that lock's editor and review or change its content, access rules, or behavior. You can filter the list (all, active, disabled) and search to find a specific lock quickly.

## Enabling and disabling a lock

Every lock has a quick toggle to turn it on or off without opening it. An active lock enforces its rules on the storefront immediately; a disabled lock stops protecting its content until you turn it back on, but keeps its full configuration so you can re-enable it later.

<figure><img src="/files/LdnBJ1P81mL82vARBfCi" alt="The enable and disable action icon on a lock row in the Locks list."><figcaption><p>Use the status icon on a lock row to enable or disable it without opening the editor.</p></figcaption></figure>

## Previewing a lock

Each lock row has a **Preview** action that opens the locked page on your live storefront in a new tab, so you can see exactly what a blocked visitor sees before you rely on it.

## Duplicating a lock

Use the **Duplicate** action on a lock row to create a copy of that lock with the same content selection, access rules, and behavior. This is useful when you want to reuse most of a lock's setup but change one detail, like the content it targets or a single access rule, without rebuilding it from scratch.

## Deleting locks

Select one or more locks using the checkboxes, then use the bulk **Delete** action to remove them. Deleting a lock is permanent — the content it protected becomes publicly visible again as soon as it's removed, so review what a lock covers before deleting it.

## Getting started: the first-install setup guide

The first time you open the app, a 3-step setup guide walks you through getting protection live:

1. **Create lock** — build your first lock.
2. **Integrate with theme** — turn on the app embed in your theme so the lock can actually run on your storefront (see [Enable the app embed](/b2b-lock-password-protect/quick-start/enable-app-embed)).
3. **View in storefront** — confirm the lock is working by visiting the protected page.

A progress indicator tracks which of these steps you've completed (for example "1 / 3 Completed").

<figure><img src="/files/PDb1HbSP5uIPNWg1WyL7" alt="The app dashboard&#x27;s Setup guide card showing the three steps and a completion progress bar"><figcaption><p>The Setup guide on the dashboard tracks your progress through the three setup steps.</p></figcaption></figure>

## Quick Setup templates

If you don't have any locks yet, the Locks page shows an empty state with a **Quick Setup** carousel of ready-made templates. Each one pre-fills a working lock that you can review, adjust, and save — a faster starting point than building a lock from a blank editor.

<figure><img src="/files/Qximm0d6WzgGawIKU51r" alt="The Quick Setup carousel on the empty Locks page, showing several template cards."><figcaption><p>The Quick Setup carousel offers ready-made lock templates when you don't have any locks yet.</p></figcaption></figure>

The available templates are:

* **Hide all product price and Add to cart**
* **Lock content with passcode**
* **Use request access**
* **Wholesale-only products** — pre-fills a customer-tag rule for a "wholesale" tag applied to price and Add to cart
* **Selected customers can view page**
* **Lock checkout**

{% hint style="info" %}
Some content types and access rules used by these templates may require a paid plan. If a template needs a feature your current plan doesn't include, the app will prompt you to upgrade before applying it.
{% endhint %}

## Related docs

* [Locks overview](/b2b-lock-password-protect/locks/overview)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart)


# Whole website

Lock your entire storefront behind access rules, with an option to still allow the home page.

The **Whole Website** content type locks every page of your storefront behind the access rules you set, with one exception you control: whether the home page stays open. This is the right choice when you're building a store that should be invite-only, wholesale-only, or gated behind a single login screen across the board.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a clear, descriptive name — you'll see this name in the Locks list, so make it something you'll recognize later (for example, "Whole store login required").

## Choose Whole Website as the content to lock

4. On the **Lock setup** tab, in the content picker, select **Whole Website**.

<figure><img src="/files/511mYgxV8hZkfDuWqCWi" alt="The content picker with Whole Website selected as the content type to lock."><figcaption><p>Select Whole Website in the content picker to protect your entire storefront.</p></figcaption></figure>

5. Optionally tick **Exclude url** and list any paths that should stay public even though the rest of the site is locked — a contact page or a landing page you're running ads to, for example.

{% hint style="info" %}
**Exclude url** is specific to the Whole Website content type. It's the only content type with a URL-level carve-out, which is what makes "lock everything except a few pages" possible in a single lock.
{% endhint %}

{% hint style="warning" %}
Whole Website locks may require a paid plan depending on your current plan.
{% endhint %}

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule that decides who gets through. For a whole-site lock, **Logged-in customers** or **Passcode** are common starting points — for example, requiring every visitor to sign in with a customer account before browsing anything.
8. Configure the rule's specific settings (see [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue of available rules).
9. If you need more than one condition to be true at once, add every required rule to the access key. All configured conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules) for details.

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel. For a Whole Website lock, that panel has a single field:

10. Turn on **Allow access to the home page** if you want visitors to still be able to browse your storefront's home page without meeting any access rule — useful if you want the home page to work as a public landing page while everything else stays locked. Leave it off to lock the home page along with the rest of the site.

<figure><img src="/files/YZjMzFsOd68f6ZeLOAnR" alt="The Allow access to the home page toggle for a Whole Website lock."><figcaption><p>Turn on Allow access to the home page to keep your home page public while locking the rest of the site.</p></figcaption></figure>

11. Decide what else blocked visitors see and what happens once they pass — for a whole-site lock this is usually a full lock screen rather than a hidden price or button. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for the available options, such as redirecting visitors after they gain access or tagging their customer account once verified.

## Save

12. Click **Save**. Once the app embed is enabled in your theme, the lock takes effect on your storefront immediately.

{% hint style="success" %}
Your whole storefront is now protected by the rules you configured, with the home page handled according to the toggle you set.
{% endhint %}

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Products

Choose how you want to target products — all of them, specific picks, variants, a tag, or a vendor.

The **Products** content type locks selected products or variants instead of your whole store — the right choice for gating a wholesale catalog, an unreleased product, or any subset of your catalog behind a login, tag, or passcode while the rest of your store stays open.

The content picker breaks products into five targeting methods. Pick the page that matches how you want to select products — each one is a complete guide from creating the lock through saving it:

| Targeting method                                                                           | Best for                                                                         |
| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |
| [All products](/b2b-lock-password-protect/content-to-lock/overview/all-products)           | Locking your entire catalog in one go, optionally with exceptions                |
| [Specific products](/b2b-lock-password-protect/content-to-lock/overview/specific-products) | A hand-picked list of individual products                                        |
| [Variants](/b2b-lock-password-protect/content-to-lock/overview/variants)                   | Locking down to one size/color/option instead of the whole product               |
| [Product tags](/b2b-lock-password-protect/content-to-lock/overview/product-tags)           | A catalog that grows over time — newly tagged products are covered automatically |
| [Vendor](/b2b-lock-password-protect/content-to-lock/overview/vendor)                       | Everything from one supplier or brand                                            |

{% hint style="info" %}
Only one targeting method applies per lock. If you need different rules for different subsets of products, create separate locks — for example one lock for a `wholesale`-tagged catalog and a second lock for a specific unreleased product.
{% endhint %}

## Related docs

* [Locks overview](/b2b-lock-password-protect/locks/overview)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# All products

Lock your entire product catalog in one lock, with optional exceptions.

Choose **All products** when you want a single lock to cover your entire catalog at once — for example, hiding every price and Add to cart button until a visitor logs in, rather than building the same rule product by product.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "All products — login required."
4. On the **Lock setup** tab, in the content picker, choose **Products**, then select **All products**.

<figure><img src="/files/LgCZEaHSu4deO9YmPkmC" alt="The content picker with Products selected and the All products option chosen."><figcaption><p>Choose All products to cover your entire catalog with one lock.</p></figcaption></figure>

## Exclude specific products (optional)

5. Still on the **Lock setup** tab, turn on the exclude option and select any products that should stay unlocked even though the rest of your catalog is locked. This is useful when almost everything should be gated except a handful of always-public items.

<figure><img src="/files/r6CNvLFnAZ3HYRr11wT2" alt="The Exclude specific products toggle and product picker for a Products lock set to all products."><figcaption><p>Turn on the exclude option to keep specific products unlocked when the rest of your catalog is locked.</p></figcaption></figure>

{% hint style="warning" %}
Locking all products may require a paid plan depending on your current plan.
{% endhint %}

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule — **Logged-in customers** is a common choice for an all-products lock. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue.
8. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

9. [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart) is the most common behavior for a whole-catalog lock — it lets you hide just the price, just the Add to cart button, or both, and show a message or styled button in their place. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for all the available options.

## Save

10. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Products and variants](/b2b-lock-password-protect/content-to-lock/overview)
* [Specific products](/b2b-lock-password-protect/content-to-lock/overview/specific-products)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Specific products

Lock a hand-picked list of individual products.

Choose **Specific products** when you want to lock a hand-picked set of individual products rather than your whole catalog — for example, a small batch of pre-release items or a handful of products reserved for a particular customer group.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "Pre-release drop — passcode required."
4. On the **Lock setup** tab, in the content picker, choose **Products**, then select **Specific products**.

<figure><img src="/files/GQHwL1x2ubc9xjEgg057" alt="The content picker with Products selected and the Specific products option chosen."><figcaption><p>Choose Specific products to lock a hand-picked list of items.</p></figcaption></figure>

5. Use the picker to search and select the individual products you want to lock. Add as many as you need.

<figure><img src="/files/XbjauGKSy4hUkrZgQmYg" alt="The product picker for manually selecting specific products to lock."><figcaption><p>Search and select the specific products you want to lock.</p></figcaption></figure>

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue.
8. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

9. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) — [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart) is a common choice, or you can fully hide the product from listings and search.

## Save

10. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Products and variants](/b2b-lock-password-protect/content-to-lock/overview)
* [Variants](/b2b-lock-password-protect/content-to-lock/overview/variants)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Variants

Lock down to specific variants — one size or color — instead of the whole product.

Choose **Variants** when only some options of a product should be locked — for example, a limited-edition color, or a size reserved for wholesale customers — while the rest of the product stays open to everyone.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "Reserved size — wholesale only."
4. On the **Lock setup** tab, in the **Content to lock** dropdown, choose **Product variants**.

<figure><img src="/files/0DWc2bCvirIAUiL1Bu0a" alt="The Content to lock dropdown with Product variants selected."><figcaption><p>Choose Product variants to lock down to individual product options.</p></figcaption></figure>

5. Use the picker to search for the product, then select the specific variant or variants you want to lock. You can select variants across multiple products in the same lock.

<figure><img src="/files/ZuErs46q0qbx4VUiUPU3" alt="The variant picker showing individual product variants selected for locking."><figcaption><p>Search for a product, then select the specific variants to lock.</p></figcaption></figure>

{% hint style="info" %}
Locking specific variants may require a paid plan depending on your current plan.
{% endhint %}

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue.
8. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

9. [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart) is the natural fit here — the rest of the product stays fully visible while only the locked variant's price or Add to cart control is affected. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for all the available options.

## Save

10. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Products and variants](/b2b-lock-password-protect/content-to-lock/overview)
* [Specific products](/b2b-lock-password-protect/content-to-lock/overview/specific-products)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Product tags

Lock every product carrying a specific tag, including ones you add later.

Choose **Product tags** when you want a lock to cover a catalog that changes over time — every product carrying a specific tag is locked automatically, including products you tag after the lock is already saved. This is the common choice for an ongoing wholesale catalog.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "Wholesale catalog — tag-based."
4. On the **Lock setup** tab, in the content picker, choose **Products**, then select **Product tags**.

<figure><img src="/files/rqB8iiwkv21f63CAH0El" alt="The content picker with Products selected and the Product tags option chosen."><figcaption><p>Choose Product tags to lock every product carrying a specific tag.</p></figcaption></figure>

5. Enter or select the product tag to lock. Every product carrying that tag — now and in the future — is covered by this lock.

<figure><img src="/files/zxrIU1Ivyrmll0Poq5vC" alt="The product tag picker for a Products lock targeting a specific tag."><figcaption><p>Enter the product tag you want this lock to cover.</p></figcaption></figure>

{% hint style="info" %}
Targeting by product tag may require a paid plan depending on your current plan.
{% endhint %}

{% hint style="info" %}
This locks products by their **product** tag, which is different from a **customer** tag used in the [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags) access rule. A common wholesale setup pairs this content type with a Customer tags or B2B customer access rule, so only tagged customers can see the tagged products.
{% endhint %}

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule — **Customer tags** or **B2B customer** are common pairings for a wholesale product-tag lock. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue.
8. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

9. [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart) is the most common behavior for a wholesale-style tag lock. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for all the available options.

## Save

10. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Products and variants](/b2b-lock-password-protect/content-to-lock/overview)
* [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags)
* [B2B customer](/b2b-lock-password-protect/access-rules/b2b-customer)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Vendor

Lock every product from a specific vendor.

Choose **Vendor** when you want to lock every product from a specific supplier or brand in one lock — for example, a brand you only sell to approved retail partners, without having to tag or select each product individually.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "Brand X — approved retailers only."
4. On the **Lock setup** tab, in the content picker, choose **Products**, then select **Vendor**.

<figure><img src="/files/g2xWkzbK5yL0NaOosvqR" alt="The content picker with Products selected and the Vendor option chosen."><figcaption><p>Choose Vendor to lock every product from a specific supplier or brand.</p></figcaption></figure>

5. Select the vendor you want this lock to cover. Every product assigned to that vendor — now and in the future — is covered by this lock.

<figure><img src="/files/JmvAW83Z0iUeSdyKMfaI" alt="The vendor picker for a Products lock targeting a specific vendor."><figcaption><p>Select the vendor whose products this lock should cover.</p></figcaption></figure>

{% hint style="info" %}
Targeting by vendor may require a paid plan depending on your current plan.
{% endhint %}

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue.
8. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

9. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) — [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart) is a common choice, or you can fully hide the vendor's products from listings and search.

## Save

10. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Products and variants](/b2b-lock-password-protect/content-to-lock/overview)
* [Product tags](/b2b-lock-password-protect/content-to-lock/overview/product-tags)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Collections

Lock specific collections behind access rules while the rest of your store stays public.

The **Collections** content type locks one or more specific collections — useful for gating an entire category of products (a wholesale line, a members-only range, a seasonal drop) without having to select every product inside it individually.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "B2B collection — login required."

## Choose Collections as the content to lock

4. On the **Lock setup** tab, in the content picker, select **Collections**.

<figure><img src="/files/jremeRv9xMwCvmzdbKBG" alt="The content picker with Collections selected as the content type to lock."><figcaption><p>Select Collections in the content picker to lock one or more specific collections.</p></figcaption></figure>

5. Use the collection picker to search and select the collections you want to lock. You can select more than one collection for the same lock.

<figure><img src="/files/3LagJwX9EKEtA5TbolMS" alt="The collection picker showing a search field and a list of selectable collections."><figcaption><p>Search and select the specific collections you want to lock.</p></figcaption></figure>

{% hint style="warning" %}
Locking collections may require a paid plan depending on your current plan.
{% endhint %}

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule — for example, **Selected customers** if only a hand-picked list of accounts should see this collection.
8. Configure the rule's settings. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue of available rules.
9. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

10. For a locked collection you can hide the price and Add to cart button on every product inside it, or fully hide the collection from listings, menus, and search so it doesn't appear at all to visitors who don't qualify. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for the full set of options, including [Hide from menus](/b2b-lock-password-protect/lock-behavior/hide-from-menus) and [Hide from search engines](/b2b-lock-password-protect/lock-behavior/hide-from-search-engines).

## Save

11. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Pages

Lock specific storefront pages behind access rules while the rest of your store stays public.

The **Pages** content type locks one or more specific storefront pages — for example an FAQ page reserved for logged-in customers, a wholesale application page, or a members-only resources page.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "Wholesale application page."

## Choose Pages as the content to lock

4. On the **Lock setup** tab, in the content picker, select **Page**.

<figure><img src="/files/4CrUjWwEzyJlnw2LLnpY" alt="The content picker with Page selected as the content type to lock."><figcaption><p>Select Page in the content picker to lock one or more specific storefront pages.</p></figcaption></figure>

5. Use the page picker to search and select the pages you want to lock. You can select more than one page for the same lock.

<figure><img src="/files/hLiJYupmRRVKnVaA9qBE" alt="The page picker showing a search field and a list of selectable storefront pages."><figcaption><p>Search and select the specific storefront pages you want to lock.</p></figcaption></figure>

{% hint style="warning" %}
Locking pages may require a paid plan depending on your current plan.
{% endhint %}

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule — for example, **Logged-in customers** so only signed-in shoppers can view the page.
8. Configure the rule's settings. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue of available rules.
9. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

10. A locked page typically shows a full lock screen instead of its normal content until the visitor passes. You can also redirect visitors elsewhere after they gain access, or hide the page's link from your storefront menus so it isn't discoverable by visitors who don't qualify. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for the full set of options.

## Save

11. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Blogs and articles

Lock an entire blog or specific articles within it behind access rules.

The **Blogs** content type locks blog content — either an entire blog, so every post inside it is protected, or specific individual articles, so the rest of that blog stays public.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "Members-only blog posts."

## Choose Blogs as the content to lock

4. On the **Lock setup** tab, in the content picker, select **Blogs**.

<figure><img src="/files/HAmMwUNNAL7gQAPC7FAn" alt="The content picker with Blogs selected as the content type to lock."><figcaption><p>Select Blogs in the content picker to protect blog content.</p></figcaption></figure>

5. Choose whether to lock the whole blog or specific articles:

* **Blog** — locks every existing and future article inside the blog you select.
* **Articles** — locks only the specific articles you choose, leaving the rest of the blog public.

<figure><img src="/files/JIGpVFPFxb9jbSW0c9an" alt="The picker showing the choice between locking a whole blog or specific articles within it."><figcaption><p>Choose between locking a whole blog or selecting specific articles inside it.</p></figcaption></figure>

6. Depending on your choice, select the blog or the individual articles you want to lock.

{% hint style="warning" %}
Locking blogs and articles may require a paid plan depending on your current plan.
{% endhint %}

7. Click the **Unlock rules** tab to continue.

## Add an access rule

8. Add at least one rule — for example, **Subscribe to unlock**, so visitors must subscribe with their email before reading a locked article.
9. Configure the rule's settings. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue of available rules.
10. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

11. A locked blog post typically shows a full lock screen in place of the article content until the visitor passes. You can also hide locked articles from your storefront's on-site search and sitemap. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for the full set of options.

## Save

12. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Specific URL

Lock any custom URL or path on your store behind access rules, with an option to exclude specific URLs.

The **Specific URL** content type locks any custom path on your storefront that isn't covered by the other content types — a landing page built outside the standard page/collection structure, a search results path, or any URL pattern you want to gate.

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "Landing page — passcode required."

## Choose Specific URL as the content to lock

4. On the **Lock setup** tab, in the content picker, select **Specific URL**.

<figure><img src="/files/X6jo7stygoO92p9xI9OY" alt="The content picker with Specific URL selected as the content type to lock."><figcaption><p>Select Specific URL in the content picker to lock a custom URL or path.</p></figcaption></figure>

5. In the **Restricted URLs** card, type the path you want to lock — the field shows the expected format, for example `/contact-us` — then click the add button beside it. Repeat to add more paths to the same lock.

<figure><img src="/files/ZvPS6A4sMo1pZ1Wp6I5p" alt="The Restricted URLs field showing the /contact-us example format, with the add button beside it."><figcaption><p>Enter each path you want to lock, then click add.</p></figcaption></figure>

{% hint style="info" %}
Enter the path only (starting with `/`), not the full domain. If you need to keep certain paths public inside a much broader lock, use the [Whole website](/b2b-lock-password-protect/content-to-lock/whole-website) content type instead — it has an **Exclude url** option, which Specific URL doesn't.
{% endhint %}

{% hint style="warning" %}
Locking a custom URL may require a paid plan depending on your current plan.
{% endhint %}

6. Click the **Unlock rules** tab to continue.

## Add an access rule

7. Add at least one rule — for example, **Secret link**, so the URL only unlocks for visitors who arrive with a valid secret link token.
8. Configure the rule's settings. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue of available rules.
9. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Choose a lock behavior

On the same **Unlock rules** tab, the right-hand sidebar has a **Blocked visitor behavior** panel — configure it alongside your rule:

10. A locked URL typically shows a full lock screen until the visitor passes. Review [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview) for the full set of options, including redirecting visitors after they gain access.

## Save

11. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Cart page

Lock the storefront cart page itself, separate from conditions about what's inside the cart.

The **Cart page** content type locks your storefront's cart page as a whole — for example, requiring a visitor to sign in or subscribe before they can view their cart and proceed toward checkout.

{% hint style="info" %}
Don't confuse this with [Cart conditions](/b2b-lock-password-protect/access-rules/cart-conditions). Cart page is *what you're locking* (the cart page itself, on any other lock). Cart conditions are an *access rule* you can add to a lock on other content (like a product) that checks whether specific items, or a quantity or subtotal, are already in the visitor's cart.
{% endhint %}

## Create the lock

1. Open **Locks** in the app's navigation and click **Create lock**.
2. Give the lock a descriptive name, for example "Cart — sign-in required."
3. On the **Lock setup** tab, open **Content to lock** and choose **Cart page**.

<figure><img src="/files/QlbF1kiW7crt88MK7WjJ" alt="The content picker with Cart page selected as the content type."><figcaption><p>Choose Cart page to lock the entire storefront cart page.</p></figcaption></figure>

{% hint style="warning" %}
Locking the cart page may require a paid plan depending on your current plan.
{% endhint %}

Cart page has no extra targeting options — selecting it locks the whole `/cart` page, so there's nothing else to configure on this tab besides the lock's name.

## Add an access rule

4. Switch to the **Unlock rules** tab and add at least one rule. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for the full catalogue.
5. Add every required condition to the access key. All conditions must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

{% hint style="info" %}
A Cart page lock doesn't have its own "Blocked visitor behavior" panel — there's no price or Add to cart to hide on the cart page itself. Use the rule's messages and, if needed, a redirect to control what a blocked visitor sees. See [Redirect after access](/b2b-lock-password-protect/lock-behavior/redirect-after-access).
{% endhint %}

## Save

6. Click **Save**. The lock takes effect on your storefront as soon as the app embed is enabled.

## Related docs

* [Locks overview](/b2b-lock-password-protect/locks/overview)
* [Cart conditions](/b2b-lock-password-protect/access-rules/cart-conditions)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Checkout

Block checkout for specific customers or products using a dedicated condition builder enforced by Shopify itself.

The **Checkout lock** content type blocks checkout itself, rather than a page or product. It's the right choice when you need to stop specific customers from completing a purchase — for example, guests without an account, customers missing a required tag, or customers whose email or phone matches a pattern you want to exclude.

{% hint style="info" %}
Checkout lock uses its own condition builder, separate from the access rules used by every other content type. Rules like Passcode, Secret link, or Date range don't apply here — checkout has its own set of customer conditions, described below.
{% endhint %}

## Create the lock

1. Open **Locks** in the app's navigation.
2. Click **Create lock**.
3. Give the lock a descriptive name, for example "Block checkout for guests."

## Choose Checkout as the content to lock

4. On the **Lock setup** tab, in the content picker, select **Checkout lock**.

<figure><img src="/files/r03DN4bZqhdkzT9feitW" alt="The content picker with Checkout lock selected as the content type to lock."><figcaption><p>Select Checkout lock in the content picker to build a checkout condition.</p></figcaption></figure>

## Choose the product scope

5. Still on the **Lock setup** tab, a card below the content picker shows which products the lock covers. It starts at **All products** — "Checkout lock applies to all products." Click **Change** to narrow it to specific products instead.

<figure><img src="/files/RtYZxTA5g2RnRDiL6ie2" alt="The product scope card for a Checkout lock, set to All products, with a Change action."><figcaption><p>Checkout lock starts covering all products; use Change to narrow the scope.</p></figcaption></figure>

6. Click the **Unlock rules** tab to continue.

## Build the condition

{% hint style="warning" %}
**Checkout conditions read the opposite way to other locks.** For every other content type, an access rule describes who gets *through*. Here, the panel is called **Lock conditions** and it describes when the lock *applies* — in other words, who gets **blocked**. A condition of "Customer is not logged in" means guests are blocked from checking out.
{% endhint %}

7. On the **Unlock rules** tab, the **Lock conditions** card replaces the standard rule builder. Add a customer condition — each has a type and a rule:

| Condition type | Rules available                          |
| -------------- | ---------------------------------------- |
| Customer login | Is logged in / Is not logged in          |
| Customer tag   | Has tag / Does not have tag              |
| Customer phone | Is equal to / Is not equal to            |
| Customer email | Is equal to / Is not equal to / Contains |

Each condition row has a pencil icon to edit it and a bin icon to remove it.

<figure><img src="/files/6emQz4PKsA7Z0FPskjwd" alt="The Lock conditions card for a Checkout lock, showing one condition with edit and delete icons and an Add another condition button."><figcaption><p>The Lock conditions card sets when the checkout lock applies.</p></figcaption></figure>

8. Click **Add another condition** to add more. Conditions are always combined with **AND** — as the card says, "All added conditions must be met for this lock to apply." Adding conditions makes the lock narrower because every condition must match.

## Set the error message

9. Below the conditions, edit the **Error message** a blocked customer sees at checkout. The default is `Sorry, this item can't be purchased`. Use the language selector on that card to set the message per storefront language.

<figure><img src="/files/1cy1XAaOV8DgbNg692bK" alt="The Error message field for a Checkout lock with its per-language selector."><figcaption><p>The Error message is what a blocked customer sees at checkout.</p></figcaption></figure>

The **Preview** panel on the right shows a real checkout with your error message in place, so you can see how it reads before saving.

## Save

10. Click **Save**.

{% hint style="success" %}
Checkout lock is enforced by Shopify itself at checkout — there's nothing extra to configure in your theme or the app embed. Once saved, the condition applies the moment a matching customer reaches checkout.
{% endhint %}

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)


# Access rules overview

What an access rule is, how If/Unless matching works, and where to find every rule type the app supports.

An access rule is the condition a visitor has to meet before they're allowed to see or use whatever you're locking — a product, a collection, a page, your whole storefront, or checkout. Every lock needs at least one access rule; without one, the app has no way to tell an approved visitor from anyone else.

You add access rules from a lock's **Unlock rules** tab. Each rule checks one specific thing about the visitor — are they logged in, do they have a certain tag, did they enter the right passcode — and the lock only opens once all configured conditions are satisfied.

<figure><img src="/files/72aKoGcqm5HKimIPj4Hh" alt="Access rule picker showing the full list of available condition types"><figcaption><p>Choosing an access rule from the condition type picker inside a lock's editor.</p></figcaption></figure>

## If and Unless

Most access rules can be set to match one of two ways:

* **If** — the rule is satisfied when the visitor *does* meet the condition (for example, If Logged-in customers: the visitor must be signed in).
* **Unless** — the rule is inverted, and is satisfied when the visitor does *not* meet the condition (for example, Unless Logged-in customers: the visitor must not be signed in).

You'll find this as the **Rule logic** switch beside each rule's condition type.

<figure><img src="/files/e0B1fBesEUJdGMVvDx7B" alt="The Rule logic switch next to a rule&#x27;s condition type, set to If with Unless as the alternative"><figcaption><p>Use the Rule logic switch to flip a rule between If and Unless.</p></figcaption></figure>

{% hint style="info" %}
Five rules work differently and don't have an If/Unless toggle at all: **Passcode**, **Secret link**, **Subscribe to unlock**, **Confirmation prompt**, and **Custom liquid**. These are action-based rules — instead of matching a yes/no fact about the visitor, they ask the visitor to do something (enter a code, subscribe, confirm a statement) or run a snippet of code, and that action's own result decides whether the rule passes.
{% endhint %}

## Combining more than one rule

A lock can use more than one access rule at once. How those conditions interact — including a worked example — is covered in its own page:

* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)

## Every access rule

The rules below are grouped by what they check. Click through to any rule's own page for the full setup steps.

**Identity & customer rules** — who the visitor is

* [Logged-in customers](/b2b-lock-password-protect/access-rules/logged-in-customers) — is the visitor signed in to a customer account
* [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags) — does the customer's account have a specific tag
* [B2B customer](/b2b-lock-password-protect/access-rules/b2b-customer) — is the customer part of a Shopify B2B company account
* [Email contains](/b2b-lock-password-protect/access-rules/email-contains) — does the logged-in customer's email contain a given string
* [Selected customers](/b2b-lock-password-protect/access-rules/selected-customers) — is the customer on a hand-picked list you choose

**Unlock actions** — something the visitor does to unlock

* [Passcode](/b2b-lock-password-protect/access-rules/passcode) — the visitor enters a shared code
* [Secret link](/b2b-lock-password-protect/access-rules/secret-link) — the visitor arrives via a link containing a valid token
* [Subscribe to unlock](/b2b-lock-password-protect/access-rules/subscribe) — the visitor subscribes with their email
* [Confirmation prompt](/b2b-lock-password-protect/access-rules/confirmation-prompt) — the visitor self-certifies by clicking Confirm
* [Custom liquid](/b2b-lock-password-protect/access-rules/custom-liquid) — your own Liquid snippet decides

**Time & schedule** — when the lock is active

* [Date range](/b2b-lock-password-protect/access-rules/date-range) — a fixed start and end date
* [Weekly schedule](/b2b-lock-password-protect/access-rules/weekly-schedule) — recurring days and time windows
* [Storefront language](/b2b-lock-password-protect/access-rules/storefront-language) — which storefront language the visitor is browsing in

**Location & device** — where the visitor is browsing from

* [Location](/b2b-lock-password-protect/access-rules/location) — the visitor's detected country
* [Certain IP addresses](/b2b-lock-password-protect/access-rules/certain-ip-addresses) — the visitor's exact public IP address
* [Shop domain](/b2b-lock-password-protect/access-rules/shop-domain) — the exact domain the visitor is currently browsing on

**Purchase history** — what the customer has already bought

* [Purchased items](/b2b-lock-password-protect/access-rules/purchased-items) — the customer previously bought specific products or variants
* [Order quantity](/b2b-lock-password-protect/access-rules/order-quantity) — the customer's total order count meets a minimum

**Cart** — what's currently in the visitor's cart

* [Cart conditions](/b2b-lock-password-protect/access-rules/cart-conditions) — cart products, cart variants, cart quantity, and cart total

{% hint style="info" %}
Some rules and content types are only available on paid plans. If a rule is greyed out in the picker, that's why — the picker will point you to the plan comparison.
{% endhint %}

## What a blocked visitor sees

When a rule denies someone on a page, collection, or blog, the app replaces the content with a lock card. **Access denied message** is the default text on that card, and most rules always use it:

<figure><img src="/files/EcZB8CcLH88GjRbvOjBG" alt="A locked storefront page showing the Content locked card with the message Visitors need an approved access key to access this content and a Back button."><figcaption><p>The Access denied message — the card most rules show.</p></figcaption></figure>

### For signed-out visitors

Five rules check who the customer *is*, so for those a signed-out visitor might only need to sign in. Those rules swap in a second message — **Guest message content** — which includes a sign-in link:

<figure><img src="/files/y08EaTv94paTmzzugwwF" alt="A locked storefront page showing the Content locked card asking the visitor to sign in with their customer account."><figcaption><p>The Guest message — shown only by the five customer-identity rules, and only to signed-out visitors.</p></figcaption></figure>

The guest message appears only when **all three** of these are true:

1. The failing rule is one of [Logged-in customers](/b2b-lock-password-protect/access-rules/logged-in-customers), [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags), [B2B customer](/b2b-lock-password-protect/access-rules/b2b-customer), [Email contains](/b2b-lock-password-protect/access-rules/email-contains), or [Selected customers](/b2b-lock-password-protect/access-rules/selected-customers).
2. That rule is set to **If**, not **Unless**.
3. The visitor is **not** signed in.

Otherwise the card shows the Access denied message. So a signed-in customer who fails a Customer tags rule gets Access denied, and so does *every* visitor — signed in or not — blocked by a rule like Date range, Location, or Cart conditions.

| Message field             | When it's used                                                |
| ------------------------- | ------------------------------------------------------------- |
| **Guest message content** | Only the five rules above, set to If, for signed-out visitors |
| **Access denied message** | Everything else                                               |

{% hint style="info" %}
Edit both fields per lock, and per storefront language, from the lock's **Messages** section. The default Access denied wording ("Visitors need an approved access key…") doesn't tell a shopper what to do next — replacing it with something actionable, like how to apply for a wholesale account, is usually worth the minute. See [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages).
{% endhint %}

The action-based rules (Passcode, Secret link, Subscribe to unlock, Confirmation prompt) replace this card with their own prompt, since the visitor can unlock the content themselves on the spot.

## Related docs

* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Locks overview](/b2b-lock-password-protect/locks/overview)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart)


# Combining rules

How multiple conditions inside one access key are evaluated together.

A single access rule is often all you need, but a lock can hold several conditions inside one **access key**. Understanding how those conditions combine helps you describe an audience that requires more than one requirement.

## How conditions combine

**Conditions inside an access key combine with AND.** A visitor must satisfy every condition in the key before it opens. Adding a condition therefore makes a lock *stricter*, never looser.

| You want                                   | How to build it                                                                                     |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------- |
| Must be logged in **AND** tagged wholesale | One access key, with a Logged-in customers condition and a Customer tags condition both added to it |
| Must hold two different tags               | One access key, with a separate Customer tags condition for each required tag                       |

{% hint style="info" %}
Inside the lock editor, the helper text reminds you: "Customers must match all conditions in this key to unlock the content." Treat every condition added to the key as required.
{% endhint %}

## Worked example: logged-in wholesale customers

Say you want a members-style lock where only signed-in wholesale customers can get in. That audience needs two conditions in the same access key.

1. Open the lock you want to protect and click the **Unlock rules** tab.
2. In the access key, set **Condition type** to **Customer tags** and enter your wholesale tag (for example `wholesale`). Leave **Rule logic** set to **If**. Condition 1 now reads: *If the customer is tagged with wholesale*.
3. Click **Add key condition** to add a second condition to the *same* key, and set its **Condition type** to **Logged-in customers**. Condition 2 reads: *If the customer is signed in*. It needs no further setup — the app notes "No extra setup needed. Customers only need to be signed in."

<figure><img src="/files/k0dhVt9N3PJOfmcZC0rm" alt="One access key containing two numbered conditions: Customer tags matching the wholesale tag, and Logged-in customers, with the note that a customer must meet all of the key&#x27;s conditions."><figcaption><p>Both conditions live inside the same access key, so a visitor has to satisfy both.</p></figcaption></figure>

4. Save the lock. The **Summary** panel confirms the shape of what you built: one access key holding two conditions.

<figure><img src="/files/fgMIFAWhauLeI4pThm0T" alt="The Summary panel showing chips for Specific products, 1 access keys, and 2 condition."><figcaption><p>The Summary panel counts the access keys and conditions on the lock.</p></figcaption></figure>

With this setup, the visitor must be signed in **and** have the `wholesale` customer tag. A visitor who satisfies only one of the conditions remains blocked.

{% hint style="warning" %}
Don't add unrelated rules to the same key. Every condition in that key is required, so adding a condition makes the access requirement more restrictive.
{% endhint %}

## Adding, editing, and removing access keys

* To add a rule to the key you're currently editing, use the add-rule control inside that key — this adds another AND condition to the same key.
* Add conditions to the access key when every requirement must be met together.
* Configure the key's **Redirect URL** and optional **Customer auto tags** when those post-access actions are needed.

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Passcode](/b2b-lock-password-protect/access-rules/passcode)
* [Secret link](/b2b-lock-password-protect/access-rules/secret-link)
* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)


# Logged-in customers

Restrict a lock to signed-in customers, or the reverse — require visitors to be signed out.

The Logged-in customers rule checks one simple fact about the visitor: are they currently signed in to a customer account on your store. It's the most common access rule in the app, and it's usually the first one merchants reach for when they want to hide pricing or content from guests.

## How it works

The rule looks at whether the storefront visitor has an active customer session. It doesn't check anything about *who* they are — no tags, no order history, nothing — just whether they're logged in at all. If you need to also check something about the account itself, add [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags), [B2B customer](/b2b-lock-password-protect/access-rules/b2b-customer), or another identity rule alongside it in the same access key.

## Adding the rule

1. Open the lock you want to protect and click the **Unlock rules** tab.
2. Add an access rule and choose **Logged-in customers** from the **Condition type** dropdown.

   <figure><img src="/files/oUcDEPwxrirTM9V9qlDQ" alt="Access rule picker with Logged-in customers selected as the condition type"><figcaption><p>Adding the Logged-in customers rule to an access key.</p></figcaption></figure>
3. Choose whether the rule should match **If** or **Unless**.
4. Save the lock.

## If vs Unless for this rule

This is one of the clearest rules to reason about with If/Unless:

* **If** the visitor is signed in — the content unlocks only for customers who are logged in. Guests are blocked. This is the default, and what you want for most "members only" or "wholesale accounts only" locks.
* **Unless** the visitor is signed in — inverted: the content unlocks only for visitors who are **not** logged in. Use this when you want a page or offer aimed specifically at guests (for example, a new-visitor promotion that should disappear once someone logs in).

## Common example: hide price for guests

A frequent way to use this rule is paired with [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart) rather than a full block:

1. On the **Lock setup** tab, set the content to lock to the product or collection you want to gate.
2. Click the **Unlock rules** tab to continue.
3. Add the Logged-in customers rule, matching **If**. There's nothing else to configure — the app confirms this with "No extra setup needed. Customers only need to be signed in."

<figure><img src="/files/7FDTmA65eqVZVDnMbLv5" alt="The Logged-in customers condition with Rule logic set to If and a note that no extra setup is needed."><figcaption><p>The Logged-in customers condition has no settings of its own beyond If or Unless.</p></figcaption></figure>

4. In the same tab's right-hand sidebar, under **Blocked visitor behavior**, turn on Hide price, Hide Add to cart, or both.
5. Save.

## Result on the storefront

With the example above, guests can still browse the product page, but the price and **Add to cart** button are replaced with a login message. Signed-in customers who satisfy the Lock's other conditions see the normal price and buy box.

<figure><img src="/files/tejfsJ9Xmw3AZUg5Gvif" alt="A live storefront product page seen by a signed-out visitor: the product image and title are visible, and a Login to see price link sits where the price would be, with no Add to cart or Buy it now button."><figcaption><p>The result of the example: guests can browse the product, but the price and buy buttons are replaced.</p></figcaption></figure>

## Related docs

* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart)
* [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags)
* [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart)


# Customer tags

Restrict a lock to customers whose account carries one or more specific tags.

The Customer tags rule checks whether the visitor's signed-in customer account has a specific tag applied to it. It's the rule behind most wholesale and VIP-tier locks, since Shopify tags are the easiest way to segment customer accounts without building anything custom.

## How it works

This rule only evaluates tags on the account of a customer who is currently logged in. If you add more than one tag to the rule, satisfying **any one** of the listed tags is enough — you don't need all of them at once. If you specifically need a customer to hold every one of several tags, add a separate Customer tags rule for each required tag inside the same access key (since rules in one key combine with AND).

## Adding the rule

1. Open the lock you want to protect and click the **Unlock rules** tab.
2. Add an access rule and choose **Customer tags** from the **Condition type** dropdown.

   <figure><img src="/files/TtRwxJDgDlglGvi6vtNx" alt="Access rule picker with Customer tags selected and a tag search field"><figcaption><p>Adding the Customer tags rule and searching for a tag to match.</p></figcaption></figure>
3. Search for and select one or more tags. Tags you type that don't already exist on any customer can typically still be entered — they'll simply never match until you apply that tag to an account.
4. Choose whether the rule should match **If** (the customer has one of the listed tags) or **Unless** (the customer does not have any of them).
5. Optionally set a per-rule **Redirect URL**, used only if this specific rule denies the visitor.
6. Save the lock.

## Common example: wholesale tag

A typical setup: tag your wholesale accounts with `wholesale` in Shopify, then:

1. On the **Lock setup** tab, set the content to lock to your wholesale-priced products or collection.

<figure><img src="/files/pycWoyQcMVwGaxl7KgCo" alt="The Lock setup tab with Specific products chosen as the content type and three products listed under Restricted products."><figcaption><p>Pick the wholesale-priced products this lock should cover.</p></figcaption></figure>

2. Click the **Unlock rules** tab to continue.
3. Add the Customer tags rule, enter `wholesale`, and leave it matching **If**.

<figure><img src="/files/TpOgnLD11PNCrMRQfRoH" alt="The Customer tags condition with Rule logic set to If and a wholesale tag chip below the Tags field."><figcaption><p>The condition heading confirms what you built: If the customer is tagged with wholesale.</p></figcaption></figure>

4. In the same tab's right-hand sidebar, under **Blocked visitor behavior**, turn on [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart) so untagged visitors see the page but not the price, instead of a full block.

<figure><img src="/files/sYP2psFAT0hpEGRDqvaJ" alt="The Blocked visitor behavior panel with Hide product price and atc selected in its dropdown."><figcaption><p>Choose Hide product price and atc so untagged visitors still see the product page.</p></figcaption></figure>

5. Save.

{% hint style="info" %}
The app's Quick Setup list on the Locks page includes a ready-made **Wholesale-only products** template that pre-fills exactly this pattern — a customer-tag rule against price and Add to cart — so you can start from it instead of building it from scratch.
{% endhint %}

## Result on the storefront

With the wholesale example above, customers whose account has the `wholesale` tag see the normal price and buy box. Guests and signed-in customers without that tag can still browse the product page, but the price and buy buttons are replaced with the configured lock message.

<figure><img src="/files/J9lnga6cpwdE71iRfbxw" alt="A live storefront product page seen by an untagged visitor: product image, title, and colour options are all visible, with a Login to see price link where the price would be and no Add to cart or Buy it now button."><figcaption><p>The result of the example: visitors without the wholesale tag can browse the product, but the price and buy buttons are replaced.</p></figcaption></figure>

The default replacement text may say **"Login to see price"**. Because a signed-in customer can still be missing the required tag, consider changing it to something more specific, such as **"Wholesale access required"**. See [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart).

## Related docs

* [B2B customer](/b2b-lock-password-protect/access-rules/b2b-customer)
* [Selected customers](/b2b-lock-password-protect/access-rules/selected-customers)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Add customer tags after access](/b2b-lock-password-protect/lock-behavior/customer-auto-tags)


# B2B customer

Restrict a lock to customers who belong to a Shopify B2B company account.

The B2B customer rule checks Shopify's own native company-account status for the visitor — it's a genuine platform check against Shopify's B2B customer flag, not something the app tracks on its own. If a customer is associated with a company account in your store's B2B setup, this rule recognizes them as a B2B customer automatically.

## How it works

The rule reads whether the currently logged-in customer is linked to a Shopify B2B company account. There's nothing to configure beyond adding the rule and choosing If/Unless — no tag to type, no list to maintain. That also means the rule is only as accurate as your store's own B2B setup in Shopify: if a wholesale buyer hasn't been added to a company account in Shopify admin, this rule won't recognize them as B2B, no matter how you configure it here.

## Adding the rule

1. Open the lock you want to protect and click the **Unlock rules** tab.
2. Add an access rule and choose **B2B customer** from the **Condition type** dropdown.

   <figure><img src="/files/Ghtffma2c8i2jJUd5LCI" alt="Access rule picker with B2B customer selected as the condition type"><figcaption><p>Adding the B2B customer rule — no extra setup needed beyond If/Unless.</p></figcaption></figure>
3. Choose whether the rule should match **If** (the customer belongs to a B2B company account) or **Unless** (the customer does not).
4. Optionally set a per-rule **Redirect URL**.
5. Save the lock.

## Common use: hide retail pricing from non-B2B visitors

A typical setup pairs this rule with [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart):

1. On the **Lock setup** tab, set the content to lock to the products or collection with B2B-only pricing.

<figure><img src="/files/ckh93vPn2YaLyPR6ShP1" alt="The Lock setup tab with Specific products chosen as the content type and two products listed under Restricted products."><figcaption><p>Pick the products whose pricing should stay B2B-only.</p></figcaption></figure>

2. Click the **Unlock rules** tab to continue.
3. Add the B2B customer rule, matching **If**. There's nothing more to fill in — the app notes "No extra setup needed. This condition uses Shopify B2B customer status."

<figure><img src="/files/4PX2CqrZhIwOMZPrJc6B" alt="The B2B customer condition with Rule logic set to If and a note that the condition uses Shopify B2B customer status."><figcaption><p>The condition heading confirms what you built: If the customer is a B2B customer.</p></figcaption></figure>

4. In the same tab's right-hand sidebar, under **Blocked visitor behavior**, leave **Hide products from storefront** off and pick a hide option from the dropdown instead — so non-B2B visitors see the page without the retail price or buy button, rather than a hard block.

<figure><img src="/files/hcTM39C0JSClMK01j9fd" alt="The Blocked visitor behavior panel with Hide products from storefront unchecked and Hide product price and atc selected in the dropdown."><figcaption><p>Hide product price and atc keeps the page visible while the pricing stays private.</p></figcaption></figure>

5. Save.

{% hint style="info" %}
If you're segmenting purely by a customer tag rather than genuine Shopify B2B company status, the [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags) rule and the built-in Quick Setup **Wholesale-only products** template on the Locks page are a faster shortcut. Reach for this B2B customer rule specifically when you want the check tied to real B2B company accounts in Shopify, not a tag you maintain yourself.
{% endhint %}

## Result on the storefront

With the example above, customers linked to a Shopify B2B company account see the normal price and buy box. Guests and signed-in retail customers can still browse the product page, but the price and buy buttons are replaced with the configured lock message.

<figure><img src="/files/lBbJuxJ5Mza45GC097H8" alt="A live storefront product page seen by a non-B2B visitor: product image, title, and vendor are visible, with a Login to see price link where the price would be and no Add to cart button."><figcaption><p>The result of the example: non-B2B visitors can browse the product, but the price and buy buttons are replaced.</p></figcaption></figure>

{% hint style="info" %}
The default replacement text may say **"Login to see price"**. Because a signed-in retail customer can still fail the B2B condition, consider changing it to something more specific, such as **"Company account required"**. See [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart).
{% endhint %}

## Related docs

* [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags)
* [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Custom liquid](/b2b-lock-password-protect/access-rules/custom-liquid)


# Email contains

Match logged-in customers whose email address contains a given string, such as a company domain.

The Email contains rule checks whether the logged-in customer's email address contains a specific piece of text. It's most useful for matching an entire company by their email domain, without needing to tag every individual account.

## How it works

The rule only looks at the email of a customer who is currently signed in — a guest without a session has no email for the rule to check. You give it one or more strings to look for; the rule matches if the customer's email contains **any** of them.

To match more than one string, separate them with the word **or** in the same field — for example, entering `@wholesaleco.com or @partnerco.com` matches any customer whose email contains either domain.

## Adding the rule

1. Open the lock you want to protect and click the **Unlock rules** tab.
2. Add an access rule and choose **Email contains** from the **Condition type** dropdown.

   <figure><img src="/files/hmers9p6Onvpx6uKf6W0" alt="Access rule picker with Email contains selected and a text field for the match string"><figcaption><p>Adding the Email contains rule and entering the text to match.</p></figcaption></figure>
3. Enter the text to match — for example a company email domain like `@wholesaleco.com`. Add more strings separated by "or" if you need to match several domains or addresses.
4. Choose whether the rule should match **If** (the email contains the string) or **Unless** (it doesn't).
5. Optionally set a per-rule **Redirect URL**.
6. Save the lock.

{% hint style="info" %}
Since this rule depends on the visitor being logged in, it's often paired with the [Logged-in customers](/b2b-lock-password-protect/access-rules/logged-in-customers) rule in the same access key — that way a guest gets a clear "please sign in" message instead of simply failing this rule with no explanation.
{% endhint %}

## Example: Allow employees with an approved company email

Suppose an internal resources page should only be available to signed-in customers whose email address contains `@acme.com`.

1. Select the **Company resources** page as the content to protect.

<figure><img src="/files/Q5N6j6Jhz5StOq26OgGx" alt="The Lock setup tab with Specific Page as the content type and the Company resources page listed under Restricted pages."><figcaption><p>Pick the internal page you want to gate.</p></figcaption></figure>

2. On the **Unlock rules** tab, the first condition already defaults to **Logged-in customers** — leave it. Click **Add key condition** to add a second condition in the *same* access key and set it to **Email contains**.
3. For **Email contains**, choose **If** and enter `@acme.com` in the **Email address** field.

<figure><img src="/files/bGLqIn0nIPJGXY5P2sNx" alt="The second condition set to Email contains with Rule logic If and @acme.com in the Email address field."><figcaption><p>The condition heading confirms it: If the customer email matches @acme.com.</p></figcaption></figure>

4. Leave the rules' **Redirect URL** fields empty.
5. Set the messages to:
   * **Guest message content:** `Sign in with your approved company email to continue.`
   * **Access denied message:** `Your email address is not approved for this resource.`

{% hint style="info" %}
Both fields appear because Email contains is one of the five customer-identity rules — see [Access rules overview](/b2b-lock-password-protect/access-rules/overview#what-a-blocked-visitor-sees). The guest message goes to signed-out visitors; the access-denied message goes to signed-in customers whose email doesn't match.
{% endhint %}

<figure><img src="/files/SHbE99ctNVG9ZyQcTNCF" alt="The Messages card showing both the Guest message content and Access denied message fields filled in with the example wording."><figcaption><p>This rule needs both messages, because either kind of visitor can be blocked.</p></figcaption></figure>

6. Click **Save**.

### Result on the storefront

* A signed-out visitor sees the Guest message and the sign-in option.
* A signed-in customer such as `alex@acme.com` passes both conditions and can open the page.
* A signed-in customer such as `alex@example.com` sees the Access denied message because their email does not contain `@acme.com`.

<figure><img src="/files/h03U7D2eFSjmTDXKL7td" alt="The Company resources page displaying the configured email-not-approved message."><figcaption><p>A signed-in customer using an email outside the approved domain sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Logged-in customers](/b2b-lock-password-protect/access-rules/logged-in-customers)
* [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags)
* [Selected customers](/b2b-lock-password-protect/access-rules/selected-customers)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)


# Selected customers

Hand-pick specific individual customers who can access a lock, without relying on tags or emails.

The Selected customers rule lets you choose exactly which customer accounts should pass — a hand-picked list rather than anything based on tags, email, or B2B status. It's the right tool when access comes down to a short, specific list of named people rather than a pattern you can describe with a rule.

## How it works

You search for and select individual customers directly from your store's customer list inside the rule. Only the customers you've explicitly added to the list are checked — there's no tag or email pattern involved, so keeping the list current is entirely manual.

## Adding the rule

1. Open the lock you want to protect and click the **Unlock rules** tab.
2. Add an access rule and choose **Selected customers** from the **Condition type** dropdown.

   <figure><img src="/files/ch17UzhYEvP8Cd7WaaNp" alt="Access rule picker with Selected customers selected and a customer search field"><figcaption><p>Searching for and selecting specific customers to add to the rule.</p></figcaption></figure>
3. Use **Search customers** to find customers by name or email, or click **Browse** to pick them from a list of your store's customers. Each one you add appears as a row you can remove later.
4. Choose whether the rule should match **If** (the customer is on the list) or **Unless** (they are not).
5. Optionally set a per-rule **Redirect URL**.
6. Save the lock.

## When to use this rule

Selected customers is a good fit for VIP or one-off access — for example, giving a handful of press contacts early access to a product page, or granting a single long-standing customer a permanent discount page, without tagging their account or generating a passcode just for them. For anything that grows past a short, manually maintained list, [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags) or [B2B customer](/b2b-lock-password-protect/access-rules/b2b-customer) will scale better.

## Example: Give two customers early access

Suppose a pre-release page should only be available to Alex and Jamie, two customer accounts selected from your Shopify customer list.

1. Select the **Pre-release preview** page as the content to protect.

<figure><img src="/files/KmDDmbEcqOLEhqN3V42I" alt="The Lock setup tab with Specific Page as the content type and the Pre-release preview page listed under Restricted pages."><figcaption><p>Pick the page the two customers should get early access to.</p></figcaption></figure>

2. On the **Unlock rules** tab, set **Condition type** to **Selected customers** and leave **Rule logic** on **If**.
3. Click **Browse**, tick **Alex Morgan** and **Jamie Chen** in the **Add customers** dialog, then click **Add**. Both accounts appear as rows under the search field.

{% hint style="info" %}
You can also type a name or email into **Search customers** instead of browsing. Either way, only the accounts listed here pass the rule — remove one with the **✕** on its row.
{% endhint %}

<figure><img src="/files/HrHBaZxJisqaB2rfSam2" alt="The condition set to Selected customers with Rule logic If and Alex Morgan and Jamie Chen listed as the two selected accounts."><figcaption><p>The two hand-picked accounts are the whole rule — there's no tag or pattern behind it.</p></figcaption></figure>

4. Leave the rule's **Redirect URL** empty.
5. Set the messages to:
   * **Guest message content:** `Sign in to check whether your account has early access.`
   * **Access denied message:** `Your account is not included in this early-access group.`

{% hint style="info" %}
Both fields appear because Selected customers is one of the five customer-identity rules — see [Access rules overview](/b2b-lock-password-protect/access-rules/overview#what-a-blocked-visitor-sees). The guest message goes to signed-out visitors; the access-denied message goes to signed-in customers who aren't on the list.
{% endhint %}

<figure><img src="/files/5MFQT3yeNd4BBwWYl2Js" alt="The Messages card showing both the Guest message content and Access denied message fields filled in with the example wording."><figcaption><p>This rule needs both messages, because either kind of visitor can be blocked.</p></figcaption></figure>

6. Click **Save**.

### Result on the storefront

Alex and Jamie can open the page after signing in with the selected accounts. A signed-out visitor sees the Guest message. A different signed-in customer sees the Access denied message because their account is not on the selected list.

<figure><img src="/files/d5AVTw30ocB8eSRhWLlF" alt="The Pre-release preview page displaying the configured account-not-included message."><figcaption><p>A signed-in customer outside the selected list sees the Access denied message from this example.</p></figcaption></figure>

{% hint style="warning" %}
The list stores individual customer accounts, so it doesn't follow email changes or new accounts. If Alex signs up again with a second email, that new account is a different customer and won't pass — you'd need to add it here too.
{% endhint %}

## Related docs

* [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags)
* [Email contains](/b2b-lock-password-protect/access-rules/email-contains)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Request access overview](/b2b-lock-password-protect/request-access/overview)


# Passcode

Protect content with one or more shared passcodes that shoppers type in to unlock it.

The Passcode rule protects content behind one or more access codes. Instead of checking a fact about the visitor, it presents a passcode field on the storefront — anyone who knows a valid code gets in. It's a straightforward way to gate content for a group of people who don't have (or don't need) customer accounts, like event attendees, press previews, or a private sale you're promoting by word of mouth.

## How Passcode works

Passcode is one of the app's action-based rules, so it doesn't have an If/Unless toggle — it works through its own verification step instead. When a visitor reaches locked content protected by this rule, they see a passcode field. If what they type matches any one of the passcodes you've configured, they pass; a wrong or empty entry shows an error and keeps the content locked.

You can keep more than one passcode active on the same rule at once — useful if you want to hand out a different code to different groups (say, one for a newsletter list and a different one for in-store customers) while still treating them as the same access key.

## Steps to manage

1. Open the app and go to **Locks**, then open the lock you want to protect (or create a new one).
2. On the **Lock setup** tab, set **Content to lock** to whatever you're protecting.
3. Click the **Unlock rules** tab to continue.
4. Add an access rule and set the condition type to **Passcode**.

   <figure><img src="/files/FPHjH2hecDOLLQwUmp1L" alt="Access rule picker with Passcode selected as the condition type"><figcaption><p>Choosing Passcode as the condition type for a new access rule.</p></figcaption></figure>
5. Type a passcode into the field and click **Add Passcode** — or leave the field empty and click the same button to have the app generate a random code for you automatically.

   <figure><img src="/files/VBnNMAfYg1Dh1L8DJCcS" alt="Passcode field with a code entered and the Add Passcode button"><figcaption><p>Adding a passcode manually, or leaving the field blank to auto-generate one.</p></figcaption></figure>
6. Repeat step 5 to add more passcodes if you want several active at once — each one added independently unlocks the same content.
7. Each passcode in the list has its own **Copy** and **Delete** buttons: copy a code to share it, or delete a code you no longer want to accept.

   <figure><img src="/files/k6Bfo5dL0xCjOdUnsqnl" alt="List of active passcodes with copy and delete controls next to each one"><figcaption><p>Managing the list of active passcodes — copy one to share it, or delete one to revoke it.</p></figcaption></figure>
8. Configure **Grant access (optional)** — leave it blank to remember a verified visitor only for their current browser session, or enter a number and choose a unit (minutes, hours, or days) to keep them remembered for a fixed duration instead.

   <figure><img src="/files/wVp0MENIwQiHWvFfio6L" alt="Grant access duration field with a number and unit selector for the Passcode rule"><figcaption><p>Setting how long a verified visitor stays unlocked before needing to re-enter a passcode.</p></figcaption></figure>
9. Customize the passcode message and any other translated copy for this lock, per storefront language, from the lock's Messages section.

   <figure><img src="/files/nfM5V8rinSyfLvtymRPL" alt="Passcode message field in the lock&#x27;s translation and messages settings"><figcaption><p>Editing the passcode prompt copy shown to shoppers.</p></figcaption></figure>
10. Customize the design of the passcode input and surrounding lock screen (colors, button style) from the lock's Design section if you want it to match your theme.

    <figure><img src="/files/X726Suy0aMxCXbUvZ1iP" alt="Design settings panel showing passcode input color options"><figcaption><p>Adjusting the passcode input's colors from the lock's Design settings.</p></figcaption></figure>
11. Click **Save**.

{% hint style="info" %}
Passcode is one of only two access rules that support **Request access** — a built-in form shoppers without a code can use to ask you for one. See [Request access overview](/b2b-lock-password-protect/request-access/overview) for how to turn it on and manage submissions.
{% endhint %}

## Customer experience on the storefront

A shopper who reaches passcode-protected content sees a "Content locked" message with a passcode field and a **Submit** button. If they submit an empty field, they see "Passcode cant be empty !!"; if they enter a code that doesn't match any active passcode, they see "Passcode is incorrect !!". Once they enter a correct code, the content unlocks immediately, and the app remembers them for the rest of their session (or for your configured grant-access duration) so they aren't asked again on that same browser.

All of this copy is editable per lock and per storefront language from the Messages section — see [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages).

<figure><img src="/files/D2C1ibs0gvjUQMTkNrIA" alt="A locked storefront page replaced by the app&#x27;s Content locked card with a passcode field and Submit button."><figcaption><p>A visitor without the code gets the passcode card instead of the page.</p></figcaption></figure>

## Related docs

* [Secret link](/b2b-lock-password-protect/access-rules/secret-link)
* [Request access overview](/b2b-lock-password-protect/request-access/overview)
* [Grant access duration](/b2b-lock-password-protect/lock-behavior/grant-access-duration)
* [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages)


# Secret link

Protect content so only visitors arriving via a URL with a valid access token can unlock it.

The Secret link rule protects content so it can only be unlocked by arriving through a specific URL — one that carries a valid `?access=` token at the end. There's no field for the shopper to fill in; the link itself is the key. It's a good fit for sending a private preview or an invite-only offer straight to someone's inbox, where you'd rather they just click through than type a code.

## How Secret link works

Secret link is one of the app's action-based rules, so it doesn't have an If/Unless toggle. Instead, the app checks the URL a visitor used to arrive at the locked page: if it ends in `?access=` followed by one of this rule's active tokens, the visitor is let straight in. Arriving at the same page without that token — or with an old, deleted one — shows the locked experience instead.

You can keep more than one secret link active at once, so you can hand out a different link to different recipients (or campaigns) while they all unlock the same content.

## Steps to manage

1. Open the app and go to **Locks**, then open the lock you want to protect (or create a new one).
2. On the **Lock setup** tab, set **Content to lock** to whatever you're protecting.
3. Click the **Unlock rules** tab to continue.
4. Add an access rule and set the condition type to **Secret link**.

   <figure><img src="/files/ygCXtqMQhlywK8H5mAKX" alt="Access rule picker with Secret link selected as the condition type"><figcaption><p>Choosing Secret link as the condition type for a new access rule.</p></figcaption></figure>
5. Type a code into the field and click **Generate link** — or leave the field empty and click the same button to have the app generate a random token for you automatically. The app shows the token with the `?access=` prefix already in place, and appends it to your lock's preview URL so you can see the full link to share.

   <figure><img src="/files/yvdIxFzX7GeOieSLP7lp" alt="Secret link field with a generated token and the Generate link button"><figcaption><p>Generating a secret link token, shown with the full URL it produces.</p></figcaption></figure>
6. Repeat step 5 to add more secret links if you want several active at once — each one independently unlocks the same content.
7. Each link in the list has its own **Copy** and **Delete** buttons: copy the full link to share it, or delete a link you want to revoke.

   <figure><img src="/files/1mAGo8Lg31V6kBpjsIUD" alt="List of active secret links with copy and delete controls next to each one"><figcaption><p>Managing the list of active secret links — copy one to share it, or delete one to revoke it.</p></figcaption></figure>
8. Configure **Grant access (optional)** — leave it blank to remember a verified visitor only for their current browser session, or enter a number and choose a unit (minutes, hours, or days) to keep them remembered for a fixed duration instead.

   <figure><img src="/files/rJnCxoEBwL3IVLRuYrDw" alt="Grant access duration field with a number and unit selector for the Secret link rule"><figcaption><p>Setting how long a verified visitor stays unlocked before needing the link again.</p></figcaption></figure>
9. Customize the secret-link message and any other translated copy for this lock, per storefront language, from the lock's Messages section.

   <figure><img src="/files/8vwiEE0bdWx1RX4FRUnk" alt="Secret link message field in the lock&#x27;s translation and messages settings"><figcaption><p>Editing the copy shown to shoppers who arrive without a valid secret link.</p></figcaption></figure>
10. Customize the design of the lock screen shown to visitors without a valid link (colors, button style) from the lock's Design section if you want it to match your theme.

    <figure><img src="/files/XHNBn1hzDK3a9xZKlrqF" alt="Design settings panel for the secret link lock screen"><figcaption><p>Adjusting the lock screen's colors from the lock's Design settings.</p></figcaption></figure>
11. Click **Save**.

{% hint style="info" %}
Secret link is the other of the two access rules that support **Request access** — a built-in form shoppers without a link can use to ask you for one. See [Request access overview](/b2b-lock-password-protect/request-access/overview) for how to turn it on and manage submissions.
{% endhint %}

## Customer experience on the storefront

A shopper who reaches secret-link-protected content without a valid token in the URL sees a "Content locked" message: "Use a valid secret link to access this content." A shopper who arrives with a valid token in the URL is let straight through — there's no form to fill in. Once verified, the app remembers them for the rest of their session (or for your configured grant-access duration), so revisiting the same page without the token in the URL still works while that memory lasts.

All of this copy is editable per lock and per storefront language from the Messages section — see [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages).

<figure><img src="/files/DShCwpFBvwoulDi7X1F2" alt="A locked storefront page showing the Content locked card with the message Use a valid secret link to access this content and a Back button."><figcaption><p>Without a valid token in the URL, the visitor gets this card instead of the page.</p></figcaption></figure>

## Related docs

* [Passcode](/b2b-lock-password-protect/access-rules/passcode)
* [Request access overview](/b2b-lock-password-protect/request-access/overview)
* [Grant access duration](/b2b-lock-password-protect/lock-behavior/grant-access-duration)
* [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages)


# Subscribe to unlock

Let shoppers unlock content by subscribing with their email, through Shopify, Mailchimp, or Klaviyo.

**Subscribe to unlock** asks a visitor to enter their email address, then grants access once they subscribe (or, for a Klaviyo segment, once the app confirms they're already on your list). It's an action-based rule — like Passcode and Confirmation prompt, it doesn't have an If/Unless toggle, because the shopper unlocks the content by completing the subscribe step rather than by matching a yes/no condition.

Sami B2B Lock, Password Protect supports three email services for this rule. You pick one per rule:

* **Shopify** — uses your store's native email marketing consent. No extra account or API key needed. This is the default option and has no additional cost.
* **Mailchimp** — connects to your Mailchimp account with an API key so you can subscribe visitors straight into one of your audience lists.
* **Klaviyo** — connects to your Klaviyo account with an API key so you can subscribe visitors into a list, or check membership against a segment.

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Subscribe to unlock**.

<figure><img src="/files/1SgrRW33D9ceXHNfVfcy" alt="The Unlock rules tab with Subscribe to unlock selected in the Condition type dropdown."><figcaption><p>Select Subscribe to unlock from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Choose an **Email service**: Shopify, Mailchimp, or Klaviyo.

### Shopify (default, no setup)

Shopify email marketing consent works out of the box — there's nothing to connect. Once selected, the app shows a note that it remembers a subscribed visitor for their current browser session and won't ask them to subscribe again until that session ends; to require re-subscription sooner or later than that, set a duration in the **Grant access (optional)** field below it.

<figure><img src="/files/Mo4A3yDl9AOFYTcRVXAF" alt="The Subscribe to unlock rule with Shopify selected as the email service."><figcaption><p>Shopify email marketing consent requires no extra setup.</p></figcaption></figure>

### Mailchimp

1. Enter your **Mailchimp API key** (an API key with audience access, generated from your Mailchimp account) and click **Check connection**.
2. Once connected, select which **audience list** the visitor should be subscribed to.
3. Set an optional **Grant access** duration, the same as with Shopify.

<figure><img src="/files/ZfZXvvxdrczOLHxqTyXc" alt="The Subscribe to unlock rule with Mailchimp connected and an audience list selected."><figcaption><p>Connect Mailchimp with an API key, then pick the audience list to subscribe visitors to.</p></figcaption></figure>

{% hint style="info" %}
Your Mailchimp API key is checked securely and is never exposed on the storefront. Once you save the lock, the key is stored encrypted.
{% endhint %}

### Klaviyo

1. Enter your **Klaviyo private API key** and click **Check connection**.
2. Once connected, choose an **audience type**: **List** or **Segment**.
3. Select the specific list or segment.
4. Set an optional **Grant access** duration if you're using a list (Klaviyo segments don't use this field — see below).

<figure><img src="/files/A7qRIgXvofK9hpVXZ7i7" alt="The Subscribe to unlock rule with Klaviyo connected, showing the audience type selector and list or segment picker."><figcaption><p>Connect Klaviyo, then choose whether to subscribe visitors to a list or check membership in a segment.</p></figcaption></figure>

{% hint style="warning" %}
**List and Segment behave very differently — don't mix them up.**

* Choosing a **list** actually subscribes the visitor: they type their email, the app adds them to that Klaviyo list, and access is granted. This is the same "subscribe and unlock" behavior as Shopify and Mailchimp.
* Choosing a **segment** does **not** add a new subscriber at all. It's a membership check only — the app looks at whether the visitor already belongs to that segment and grants access if they do. Because there's no email field to type into for a segment check, the visitor generally needs to be signed in to their customer account for the app to identify them and check their segment membership.

Use a list when your goal is to grow a specific Klaviyo list through this lock. Use a segment when you want to gate content to people who are already members of a group you've built in Klaviyo (for example, an existing "VIP" or "wholesale" segment) without collecting a new email address.
{% endhint %}

## Shopper-facing copy

By default, shoppers who hit a Subscribe to unlock rule see:

* Notification: **"Content locked"** / **"Subscribe with your email to access this content."**
* Email input placeholder: **"Enter email address..."**
* Button: **"Subscribe"**
* Errors: **"Please fill in field"**, **"Invalid email"**, **"Unable to subscribe. Please try again."**

All of this text is editable per lock and per storefront language. See [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages).

<figure><img src="/files/5RXIQ2aDqztNUjIEPv9l" alt="A locked storefront page showing the Content locked card with an email field and a Subscribe button."><figcaption><p>An unsubscribed visitor gets the subscribe card instead of the page.</p></figcaption></figure>

## Save

5. Click **Save**. The rule takes effect on your storefront as soon as the app embed is enabled.

{% hint style="info" %}
API keys for Mailchimp and Klaviyo are stored encrypted and are only ever used to check or add subscribers for this rule — see [Permissions and data](/b2b-lock-password-protect/reference/permissions-and-data).
{% endhint %}

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Confirmation prompt](/b2b-lock-password-protect/access-rules/confirmation-prompt)
* [Grant access duration](/b2b-lock-password-protect/lock-behavior/grant-access-duration)


# Confirmation prompt

Ask a shopper to self-certify with a confirm button before they can access protected content.

**Confirmation prompt** shows a shopper a short statement and a confirm button — for example, "I confirm I am 18 or older." Clicking the button grants access. It's a self-certification, not a real identity check: the app has no way to verify that what the shopper is confirming is actually true, so use it for things like age or terms acknowledgements where you're relying on the shopper's honesty, not for anything that needs to be independently verified.

Like Subscribe, Passcode, and Secret link, Confirmation prompt is action-based — it doesn't have an If/Unless toggle, since the shopper unlocks the content by clicking Confirm rather than by matching a condition.

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Confirmation prompt**.

<figure><img src="/files/ASndcNPUeJ5Iq6E9Kc1i" alt="The Unlock rules tab with Confirmation prompt selected in the Condition type dropdown."><figcaption><p>Select Confirmation prompt from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Edit the prompt's content and button text if you want something more specific than the defaults (see below).
5. Turn on **Remember confirmation for signed-in customers** if you want signed-in shoppers to only have to confirm once (see the warning below before you do).
6. Optionally set a **Grant access** duration.

<figure><img src="/files/MdUIk1W9JRDQVoCIC0ag" alt="The Confirmation prompt rule settings, showing the Remember confirmation for signed-in customers toggle and the Grant access duration field."><figcaption><p>Configure the remember toggle and how long a confirmation lasts before the shopper has to confirm again.</p></figcaption></figure>

7. Click **Save**.

## Shopper-facing copy

By default, shoppers see:

* Notification: **"Confirmation required"** / **"Please confirm that you meet the requirements to access this content."**
* Button: **"Confirm and continue."**

Both the statement and the button text are editable per lock and per storefront language — for example, changing it to "I confirm I am 18 or older" for an age-restricted product. See [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages).

<figure><img src="/files/f5QQw0TI0pAjBustrwAc" alt="A locked storefront page showing a Confirmation required card with a Confirm and continue button."><figcaption><p>The shopper must confirm before the content unlocks.</p></figcaption></figure>

## Remember confirmation for signed-in customers

{% hint style="warning" %}
**Remember confirmation for signed-in customers has no expiry.** The confirmation is stored in local storage in the same browser, associated with that customer's ID. It ignores **Grant access** duration and remains until browser storage is cleared or you turn off the toggle and save the lock. It does not transfer to another browser or device.
{% endhint %}

If you'd rather have shoppers re-confirm periodically (for an age gate you want re-checked every so often, for instance), leave this toggle off and rely on the **Grant access** duration field instead.

## Save

Once saved, the confirmation prompt appears whenever this rule is checked, and the app grants access as soon as the shopper clicks the confirm button.

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Grant access duration](/b2b-lock-password-protect/lock-behavior/grant-access-duration)
* [Subscribe to unlock](/b2b-lock-password-protect/access-rules/subscribe)


# Custom liquid

Write your own Liquid snippet to decide access, with customer, cart, product, and storefront variables.

The Custom liquid rule lets you write your own Liquid code snippet to decide whether a visitor gets access. It's the most flexible rule in the app — anything you can express as a Liquid condition against the customer, their cart, the current product or collection, or the storefront itself, you can use to gate content — but it's also the one rule where a mistake in the snippet has real consequences, covered below.

## How it works

Custom liquid is an action-based rule, so it doesn't have an If/Unless toggle. Instead, the app runs your snippet for each visitor and reads its final result. The result must be exactly `true` or `false` (surrounding whitespace is ignored): `true` passes the rule and `false` fails it. Other output, such as `true - customer is eligible`, is not a valid result. Your snippet has access to the same kind of data a Shopify theme would have about the current visitor and page.

## Adding the rule

Open the lock, click the **Unlock rules** tab, and choose **Custom liquid** from the **Condition type** dropdown.

<figure><img src="/files/QADMBlnBajtuDwNVSAQV" alt="The Condition type dropdown with Custom liquid selected"><figcaption><p>Select Custom liquid from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

## The code editor

The rule's condition type opens a dedicated Liquid code editor with syntax highlighting, autocomplete, and real-time syntax validation — errors in your Liquid are flagged directly in the editor as you type, before you even save.

<figure><img src="/files/o0KFIgSVlbprUrzHLpyD" alt="Custom liquid code editor with a snippet and a syntax validation indicator"><figcaption><p>Writing and validating a Liquid snippet in the code editor.</p></figcaption></figure>

### Available variables

The editor exposes a library of variables you can insert, grouped by what they describe:

| Group                | Variables                                                                                              |
| -------------------- | ------------------------------------------------------------------------------------------------------ |
| Customer             | `customer`, `customer.tags`, `customer.orders_count`, `customer.total_spent`, `customer.b2b?`          |
| Cart                 | `cart.item_count`, `cart.total_price`, `cart.items`                                                    |
| Product & collection | `product.tags`, `product.vendor`, `product.metafields`, `collection.handle`                            |
| Storefront           | `request.path`, `request.page_type`, `localization.country.iso_code`, `localization.language.iso_code` |

<figure><img src="/files/ZveQBffU43Ex14BJYVkq" alt="Variables and templates panel showing the available Liquid variables grouped by category"><figcaption><p>Browsing the available variables from the Variables and templates panel.</p></figcaption></figure>

### Starter templates

If you'd rather start from something working than an empty editor, the same panel includes ready-made templates you can drop in and adjust, including a logged-in customer check, a customer-tag check, a cart quantity or cart total minimum, a product-tag check, a visitor-country check, a URL-path check, and a ready-made **Shopify B2B customer** template that checks `customer.b2b?` directly.

<figure><img src="/files/IVKXPr4h8bO9rotc8MAQ" alt="Example templates panel with a list of ready-made Liquid snippets to use as a starting point"><figcaption><p>Choosing a starter template, including the ready-made Shopify B2B template.</p></figcaption></figure>

## Steps to manage

1. Open the lock you want to protect and click the **Unlock rules** tab.
2. Add an access rule and set the condition type to **Custom liquid**.
3. Write your snippet directly in the editor, or open **Variables and templates** to copy a variable or start from one of the ready-made templates.
4. Make sure your snippet's final output is exactly `true` for visitors who should pass and exactly `false` for everyone else. Do not add explanatory text, HTML, or other output around the value. The editor flags basic syntax problems, but you still need to confirm the logic matches what you intend.
5. Optionally set a per-rule **Redirect URL**, used only if this specific rule denies the visitor.
6. Save the lock.

## Fail-open behavior

{% hint style="warning" %}
If a Custom liquid snippet is missing, broken, or fails to render a clear `true`/`false` result, the app fails **open** — it grants access instead of blocking the visitor. This is deliberate, but it also means a broken snippet doesn't fail safe: a merchant who assumes "no result means still locked" would be wrong. Always confirm your snippet actually renders and test it before relying on it to protect anything sensitive.
{% endhint %}

## Example: Allow signed-in customers with a VIP tag

Suppose a private page should only be available to signed-in customers whose account has the `vip` tag.

1. Select the **VIP collection preview** page as the content to protect.

<figure><img src="/files/cslDND7OfDs1KeGi6smz" alt="The Lock setup tab with Specific Page as the content type and the VIP collection preview page listed under Restricted pages."><figcaption><p>Pick the page you want to keep for VIP customers.</p></figcaption></figure>

2. Add **Custom liquid** and replace the starter snippet with:

```liquid
{% if customer and customer.tags contains 'vip' %}true{% else %}false{% endif %}
```

The editor confirms **Liquid syntax is valid** underneath as you type.

<figure><img src="/files/7E5CbFhwPirKBkzslna4" alt="The Custom liquid condition with the VIP tag snippet in the Liquid condition editor and the Liquid syntax is valid confirmation below it."><figcaption><p>The editor highlights the Liquid and validates the syntax before you save.</p></figcaption></figure>

3. Leave the rule's **Redirect URL** empty.
4. Set the **Access denied message** to:

> This page is available to VIP customers only.

<figure><img src="/files/KE5dUzHpYZ9JeQ4JaGeH" alt="The Messages card with the Access denied message set to the VIP-customers-only wording, and the Preview panel rendering it."><figcaption><p>Custom liquid has a single message field, shown to everyone the snippet rejects.</p></figcaption></figure>

5. Click **Save**.

### Result on the storefront

The snippet outputs exactly `true` for a signed-in customer with the `vip` tag, so the page opens normally. It outputs exactly `false` for guests and customers without that tag, so they see the message above. Do not add text before or after `true` or `false` in the snippet output.

<figure><img src="/files/3AWZ3kSMevjcBuOQMEFG" alt="The VIP collection preview page displaying the configured VIP-customers-only message."><figcaption><p>When the Liquid snippet returns false, the visitor sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [B2B customer](/b2b-lock-password-protect/access-rules/b2b-customer)
* [Lock not working](/b2b-lock-password-protect/help/lock-not-working)
* [How it works](/b2b-lock-password-protect/reference/how-it-works)


# Date range

Only make a lock active between a fixed start and end date — useful for time-limited promotions and events.

**Date range** matches visitors while the current date falls between a fixed start date and end date you set. Outside that window, the rule doesn't match. It's a good fit for anything tied to a calendar date rather than a recurring pattern — an early-access window ahead of a launch, a holiday promotion, or a members-only sale that should stop working automatically once it ends.

Like most access rules (aside from the action-based ones such as Passcode, Secret link, Subscribe, and Confirmation prompt), Date range can be set to match **If** the current date is inside the range, or **Unless** it is — inverting it to match everything outside the range instead. Each rule can also have its own **Redirect URL** that only applies when this specific rule fails. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules) and [Redirect after access](/b2b-lock-password-protect/lock-behavior/redirect-after-access).

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Date range**.

<figure><img src="/files/eg7J6gceyA03auv0PjCs" alt="The Unlock rules tab with Date range selected in the Condition type dropdown."><figcaption><p>Select Date range from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Set a **start date** and an **end date** for when this rule should match.

<figure><img src="/files/ViSIEmquc1XNMEyX9OQk" alt="The Date range rule settings, showing a start date and end date picker."><figcaption><p>Set the start and end date the lock's date range condition is active between.</p></figcaption></figure>

5. Choose **If** or **Unless** depending on whether you want the lock active during the range or outside it.
6. Click **Save**.

{% hint style="info" %}
Combine Date range with another rule in the same access key if you want the time window to only apply to certain visitors — for example, "Date range AND Customer tags" to run an early-access promo only for tagged VIP customers during the promo window.
{% endhint %}

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Weekly schedule](/b2b-lock-password-protect/access-rules/weekly-schedule)
* [Location](/b2b-lock-password-protect/access-rules/location)


# Weekly schedule

Lock content on a recurring, per-day schedule with specific time windows — for example, every weekday 9am-5pm.

**Weekly schedule** matches visitors based on a recurring weekly pattern rather than a fixed calendar date: you turn specific days of the week on or off, and for each day you turn on, you can either make it active all day or set specific time windows (for example, 9am-5pm). It's a good fit for anything that repeats every week — locking checkout during a weekly flash-sale window, or restricting a live-drop page to only be reachable during your restock hours.

Like most access rules (aside from the action-based ones such as Passcode, Secret link, Subscribe, and Confirmation prompt), Weekly schedule can be set to match **If** the visitor arrives inside the scheduled window, or **Unless** they do — inverting it to match everything outside the schedule instead. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Weekly schedule**.

<figure><img src="/files/Ql7JSIqH5isdNT1SHOyZ" alt="The Unlock rules tab with Weekly schedule selected in the Condition type dropdown."><figcaption><p>Select Weekly schedule from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Turn each day on or off. For every day you turn on, choose whether it's active **all day** or set specific **start and end times** — you can add more than one time window on the same day if you need separate windows (for example, a morning slot and an evening slot).

<figure><img src="/files/VIkWu1c5fx7GCvbiMfLb" alt="The Weekly schedule rule settings, showing per-day toggles and start/end time fields."><figcaption><p>Turn on the days this rule should be active and set a time window for each one.</p></figcaption></figure>

5. Choose **If** or **Unless** depending on whether you want the lock active during the scheduled windows or outside them.
6. Click **Save**.

{% hint style="info" %}
Times you set here are evaluated in your **shop's own timezone**, not the visitor's local time — a 9am-5pm window means 9am-5pm in your store's timezone, regardless of where the visitor is browsing from.
{% endhint %}

{% hint style="warning" %}
**Edge case:** if your shop's timezone information is ever unavailable at the moment the rule is checked, the schedule falls back to evaluating times using the **visitor's own device time** instead. This is rare, but it means a visitor in a very different timezone from your shop could, in that fallback scenario, see the schedule apply at different local hours than you'd expect. Keep this in mind if you notice the schedule behaving inconsistently for visitors in different regions.
{% endhint %}

## Example: Open a wholesale support page during business hours

Suppose the page should be available from Monday to Friday, between 9:00 AM and 5:00 PM in your shop's timezone.

1. Select the **Wholesale support** page as the content to protect.

<figure><img src="/files/ksKqIbiM0vecJ9YQgwXz" alt="The Lock setup tab with Specific Page as the content type and the Wholesale support page listed under Restricted pages."><figcaption><p>Pick the page that should follow business hours.</p></figcaption></figure>

2. Add **Weekly schedule** and choose **If**. The rule shows your store's timezone and its current time — for example *America/New\_York (Friday, 06:09 AM GMT-4)* — so you can tell what "9:00" will mean.
3. Under **Select days**, turn on Monday through Friday and leave Saturday and Sunday off. Unselected days stay locked all day.

<figure><img src="/files/nEkoYLnpy4SZiaTVwP8u" alt="The Select days row with Monday through Friday highlighted as selected and Saturday and Sunday left unselected."><figcaption><p>Selected days are the only days access can open at all.</p></figcaption></figure>

4. Under **Set access hours**, each selected day offers **Set time periods** or **Allow all day**. Choose **Set time periods** and set **09:00** to **17:00** for every day.

{% hint style="info" %}
The first day you enable defaults to **Allow all day**, not to a time range — switch it to **Set time periods** or that day will stay open around the clock. New time periods default to 09:00–17:00.
{% endhint %}

<figure><img src="/files/PAMblhATw5vmLG9tGg0V" alt="The Set access hours section showing Monday with Set time periods selected and Start time 09:00, End time 17:00."><figcaption><p>Each day carries its own start and end time, and you can add more than one period per day.</p></figcaption></figure>

5. Leave the rule's **Redirect URL** empty.
6. Set the **Access denied message** to:

> Wholesale support is available Monday to Friday, 9:00 AM–5:00 PM.

{% hint style="info" %}
Weekly schedule shows only the **Access denied message** — there's no Guest message field, because the rule doesn't look at who the visitor is. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview#what-a-blocked-visitor-sees).
{% endhint %}

<figure><img src="/files/ODCbEkmxwoqqPKAPRVyD" alt="The Messages card with a single Access denied message field set to the business-hours wording, and the Preview panel rendering it."><figcaption><p>One message field only, and the Preview panel confirms the wording before you save.</p></figcaption></figure>

7. Click **Save**.

### Result on the storefront

During the configured hours, visitors can open the Wholesale support page normally. Outside those hours, the page stays locked and displays the message above. Because the schedule uses the shop's timezone, every visitor is evaluated against the same business hours.

<figure><img src="/files/7knibzAkVgt12FYoFgkh" alt="The locked Wholesale support page displaying the configured business-hours message."><figcaption><p>Outside the configured schedule, the visitor sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Date range](/b2b-lock-password-protect/access-rules/date-range)
* [Location](/b2b-lock-password-protect/access-rules/location)


# Storefront language

Match visitors based on the storefront language they're currently browsing in.

**Storefront language** matches a visitor based on which published storefront language they're currently browsing your store in. It's only useful if your store has more than one published language — on a single-language store, every visitor matches the same language, so the rule wouldn't distinguish anyone.

Common uses: showing a market-specific promotion only to visitors browsing in a particular language, or restricting content that's only ready in certain languages so visitors browsing in an unsupported language don't see a half-translated experience.

Like most access rules (aside from the action-based ones such as Passcode, Secret link, Subscribe, and Confirmation prompt), Storefront language can be set to match **If** the visitor is browsing in the selected language(s), or **Unless** they are — inverting it to match every other language instead. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Storefront language**.

<figure><img src="/files/DhszjsCSLBehHTpUG3B4" alt="The Unlock rules tab with Storefront language selected in the Condition type dropdown."><figcaption><p>Select Storefront language from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Select one or more of your store's published languages to match against.

<figure><img src="/files/Z7qRwaSKdVX2sdKCwu0F" alt="The Storefront language rule settings, showing a multi-select list of the store&#x27;s published languages."><figcaption><p>Choose which published storefront language(s) this rule should match.</p></figcaption></figure>

5. Choose **If** or **Unless**.
6. Click **Save**.

{% hint style="info" %}
This rule matches the language the storefront is currently displayed in — the language the visitor selected (or was routed to) via your store's language selector — not the visitor's browser or device language setting.
{% endhint %}

## Example: Show a campaign page only on the French storefront

Suppose a campaign page has only been prepared in French and should not be available in the store's other published languages.

1. Select the **French campaign** page as the content to protect.

<figure><img src="/files/UW85sbnWhHIWBADu5Ghb" alt="The Lock setup tab with Specific Page as the content type and the French campaign page listed under Restricted pages."><figcaption><p>Pick the campaign page that only exists in French.</p></figcaption></figure>

2. Add **Storefront language**, choose **If**, then pick **French** from **Available languages**.

{% hint style="info" %}
The picker only lists languages your store has **published** under Settings → Languages. If French isn't there, publish it first — a language that's only added but not published won't appear.
{% endhint %}

<figure><img src="/files/sC33ShCC7zk7SMMTOstw" alt="The Storefront language condition with Rule logic set to If and French added as a chip under Available languages."><figcaption><p>The condition heading reads: If the storefront language matches any of the selected languages.</p></figcaption></figure>

3. Leave the rule's **Redirect URL** empty.
4. Set the **Access denied message** to:

> This campaign is only available on the French storefront.

<figure><img src="/files/NOc8HapImx9MM2gqSMWH" alt="The Messages card with the Access denied message set to the French-storefront-only wording, and the Preview panel rendering it."><figcaption><p>The Preview panel confirms the wording before you save.</p></figcaption></figure>

5. Click **Save**.

### Result on the storefront

A visitor browsing the French version of the storefront can open the page normally. If the visitor switches the storefront to English or another language, the rule no longer matches and the page displays the message above.

<figure><img src="/files/nYaQzBFOir5cPzEVruby" alt="The French campaign page displaying the configured French-storefront-only message."><figcaption><p>In another storefront language, the visitor sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages)
* [Location](/b2b-lock-password-protect/access-rules/location)


# Location

Match visitors based on their detected country, using a public IP-geolocation lookup.

**Location** matches a visitor based on their detected country. It's useful for restricting content by geography — for example, only showing a promotion to visitors in a specific country, or blocking a product page in a country you don't ship to.

{% hint style="warning" %}
**How country is detected — and its limits.** The app detects a visitor's country using a public IP-geolocation lookup on their current IP address — it does **not** look at the customer's saved shipping or billing address, and it doesn't require the visitor to be signed in. This means the detected country reflects where the visitor's internet connection currently appears to be, which is usually accurate but isn't guaranteed: a visitor using a **VPN or proxy** can appear to be browsing from a different country than they're physically in, which will change what this rule sees. Keep that in mind if you notice the rule behaving unexpectedly for a specific visitor.
{% endhint %}

Like most access rules (aside from the action-based ones such as Passcode, Secret link, Subscribe, and Confirmation prompt), Location can be set to match **If** the visitor's detected country is one of your selected countries, or **Unless** it is — inverting it to match every other country instead. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Location**.

<figure><img src="/files/aRjHhOhTXcto0tFhiHXW" alt="The Unlock rules tab with Location selected in the Condition type dropdown."><figcaption><p>Select Location from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Search for and select one or more countries to match against.

<figure><img src="/files/0ybbmbF5HEwh8Md0ssnd" alt="The Location rule settings, showing a country picker with multiple countries selected."><figcaption><p>Select the countries this rule should match against the visitor's detected country.</p></figcaption></figure>

5. Choose **If** or **Unless**.
6. Click **Save**.

## Shopper-facing copy

When a Location rule denies a visitor and the lock shows a message rather than redirecting, the default text is:

* **"This content is not available in your country."**

This is editable per lock and per storefront language. See [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages).

## Example: Make a product available only in the United States and Canada

Suppose a product can only be offered to visitors whose detected country is the United States or Canada.

1. Select the product you want to protect.

<figure><img src="/files/iFRYkexf9j9ri98Ac0c9" alt="The Lock setup tab with Specific products as the content type and one product listed under Restricted products."><figcaption><p>Pick the product with the country restriction.</p></figcaption></figure>

2. Add **Location**, choose **If**, then pick **United States** and **Canada** from the **Countries** field. Each choice becomes a removable chip.

<figure><img src="/files/lHJdFqR4emCV2SiPBIlc" alt="The Location condition with Rule logic set to If and United States and Canada added as chips under the Countries field."><figcaption><p>The condition heading reads: If the visitor is from selected locations.</p></figcaption></figure>

3. Leave the rule's **Redirect URL** empty.
4. Set the **Location denied message** to:

> This product is only available to visitors in the United States and Canada.

{% hint style="info" %}
This rule labels its message field **Location denied message** rather than Access denied message. The Preview panel shows this field's raw HTML instead of rendering it — that's a preview quirk only; the storefront renders the markup normally.
{% endhint %}

<figure><img src="/files/JzNyNRMia3yB7p4Fqg2F" alt="The Messages card showing the Location denied message field set to the United States and Canada availability wording."><figcaption><p>For Location, the field is named Location denied message.</p></figcaption></figure>

5. Click **Save**.

### Result on the storefront

A visitor detected in either selected country can view the product normally. A visitor detected anywhere else sees the locked content and the message above. The result is based on IP geolocation, not the customer's shipping address.

<figure><img src="/files/6P0YJDH5ykXT06JqBRkZ" alt="A location-restricted product page replaced entirely by the Content locked card carrying the United States and Canada availability message."><figcaption><p>A visitor detected outside the selected countries sees the Location denied message from this example.</p></figcaption></figure>

{% hint style="info" %}
Because the lock covers a product, the app replaces the whole product page — the theme's header and footer included — rather than swapping the content inside your theme's layout. Page, collection, and blog locks keep the surrounding theme in place.
{% endhint %}

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Certain IP addresses](/b2b-lock-password-protect/access-rules/certain-ip-addresses)
* [Storefront language](/b2b-lock-password-protect/access-rules/storefront-language)


# Certain IP addresses

Match visitors whose public IP address exactly matches an address on a merchant-entered list.

**Certain IP addresses** matches a visitor based on their exact public IP address against a list you enter. It's a good fit for gating content to a known, fixed set of locations — for example, letting only your office or warehouse network see an internal catalog or a testing page.

{% hint style="warning" %}
**This rule matches exact public IP addresses only**; IP ranges, CIDR blocks (such as `192.168.1.0/24`), and wildcards are not supported. Enter each address separately, and update the list if your network uses a changing IP address.
{% endhint %}

Like most access rules (aside from the action-based ones such as Passcode, Secret link, Subscribe, and Confirmation prompt), Certain IP addresses can be set to match **If** the visitor's IP is on your list, or **Unless** it is — inverting it to match every other IP instead. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Certain IP addresses**.

<figure><img src="/files/jp9RqjGEVtk1wCUvEq34" alt="The Unlock rules tab with Certain IP addresses selected in the Condition type dropdown."><figcaption><p>Select Certain IP addresses from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Enter the exact public IP address(es) you want to match. You can add more than one.

<figure><img src="/files/47HRMoFCKGiJtimZHeSZ" alt="The Certain IP addresses rule settings, showing a list input for entering exact IP addresses."><figcaption><p>Add each exact public IP address this rule should match — no ranges or wildcards.</p></figcaption></figure>

5. Choose **If** or **Unless**.
6. Click **Save**.

{% hint style="info" %}
To find the public IP address to enter for a location like your office or warehouse, search "what is my IP" from a browser on that network, or check with whoever manages that network's internet connection.
{% endhint %}

## Example: Limit an internal price list to the office network

Suppose the office's fixed public IP address is `203.0.113.10`, and only visitors using that network should see an internal price list.

1. Select the **Internal price list** page as the content to protect.

<figure><img src="/files/tn44Ablzn26GWZN7jIaQ" alt="The Lock setup tab with Specific Page as the content type and the Internal price list page listed under Restricted pages."><figcaption><p>Pick the page you want to keep on the office network.</p></figcaption></figure>

2. Add **Certain IP addresses**, choose **If**, and enter `203.0.113.10`. Click **Add IP address** to turn it into a chip — the value isn't saved until you do.

<figure><img src="/files/CfgeXvJQjzmmiR6bluYT" alt="The Certain IP addresses condition with Rule logic set to If and 203.0.113.10 added as a chip below the IP addresses field."><figcaption><p>The condition heading confirms the value: If the visitor IP address matches 203.0.113.10.</p></figcaption></figure>

3. Leave the rule's **Redirect URL** empty.
4. Set the **Access denied message** to:

> This page is only available when you’re connected to an approved network.

<figure><img src="/files/jz4SSMUCyuVQrRYbMAwf" alt="The Messages card showing the Access denied message set to the approved-network wording, with the Preview panel rendering it."><figcaption><p>This rule has only one message field. The Preview panel shows the wording as shoppers will read it.</p></figcaption></figure>

5. Click **Save**.

### Result on the storefront

A visitor whose public IP is exactly `203.0.113.10` can open the page. Any other IP address fails the rule and sees the message above. If the office's public IP changes, update the value in the rule before access can work again.

<figure><img src="/files/J06qmrmu8hHU8I3Y06KF" alt="The Internal price list page displaying the configured approved-network message."><figcaption><p>A visitor outside the allowed IP address sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Location](/b2b-lock-password-protect/access-rules/location)
* [Shop domain](/b2b-lock-password-protect/access-rules/shop-domain)


# Shop domain

Match visitors based on the exact domain they're currently browsing your store on.

**Shop domain** matches the exact hostname a visitor is using to browse your store. This is useful when your store is available through both a connected custom domain, such as `www.your-store.com`, and its original Shopify domain, such as `your-store.myshopify.com`.

Use this rule to make protected content available only on your public custom domain, or to keep a testing flow available only through the `myshopify.com` domain.

Enter one or more domains without a protocol or path, for example `www.your-store.com` or `your-store.myshopify.com`.

* **If**: the visitor matches when their current domain is one of the domains you entered.
* **Unless**: the visitor matches when their current domain is not one of the domains you entered.

When this rule is combined with other Lock conditions, every condition must be satisfied. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Shop domain**.

<figure><img src="/files/Aa2xcandE13fpyNnyDvl" alt="The Unlock rules tab with Shop domain selected in the Condition type dropdown."><figcaption><p>Select Shop domain from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Enter the exact domain(s) you want to match — for example, your custom domain or your `*.myshopify.com` domain. You can add more than one.

<figure><img src="/files/WNKeXHE1JRrlR1zBQoCx" alt="The Shop domain rule settings, showing a list input for entering exact domains."><figcaption><p>Add each exact domain this rule should match against the visitor's current browsing domain.</p></figcaption></figure>

5. Choose **If** or **Unless**.
6. Click **Save**.

## Example: Keep a preview page on the Shopify domain

Suppose your public store uses `www.your-store.com`, but a preview page should only be available through `your-store.myshopify.com`.

1. Select the **Staging preview** page as the content to protect.

<figure><img src="/files/iSZ4VHObtMOP2iX1eHro" alt="The Lock setup tab with Specific Page as the content type and the Staging preview page listed under Restricted pages."><figcaption><p>Pick the page that should stay on the Shopify domain.</p></figcaption></figure>

2. Add **Shop domain**, choose **If**, and type `your-store.myshopify.com` into **Shop domains**. The field already supplies the `https://` prefix, so enter the host only — then click **Add domain** to commit it to the list.

<figure><img src="/files/UYomgLGDjcdoffYvIO8B" alt="The Shop domain condition with Rule logic set to If, the host typed into the Shop domains field, and the full https:// URL added to the list below."><figcaption><p>The condition heading reads: If the visitor shop domain matches your-store.myshopify.com.</p></figcaption></figure>

3. Leave the rule's **Redirect URL** empty.
4. Set the **Access denied message** to:

> This preview page is only available on the store's Shopify domain.

<figure><img src="/files/hARvDTwt8ClkagD3V9p1" alt="The Messages card with the Access denied message set to the Shopify-domain-only wording, and the Preview panel rendering it."><figcaption><p>The Preview panel confirms the wording before you save.</p></figcaption></figure>

5. Click **Save**.

### Result on the storefront

The page opens normally at `your-store.myshopify.com`. When the same page is opened at `www.your-store.com`, the domain does not match, so the page remains locked and displays the message above.

<figure><img src="/files/Lov7RiUOx7Qrdqxwa32s" alt="The Staging preview page displaying the configured Shopify-domain-only message."><figcaption><p>On the public custom domain, the visitor sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Certain IP addresses](/b2b-lock-password-protect/access-rules/certain-ip-addresses)
* [Location](/b2b-lock-password-protect/access-rules/location)


# Purchased items

Match customers who have already purchased specific products or variants, with quantity, lookback, and order-status options.

**Purchased items** matches a customer based on whether they've already bought specific products or variants. It's a good fit for gating exclusive restocks or upsells to people who've already bought the related item — for example, unlocking an accessory only for customers who bought the matching main product, or opening an early restock only to customers who already own the sold-out original.

Like most access rules (aside from the action-based ones such as Passcode, Secret link, Subscribe, and Confirmation prompt), Purchased items can be set to match **If** the customer meets the purchase condition, or **Unless** they don't — inverting it to match customers who haven't bought the item instead. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

{% hint style="info" %}
This rule reads purchase history from a signed-in Shopify customer account. With **If**, a guest cannot meet the purchase condition; with **Unless**, a guest has no matching purchase history and therefore satisfies the inverted condition.
{% endhint %}

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Purchased items**.

<figure><img src="/files/QZNNhSobBpMk7P6Fvdnl" alt="The Unlock rules tab with Purchased items selected in the Condition type dropdown."><figcaption><p>Select Purchased items from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Choose whether to match **Products** (any variant of the selected products counts) or **Variants** (only the specific variants you select count), then pick the items.

<figure><img src="/files/LWrdfbmtyy7ZA0PYSTHu" alt="The Purchased items rule showing the Products/Variants type picker and a product selection list."><figcaption><p>Choose whether to match whole products or specific variants, then select the items.</p></figcaption></figure>

5. Optionally cap the matching purchase quantity, set a lookback window of up to 60 days, and choose which order statuses to ignore.

<figure><img src="/files/3I6J2rxcyyK17fciyDgc" alt="The Purchased items rule settings, showing the maximum purchased quantity field, lookback window in days, and ignore-order-status checkboxes."><figcaption><p>Optionally cap the purchased quantity, set a lookback window of up to 60 days, and choose which order statuses to ignore.</p></figcaption></figure>

6. Choose **If** or **Unless**.
7. Click **Save**.

### The options

* **Maximum purchased quantity** (optional) — the rule always requires the customer to have bought at least one unit of the matching product or variant. Set this field to also cap it: the rule only matches while their total qualifying quantity is at or below the number you enter (useful for something like "unlock this add-on, but only for customers who bought 1-2 of the original — not bulk buyers"). Leave it blank to match on any purchase at all, with no upper limit.
* **Lookback window in days** (optional) — only count orders placed within the last N days. The maximum value is **60**; the field does not accept a number greater than 60. Leave it blank to use the full 60-day order-history window available to this rule. Use a smaller value, such as 30, when only more recent purchases should qualify.
* **Ignore cancelled orders** — on by default. Cancelled orders don't count toward a match.
* **Ignore unfulfilled or partially fulfilled orders** — off by default. Turn this on if you only want fully fulfilled orders to count.
* **Ignore orders that are not fully paid** — on by default. Unpaid or partially paid orders don't count toward a match.

{% hint style="warning" %}
This rule evaluates up to the customer's **50 most recent orders placed within the last 60 days**. Orders older than 60 days are not checked. If the customer placed more than 50 orders during that period, only the newest 50 are evaluated.
{% endhint %}

## Example: Unlock an accessory for previous buyers

Suppose only customers who purchased **The Complete Snowboard** within the last 60 days should be able to open a private accessories page.

1. Select the **Snowboard accessories** page as the content to protect.

<figure><img src="/files/jT2nGLnyyISzzYXcPxSg" alt="The Lock setup tab with Specific Page as the content type and the Snowboard accessories page listed under Restricted pages."><figcaption><p>Pick the page that only previous buyers should reach.</p></figcaption></figure>

2. On the **Unlock rules** tab, set **Condition type** to **Purchased items** and leave **Rule logic** on **If**.
3. Under **Select items the customer must have purchased**, keep **Products** selected (it matches any variant), then click **Specific products** and add **The Complete Snowboard**.

<figure><img src="/files/MzHKicg2DQI8HNXSXSgS" alt="The Purchased items condition with Rule logic If, Products selected as the match type, and The Complete Snowboard in the product list."><figcaption><p>Products matches any variant; the condition heading confirms it reads "If the customer purchased selected items".</p></figcaption></figure>

4. Leave **Maximum purchased quantity** empty so any qualifying purchase quantity can pass, and set **Only look at orders from the last** to **60** days.
5. Leave the three order-status checkboxes at their defaults — **Ignore cancelled orders** and **Ignore orders that are not fully paid** are already on, and **Ignore unfulfilled or partially fulfilled orders** is off. Leave the rule's **Redirect URL** empty.
6. In **Messages**, set the **Access denied message** to:

> Sign in with an account that purchased The Complete Snowboard to view these accessories.

{% hint style="info" %}
Purchased items shows only the **Access denied message** — there's no Guest message field, because the rule isn't one of the five customer-identity rules. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview#what-a-blocked-visitor-sees).
{% endhint %}

<figure><img src="/files/gjZOhQNYMQxOXgP52Opr" alt="The Messages card with a single Access denied message field set to the previous-purchase wording, and the Preview panel rendering it."><figcaption><p>One message field only, and the Preview panel confirms the wording before you save.</p></figcaption></figure>

7. Click **Save**.

### Result on the storefront

A signed-in customer with a qualifying purchase of The Complete Snowboard from the last 60 days can open the accessories page. A purchase older than 60 days does not qualify. A guest or a signed-in customer without a qualifying purchase sees the Access denied message above.

<figure><img src="/files/218FvOmdmWC4wwHIr2oM" alt="The Snowboard accessories page displaying the configured previous-purchase requirement."><figcaption><p>A visitor whose purchase history does not satisfy the rule sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Order quantity](/b2b-lock-password-protect/access-rules/order-quantity)
* [Cart conditions](/b2b-lock-password-protect/access-rules/cart-conditions)


# Order quantity

Match customers whose total order count meets a minimum — good for loyalty and repeat-buyer perks.

**Order quantity** matches a customer based on how many orders they've placed with your store in total, rather than what they bought. It's a good fit for loyalty or repeat-buyer perks — for example, unlocking a discount code or an exclusive product only for customers who've ordered from you a certain number of times before.

Like most access rules (aside from the action-based ones such as Passcode, Secret link, Subscribe, and Confirmation prompt), Order quantity can be set to match **If** the customer meets the order-count threshold, or **Unless** they don't — inverting it to match customers below the threshold instead. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

{% hint style="info" %}
This rule reads order history from a signed-in Shopify customer account. With **If**, a guest cannot meet the order threshold; with **Unless**, a guest has no matching order history and therefore satisfies the inverted condition.
{% endhint %}

## Add the rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Order quantity**.

<figure><img src="/files/hkunZRf2y4IiMcvWZX7l" alt="The Unlock rules tab with Order quantity selected in the Condition type dropdown."><figcaption><p>Select Order quantity from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Set the **Order threshold** — the minimum number of orders the customer must have placed for the rule to match. The default is 1 order.
5. **Ignore cancelled orders** is on by default, so cancelled orders don't count. Untick it if you want them included.

<figure><img src="/files/ZsvGntUK9aCzUitBqMsw" alt="The Order quantity rule settings, showing the order threshold field and the Ignore cancelled orders checkbox."><figcaption><p>Set the minimum number of orders a customer must have placed, and choose whether cancelled orders count.</p></figcaption></figure>

6. Choose **If** or **Unless**.
7. Click **Save**.

{% hint style="warning" %}
This rule counts up to the customer's **50 most recent orders placed within the last 60 days**. Orders older than 60 days are not included. If the customer placed more than 50 orders during that period, only the newest 50 are counted.
{% endhint %}

## Example: Unlock rewards after three orders

Suppose customers should be able to open a rewards page after placing at least three non-cancelled orders.

1. Select the **Repeat-customer rewards** page as the content to protect.

<figure><img src="/files/StkihVG13KN8ppreKDWr" alt="The Lock setup tab with Specific Page as the content type and the Repeat-customer rewards page listed under Restricted pages."><figcaption><p>Pick the page that repeat buyers should unlock.</p></figcaption></figure>

2. On the **Unlock rules** tab, set **Condition type** to **Order quantity** and leave **Rule logic** on **If**.
3. Set **Order threshold** to **3**. Leave **Ignore cancelled orders** ticked — it's on by default.

<figure><img src="/files/i9HN9k4uIpMzVgDqKCAp" alt="The Order quantity condition with Rule logic If, Order threshold set to 3, and Ignore cancelled orders ticked."><figcaption><p>The condition heading reads: If the customer order quantity matches.</p></figcaption></figure>

4. Leave the rule's **Redirect URL** empty.
5. In **Messages**, set the **Access denied message** to:

> Sign in with an account that has placed at least 3 orders to unlock these rewards.

{% hint style="info" %}
Order quantity shows only the **Access denied message** — there's no Guest message field, because the rule isn't one of the five customer-identity rules. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview#what-a-blocked-visitor-sees).
{% endhint %}

<figure><img src="/files/79LyjhAPBX7X6w9pdEtm" alt="The Messages card with a single Access denied message field set to the three-order wording, and the Preview panel rendering it."><figcaption><p>The Preview panel confirms the wording before you save.</p></figcaption></figure>

6. Click **Save**.

### Result on the storefront

A signed-in customer with at least three counted orders can open the rewards page. A guest or a customer with fewer than three counted orders sees the Access denied message above.

<figure><img src="/files/BJjWXAzC0ftIN2TNAQZn" alt="The Repeat-customer rewards page displaying the configured three-order requirement."><figcaption><p>A visitor without three qualifying orders sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Purchased items](/b2b-lock-password-protect/access-rules/purchased-items)
* [Customer tags](/b2b-lock-password-protect/access-rules/customer-tags)


# Cart conditions

Match visitors based on what's currently in their cart — specific products, variants, item count, or subtotal.

Cart conditions are four related access rules that all look at the visitor's current shopping cart:

* **Cart contains selected products** — a specific product is currently in the cart.
* **Cart contains selected variants** — a specific variant is currently in the cart.
* **Cart quantity** — the total number of items in the cart is at least a number you set.
* **Cart total** — the cart's subtotal is at least a dollar amount you set.

They're a good fit for free-gift unlocks (add a specific product to reveal a bonus item) or minimum-order-value gating (unlock a discount or perk once the cart reaches a spending threshold).

Like most access rules (aside from the action-based ones such as Passcode, Secret link, Subscribe, and Confirmation prompt), each of these four can be set to match **If** the cart meets the condition, or **Unless** it doesn't — inverting it to match carts that don't meet the condition instead. See [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules).

## Add a cart condition rule

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. Choose the content you want to protect. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview) for how rules fit into a lock.
3. Click the **Unlock rules** tab, then in the **Condition type** dropdown, select **Cart contains selected products**, **Cart contains selected variants**, **Cart quantity**, or **Cart total**.

<figure><img src="/files/03KnGRJzbpsFU3sj0wRs" alt="The Unlock rules tab&#x27;s Condition type dropdown showing the four cart-related rule types: Cart contains selected products, Cart contains selected variants, Cart quantity, and Cart total."><figcaption><p>Select one of the four cart conditions from the Condition type dropdown on the Unlock rules tab.</p></figcaption></figure>

4. Configure that rule (see each section below).
5. Choose **If** or **Unless**.
6. Click **Save**.

### Cart contains selected products

Select one or more products. The rule matches whenever any of those products is currently in the visitor's cart — this checks presence only, regardless of how many units or which specific variant.

<figure><img src="/files/Hb1jxZJ56a0e8WBFsPMf" alt="The Cart contains selected products rule settings, showing a product selection list."><figcaption><p>Select the product(s) that must be in the cart for this rule to match.</p></figcaption></figure>

### Cart contains selected variants

Select one or more specific variants. The rule matches whenever any of those exact variants is currently in the cart. Use this instead of Cart contains selected products when the condition should depend on a specific size, color, or other variant option, not just the product as a whole.

<figure><img src="/files/lfXODgxCMCXFiism1qTg" alt="The Cart contains selected variants rule settings, showing a variant selection list."><figcaption><p>Select the specific variant(s) that must be in the cart for this rule to match.</p></figcaption></figure>

### Cart quantity

Set a number. The rule matches whenever the total number of items in the cart — across all products, not just a specific one — is **at least** that number.

<figure><img src="/files/V879j50iWzFWxYG5T1JZ" alt="The Cart quantity rule settings, showing a number input for the minimum total items required in the cart."><figcaption><p>Set the minimum total number of items the cart must contain for this rule to match.</p></figcaption></figure>

### Cart total

Set a dollar amount. The rule matches whenever the cart's subtotal is **at least** that amount.

<figure><img src="/files/gxpJVfo9Y8Hq2Xw9sntT" alt="The Cart total rule settings, showing a currency input for the minimum cart subtotal required."><figcaption><p>Set the minimum cart subtotal required for this rule to match.</p></figcaption></figure>

{% hint style="warning" %}
**Cart quantity and Cart total only support "at least" (≥) today.** Even though the number field might look like a general-purpose input, there's currently no way to configure "exactly," "at most," or "less than" for either of these two rules. If you need content to unlock only below a certain quantity or amount, use the **Unless** toggle together with a slightly higher threshold, or plan around the "at least" behavior directly — don't build a lock expecting a different comparison, since it isn't supported.
{% endhint %}

{% hint style="info" %}
Cart conditions are evaluated again when the cart changes. A visitor who is denied can qualify after adding the required product or variant, or after reaching the configured quantity or subtotal.
{% endhint %}

## Examples

Each example below represents a separate Lock. Leave the rule's **Redirect URL** empty so visitors who do not qualify see the configured message.

{% hint style="info" %}
None of the four cart conditions shows a **Guest message content** field — they don't look at who the visitor is, so only the **Access denied message** applies. See [Access rules overview](/b2b-lock-password-protect/access-rules/overview#what-a-blocked-visitor-sees).
{% endhint %}

### Cart contains selected products

Suppose a bonus-offer page should open after the visitor adds any variant of **The Complete Snowboard** to the cart.

1. Select the **Snowboard bonus offer** page as the content to protect.

<figure><img src="/files/I1hS96ndD1LYDaRqYGxx" alt="The Lock setup tab with Specific Page as the content type and the Snowboard bonus offer page listed under Restricted pages."><figcaption><p>Pick the page the cart should unlock.</p></figcaption></figure>

2. On the **Unlock rules** tab, set **Condition type** to **Cart contains selected products**, leave **Rule logic** on **If**, then click **Specific products** and add **The Complete Snowboard**.

<figure><img src="/files/1pu2SY6dh6oX2Jc6XHvm" alt="The Cart contains selected products condition with Rule logic If and The Complete Snowboard in the product list."><figcaption><p>The condition heading reads: If the cart contains the selected product.</p></figcaption></figure>

3. In **Messages**, set the **Access denied message** to:

> Add The Complete Snowboard to your cart to unlock this offer.

<figure><img src="/files/YfSRXNIoD5edYtRo5UZG" alt="The Messages card with the Access denied message set to the required-product wording, and the Preview panel rendering it."><figcaption><p>The Preview panel confirms the wording before you save.</p></figcaption></figure>

4. Click **Save**.

The page opens when any The Complete Snowboard variant is in the cart. Otherwise, the visitor sees the message above.

<figure><img src="/files/VFQuFReiM8iMJztHS5py" alt="The Snowboard bonus offer page displaying the configured required-product message."><figcaption><p>Without the product in the cart, the visitor sees the Access denied message from this example.</p></figcaption></figure>

## Related docs

* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Purchased items](/b2b-lock-password-protect/access-rules/purchased-items)
* [Order quantity](/b2b-lock-password-protect/access-rules/order-quantity)


# Lock behavior overview

What a blocked visitor actually experiences, and the six behaviors you can configure on a lock.

Every lock in Sami B2B Lock, Password Protect is built from three pieces: **content to lock** (what's protected), **access rules** (who must match to get through), and **lock behavior** — this piece. Lock behavior is what a blocked visitor actually experiences on your storefront, and what happens once someone passes your rules.

{% hint style="info" %}
Not sure how these three pieces fit together? Start with [Locks overview](/b2b-lock-password-protect/locks/overview).
{% endhint %}

Where content-to-lock decides *what* is protected and access rules decide *who* gets in, lock behavior decides:

* What a blocked shopper sees in place of the protected price, button, page, or menu link.
* Whether the protected content is hidden from search engines, on-site search, and navigation menus.
* Where a visitor goes after they pass (or after they fail a specific rule).
* Whether passing a rule tags the customer's account.
* How long a visitor stays unlocked before they have to verify again.

These settings live on the **Unlock rules** tab of each lock's editor — the same screen where you add access rules, not a separate step afterward. Hide price and Add to cart, Hide from search engines, and Hide from menus configure in the **Blocked visitor behavior** panel in that tab's right-hand sidebar, and the exact fields shown there depend on the lock's content type. Redirect after access, Add customer tags on verification, and Grant access duration instead configure per access key/rule in that same tab's main column, alongside the rule builder.

## The six behaviors

| Behavior                       | What it controls                                                                              | Guide                                                                                             |
| ------------------------------ | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Hide price and Add to cart     | Hide a product or collection's price, Add to cart button, or both — or hide the item entirely | [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart) |
| Hide from search engines       | Remove protected content from on-site search, the sitemap, and search engine indexing         | [Hide from search engines](/b2b-lock-password-protect/lock-behavior/hide-from-search-engines)     |
| Hide from menus                | Remove a protected item's links from storefront navigation menus                              | [Hide from menus](/b2b-lock-password-protect/lock-behavior/hide-from-menus)                       |
| Redirect after access          | Send a visitor to a URL after they pass, or after a specific rule denies them                 | [Redirect after access](/b2b-lock-password-protect/lock-behavior/redirect-after-access)           |
| Add customer tags after access | Tag a signed-in customer's account after they satisfy an access key                           | [Add customer tags after access](/b2b-lock-password-protect/lock-behavior/customer-auto-tags)     |
| Grant access duration          | How long a visitor stays unlocked before re-verifying                                         | [Grant access duration](/b2b-lock-password-protect/lock-behavior/grant-access-duration)           |

## Related docs

* [Locks overview](/b2b-lock-password-protect/locks/overview)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)
* [Manage locks](/b2b-lock-password-protect/locks/manage-locks)
* [Create your first lock](/b2b-lock-password-protect/quick-start/quickstart)


# Hide price and Add to cart

Hide a locked product or collection's price, Add to cart button, or the whole item, until a visitor passes your access rules.

This behavior is available on locks whose content type is **Products and variants** or **Collections**. Instead of blocking the whole page, it lets a blocked visitor keep browsing the product or collection while hiding the specific parts you choose — the price, the Add to cart button, or both — until they meet your access rules.

## Reach this setting

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. On the **Lock setup** tab, choose **Products and variants** or **Collections** as the content type, then select the products or collections you want to protect.
3. Click the **Unlock rules** tab to continue.
4. In the main column, add one or more access rules that decide who is allowed to see price and Add to cart.
5. On the same **Unlock rules** tab, the right-hand sidebar shows the **Blocked visitor behavior** panel — configure the price/Add to cart options there, alongside your rule.

<figure><img src="/files/pdSOSVRqIwGEaaoYOBIK" alt="The Blocked visitor behavior section showing the choose lock settings dropdown with price, Add to cart, and both options."><figcaption><p>Choose whether to hide price only, Add to cart only, or both for the selected products or collections.</p></figcaption></figure>

## Choosing what to hide

Use the dropdown to pick one of:

* **Hide product price** — the price is replaced by your message or button; Add to cart still works.
* **Hide product atc** — the Add to cart button is replaced; the price still shows.
* **Hide product price and atc** — both are hidden. When you pick this option, a note confirms that both prices and cart buttons will be hidden.

## What shoppers see instead

In place of the hidden price or button, a blocked shopper sees either a plain-text message or a styled button — you choose the style in the lock's design settings (see [Colors and templates](/b2b-lock-password-protect/design-and-customization/colors-and-templates)). Either way, the default English copy is:

* Hidden price: **"Login to see price"**
* Hidden Add to cart: **"Login to Add to cart."**

Both strings are editable per lock and per language from the lock's translation settings.

<figure><img src="/files/tejfsJ9Xmw3AZUg5Gvif" alt="A live storefront product page seen by a signed-out visitor: the product image and title are visible, and a Login to see price link sits where the price would be, with no Add to cart or Buy it now button."><figcaption><p>The result on a live storefront — the product stays browsable, only the price and buy buttons are replaced.</p></figcaption></figure>

{% hint style="info" %}
"Login" in the default copy is just the default wording — the actual requirement is whatever access rules you've added to the lock, not necessarily being logged in. Edit the text if your rule isn't about signing in (for example, a passcode or a customer tag).
{% endhint %}

## Hiding the product or collection entirely

If hiding just the price and button isn't enough, turn on **Hide products from storefront**. This is a stronger option: instead of showing the product with its price/Add to cart hidden, it removes the protected products or collections from product lists, search results, and product pages entirely, so blocked visitors can't find them at all. When this is on, the price/Add to cart dropdown above no longer applies, since there's nothing left to show.

<figure><img src="/files/Sct8C6JdNBsHjvaHWhYL" alt="The Hide products from storefront checkbox in the Blocked visitor behavior section."><figcaption><p>Turning on Hide products from storefront removes the protected items from listings and search instead of just hiding price and Add to cart.</p></figcaption></figure>

{% hint style="warning" %}
This setting and the price/Add to cart options above may require a paid plan. If your current plan doesn't include it, the app shows an upgrade prompt instead of the toggle.
{% endhint %}

## Save your lock

Click **Save** once you've chosen your settings. The behavior applies immediately to any matching products or collections on your live storefront.

## Video walkthrough

Prefer to watch it done end to end? This walkthrough covers the same setup:

{% embed url="<https://www.youtube.com/watch?v=wUhZ6eq2kYQ>" %}

## Related docs

* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Products and variants](/b2b-lock-password-protect/content-to-lock/overview)
* [Colors and templates](/b2b-lock-password-protect/design-and-customization/colors-and-templates)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)


# Hide from search engines

Keep locked pages and products out of on-site search, your sitemap, and search engine results.

This behavior is available on locks that protect **Products and variants**, **Collections**, **Pages**, or **Blogs and articles**. It controls whether a protected item can be found through your storefront's own search box, or through search engines like Google, rather than what a visitor sees once they land on the page itself.

{% hint style="info" %}
The **Google settings** panel is confirmed to show these exact fields for **Products and variants** and **Collections** content types. Other content types listed above may show the same options, a variation, or none — check the panel for your specific content type.
{% endhint %}

## Reach this setting

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. On the **Lock setup** tab, choose a content type that supports this behavior — **Products and variants**, **Collections**, **Pages**, or **Blogs and articles** — and select what to protect.
3. Click the **Unlock rules** tab, then add your access rules in the main column.
4. On the same **Unlock rules** tab, find the **Google settings** section in the right-hand sidebar, alongside the **Blocked visitor behavior** panel.

<figure><img src="/files/BnW5me7alqb5ADDmn40N" alt="The Google settings section showing the Hide from search and sitemap checkbox and the noindex meta tag checkbox."><figcaption><p>The Google settings section controls whether locked content is discoverable through search.</p></figcaption></figure>

## Hide from search & sitemap

Turn on **Hide from search & sitemap** to remove the protected pages or products from your storefront's own on-site search results and from the sitemap Shopify generates for search engines to crawl. In plain terms: shoppers using your store's search bar won't find the locked item, and search engines will have a harder time discovering the page at all, since it's no longer listed for them to crawl.

## Add the "noindex" meta tag

Once **Hide from search & sitemap** is on, a second option becomes available: **Add the "noindex" meta tag to protected content**. This adds a `noindex` instruction to the page whenever access is denied by this lock, which directly tells search engines not to index or show that page in their results — even if a visitor or a search engine bot reaches the URL directly (for example, from an old link or a listing you haven't updated yet).

{% hint style="info" %}
In plain language: **Hide from search & sitemap** stops the page from being actively listed and crawled; the **noindex** tag is a stronger, explicit instruction that keeps a search engine from indexing the page even if it does reach it some other way. Turning both on gives the most complete protection from search visibility.
{% endhint %}

{% hint style="warning" %}
Both options may require a paid plan. If your current plan doesn't include this feature, the app shows an upgrade prompt instead of the checkboxes, and the noindex option stays disabled until "Hide from search & sitemap" is turned on.
{% endhint %}

Click **Save** once you've made your choice.

## Related docs

* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Hide from menus](/b2b-lock-password-protect/lock-behavior/hide-from-menus)
* [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart)
* [Products and variants](/b2b-lock-password-protect/content-to-lock/overview)


# Hide from menus

Remove a protected item's links from your storefront navigation menus.

This behavior is available on locks that protect **Products and variants**, **Collections**, **Pages**, **Blogs and articles**, or a **Specific URL**. It removes any navigation menu link pointing to the protected item, so it doesn't show up as an option for visitors browsing your storefront's menus.

{% hint style="info" %}
The **Hide from menus** checkbox is confirmed to appear in the **Blocked visitor behavior** panel for **Products and variants** and **Collections** content types. Other content types listed above may show the same option, a variation, or none — check the panel for your specific content type.
{% endhint %}

{% hint style="warning" %}
Hiding a link from your menus does not lock the page or product itself. A visitor who already has the direct URL — from a bookmark, a shared link, or a search result — can still reach it unless another behavior (like [Hide from search engines](/b2b-lock-password-protect/lock-behavior/hide-from-search-engines)) or the lock's own access rules also block it. Use this setting to declutter navigation, not as your only protection.
{% endhint %}

## Reach this setting

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. On the **Lock setup** tab, choose a content type that supports this behavior — **Products and variants**, **Collections**, **Pages**, **Blogs and articles**, or **Specific URL** — and select what to protect.
3. Click the **Unlock rules** tab, then add your access rules in the main column.
4. On the same **Unlock rules** tab, find the **Hide from menus** checkbox in the **Blocked visitor behavior** panel in the right-hand sidebar.

<figure><img src="/files/xOUtf68IYZwqDw619IQk" alt="The Hide from menus checkbox in the Blocked visitor behavior section of the lock editor."><figcaption><p>Turn on Hide from menus to remove links to the protected item from your storefront navigation.</p></figcaption></figure>

## What it does

When turned on, any link in your storefront's navigation menus that points to the protected product, collection, page, article, or URL is removed from those menus. Visitors browsing your menus simply won't see it listed as an option — the menu behaves as if the link were never added.

{% hint style="warning" %}
This setting may require a paid plan. If your current plan doesn't include it, the app shows an upgrade prompt in place of the checkbox.
{% endhint %}

Click **Save** once you've turned this on for the lock.

## Related docs

* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Hide from search engines](/b2b-lock-password-protect/lock-behavior/hide-from-search-engines)
* [Hide price and Add to cart](/b2b-lock-password-protect/lock-behavior/hide-price-and-add-to-cart)
* [Specific URL](/b2b-lock-password-protect/content-to-lock/specific-url)


# Redirect after access

Send a visitor to a chosen URL after they pass a lock, or after a specific rule denies them.

Redirecting is available in two places on a lock, and they trigger at opposite moments:

* **Redirect on access** — sends a visitor to a URL you choose once they satisfy an entire access key (all of that key's rules).
* **Redirect on deny** — sends a visitor to a URL you choose when one specific rule fails, configured per rule.

Both are optional. If you leave them blank, an allowed visitor simply sees the unlocked content, and a blocked visitor sees the lock's normal access-denied message instead of being sent anywhere.

{% hint style="warning" %}
A lock can use **redirect on access** or [Add customer tags on verification](/b2b-lock-password-protect/lock-behavior/customer-auto-tags), but not both at once. Setting a redirect URL on an access key disables that key's customer auto-tag field, since a visitor who is redirected away never sees the confirmation that would normally trigger the tag.
{% endhint %}

## Redirect on access

### Reach this setting

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. On the **Lock setup** tab, pick a content type.
3. Click the **Unlock rules** tab, then add at least one access key with its rules in the main column.
4. Below that key's rules, in the same main column, find the **Redirect URL (optional)** field. This is a per-access-key setting, not part of the **Blocked visitor behavior** sidebar panel.

<figure><img src="/files/cnUegeCrm8AypdZRwXIN" alt="The Redirect URL field below an access key&#x27;s rules, with helper text explaining it redirects visitors after access is granted."><figcaption><p>Set a Redirect URL on an access key to send visitors elsewhere once they satisfy all of that key's rules.</p></figcaption></figure>

5. Choose or enter the destination page or URL.
6. Click **Save**.

Once a visitor satisfies every rule in that access key, they're sent to the URL you set instead of staying on the unlocked content.

## Redirect on deny

### Reach this setting

1. In the same lock, on the **Unlock rules** tab, open an individual rule inside an access key in the main column.
2. Find that rule's own **Redirect URL** field.

<figure><img src="/files/kHV4USZshltkAjLoy9uA" alt="A rule&#x27;s individual Redirect URL field with a tooltip explaining that visitors without access will be redirected there."><figcaption><p>Each rule has its own Redirect URL, used only when that specific rule denies the visitor.</p></figcaption></figure>

3. Choose or enter a destination for visitors who fail that rule specifically.
4. Click **Save**.

If a rule's Redirect URL is left blank, a visitor who fails it simply sees the lock's default access-denied message instead of being redirected. Because each rule has its own redirect, you can send visitors to different destinations depending on exactly which condition they failed — for example, a "must be logged in" rule could redirect to your login page, while a "must be a wholesale customer" rule redirects to your wholesale application form.

## Related docs

* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Add customer tags on verification](/b2b-lock-password-protect/lock-behavior/customer-auto-tags)
* [Combining rules](/b2b-lock-password-protect/access-rules/combining-rules)
* [Access rules overview](/b2b-lock-password-protect/access-rules/overview)


# Add customer tags on verification

Automatically tag a signed-in customer's account after they satisfy an access key.

This behavior automatically adds one or more tags to a **signed-in customer's** Shopify account after they satisfy the access key where the tags are configured. It works with any rule type in that key, not only action-based rules. For example, you can add a tag after a customer satisfies **Customer tags** and **Order quantity**, or after they complete a **Passcode** rule.

Why a merchant would use this:

* **Segmentation** — build a customer segment of customers who passed a particular access flow (for example, "wholesale-verified" or "vip-access").
* **Marketing flows** — trigger an email flow or automation in your marketing platform when the tag is added, without needing a separate integration for that specific rule.
* **Reporting** — see at a glance, from the customer's profile in Shopify admin, which access flow they came through.

{% hint style="warning" %}
A lock can use customer auto-tags on an access key or that key's [Redirect after access](/b2b-lock-password-protect/lock-behavior/redirect-after-access) setting, but not both. Setting a Redirect URL on the access key disables the auto-tag field, since a visitor who's redirected away doesn't complete the flow that would trigger the tag.
{% endhint %}

## Reach this setting

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. On the **Lock setup** tab, pick a content type.
3. Click the **Unlock rules** tab and add the access rules that the customer must satisfy.
4. Below that access key's rules, in the same main column, find the **Customer auto tags (optional)** field. This is a per-access-key setting, not part of the **Blocked visitor behavior** sidebar panel.

<figure><img src="/files/74yl1qXmgqTcF9d5dwzI" alt="The Customer auto tags field below an access key&#x27;s rules, with a placeholder showing example tag names."><figcaption><p>Enter one or more tags to add to the customer's account once they pass this access key.</p></figcaption></figure>

5. Enter the tag or tags you want applied, separated by commas (for example, `vip_customer, wholesale_buyer`).
6. Click **Save**.

{% hint style="info" %}
This field only takes effect if the access key's Redirect URL is left blank. If a Redirect URL is set, the auto-tag field is disabled and the tags won't be applied — see [Redirect after access](/b2b-lock-password-protect/lock-behavior/redirect-after-access).
{% endhint %}

## Save your lock

Once saved, a customer who is signed in and satisfies this access key has the tag(s) added to their Shopify customer account. A guest visitor can satisfy a rule such as Passcode or Secret link, but cannot receive customer tags until they are signed in to a Shopify customer account.

## Related docs

* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Redirect after access](/b2b-lock-password-protect/lock-behavior/redirect-after-access)
* [Passcode](/b2b-lock-password-protect/access-rules/passcode)
* [Secret link](/b2b-lock-password-protect/access-rules/secret-link)


# Grant access duration

Control how long a visitor stays unlocked after passing an action-based access rule before they have to verify again.

Once a visitor passes an action-based rule — **Passcode**, **Secret link**, **Subscribe to unlock**, or **Confirmation prompt** — the app remembers that they're allowed in, so they aren't asked to verify on every page load. **Grant access duration** controls exactly how long that memory lasts before the visitor has to verify again.

## Reach this setting

1. Open **Locks** and create a new lock, or open an existing one to edit it.
2. On the **Unlock rules** tab, add an access key with one of the action-based rules: **Passcode**, **Secret link**, **Subscribe to unlock**, or **Confirmation prompt**, in the main column.
3. Inside that rule's settings, in the same main column, find the **Grant access (optional)** field. This is a per-rule setting, not part of the **Blocked visitor behavior** sidebar panel.

<figure><img src="/files/To7lzSo03fP46e9UbXcZ" alt="The Grant access duration field showing a number input connected to a day, hour, or minutes dropdown."><figcaption><p>Enter a number and choose a unit to set how long a visitor stays unlocked after verifying.</p></figcaption></figure>

4. Choose your duration (see below) and click **Save**.

## Session-only vs. a fixed duration

* **Leave the field blank** — the app remembers a verified visitor only for their current browser session. As soon as they close their browser, that memory is gone and they'll need to verify again the next time they visit.
* **Enter a number and pick a unit** — minutes, hours, or days — for a fixed duration. The countdown starts the moment access is granted, not from when the browser is closed, so the visitor stays unlocked for exactly that long even across multiple visits, until the duration runs out.

{% hint style="info" %}
The duration starts counting as soon as access is granted. The page itself won't automatically refresh or re-lock itself the instant the timer expires — the app re-checks access the next time the visitor loads or navigates to a protected page.
{% endhint %}

## It's a per-browser cookie, not an account setting

Grant access duration is stored as a cookie in the visitor's browser, not as a setting on their Shopify customer account. That means:

* A visitor who verifies on their phone won't be automatically remembered when they switch to their laptop, or to a different browser on the same device.
* Clearing cookies, using a private/incognito window, or switching browsers resets the memory, even within the duration you set.

{% hint style="warning" %}
**Exception — Confirmation prompt's "remember for signed-in customers" toggle.** If that toggle is turned on for a Confirmation prompt rule, a signed-in customer's confirmation is remembered differently: it's stored in the browser's local storage tied to that customer, and it has **no expiry at all** — it doesn't follow the duration set here, and it doesn't reset when the browser session ends. See [Confirmation prompt](/b2b-lock-password-protect/access-rules/confirmation-prompt) for details on that toggle.
{% endhint %}

## Related docs

* [Lock behavior overview](/b2b-lock-password-protect/lock-behavior/overview)
* [Confirmation prompt](/b2b-lock-password-protect/access-rules/confirmation-prompt)
* [Passcode](/b2b-lock-password-protect/access-rules/passcode)
* [Secret link](/b2b-lock-password-protect/access-rules/secret-link)


# Request access overview

Let shoppers ask for access to a Passcode- or Secret-link-protected lock, and review and grant those requests from the admin.

Request access adds a "please give me access" path for shoppers who hit a lock they can't get past on their own. Instead of only showing a passcode field or requiring a secret link, the lock can also show a small form. The shopper fills it in, you get notified, and you decide whether to send them the passcode or secret link by email.

{% hint style="info" %}
Request access only works on locks that use the **Passcode** or **Secret link** access rule. It isn't available for other rule types (logged-in customers, customer tags, date range, and so on), because those don't have a shared credential for you to hand out.
{% endhint %}

## Turn on Request access for a lock

1. Open the lock's editor and click **Customize templates** in the **Preview** panel.
2. In the left sidebar of the panel that opens, select the template your lock uses — **Passcode** or **Secret link**.
3. Scroll the middle column past **Translation** to the **Design** section and turn on **Form request access**.

If the lock's access rule isn't Passcode or Secret link, this option isn't available — switch the lock to one of those two rule types first. Request access may also require a paid plan; if it does, you'll see an upgrade prompt instead.

<figure><img src="/files/uJJLiYb7MRnh9GojAHcS" alt="The Form request access toggle turned on in the Customize templates panel, with the Integration form options and copy fields underneath."><figcaption><p>Turn on Form request access in the Customize templates panel, under Design.</p></figcaption></figure>

## Choose how the form is collected: default or Integration

Once Form request access is on, pick how the request form itself is shown:

* **Default** — the app shows its own built-in form on the storefront lock screen. No extra setup needed; this is the simplest option.
* **Integration** — instead of the app's form, you use a form hosted or built by a third-party tool (for example, a form builder or CRM). Selecting Integration reveals a **Short code** field where you paste an embeddable snippet (the app shows a placeholder like `<div class="samitaWS-registrationForm" data-id="..."></div>`). That short code is what actually renders on the lock screen in place of the default form. An in-app info banner points you to further documentation if you're not sure how to get the short code for your form.

Use Integration when you already collect leads through another tool and want the request to land there instead of in the app's own Request access list.

## Customize the form copy

Directly below the **Form request access** toggle, in the same **Design** section, you can edit the text shown with the form:

| Field           | Default                         |
| --------------- | ------------------------------- |
| **Title**       | `Request access`                |
| **Message**     | `You do not have access right?` |
| **Action text** | `request access!`               |

The preview on the right updates as you type, so you can see exactly how the invitation reads on the lock screen.

The form's own field labels (Email, Name, Message, Send request) and its success message live a little higher up in the same panel, under **Translation** — and like all lock copy, they're editable per storefront language via the language switcher at the top of the panel. See [Translate lock messages](/b2b-lock-password-protect/design-and-customization/translate-messages).

## How the end-to-end flow works

1. A shopper reaches a Passcode- or Secret-link-protected page and doesn't have the passcode or a valid secret link.
2. Because Form request access is on, they see the request form (or your Integration form) instead of a dead end. They submit their name, email, and an optional message.
3. You're notified by the **Admin notification email**, sent to your store's contact address for every new request.
4. You open the request in the **Request Access** list, review who asked and for what, and pick which passcode or secret link to hand out.
5. You click **Send access**. The shopper receives the **Customer access email** containing the actual passcode or secret link, and the request is marked resolved.

See [Manage access requests](/b2b-lock-password-protect/request-access/manage-requests) for what the list and the review screen look like, and [Customize request and access emails](/b2b-lock-password-protect/request-access/email-setup) for editing what those two emails say and look like.

{% hint style="info" %}
This is separate from a Shopify customer account access request. Request access is specific to content locked with the app's Passcode or Secret link rule — it has nothing to do with Shopify's own customer account or B2B company account approval flows.
{% endhint %}

## Video walkthrough

Request access lives inside a Passcode or Secret link lock, so this walkthrough builds a passcode lock from scratch — the setup Request access sits on top of:

{% embed url="<https://www.youtube.com/watch?v=amWRsF6xJHI>" %}

## Related docs

* [Passcode](/b2b-lock-password-protect/access-rules/passcode)
* [Secret link](/b2b-lock-password-protect/access-rules/secret-link)
* [Manage access requests](/b2b-lock-password-protect/request-access/manage-requests)
* [Customize request and access emails](/b2b-lock-password-protect/request-access/email-setup)




---

[Next Page](/llms-full.txt/1)

