> This is part 1 of 3 of the full documentation (pages 1–100 of 259).
> The content is paginated: fetch every part to see all of it.
> Next part: https://docs.roadmap.so/llms-full.txt/1
> Page index: https://docs.roadmap.so/llms.txt

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
This site has an agentic ask interface you may use to query the documentation dynamically by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.roadmap.so/index.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

---

# Documentation

<h2 align="center">Roadmap Help Center</h2>

<p align="center">Browse the topics below or use the GitBook assistant to ask anything you need help with.</p>

<p align="center"><button type="button" class="button primary" data-action="ask" data-icon="gitbook-assistant">Ask a question…</button></p>

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Getting Started</strong></td><td>How it works, who it's for, and how to get the most out of Roadmap.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FNiT1FTSm12B8cKRfvWzx%2Fcard-frame-grad-green.jpg?alt=media&amp;token=0c25c8fd-1c64-4bfd-9911-e829b4aab7a0">card-frame-grad-green.jpg</a></td><td><a href="/getting-started/why-roadmap">Why Roadmap?</a></td></tr><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Loyalty &#x26; Rewards</strong></td><td>Points, tiers, and market leading, frictionless point and product redeeming.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7qxVMVbfTZQbzVQ2mqgw%2Fcard-frame-grad-yellow.jpg?alt=media&amp;token=d37d4b1f-fec3-40f7-b7a7-025c9be012e3">card-frame-grad-yellow.jpg</a></td><td><a href="/loyalty-and-rewards/getting-started">Getting Started</a></td></tr><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Reviews</strong></td><td>Products, store, syndication, shared reviews, Q&#x26;A, and custom UI.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FNiT1FTSm12B8cKRfvWzx%2Fcard-frame-grad-green.jpg?alt=media&amp;token=0c25c8fd-1c64-4bfd-9911-e829b4aab7a0">card-frame-grad-green.jpg</a></td><td><a href="/reviews/getting-started">Reviews</a></td></tr><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Subscriptions</strong></td><td>Promotional bars, packaging options, recommended upsells, cart and checkout extensions.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7qxVMVbfTZQbzVQ2mqgw%2Fcard-frame-grad-yellow.jpg?alt=media&amp;token=d37d4b1f-fec3-40f7-b7a7-025c9be012e3">card-frame-grad-yellow.jpg</a></td><td><a href="/subscriptions/getting-started">Subscriptions</a></td></tr><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Discounts &#x26; GWP</strong></td><td>Automatic add/removal of discounts, GWP, products, segmented by customer type, history, and loyalty tier.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7qxVMVbfTZQbzVQ2mqgw%2Fcard-frame-grad-yellow.jpg?alt=media&amp;token=d37d4b1f-fec3-40f7-b7a7-025c9be012e3">card-frame-grad-yellow.jpg</a></td><td><a href="/discounts-and-gwp/getting-started">Discounts &amp; GWP</a></td></tr><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Trade &#x26; B2B</strong></td><td>For non-plus &#x26; Plus businesses - dashboards, bypass cart, customer data syncs, quote builder.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7qxVMVbfTZQbzVQ2mqgw%2Fcard-frame-grad-yellow.jpg?alt=media&amp;token=d37d4b1f-fec3-40f7-b7a7-025c9be012e3">card-frame-grad-yellow.jpg</a></td><td><a href="/trade-and-b2b/getting-started">Trade &amp; B2B</a></td></tr><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Cart &#x26; Checkout</strong></td><td>Promotional bars, packaging options, recommended upsells, cart and checkout extensions.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7qxVMVbfTZQbzVQ2mqgw%2Fcard-frame-grad-yellow.jpg?alt=media&amp;token=d37d4b1f-fec3-40f7-b7a7-025c9be012e3">card-frame-grad-yellow.jpg</a></td><td><a href="/cart-and-checkout/configure-features">Configure features</a></td></tr><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Shopify POS</strong></td><td>All modules integrated into POS for full Omnichannel experience.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FNiT1FTSm12B8cKRfvWzx%2Fcard-frame-grad-green.jpg?alt=media&amp;token=0c25c8fd-1c64-4bfd-9911-e829b4aab7a0">card-frame-grad-green.jpg</a></td><td><a href="/shopify-pos/shopify-pos-integration">Shopify POS integration</a></td></tr><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i></td><td><strong>Tag Library</strong></td><td>Promotional bars, packaging options, recommended upsells, cart and checkout extensions.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7qxVMVbfTZQbzVQ2mqgw%2Fcard-frame-grad-yellow.jpg?alt=media&amp;token=d37d4b1f-fec3-40f7-b7a7-025c9be012e3">card-frame-grad-yellow.jpg</a></td><td><a href="/tag-library/getting-started-with-tag-library">Getting started with Tag Library</a></td></tr><tr><td><i class="fa-boxes-stacked">:boxes-stacked:</i></td><td><strong>Bundles</strong></td><td>Build fixed or dynamic bundles</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FNiT1FTSm12B8cKRfvWzx%2Fcard-frame-grad-green.jpg?alt=media&amp;token=0c25c8fd-1c64-4bfd-9911-e829b4aab7a0">card-frame-grad-green.jpg</a></td><td><a href="/bundles/fixed-vs-variant-bundles">Fixed vs variant bundles</a></td></tr><tr><td><i class="fa-wpforms">:wpforms:</i></td><td><strong>Forms</strong></td><td>Collection data, additional fields on purchases, or sync data into profiles.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7qxVMVbfTZQbzVQ2mqgw%2Fcard-frame-grad-yellow.jpg?alt=media&amp;token=d37d4b1f-fec3-40f7-b7a7-025c9be012e3">card-frame-grad-yellow.jpg</a></td><td><a href="/forms/building-with-forms">Building with forms</a></td></tr><tr><td><i class="fa-robot">:robot:</i></td><td><strong>Integrations</strong></td><td>Roadmap is native, with data stored at metaobject level - powering smart, fast integrations.</td><td><a href="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FNiT1FTSm12B8cKRfvWzx%2Fcard-frame-grad-green.jpg?alt=media&amp;token=0c25c8fd-1c64-4bfd-9911-e829b4aab7a0">card-frame-grad-green.jpg</a></td><td><a href="/integrations/platform-integrations">Integrations</a></td></tr></tbody></table>


# Why Roadmap?

Why lifestyle brands choose Roadmap over a stack of disconnected apps.

Roadmap is a strong fit for lifestyle brands because it brings growth, retention, and merchandising into one native Shopify ecosystem.

That matters when your brand needs speed, consistency, and less app sprawl.

### Why lifestyle brands choose Roadmap

Lifestyle brands rarely need one isolated tool.

They need loyalty, reviews, bundles, subscriptions, promotions, and segmentation to work together.

Roadmap brings those together in one platform.

That gives brands:

* fewer apps to install, manage, and pay for
* one shared customer, product, and order context
* less duplicated setup across teams
* a more consistent storefront experience
* faster campaign launches

### What sets Roadmap apart

Roadmap is built as a single native ecosystem.

It is not a loose bundle of disconnected tools.

Across the platform, brands can run:

* loyalty and referrals
* reviews and review syndication
* subscriptions
* discounts and Gift with Purchase
* bundles
* forms and data capture
* customer access rules with Tag Library
* Shopify POS workflows
* B2B and trade experiences

This matters because each part can support the others.

A brand can reward reviews with loyalty points.

It can trigger flows from customer actions.

It can run offers by tag, loyalty status, or purchase history.

It can carry the same experience from storefront to POS.

### Native integrations are a core strength

Roadmap is built around native Shopify data.

It is designed as a native platform, with data stored at metaobject level to support smart, fast integrations.

That creates cleaner connections and better reuse across the stack.

In practice, brands can connect Roadmap with tools such as:

* Klaviyo
* Shopify POS
* Google Shopping
* Google Sheets
* Retail Express
* Shopify B2B

The advantage is not only that integrations exist.

The advantage is that the same loyalty, review, promotion, and customer data can be used across the platform without heavy custom glue.

{% hint style="info" %}
For product-level detail and brand examples, see [roadmap.so](https://roadmap.so/).
{% endhint %}

### Why this matters for growth

Lifestyle brands usually compete on brand, repeat purchase, and customer experience.

Roadmap supports that directly.

Use it when you want to:

* grow repeat purchase with loyalty, tiers, referrals, and subscriptions
* add trust with product and store reviews
* lift AOV with bundles, discounts, and Gifts with Purchase
* segment experiences by audience, tags, or membership
* keep online and retail experiences aligned
* reduce operational overhead from too many point solutions

### Built for real ecommerce teams

Roadmap is not only a feature set.

It is also an operating model.

The platform combines native Shopify workflows, managed infrastructure, and direct human support.

Roadmap runs on a modern managed stack with serverless infrastructure, PostgreSQL, GCP, and Cloudflare protection.

That helps growing brands reduce technical risk and day-to-day friction.

### In short

Roadmap if the ideal choice for brands who want one platform to handle the parts of commerce that usually get split across multiple apps.

It is a strong choice for lifestyle brands that want native Shopify workflows, strong integrations, less complexity, and a more connected customer experience.

### Related reading

* [Technology](/getting-started/technology)
* [Customer Support](/getting-started/customer-support)
* [Required Shopify permissions](/getting-started/shopify-permissions)


# Shopify permissions

When Roadmap is installed on your Shopify store, it requests certain permissions to function properly. These permissions allow Roadmap to connect with your store data, display widgets on your storefront, and keep everything in sync.

This article explains which permissions are required and why we need them, so you can feel confident about how Roadmap works with your store.

{% stepper %}
{% step %}

#### Products

**Why?** Roadmap needs access to your products so it can:

* Create bundles and discounts (including GWP promotions).
* Display reviews on product pages.
* Apply loyalty or subscription rules to specific products or collections.
  {% endstep %}

{% step %}

#### Customers

**Why?** Roadmap uses customer data to:

* Track loyalty points, referrals, and tier progression.
* Segment customers with tags.
* Sync loyalty, review, and subscription data with Klaviyo.
  {% endstep %}

{% step %}

#### Orders

**Why?** Order access lets Roadmap:

* Award loyalty points for purchases.
* Track subscription renewals and billing events.
* Measure performance in analytics (AOV, conversion, churn).
  {% endstep %}

{% step %}

#### Themes & Storefront Content

**Why?** Roadmap needs limited theme access to:

* Inject lightweight code for widgets (loyalty, reviews, bundles, etc.).
* Provide app blocks that you can place via the Shopify theme editor.
* Ensure widgets display correctly in cart, checkout, and POS.
  {% endstep %}

{% step %}

#### Checkout (where supported)

**Why?** Roadmap integrates with Shopify checkout to:

* Apply loyalty redemptions and discounts.
* Display bundles and GWPs at checkout.
* Allow subscription checkout flows.
  {% endstep %}

{% step %}

#### Analytics & Reports

**Why?** Analytics access allows Roadmap to:

* Combine data from loyalty, reviews, subscriptions, and bundles into unified dashboards.
* Provide insights on performance and customer retention.
  {% endstep %}
  {% endstepper %}

### Important Notes

* Roadmap only requests the permissions necessary for its features.
* All permissions are handled through Shopify’s secure app framework.
* You can review and manage permissions at any time in your **Shopify admin → Settings → Apps and sales channels**.

### Summary

Roadmap requires access to **products, customers, orders, themes, checkout, and analytics** to power its features. These permissions ensure Roadmap can apply loyalty points, create bundles, run subscriptions, display reviews, and generate reports — all while staying fully integrated with Shopify’s secure platform.


# Testing and checks

### What “working correctly” means in Roadmap

In Roadmap, a successful test depends on what you built:

* **Gift with Purchase (GWP):** the offer is working when the **free gift line item** is **automatically added to the cart** after the shopper meets your rules (it may not show as a price discount).
* **Discount offers:** the offer is working when the cart/checkout shows the expected discount based on your promotion’s **Conditions** and **Customer Eligibility**.
* **Loyalty & referral discounts:** these typically come from **Redeem points → Ways to redeem** (points redemptions) or the **Referral Program** (referral reward type set to **Discount**).

If you’re only looking for a price change, you can miss a working GWP. Always watch for the **free gift** being added to cart.

***

### Pre-test setup (do this once)

* **Use two test shoppers:**
  * One customer who can checkout as a guest
  * One real customer account that can **log in** (especially important if you test **Logged in only customers** or **Members**)
* **Pick a simple test cart:** use products/variants you can easily add/remove to meet thresholds (for example, to hit a **Minimum Spend**).

***

### Core checklist: test a discount or GWP end-to-end

Confirm the promotion is running

Go to **Discounts / Gift with Purchase** and locate your promotion using the tabs:

* **All**, **Active**, **Scheduled**, **Expired**, **Draft**

Open the promotion and confirm:

* **Status** is set to **Active**
* **Active Dates** → **Start date** / **Start time** has passed
* If enabled, **Set end date** hasn’t already ended

If you expected it to run but it’s in **Scheduled**, your setup may be correct—your timing isn’t.\\

Match the Conditions exactly

In the promotion, review the **Conditions** section, then build a test cart that matches the condition type you selected (common examples include **Minimum Spend**, **Buy X Get Y**, and **Buy A+B+C Get Y**).

* If it’s product-based, confirm you added the exact products/variants and quantities required.
* If it’s spend-based, confirm the cart reaches the amount shown in **If the customer spends at least…**

Validate Customer Eligibility with the right shopper

In the promotion, open **Customer Eligibility** and verify your test shopper matches what you selected, such as:

* **All customers** vs **Logged in only customers**
* **Customers tagged with** / **Customers NOT tagged with**
* **Customers in specific countries** / **Customers NOT in specific countries**
* **Customers with order history**
* **Members** / **Non-members**

If eligibility is **Logged in only customers** or **Members**, a guest checkout test will fail. Test using a logged-in customer account.

If eligibility is Members, confirm tiers are selected

When **Customer Eligibility** is set to **Members**, confirm you selected at least one tier in the picker labeled **Enter membership tiers…** (for example, `Level 2`).

If no tiers are selected, the promotion won’t trigger for anyone.

![Customer Eligibility set to Members with a membership tier selected](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/wXc3ZH59SfsBsVAzz8NS/Screenshot_2026%2002%2022_at_7.03.41_PM.png)

For GWPs: verify Free Gifts settings

If you’re testing a GWP, open **Free Gifts** and confirm:

* You selected the gift variant using **Search variants** or **Browse**
* **Maximum number of uses per order** is set the way you expect (many stores use 1)
* Optional: **Note** contains your customer-facing message (shown on the cart page)

If the gift variant can’t be added to cart, you may not see the free gift line item even when Conditions and Eligibility are correct.

Retest with conflicts removed

{% stepper %}
{% step %}
Go back to **Discounts / Gift with Purchase**.
{% endstep %}

{% step %}
Temporarily pause other **Active** promotions that could apply to the same cart.
{% endstep %}

{% step %}
Retest with only one promotion enabled.
{% endstep %}
{% endstepper %}

Conflicting promotions are one of the most common reasons “everything looks right” but the checkout result isn’t.

***

### Quick pass/fail checks (copy/paste)

* **Pass:** Promotion is **Active**, **Active Dates** are in-range, cart matches **Conditions**, shopper matches **Customer Eligibility**, and you see the expected discount or the **free gift line item** in cart.
* **Fail:** Any mismatch in **Status**, dates, conditions, eligibility (especially guest vs logged in), or membership tiers.

***

### Troubleshooting (common test failures)

My GWP ‘works’ in the app but I don’t see a discount at checkout+

That can be expected. For a GWP, the success signal is the **gift product line item** being **added to the cart**, not necessarily a price reduction.

It works for some customers but not others+

This is almost always caused by **Customer Eligibility**.

* If you used **Customers tagged with**, confirm the customer actually has the tag.
* If you used **Customers in specific countries**, confirm the shipping address matches your allowed countries.
* If you used **Members**, confirm the customer is in a selected tier under **Enter membership tiers…**.

A loyalty or referral discount seems to change what happens+

That’s normal—codes and redemptions can change what applies at checkout.

* **Loyalty discount coupons:** created via **Redeem points → Ways to redeem**.
* **Referral discounts:** configured in the **Referral Program** when the reward type is **Discount**.

To isolate your test, retry without entering codes and pause other active promotions in **Discounts / Gift with Purchase**.

***

### If you need to share results with support

Capture these details from your test run:

* Promotion name from **Discounts / Gift with Purchase**
* **Status** and **Active Dates** (start/end)
* The cart you tested (products/variants, quantities, subtotal)
* Whether you tested as guest or logged in
* The **Customer Eligibility** option you selected (including membership tier(s), tags, country rules, etc.)
* Any other promotions that were **Active** during the test

Avoid duplicating promotions as a “quick fix.” Duplicate offers can overlap and make testing results unpredictable.\\

***

### Related reading

* Why are discounts not applying correctly?\
  A deeper checklist for status, schedule, eligibility, and stacking conflicts.
* Why isn’t my GWP showing at checkout?\
  Step-by-step troubleshooting for GWPs, including Free Gifts setup.
* Combine GWPs with loyalty rewards or bundles\
  Best practices for running multiple offers without overlap.


# How the Universal Styler works

Style every Roadmap block at once. Set your brand colors, border radius, card style, and spacing in the Universal Styler and apply them to all loyalty, reviews, and cart widgets.

The **Universal Styler** gives every Roadmap block one shared visual identity. Set your brand colors and layout preferences once, click **Apply to all**, and every widget across loyalty, reviews, and cart inherits them. It's the fastest path from install to on-brand.\
\
We recommend using the Styler to set a solid foundation of the widgets, then proceed with finer tweaks within each widget.

### Open the Universal Styler

Click **Universal Styler** at the top of the **Loyalty Program**, **Reviews**, or **Subscriptions** page. It opens as a full-screen modal: settings on the left, a live block preview on the right.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FUleZV69b5be3kPvxdwyk%2FScreenshot%202026-09-02%20at%202.22.46%E2%80%AFPM.png?alt=media&#x26;token=d8e1b3f5-96f7-4ecf-9413-585a9f33fc0c" alt=""><figcaption></figcaption></figure>

### Set your brand identity

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Ffr3kDkY1BwvLa8ltGtgL%2FScreenshot%202026-09-02%20at%201.27.21%E2%80%AFPM.png?alt=media&#x26;token=7057a514-cf77-437a-9514-225ea621e153" alt=""><figcaption></figcaption></figure>

Two groups of settings drive everything:

**Color Identity**

* **Brand Color**: your primary color, pushed into buttons, badges, and highlights.
* **Background Color**: the base surface behind blocks and cards.
* **Text Color**: primary copy color.
* **Accent Color**: secondary emphasis, used for hovers and applied states.

**Spatial & Typography**

* **Border Radius**: Sharp, Soft, Rounded, or Pill.
* **Card Style**: Outlined, Filled, or Subtle.
* **Font Size**: S, M, or L.
* **Spacing Density**: Compact, Default, or Relaxed.

### Preview any block

Use the dropdown at the top of the modal to preview any Roadmap block with your settings applied: the loyalty blocks (Banner, Ways to Earn, Ways to Redeem, Product Redeemer, Customer Rewards, Progress Bar, Referrals, FAQs, Points Earned, Cart Redeemer, and the legacy-accounts Dashboard), the Reviews PDP block and Reviews Form, and the Cart blocks (Recommended Products, Free Shipping Bar, Announcement Bar). A **Logged in / Logged out** toggle shows both states.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FOQfoC56UAC1RBdkhMJyF%2FScreenshot%202026-09-02%20at%202.25.02%E2%80%AFPM.png?alt=media&#x26;token=7da0297a-b077-4f4e-b4f0-b2baf870393e" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The preview shows the **Styler's settings only**. If you've made manual edits inside an individual widget, those overrides are not reflected in this preview. Click **More options** to jump to that widget's individual editor and see it as configured.
{% endhint %}

{% hint style="info" %}
The **Product Subscription** widget is joining the Universal Styler shortly. Until then, style it from **Subscriptions → Edit Subscription Widget**.
{% endhint %}

### Apply to all

Click **Apply to all** and the Styler pushes your settings into every block. A confirmation tells you exactly what happened, for example: *Updated 388 fields across 17 widgets. 13 customised fields preserved.*

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FaWBGqm3yoZeETCcntyYf%2FScreenshot%202026-09-02%20at%202.26.02%E2%80%AFPM.png?alt=media&#x26;token=bbc8cedf-04a9-4708-9a50-cb9b3e3f658c" alt=""><figcaption></figcaption></figure>

### Styler fields vs Edited fields

Inside each individual widget editor (found in the 'more options' tab in the universal editor or via the 'edit loyalty widgets' tab in the main loyalty dashboard), every field shows where its value came from:

* A blue **Styler** tag: the field inherits its value from the Universal Styler.
* A green **Edited** tag: the field was changed manually in that widget.

**Apply to all never overrides an Edited field.** Your deliberate one-off tweaks survive every re-apply, so the workflow is: set your base in the Universal Styler, then fine-tune individual widgets where needed.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FjKqBefmtBfHGjqSo18sv%2FScreenshot%202026-09-02%20at%201.30.13%E2%80%AFPM.png?alt=media&#x26;token=4e54f73d-674a-4b69-8786-a0a589fa94dd" alt="" width="375"><figcaption></figcaption></figure>

### Reset overrides

**Reset overrides** (in the modal header) removes **all** manual edits from every individual widget. After a reset, the next **Apply to all** updates every field, including ones you had previously customised in the widget editors. A confirmation modal explains this before anything happens.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FM8LryOTPv5zTsh09SMMQ%2FScreenshot%202026-09-02%20at%201.31.40%E2%80%AFPM.png?alt=media&#x26;token=0a985d01-55b0-4030-ae17-1e3c6dbaa73b" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="warning" %}
For deeper customisation of each widget, edit it in that widget's editor instead.
{% endhint %}

### Related guides

* [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets)
* [Configure the cart point redeemer](/loyalty-and-rewards/points-and-ways-to-earn/configure-the-cart-point-redeemer)
* [Show points earned on product pages](/loyalty-and-rewards/points-and-ways-to-earn/show-points-earned-on-product-pages)
* [Cart Announcement Bar](/cart-and-checkout/cart-announcement-bar)


# Klaviyo integration

Connect Roadmap to Klaviyo once and every product syncs: loyalty, subscription, and review metrics for flows, profile properties for segments, and controls for bundles.

Connect Roadmap to Klaviyo once and everything syncs automatically: **metrics** fire into Klaviyo as events happen (for triggering flows), and **profile properties** keep each customer's loyalty, subscription, and review standing written to their Klaviyo profile (for segments, splits, and email content).

### Where it lives

In the Roadmap app, go to **Settings → Klaviyo Integration**. Three areas:

* **Klaviyo Profile**: the profile properties Roadmap writes to customers, with a **Manual Sync** button.
* **Klaviyo Metrics**: the event metrics Roadmap fires, with per-metric controls and a **Sync Metrics** button.
* **Connection Settings**: manage your Klaviyo API keys.

### Connect your Klaviyo account

Add your Klaviyo API key under **Connection Settings** (both sync pages also show a banner linking to it until a key is saved). For generating the key in Klaviyo, follow [How to integrate Roadmap with Klaviyo](https://docs.roadmap.so/reviews/integrations/klaviyo-review-integration/how-to-integrate-roadmap-with-klaviyo): it's one setup shared by every Roadmap product.

### Klaviyo Profile: the properties

Properties sync automatically and update when an order is placed or points and membership data change. **Manual Sync** pushes everything on demand. Three tabs:

* **Loyalty**: 15 properties covering points balance, tiers, expiry dates, and spend. Full list and email snippets: [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets).
* **Subscriptions**:

| Data point                   | Klaviyo property                              |
| ---------------------------- | --------------------------------------------- |
| Has active subscription      | `person.roadmap_has_active_subscription`      |
| Lifetime subscription orders | `person.roadmap_lifetime_subscription_orders` |
| Has paused subscription      | `person.roadmap_has_paused_subscription`      |

* **Reviews**:

| Data point           | Klaviyo property                      |
| -------------------- | ------------------------------------- |
| Latest review rating | `person.roadmap_latest_review_rating` |

### Klaviyo Metrics: the events

Metrics sync to Klaviyo automatically when the related event occurs. After install, click **Sync Metrics** once so they appear in Klaviyo for the first time. Three tabs:

* **Loyalty**: 12 metrics from welcome through referrals, some with their own controls (**Set Alert** on Points Expiring and Tier Demotion Alert, **Set Time / Send Now / Enabled** on Monthly Update, **Filter Products** on the order metrics). Full guide: [Loyalty × Klaviyo: overview](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview).
* **Subscriptions**: Subscription created, canceled, paused, failed, payment failed, and Upcoming order.
* **Reviews**: Eligible for Review Request (fires when an order containing eligible products for review is fulfilled), Review Submitted, Review reply, and Question answer, each with **Filter Products** to scope which products fire it. **Sync reviews to klaviyo catalog** pushes your reviews to Klaviyo for use in emails: see the [Klaviyo Review Integration guides](https://docs.roadmap.so/reviews/integrations/klaviyo-review-integration).

To keep utility products like gift wrapping out of your events, use **Filter Products**, per metric or across all metrics at once: see [Excluding products from Klaviyo metrics (Filter Products)](/getting-started/klaviyo-integration/excluding-products-from-klaviyo-metrics-filter-products).

### Bundle Metrics

**Show bundles as a single product in Roadmap metrics**: when enabled, the *Placed Order (Roadmap)* and *Eligible for a Roadmap review* metrics use the bundle's product ID and title instead of the individual constituent products. Turn this on if your flows should treat a bundle as one item.

### Where each product's guides live

* **Loyalty**: [Loyalty × Klaviyo: overview](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview) and the per-flow guides alongside it.
* **Reviews**: [Klaviyo Review Integration](https://docs.roadmap.so/reviews/integrations/klaviyo-review-integration): review request flows, review snippets in emails, and conditional splits.
* **Subscriptions**: the subscription metrics above power flows like the [Klaviyo win-back flow for cancelled subscriptions](/subscriptions/subscriptions-klaviyo-integration/klaviyo-win-back-flow-for-cancelled-subscriptions).
* **Forms**: storefront forms can send submissions to Klaviyo, configured per form in the form's settings: see [Forms](https://docs.roadmap.so/forms).


# Excluding products from Klaviyo metrics (Filter Products)

Stop gift wrapping, sample swatches, and other utility products from appearing in your Klaviyo flow emails by excluding them from Roadmap's metric event properties, per metric or across all metrics at

Roadmap's order-based metrics carry the order's products in their event properties, which is what lets a Klaviyo flow email show what the customer bought. Utility items pollute that personalisation: nobody wants their post-purchase email leading with the gift wrapping. **Filter Products** excludes chosen products or variants from a metric's event properties, and you can apply it to a single metric or to every Roadmap metric at once.

### Where to find it

In the Roadmap app, go to **Settings → Klaviyo Integration → Klaviyo Metrics**. There are two places to filter:

* **Per metric**: metrics that support filtering show a **Filter Products** button in the **Actions** column. On the **Loyalty** tab that's the two order metrics, **Placed Order (Roadmap)** and **Roadmap: Checkout Started**. On the **Reviews** tab, all four review metrics have one.
* **All metrics**: the **Filter Products** button at the top of the page (next to **Sync Metrics**) opens *Filter Products - All Metrics*. Exclusions saved here apply to **every Roadmap metric** across the Loyalty, Subscriptions, and Reviews tabs.

Both open a similar modal: an exclusion list for products and one for variants.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fkd82otug9hqNBTCfGkUt%2FScreenshot%202026-09-07%20at%2012.07.01%E2%80%AFPM.png?alt=media&amp;token=cbd5b54b-247e-44a6-ba02-314bb83af462" alt=""><figcaption></figcaption></figure>

### Exclude products or variants

{% stepper %}
{% step %}

#### Open the filter

Click **Filter Products** next to a metric (the modal is titled with that metric's name, for example *Filter Products - Placed Order (Roadmap)*), or the page-level **Filter Products** button to filter *All Metrics*.
{% endstep %}

{% step %}

#### Select products to exclude in metric properties

Search for a product or click **Browse**. Each excluded product appears in the list; remove one using the **X.**
{% endstep %}

{% step %}

#### Select variants to exclude in metric properties

Use the second list when only certain variants should be excluded, for example a sample-size variant of a product you otherwise want in emails.
{% endstep %}

{% step %}

#### Save

Click **Save**. From now on, the filtered metrics leave the excluded items out of their event properties.
{% endstep %}
{% endstepper %}

### What filtering changes

* Excluded products and variants stop appearing in the metric's **event properties**: the product titles, ids, and images your flow emails and product blocks read.
* **An order containing only excluded products doesn't fire the metric at all.** A gift-wrapping-only order, for example, triggers no *Placed Order (Roadmap)* event and therefore no flow.
* A per-metric filter applies only to that metric. Use the **All Metrics** filter to exclude a product from every Roadmap metric in one step.
* Good candidates: gift wrapping, sample swatches, shipping protection, and free-gift products.

{% hint style="info" %}
Filter Products only changes what Roadmap sends to Klaviyo. It has no effect on loyalty point earning, order processing, or anything on the storefront.
{% endhint %}

### Filtering review requests

The most common use of Filter Products is on the **Reviews** tab's **Roadmap: Eligible for Review Request** metric. Excluding your utility products there means a fulfilled order of gift wrapping or sample swatches never asks the customer to review them, and they stay out of the review request email's product list. **Review Submitted**, **Review reply**, and **Question answer** can be filtered the same way. See the [Klaviyo Review Integration guides](https://docs.roadmap.so/reviews/integrations/klaviyo-review-integration) for the flows these metrics power.

### Related guides

* [Klaviyo integration](/getting-started/klaviyo-integration): the full tour of metrics, profile properties, and Bundle Metrics (which controls whether bundles appear as one product or their components)
* [Loyalty × Klaviyo: overview](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview)


# Sidekick Integration

Ask Shopify's Sidekick assistant about your Roadmap data: loyalty, referral, review, subscription, churn, discount, and bundle reports, plus direct lookups of customers, subscriptions and more!

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FY13WuXvYKfxLPok5X2g2%2FScreenshot%202026-09-03%20at%204.27.55%E2%80%AFPM.png?alt=media&amp;token=af7f6f51-a0eb-43db-8c5d-f92aa7e695e0" alt=""><figcaption></figcaption></figure>

**Sidekick** is Shopify's AI assistant, built into the Shopify admin. With Roadmap installed, Sidekick can read your Roadmap data: ask a question in plain language and it answers from your live loyalty, subscriptions, reviews, discounts, bundles, forms, and Tag Library data.

Everything is **read-only**: Sidekick can report and look things up, but it never changes your Roadmap configuration or customer data.

### First-time access

The first time you ask Sidekick a Roadmap-related question, it asks for permission to access your Roadmap app data:

> *Allow Sidekick to access your Roadmap app data to answer questions about loyalty points, customers, and more?*

Choose **Yes** to allow it for that conversation, or **Yes, and don't ask again** to grant it permanently. That's the whole setup: from then on, just ask.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FFghMC0fRGKRWaPNs1WSm%2FScreenshot%202026-09-03%20at%204.16.15%E2%80%AFPM.png?alt=media&amp;token=0eeb0882-7f26-4101-bfa8-cdb4dabee8c2" alt="" width="356"><figcaption></figcaption></figure>

### Reports and numbers

Every report compares against the previous period, so you see trends rather than just totals.

**Loyalty report**: how much members spend versus non-members, across sales, orders, and average order value. Narrow it down by membership tier, where members came from, whether they redeem points, or by market.

> "How much more do loyalty members spend than non-members this month?"

**Referral report**: sales from customers referring friends, plus referral emails sent, how many people referred, how many new customers arrived, and what share of customers participate.

> "How much revenue did referrals bring in this quarter?"

**Review report**: total reviews, average star rating, how many are still unpublished, the 1-to-5-star breakdown, a trust score from verified reviews, your most-reviewed products, and a 12-month trend.

> "What's our average star rating, and how many reviews are waiting to be published?"

**Subscription report**: how many subscribers are active, new, or cancelled, total subscription revenue, the churn rate, and how long subscriptions typically last.

> "How is subscription churn trending?"

**Churn report**: the last 30 days of cancellations and pauses: how many customers tried to leave, how many were won back (save rate), how long pauses usually last, and the number one reason people give for cancelling.

> "What's the top cancellation reason this month, and what's our save rate?"

**Discount report**: overall sales, orders, and conversion driven by discounts and gift-with-purchase campaigns, plus a per-campaign breakdown so you can see which ones actually work.

> "Which discount campaign drove the most sales?"

**Bundle report**: total sales from product bundles, and a per-bundle breakdown showing units sold and revenue, ranked best-seller first.

> "How are our bundles selling?"

### Looking things up

Browse lists or fetch one specific item:

**Loyalty customers**: browse your members with their point balance, tier, and total spend. Search by name or email, or filter to one tier.

**One customer's loyalty**: everything about a single customer's loyalty: points, tier and when they reached it, plus coupons they haven't used yet and ones they've used before.

> "What's <jane@example.com>'s points balance, and does she have any unused coupons?"

**Subscriptions**: the shop's subscription list, sorted by who's due to be billed next (a past date means overdue). Filter by status, payment status, payment method, or search for a customer.

> "Which subscriptions are overdue for billing?"

**Reviews**: find reviews, product questions, or store reviews. Filter by status (published or hidden), product, or rating.

> "Show me all the 1-star reviews."

**Discounts**: the shop's discount and gift-with-purchase campaigns, filterable by active, scheduled, or expired, or by discount type.

**Forms**: the shop's storefront forms with their names and submission counts. Ask about one specific form and you get its full setup: fields, confirmation and notification emails, and integrations like Klaviyo or Google Sheets.

**Tags**: Tag Library tags and what each one targets. Ask about one tag and you get its full rules: which products or collections it applies to, which pages, and when it's active.

**Bundles**: the shop's product bundles with their discount and exactly which products each bundle contains.

{% hint style="info" %}
Sidekick itself is a Shopify feature: its availability on your store is controlled by Shopify, not Roadmap. If Sidekick is available in your admin, the Roadmap data will be readily available to pull.
{% endhint %}

### Related guides

* [Loyalty analytics](/loyalty-and-rewards/loyalty-analytics)
* [Manage loyalty customers](/loyalty-and-rewards/customer-management/manage-loyalty-customers)


# The Roadmap Change Log

Keep up with everything Roadmap ships: the Change Log button in the header of every Roadmap screen takes you to the changelog, and every entry links to its documentation.

Roadmap ships new functionality constantly, across loyalty, subscriptions, reviews, trade, bundles, and the cart. The **Change Log** is where you catch up: every product update in one feed, newest first, each with a plain-language summary and a link to its documentation.

### Where to find it

The **Change Log** button sits in the header of every Roadmap screen, next to **Help Center**. It takes you to the changelog on the web, [docs.roadmap.so/changelog](https://docs.roadmap.so/changelog), the Changelog tab of this help center. Bookmark it and you can check what's new without opening the app at all.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F9PbD1ILPDFtcmSLHNo2A%2FScreenshot%202026-09-09%20at%2012.19.48%E2%80%AFPM.png?alt=media&amp;token=09e07d8f-a741-4996-8d12-24a3b279d8f8" alt=""><figcaption></figcaption></figure>

### What each entry gives you

* What shipped and what it does for your store.
* **Product feature** bullets with the details worth knowing.
* A **Read the documentation** button through to the full guide.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FOvI8OOzxTrMLa2mnhUsm%2FScreenshot%202026-09-09%20at%201.56.59%E2%80%AFPM.png?alt=media&amp;token=93feac60-0c35-4aae-8071-a843b9d4ad0b" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
New features land in the Change Log, so it is the fastest way to find functionality you didn't know you had.
{% endhint %}

#### Related guides

* [Customer Support](/getting-started/customer-support)
* [Feature Requests](/getting-started/feature-requests)


# Customer Support

Dedicated support for all Roadmap clients and partners

Roadmap is run by humans, with the goal of providing human support.

All brands on Roadmap can access direct custom support via the intercom chat within the Roadmap app at the bottom right of their window.

Our New Zealand team is online between 9am-6pm NZT and if there is any urgent support needed, we are available to provide video, phone, and email support.

The Roadmap platform is a partnership business, not a faceless VC SaaS venture where only the top 3% of brands are looked after.

### Strategic Support

Roadmap is run by our strategic ecommerce team with the goal of not just providing technical support, but also strategic support.

Please keep an eye on the change log tab above and the upcoming "Paths" tab that will start to house strategic implementation resources, walkthroughs and strategies.


# Feature Requests

"The art of great business is being a great middle man" - Eddie Temple | Layer Cake

Our goal with Roadmap is to provide a single native ecosystem, and hearing feedback from our brands is highly valued and appreciated.

We welcome insights and requests to improve the platform, but, as humans, focusing on quality, we review each request on its merits and ensure that before time or resource investment, it is likely to benefit the wider collective of brands and partners on Roadmap.

If you need further support which is specific to your website, then these types of requests are more suited to an agency engagement of work, not a Roadmap feature request.

We are nice humans, who like working with nice humans, so any requests that do not full into Roadmap services should be refered to your studio or agency partner.


# Technology

A look under the skin

Roadmap is built on [Gadget](https://gadget.dev/), a full-stack platform used to build, run, host, and scale the application.

This page covers the core technology and security controls that apply to Roadmap itself.

### Application stack

Roadmap runs on a modern managed stack:

* **Frontend:** Vite
* **Backend:** Node.js with npm
* **Database:** PostgreSQL
* **Cloud platform:** Google Cloud Platform (GCP)
* **Hosting model:** Serverless infrastructure

This setup keeps the application fast to deploy, easy to scale, and operationally lightweight.

### Security overview

Roadmap benefits from several built-in platform protections:

* **DDoS protection:** Traffic is protected by Cloudflare.
* **Backend guardrails:** Gadget enforces backend best practices for secure application development.
* **Managed operations:** Infrastructure is fully managed with 24/7 DevOps monitoring.
* **Service reliability:** Service level objectives are included as part of the managed platform.

{% hint style="info" %}
This overview covers the infrastructure used to run Roadmap. It does not cover Shopify's own platform controls or any third-party tools connected separately to your store.
{% endhint %}

### Performance and scalability

Roadmap is designed to run on serverless infrastructure.

That allows the application to scale with demand without requiring fixed server capacity. It also reduces operational overhead and supports lower-latency request handling on managed cloud infrastructure.

Gadget also provides built-in platform support for:

* Security
* Scalability
* Data retention
* Disaster recovery

### Enterprise deployment options

For merchants with stricter infrastructure requirements, enterprise deployment options may include:

* Custom rate limits
* Greater control of data
* Lower latency targets
* Custom SLAs

If you need detail beyond this summary, contact the Roadmap team for a platform-specific review.


# Getting Started

### What a loyalty program is (on Shopify)

A Shopify loyalty program rewards customers for actions that grow repeat purchase behavior—like placing orders, creating an account, referring friends, or engaging with your brand. Most programs combine a few building blocks:

* **Points:** Customers earn points and redeem them for rewards (discounts, free shipping, gifts, etc.).
* **Tiers (VIP):** Customers unlock higher benefits as they spend more or earn more points.
* **Referrals:** Customers share a link/code. The friend gets an incentive and the advocate gets a reward after a successful referral.
* **On-site widgets:** A visible loyalty experience on your storefront so customers can see how to earn and redeem.

Shopify doesn’t include a full loyalty system out of the box for most stores, so loyalty is typically delivered through an app that adds earning/redeeming rules plus storefront widgets.\\

### Roadmap’s Loyalty options

In Roadmap, loyalty is organised as a single **Loyalty Program** area with four sections you can manage:

![Roadmap Loyalty Program page showing Points, Membership Tiers, Referral Program, and Manage Customers](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/wGJ89u7E4V4G1Hmgw9k9/Screenshot_2026%2002%2022_at_4.14.45_PM.png)

* **Points** — “Customise your loyalty points program (e.g. ways to earn, ways to redeem, etc.).”
* **Membership Tiers** — “Setup and manage customer membership tiers.”
* **Referral Program** — “Setup and manage referral program.”
* **Manage Customers** — “Manage customer loyalty points and membership tiers.”

At the top of the Loyalty Program page, you’ll also see:

* **Edit Loyalty Widgets** — where you control the storefront loyalty widgets customers interact with.
* **Contact Support** — if you need help configuring your program for your brand’s use case.\\

### Recommended setup path (most brands)

* Start with Points\
  Open **Loyalty Program** → **Points** to define how customers earn and what they can redeem for. This becomes the foundation for the rest of your loyalty experience.
* Add Membership Tiers (VIP)\
  Go to **Membership Tiers** to create tier levels and benefits. Use tiers when you want higher spenders to unlock better rewards automatically.
* Turn on Referrals\
  Open **Referral Program** to set up advocate and friend incentives. Referrals work best when your store already has a few high-satisfaction products and repeat customers.
* Publish the customer-facing experience\
  Select **Edit Loyalty Widgets** to make sure your earning, redeeming, tier status, and referral experience is visible and easy to understand on your storefront.
* Monitor and adjust\
  Use **Manage Customers** to review customer points and tier status as you test changes, resolve support questions, or run targeted promotions.

If you’re launching loyalty for the first time, keep the program simple for the first 2–4 weeks (a small set of earning actions and a few clear rewards). Once customers understand the value, expand with tiers and additional ways to earn.\\

### How to choose the right Roadmap loyalty model

When should I use Points?\
Use **Points** when you want a clear, repeatable reward system customers can understand quickly. Points are ideal for encouraging repeat purchases and increasing customer lifetime value.

When should I add Membership Tiers?\
Add **Membership Tiers** when you want to recognize and retain your best customers with escalating benefits (VIP perks). Tiers are especially effective for brands with a wide range of customer spend levels.

When should I run a Referral Program?\
Use **Referral Program** when you want customers to help acquire new customers. Referrals tend to perform best when the offer is simple and the reward triggers are clear to both the advocate and the friend.

What is Manage Customers for?\
Use **Manage Customers** to review and maintain loyalty status for individual shoppers—helpful for customer support, resolving point questions, and checking tier progression.

### Common Shopify loyalty scenarios Roadmap supports

* **Launch a points program:** Start with **Points**, then publish widgets via **Edit Loyalty Widgets**.
* **Create a VIP program:** Configure **Membership Tiers** and communicate benefits with storefront widgets.
* **Grow acquisition with referrals:** Set up **Referral Program** and ensure the referral widget is easy to find.
* **Handle customer issues quickly:** Use **Manage Customers** to verify points and tier status when customers contact support.\\

Before announcing loyalty publicly, double-check your customer-facing messaging in **Edit Loyalty Widgets** so customers see accurate earning and redemption rules.


# Overview of the Loyalty Program dashboard

A tour of the Loyalty Program admin dashboard: where to find points, membership tiers, referrals, customer management, pending adjustments, and unused coupons.

When you open **Loyalty Program** in Roadmap, you land on the admin dashboard. Manage every part of your program from here.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F6U65Nn2twBSSKoU43zH5%2FScreenshot%202026-09-17%20at%209.54.34%E2%80%AFPM.png?alt=media&amp;token=dd78de78-67c8-4b93-b176-6fa51bfbdaef" alt="Loyalty Program dashboard"><figcaption><p>The Loyalty Program dashboard.</p></figcaption></figure>

#### The six management areas

* **Points**: customize ways to earn, [ways to redeem](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview), and more.
* **Membership Tiers**: manage tiers and membership eligibility settings.
* **Referral Program**: set up and manage your referral program.
* **Manage Customers**: view point history, tiers, and timelines. Adjust balances or redeem points for customers.
* **Pending Adjustments**: review point adjustments for fulfilled orders. A badge shows pending reviews.
* **Unused Loyalty Coupons**: find and [refund unused loyalty coupons](/loyalty-and-rewards/points-and-ways-to-earn/refund-an-unused-loyalty-coupon).

#### Header actions

* **D2C / B2B toggle**: switch between direct-to-consumer and B2B programs. It appears when B2B is enabled.
* **Universal Styler**: set shared colors and typography for loyalty widgets.
* **New Accounts Dashboard**: design the loyalty page inside new customer accounts. See [Customize the loyalty page in new customer accounts](/loyalty-and-rewards/getting-started/create-a-loyalty-page-in-new-customer-accounts).
* **Edit Loyalty Widgets**: edit each loyalty widget. See [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets) for how the two work together.
* **Change Log**: takes you to the product changelog at [docs.roadmap.so/changelog](https://docs.roadmap.so/changelog). It appears on every Roadmap screen: see [The Roadmap Change Log](/getting-started/the-roadmap-change-log).
* **Help Center**: browse guides or ask the GitBook Assistant a question.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FCuUKezItyKZgqzIdHbGt%2FScreenshot%202026-07-21%20at%201.10.28%E2%80%AFPM.png?alt=media&#x26;token=31d059a4-2ad9-4b97-bfb3-b258b93e4c25" alt="Help Center"><figcaption><p>The Help Center: browse by topic or ask the assistant a question.</p></figcaption></figure>

#### Related guides

* [Reward types: points, discounts, tiers, referrals](/loyalty-and-rewards/getting-started/reward-types-points-discounts-tiers-referrals)
* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)
* [Customize the loyalty page in new customer accounts](/loyalty-and-rewards/getting-started/create-a-loyalty-page-in-new-customer-accounts)
* [The Roadmap Change Log](/getting-started/the-roadmap-change-log)


# Reward types: points, discounts, tiers, referrals

Roadmap organizes loyalty rewards inside the **Loyalty Program** area. From here you can manage:

* **Points** (earn rules + redemption rewards)
* **Membership Tiers** (VIP tiers + tier-based benefits)
* **Referral Program** (advocate + friend incentives)

If you don’t see a reward type in your store, start from **Loyalty Program** and check whether it’s configured under **Points**, **Membership Tiers**, or **Referral Program**.\\

{% stepper %}
{% step %}

#### Points (the foundation)

Points are the core currency of your program. You configure them in **Loyalty Program** → **Place an order**.

#### Ways customers can earn points

On the **Loyalty Points** screen, the **Ways to earn** list controls which actions award points (and how many).

![Loyalty Points page showing Ways to earn with an Add way to earn button](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/Kwfq4JrHyr27VScYS3CO/Screenshot_2026%2002%2022_at_4.18.41_PM.png)

Open Ways to earn

Go to **Loyalty Program** → **Points** and find **Ways to earn**.

Add an earning action

Select **Add way to earn**.

Choose the earning type

Pick the action you want to reward (for example **Place an order**, **Account Signup**, **Celebrate a Birthday**, **Leave a review**, or **Customer Tag**).

Adjust the details

Use **Edit** next to an earning rule to change the points amount and any limits (for example a yearly limit on birthday points).

Keep your initial **Ways to earn** list short (2–5 actions). It’s easier for customers to understand, and easier for you to evaluate what’s working.

#### Ways customers can redeem points

Point redemption rewards are configured in **Redeem points** → **Ways to redeem**. These are the rewards customers can claim using the points they’ve earned.

![Redeem points section showing Ways to redeem with multiple Amount Discount rewards and an Add way to redeem button](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/jujF9bwBGZt8XOTBvikz/Screenshot_2026%2002%2022_at_4.19.12_PM.png)

Open Ways to redeem

Go to **Loyalty Program** → **Points** and scroll to **Redeem points**.

Create a reward

Select **Add way to redeem**.

Set point cost and value

Create redemption options (for example, an **Amount Discount** that lets customers redeem a set number of points for a set $ amount off).

Edit existing rewards

Use **Edit** next to a redemption reward to adjust point cost, discount amount, and any restrictions.
{% endstep %}

{% step %}

#### Discounts (coupons customers redeem)

In Roadmap Loyalty, discounts are typically offered as point redemption rewards—most commonly an **Amount Discount** in **Ways to redeem** (for example, “Redeem 200 Points for a $20.00 off coupon”).

If you want customers to “buy” discounts with points, configure them under **Redeem points** → **Ways to redeem** rather than under tiers.
{% endstep %}

{% step %}

#### Products (tier benefits and product-specific perks)

Product rewards are commonly delivered as tier benefits—especially when you want VIP members to receive a product-specific offer when they reach (or maintain) a tier.

#### Tier rewards (product-based perks)

In **Membership Tiers**, you can create **Customer Rewards** that trigger when a customer reaches a tier (or after they maintain a tier for a period of time). These rewards can be configured with product-focused restrictions (for example “100% off on 1 cart product”).

![Customer Rewards list showing Tier Reached and Time Completed rewards with an Add Reward button](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/RH5KnGe1yyVKNbC5BRpz/Screenshot_2026%2002%2022_at_4.19.25_PM.png)

Open Membership Tiers

Go to **Loyalty Program** → **Membership Tiers**.

Add a tier reward

In **Reward Customers** / **Customer Rewards**, select **Add Reward**.

Choose a trigger

Pick when it should trigger, such as **Tier Reached** or **Time Completed** (for example, “After 12 months in Level 2”).

Configure the benefit

Set the reward details (for example a product-specific discount like “100% off on 1 cart product”), plus any limits, expiry, or minimum spend.

Tier rewards can include limits and expiry. Double-check these settings before you announce your VIP benefits publicly so customers aren’t surprised at checkout.
{% endstep %}

{% step %}

#### Tiers (VIP levels and benefits)

Tiers are managed under **Loyalty Program** → **Membership Tiers**. Use tiers when you want to automatically unlock better benefits for your best customers (instead of relying only on point redemptions).

* **Tier structure:** Create multiple levels (for example, Level 1, Level 2, Level 3) and define how customers qualify.
* **Tier benefits:** Use **Customer Rewards** like **Tier Reached** and **Time Completed** to deliver perks at the right moment.
  {% endstep %}

{% step %}

#### Referrals (incentives for advocates and friends)

Referrals are configured in **Loyalty Program** → **Referral Program**. This is where you set up the referral flow and incentives for:

* **The friend** (the new customer who uses the referral)
* **The customer** (the existing customer who shared it)

Referrals work best when the reward is simple and the trigger is clear. After you set up referrals, review your storefront presentation in **Edit Loyalty Widgets** so customers can easily find and share their referral offer.
{% endstep %}
{% endstepper %}

\\

## Choosing the right reward mix

If you’re launching loyalty for the first time+

Start with **Points**: create a few **Ways to earn** and 2–4 **Ways to redeem** (often an **Amount Discount** at multiple point levels). Add **Membership Tiers** after you’ve validated your point economy.

If you want to push higher spend and retention+

Add **Membership Tiers** and use **Customer Rewards** like **Tier Reached** perks (for example, a product-specific reward) to make VIP status feel immediately valuable.

If you want more new customers+

Use **Referral Program** and make sure the referral experience is visible in your storefront loyalty widgets via **Edit Loyalty Widgets**.


# How to configure your point settings

Configure point naming, currency conversion, expiry, order adjustments, and who earns points on Shopify gift cards.

Your **Point settings** control how points are named, displayed, adjusted, and expire, and who earns them on gift cards.

Find them in **Loyalty Program** → **Points**. Scroll down to the setting options.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FfQqCcTxysFHKOlSw25pj%2Floyalty-point-settings.png?alt=media&amp;token=de35a04b-480e-4a07-9c20-522b16a8bc47" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Each setting saves separately. Update one section, then click **Save** in that section.
{% endhint %}

{% stepper %}
{% step %}

### Update points branding

Use **Points Branding** when you want your loyalty currency to match your brand.

* Click **Edit** in **Points Branding**.
* Set the **Singular** name for one point.
* Set the **Plural** name for multiple points.
* Click **Save**.

For example, you could rename points to **Jelly Bean** and **Jelly Beans**.

These labels appear in storefront loyalty messaging. Customers will see the updated naming anywhere your point balance or earning messages are shown.
{% endstep %}

{% step %}

### Set currency conversion

Use **Currency Conversion** to show the money value of points in each market.

* Turn on **Enable points currency conversion display**.
* Set the **default conversion rate**.
* Optional: turn on **Enable different rates for specific markets**.
* Add a market-specific rate where needed.
* Click **Save**.

Example:

* Default: **100 points = $1 NZD**
* Australia: **110 points = $1 AUD**
* United States: **150 points = $1 USD**

Leave a market row empty if you want that market to use the default rate.

{% hint style="warning" %}
These rates are display only. They change the money figure customers see next to their points, not what a reward is worth. Every reward is worth a fixed amount of your store's base currency, which Shopify converts at checkout. If a market rate is more generous than the live exchange rate, customers will see a bigger number than the discount they receive. See [How loyalty works across multiple currencies](/loyalty-and-rewards/getting-started/how-loyalty-works-across-multiple-currencies).
{% endhint %}
{% endstep %}

{% step %}

### Choose whether points expire

Use **Points Expiry** to decide whether points stay available forever or expire after a set time.

You have two options:

* **No expiry**\
  Points never expire.
* **Date earned**\
  Points expire after a set number of months from the date they were earned.

If you choose **Date earned**:

* Enter the **Validity Period**.
* Click **Save**.

When a customer redeems points, Roadmap uses the points closest to expiry first. Newer points are used last.
{% endstep %}

{% step %}

### Configure fulfilled order adjustments

Use **Order Adjustments** to control what happens to points after a fulfilled order changes.

This applies to events like:

* refunds
* partial refunds
* returns
* cancellations on fulfilled orders
* post-fulfillment item changes

Click **Edit** in **Order Adjustments** and choose one option:

* **Do not adjust points**\
  No automatic adjustment is created. You manage changes manually.
* **Require approval before adjusting**\
  Roadmap creates a pending adjustment that must be reviewed before points change.

For most stores, **Require approval before adjusting** is the safer option. It gives you a review step without losing automation.
{% endstep %}

{% step %}

### Decide who earns on gift cards

Use **Gift cards** to set **Who earns points on Shopify gift cards**. Choose one of:

* **No one**
* **The purchaser**
* **The redeemer**
* **Both purchaser and redeemer**

Click **Save**.

{% hint style="warning" %}
**Both purchaser and redeemer** awards points on the same spend twice. A customer can purchase a gift card, redeem it themselves, and earn points on both orders. The admin shows a caution banner when you pick it.
{% endhint %}

Whichever option you choose, the earning conditions on your **Place an order** rule still apply to gift cards. See [Who earns points on Shopify gift cards](/loyalty-and-rewards/points-and-ways-to-earn/who-earns-points-on-shopify-gift-cards).
{% endstep %}
{% endstepper %}

### Recommended setup

If you want the simple, easy to manage setup:

* Keep **Points Branding** clear and on-brand.
* Use **No expiry**.
* Leave **Currency Conversion** on the default rate only.
* Use **Require approval before adjusting**.
* Set **Gift cards** to **The purchaser**, which rewards the person actually spending with you.

If you sell in multiple markets:

* Turn on **market-specific rates**.
* Check each market uses the right currency.
* Leave unused markets blank so they inherit the default rate.
* Keep each market rate close to the live exchange rate, and review them when rates move.

### Related articles

* [How loyalty works across multiple currencies](/loyalty-and-rewards/getting-started/how-loyalty-works-across-multiple-currencies)
* [Who earns points on Shopify gift cards](/loyalty-and-rewards/points-and-ways-to-earn/who-earns-points-on-shopify-gift-cards)
* [Reward types: points, discounts, tiers, referrals](/loyalty-and-rewards/getting-started/reward-types-points-discounts-tiers-referrals)
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)


# How loyalty works across multiple currencies

Why points, rewards, and discount codes are always based on your store's base currency, and what the Currency Conversion setting actually changes.

If you sell into more than one country through Shopify Markets, your loyalty program still runs on a single currency: the **base currency** set on your Shopify store.

Everything else is a conversion of that.

### The short version

* Points are earned on the **base currency value** of an order, whatever currency the customer paid in.
* A reward is worth a **fixed amount of your base currency**.
* Shopify converts that amount into the customer's currency at checkout.
* The **Currency Conversion** setting in Roadmap only changes the figure customers see on the storefront. It does not change what a reward is worth. That is controlled by the Shopify currency conversion of your store's base currency.

{% hint style="info" %}
A single Shopify store has one base currency, so it has one loyalty program. Running genuinely separate programs per currency needs separate Shopify stores.
{% endhint %}

## How points are earned on an overseas order

When an order is placed in another currency, Shopify converts the order total back to your base currency. Roadmap awards points on that converted figure.

So an earner set to **1 point for every 1 NZD spent** stays 1 point per NZD for every customer, everywhere.

| Store base currency | Customer paid | Shopify converts to | Points awarded at 1 per 1 NZD |
| ------------------- | ------------- | ------------------- | ----------------------------- |
| NZD                 | €114.53 EUR   | $229.36 NZD         | 229                           |
| NZD                 | $95.00 AUD    | $105.00 NZD         | 105                           |

The exchange rate is Shopify's, for that market, at the time of the order. Roadmap does not set it and cannot override it.

## How rewards are valued

A **Ways to redeem** amount discount is set as a fixed amount in your store currency. For example, 500 points redeems for $50 NZD off.

When a customer redeems, Roadmap issues a discount code worth that amount in your base currency. At checkout, Shopify converts the code's value into the currency the customer is shopping in.

The result is that the same reward is worth a slightly different amount in a foreign currency every time the exchange rate moves.

## What the Currency Conversion setting actually does

Find it in **Loyalty Program** → **Points** → **Currency Conversion**. The setting describes itself accurately:

> Set conversion rates to display point values in currency equivalents for different markets.

It is a **display** setting. It powers the money figures customers see next to their points in the loyalty widgets, on the loyalty page, and in their loyalty history.

It does **not**:

* change how many points an order earns
* change what a reward is worth
* tell Shopify which exchange rate to use

{% hint style="warning" %}
If a market's display rate is more generous than the real exchange rate, customers will see a larger figure than the discount they actually receive. Keep your market rates in step with your live rates.
{% endhint %}

## A worked example

A store with a NZD base currency, selling into the EU:

| Setting                 | Value                |
| ----------------------- | -------------------- |
| Default conversion rate | 100 points = $10 NZD |
| EUR market display rate | 100 points = €6      |
| Reward redeemed         | 500 points           |

The customer sees **€30** against that redemption, because the EUR display rate values 100 points at €6.

The discount code itself is worth **$50 NZD**. At checkout Shopify converted that at roughly 0.51 EUR to the NZD, so the order showed **€25.47 off**.

Nothing went wrong. The EUR display rate assumes 100 points is worth €6, which implies 1 NZD is worth €0.60. The real rate at the time was closer to €0.50, so the displayed figure ran about 20% ahead of the discount.

Setting that market to **100 points = €5** would have shown the customer roughly what they were going to get.

## Keeping displayed values close to the real ones

* Work out each market rate from your default rate and the current exchange rate. With a default of 100 points = $10 NZD and a rate of 0.50, the EUR market should sit near 100 points = €5.
* Round **down** rather than up, so the displayed value under-promises slightly instead of over-promising.
* Review market rates when exchange rates move. They are fixed numbers you enter, not live rates.
* Leave a market row empty to inherit the default rate.

## If you need true per-currency rewards

Earning in AUD for Australian customers, or issuing a €30 voucher that is genuinely €30, is not possible within one Shopify store using Shopify Markets. The base currency governs the whole program.

Two options:

* Accept base currency earning and redemption, and tune the market display rates so the figures customers see are close to reality. This is what most multi-market stores do.
* Run separate Shopify stores, each with its own base currency and its own Roadmap loyalty program.

## Common questions

**Why did my customer's discount come through smaller than the value shown in their account?**\
The value in their account is the display rate for their market. The discount code is worth a fixed amount of your base currency, converted by Shopify at checkout. Bring the market display rate closer to the real exchange rate and the two will line up.

**Why are Australian customers earning points on the NZD value of their order?**\
Because points are always calculated on the base currency value. Shopify converts their AUD total to NZD first.

**Can I issue reward vouchers in AUD for Australian customers?**\
Not from a store with a NZD base currency. The voucher is worth a set amount of NZD and Shopify converts it at checkout.

**If I change a market's display rate, does it change points customers have already earned?**\
No. It changes the money figure shown alongside points, nothing else.

**Which exchange rate is used for the discount?**\
Shopify's rate for that market at the time of checkout. It can differ slightly from the rate shown against the payment on the order, because those are taken at different points.

### Related articles

* [How to configure your point settings](/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings)
* [Set up an amount discount reward](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward)
* [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order)
* [Understanding a customer's loyalty timeline](/loyalty-and-rewards/customer-management/understanding-a-customers-loyalty-timeline)


# Loyalty membership eligibility settings

Control who participates in your loyalty program and how long membership tiers last — all customers versus store accounts only, and lifetime versus fixed-duration membership.

In Roadmap Loyalty, **membership eligibility** controls which customers are considered “participants” in your loyalty program—meaning who can **earn points**, **progress through tiers**, and **redeem rewards**.

You configure this in **Membership Settings** under **Member Participant Criteria**. There are two options:

* **All customers**
* **Only customers who have a store account**

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/6wNWAiJyKRjdIZBjJJYj/Screenshot_2026%2003%2011_at_1.44.19_PM.png" alt="Membership Settings with All customers and Lifetime Membership"><figcaption><p>Membership Settings — here set to All customers with Lifetime Membership.</p></figcaption></figure>

### Where to change this setting

{% stepper %}
{% step %}

#### Open Membership Settings

In the Roadmap admin, go to **Membership Settings**.
{% endstep %}

{% step %}

#### Choose Member Participant Criteria

Under **Member Participant Criteria**, select **All customers** or **Only customers who have a store account**.
{% endstep %}

{% step %}

#### Save

Click **Save** (or **Cancel** to discard changes).

Once your Loyalty program is set to **Active**, this setting can’t be changed unless you deactivate your program first.

Changing eligibility affects who can earn and redeem **moving forward**. For example, if you switch to **Only customers who have a store account**, guest customers (and any customer without a store account) will stop earning points and won’t be able to redeem until they have a store account.
{% endstep %}
{% endstepper %}

***

### Option 1: All customers

When **All customers** is selected:

* Any customer becomes a loyalty member once their **email is captured** (online or in POS).
* They can **earn points** and be awarded **tiers** and **incentives**.
* They can redeem rewards in POS with a store account. However, to redeem online, they will need to **log in to a store account** to access their rewards attributed to the email address.

### Who may be limited?

* **Customers without a store account** can still earn, but may not be able to fully redeem online until they create an account and log in.
* **Customers without an email address** (for example, created in POS without an email) can’t enter the loyalty program until an email is added to their customer profile.

### Customer journey (All customers)

{% stepper %}
{% step %}
Email captured (online or in POS) → customer is enrolled as a loyalty member.
{% endstep %}

{% step %}
Customer begins to **earn loyalty points**.
{% endstep %}

{% step %}
Roadmap records membership details (for example, **member since**, **start date**, and **tier status**).
{% endstep %}

{% step %}
Customer can **redeem** in POS; for online redemption they may need to **log in**.
{% endstep %}
{% endstepper %}

***

### Option 2: Only customers who have a store account

When **Only customers who have a store account** is selected:

* Only customers who meet Roadmap’s definition of **“has a store account”** can participate.
* Customers who do **not** have a store account won’t earn points, tiers, or incentives until they do.

This setting is best if you want loyalty to be tied to logged-in customer accounts (for example, to support a consistent online redemption experience).

{% hint style="warning" %}
Guests and customers without accounts do not earn points, tiers, or incentives. Creating an account later does not award points for earlier orders.
{% endhint %}

### What “has a store account” means (membership triggers)

When eligibility is set to **Only customers who have a store account**, Roadmap uses specific customer actions as “triggers” that qualify a customer as a member.

#### Legacy Account Stores: Triggers that make a customer eligible (or not)

| Customer action                                             | Counts as a member today? | Notes / how it’s detected                                                                                                                          |
| ----------------------------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| Customer logs in online (email + password)                  | **Yes**                   | Detected when the customer account is enabled in Shopify (Roadmap receives the enabled status).                                                    |
| POS order placed with a customer profile with email address | **Yes**                   | POS order linked to a customer will qualify them as a member for loyalty participation (as long as the customer profile has an **email address**). |
| Admin creates a customer profile (no purchase)              | **No**                    | Creating a customer record alone doesn’t qualify them for loyalty when “store account” eligibility is required.                                    |
| POS customer created without an order                       | **No**                    | A customer profile created in POS (without an order) does not qualify as having a store account.                                                   |
| Guest checkout online                                       | **No**                    | Guest checkout does not create/confirm a store account.                                                                                            |
| Shop Pay checkout                                           | **No**                    | Shop Pay checkout alone does not qualify as having a store account for this setting.                                                               |
| Newsletter signup                                           | **No**                    | Marketing opt-in does not qualify as a store account.                                                                                              |
| Third-party app creates a customer                          | **No**                    | Customer creation via an app does not qualify as a store account by itself.                                                                        |

When “Only customers who have a store account” is enabled, customers must also have an **email address** on their customer profile to participate. If a POS customer has no email, they won’t be eligible until an email is added.

### Customer journey (Only customers who have a store account)

{% stepper %}
{% step %}
Customer creates an account and/or logs in online → customer becomes eligible.
{% endstep %}

{% step %}
Roadmap starts tracking them as a loyalty member (member since/start date/tier status).
{% endstep %}

{% step %}
From this date, customer earns points on eligible purchases and can redeem based on your rewards setup.
{% endstep %}
{% endstepper %}

***

Customers will not earn points prior to entering the loyalty program and will not be rewarded for past action that would result in earning points. To reward past actions, you will need to manually add these point into the customers loyalty account.

### Membership Tier Duration

**Membership Tier Duration** controls how long an earned tier lasts.

{% hint style="info" %}
These duration settings apply to **Points earned, Amount spent and Specific item purchased** tier types only. **Secondary loyalty program** (tag-based) tiers have no expiry date: see [Tag-based membership tiers](/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers).
{% endhint %}

* **Lifetime Membership** means a tier never expires.
* **Fixed duration** expires after the period you set. Roadmap then recalculates tiers from points earned or amount spent during that period.
* **Reset expiry date on upgrade** restarts the membership period when the customer moves up a tier.

When a fixed-duration membership expires, Roadmap recalculates the customer's tier from that period's points or spend, resets their membership start date to the recalculation date, and logs the change on their timeline and Membership History. Klaviyo profile properties update at the same time.

Fixed duration also unlocks a rewarding pattern: customers who hold their tier through a recalculation can receive a tier-maintaining Customer Reward.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fmf8jKE1wIEJnzXL4GT4p%2FScreenshot%202026-07-21%20at%203.57.47%E2%80%AFPM.png?alt=media&#x26;token=0cc08b50-d8d9-40f4-a816-9f097cc9ebbc" alt="Membership Settings with store-account-only participation and fixed duration"><figcaption><p>Store-account-only participation with a 12-month fixed membership duration.</p></figcaption></figure>

### The Loyalty Pixel banner

Stores using Shopify's new customer accounts may see a banner. Click **Open customer accounts editor**, then add the **Loyalty Pixel** block.

The pixel lets Roadmap track customer logins. The banner disappears after Roadmap receives its first signal.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F8gpWItAtiVY37tyEizy7%2FScreenshot%202026-09-02%20at%208.52.12%E2%80%AFPM.png?alt=media&#x26;token=482deed7-7904-4976-957c-9a431c916ebf" alt="" width="563"><figcaption></figcaption></figure>

### Quick decision guide

* **Choose “All customers”** if you want loyalty to start as soon as you capture an email (including guest checkouts and POS emails).
* **Choose “Only customers who have a store account”** if you want loyalty participation limited to customers who have a verified store account/login experience.

If you sell both online and in-store and want POS shoppers to fully participate, make sure staff capture the customer’s **email** at checkout—especially when “Only customers who have a store account” is enabled.

### Related guides

* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)
* [Tier progression rules](/loyalty-and-rewards/membership-tiers-and-referrals/tier-progression-rules)
* [Tag-based membership tiers](/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers)


# Program status, start date, and tester domains

Activate, schedule, or deactivate your loyalty program, set the date customers start earning, and let tester accounts try rules before you go live.

The **Program Status** card is the master switch for your loyalty program. It controls whether the program is live, the date customers start earning, and which accounts can test the program before launch.

### Where to find it

In the Roadmap admin, open **Membership Settings**. The **Program Status** card shows your program's current state as a badge (**active**, **scheduled**, or **inactive**), with an **Activate** or **Deactivate** button beside it.

Click **Save** after changing anything on this card.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FpkK7HKYVt1IAfIBk95U9%2FScreenshot%202026-09-04%20at%205.21.01%E2%80%AFPM.png?alt=media&amp;token=14213e57-dcf7-4892-b37c-172e0a767ed7" alt=""><figcaption></figcaption></figure>

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FF4qZiFcuAuXQVe747vFj%2FScreenshot%202026-09-04%20at%205.20.12%E2%80%AFPM.png?alt=media&amp;token=96bb7879-4b98-4f57-a247-b074a8cd2033" alt=""><figcaption></figcaption></figure>

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FY102sL2NNmWEzoPjz8hu%2FScreenshot%202026-09-04%20at%205.20.32%E2%80%AFPM.png?alt=media&amp;token=bee1e9c6-6ebb-48b3-883e-affcc289ab41" alt=""><figcaption></figcaption></figure>

### The three program states

| State         | What it means                                                                                                                                                                                          |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **active**    | The start date has arrived. Customers earn points, progress through tiers, and redeem rewards per your rules.                                                                                          |
| **scheduled** | The start date is in the future. Real customers don't earn yet, but accounts on your tester email domains experience the program as if it's active.                                                    |
| **inactive**  | The program is switched off. Nothing is awarded or redeemed. The card collapses to the status line with an **Activate** button; activate the program to see the start date and tester domain settings. |

{% hint style="info" %}
Some settings are locked while the program is active. For example, [membership eligibility](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings) can only be changed after you deactivate the program.
{% endhint %}

### Program Start Date

Customers start earning loyalty points and levelling up based on their activity **from this date**. Orders placed before the start date never earn points retroactively.

Setting a **future** start date puts the program into the **scheduled** state: your storefront stays unchanged for real customers while you finish preparing, and the program goes live for everyone on the date itself.

If you want existing customers rewarded for activity before the start date, that has to be done manually: see [managing customer points](/loyalty-and-rewards/getting-started/overview-of-the-loyalty-program-dashboard).

### Tester email domains

Add one or more email domains (for example `yourstore.com`) and any account created with a matching email can **earn and redeem points even before the program start date**.

This is how you test the program before going live, and it works hand in hand with the scheduled state: **the program must be scheduled to test it**. While scheduled, accounts on a tester domain experience the full active program (earning, tiers, redemptions) while real customers remain unaffected.

### Recommended launch sequence

{% stepper %}
{% step %}

#### Activate the program with a future Program Start Date

Pick your launch day. With a future date set, the program status shows **scheduled**, so no real customer earns points before you're ready.
{% endstep %}

{% step %}

#### Add your team's email domain to Tester email domains

Accounts on that domain now experience the program as active.
{% endstep %}

{% step %}

#### Test your rules while scheduled

Place test orders and redemptions with a tester account, and confirm points, tiers, and coupons behave the way you configured them.
{% endstep %}

{% step %}

#### Let the start date arrive

On the start date the program becomes **active** and goes live for all eligible customers. Double-check the date and click **Save** once your testing is done.
{% endstep %}
{% endstepper %}

### Customers aren't earning points yet?

The Program Status card is the first thing to check:

* **Is the program inactive?** An inactive program awards nothing.
* **Is the program still scheduled?** Real customers only start earning on the start date; before it, only tester-domain accounts earn.
* **Was the order placed before the start date?** Points are never awarded retroactively.

If the card checks out, work through the full checklist in [Customers not earning loyalty points](/loyalty-and-rewards/troubleshooting/customers-not-earning-loyalty-points).

### Related guides

* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)
* [How to configure your point settings](/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings)
* [Customers not earning loyalty points](/loyalty-and-rewards/troubleshooting/customers-not-earning-loyalty-points)


# Customize the loyalty widgets

Style loyalty widgets from one place, use Universal Styler, and add blocks to your theme.

Use **Edit Loyalty Widgets** to customize customer-facing loyalty surfaces. This includes ways-to-earn and ways-to-redeem blocks, Product Redeemer, the cart point redeemer, and Customer Rewards.

Open it from the top of the Loyalty Program dashboard.

#### The interactive customizer

Select a widget to open its live preview and settings.

* Click through widget states, such as selection, confirmation, and redemption.
* Switch between **Logged out** and **Logged in**.
* Switch between desktop and mobile.
* Customize content, messages, colors, typography, layout, badges, buttons, errors, and **Custom CSS**.

**Reset preview** restores the original preview state.

#### Universal Styler vs individual edits

**Universal Styler** sets shared colors and typography across loyalty widgets.

* **Styler** fields inherit their value from Universal Styler.
* A manually saved change is tagged **Edited** in green.
* Re-running Universal Styler does not overwrite **Edited** fields.

Set your brand base in Universal Styler first. Then fine-tune individual widgets.

#### Widget-specific settings worth knowing

* **Cart point redeemer** — redemption method, message placeholders, logged-out prompt, checkout messages, and abbreviated text. See [Configure the cart point redeemer](/loyalty-and-rewards/points-and-ways-to-earn/configure-the-cart-point-redeemer).
* **Product Redeemer** — grid or carousel layout, per-device card widths, card style, badges, buttons, prompts, errors, and discount-code display.
* **Ways to redeem block** — title, subtitle with HTML support, grid display, redemption method, and logged-out titles and CTA.
* **Customer Rewards**: per-state card text and badges for tier rewards, error messages, and grid or carousel layout, mirroring the Product Redeemer's controls. See [The Customer Rewards storefront redeeming block](/loyalty-and-rewards/membership-tiers-and-referrals/the-customer-rewards-storefront-redeeming-block).

#### Add the widgets to your theme

{% stepper %}
{% step %}
**Open your theme editor**

In Shopify admin, go to **Online Store → Themes**. Click **Customize** on your live theme.
{% endstep %}

{% step %}
**Choose the page**

Navigate to the target page. Click **Add block** or **Add section**.
{% endstep %}

{% step %}
**Add the loyalty block**

Under **Apps**, choose a Roadmap loyalty block, such as **Redeem Loyalty Points**. Position it on the page.
{% endstep %}

{% step %}
**Save**

Click **Save**. The block uses settings from **Edit Loyalty Widgets**.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Some blocks offer **Use Config From**. Choose **From Admin** for **Edit Loyalty Widgets** settings. Choose **From Blocks** for theme-editor settings.
{% endhint %}

#### Related guides

* [Configure the cart point redeemer](/loyalty-and-rewards/points-and-ways-to-earn/configure-the-cart-point-redeemer)
* [Set up product redemption](/loyalty-and-rewards/points-and-ways-to-earn/set-up-product-redemption)
* [The Customer Rewards storefront redeeming block](/loyalty-and-rewards/membership-tiers-and-referrals/the-customer-rewards-storefront-redeeming-block)
* [Overview of the Loyalty Program dashboard](/loyalty-and-rewards/getting-started/overview-of-the-loyalty-program-dashboard)


# Create a loyalty page in new customer accounts

Add the loyalty page to Shopify's new customer accounts, then design it with the New Accounts Dashboard builder: hero and greeting, a drag-and-drop block layout, and the colours that style it.

The loyalty page your customers see inside Shopify's new customer accounts is built from Roadmap, and the **New Accounts Dashboard** builder controls all of it: the hero and greeting at the top, which blocks appear, and how they're arranged. Open it from the top of the Loyalty Program dashboard, next to **Universal Styler**.

{% hint style="info" %}
This builder is for **new customer accounts only**. The loyalty block in legacy (classic) customer accounts is customized inside the **Universal Styler** theme app instead, and settings here won't apply there.
{% endhint %}

### Add the page to customer accounts

The loyalty page ships as a Roadmap page inside new customer accounts, and customers reach it from the account menu. Add it once in your customer accounts editor.

{% stepper %}
{% step %}

#### Open your customer accounts editor

In Shopify, open the editor for new customer accounts, the same one you use to style the rest of the account area.
{% endstep %}

{% step %}

#### Edit the account menu

Select **Main**, then under **Navigation** open the **Menu** setting and choose **Edit**. This opens your **Customer account main menu**, listing the items customers see, such as Orders, Profile, and Subscriptions.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F5WTLD0kmuOVode2tRfr9%2FScreenshot%202026-09-17%20at%204.40.52%E2%80%AFPM.png?alt=media&#x26;token=23f30dfc-d750-4f03-9488-f021e26c176e" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Add the loyalty page as a menu item

Click **Add menu item**, give it a **Label** your customers will recognise, for example *Loyalty Page* or *Loyalty Dashboard*, then in **Link** search for and select **Loyalty Page** (listed under Roadmap). Save the menu.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FSr8KiyuZ3yisqUZWunpN%2FScreenshot%202026-09-17%20at%204.41.56%E2%80%AFPM.png?alt=media&#x26;token=b1b7dd40-a33d-41f4-974b-d5b58a9a187d" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Check it in the editor

Back in the editor, the new item appears in the account menu. Select it to preview the loyalty page with your real program data.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Roadmap's other customer-account pages are added the same way, so you'll also see entries like Subscription Management and B2B Management in that link list.
{% endhint %}

### Set the page background and accent colours

With the loyalty page selected in the customer accounts editor, the **Main** panel carries the colours for the page:

* **Background**: the page background colour.
* **Accent**: the highlight colour used through the page, including the points figures. Leave it on **Default** to follow your account theme.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F5EXBr3T64WlV4C0a60UU%2FScreenshot%202026-09-17%20at%208.54.30%E2%80%AFPM.png?alt=media&#x26;token=cd768a4b-9ab0-43b0-bbf3-f7f1bed60408" alt=""><figcaption></figcaption></figure>

These are Shopify's own settings rather than Roadmap's, which is why the builder's preview shows layout only: your colours and fonts come from here and flow through to the live page.

### The hero

The top of the page is a hero banner with the welcome panel over it:

* **Intro text**: shown in the hero banner. Leave it blank to hide the text.
* **Greeting**: use `{name}` to insert the customer's first name, for example *Welcome back, {name}*. Leave blank to hide the greeting.
* **Show points balance**: shows the points balance and expiry date in the hero panel.
* **Show expiring points**: shows the customer's soonest-expiring points in the hero. It only appears when points can expire and the customer has some expiring.
* **Desktop hero** (recommended 1440 × 900 px) and **Mobile hero** (recommended 750 × 1000 px). Leave the desktop image empty to use the default loyalty illustration; small screens fall back to the desktop image when no mobile one is set.
* **Text position**: where the welcome panel sits over the hero image.
* **Image height (px)**: leave blank to let the hero stretch to the height of the blocks beside it, so their bottoms line up.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fqhky8vFgcAD4kL9FsoGi%2FScreenshot%202026-09-17%20at%208.55.22%E2%80%AFPM.png?alt=media&#x26;token=9e22ebd2-1f9b-4c4d-b101-21d6f6418f65" alt=""><figcaption></figcaption></figure>

### Card style

One setting applies to every block on the dashboard: **Show a border around cards**. It's off by default, with cards sitting on a tinted surface instead. The border colour comes from your customer account theme.

<div><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FuU4ndMJr8lXqSHpl7AZp%2FScreenshot%202026-09-17%20at%208.58.52%E2%80%AFPM.png?alt=media&#x26;token=58b59d2a-946c-4cbc-9ecd-43ea922a79e4" alt=""><figcaption><p>With Borders</p></figcaption></figure> <figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F8hKszrdlV4nnbPiXabTE%2FScreenshot%202026-09-17%20at%208.58.24%E2%80%AFPM.png?alt=media&#x26;token=1d1e799d-b5a1-448d-9ff5-56f0d035cf4f" alt=""><figcaption><p>No Borders</p></figcaption></figure></div>

### Configuring the loyalty page blocks

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FGQUiT6VITH7ClPLa1Rhl%2FScreenshot%202026-09-17%20at%209.19.47%E2%80%AFPM.png?alt=media&#x26;token=2fb8af93-b8e4-41e5-ba3a-fa2b165a1600" alt=""><figcaption></figcaption></figure>

Each section of the page is a block you can switch on or off, drag into position, and open to set its width. The content inside them comes from your existing loyalty settings:

* **Welcome panel + balance**: the hero panel itself. It runs extra tall, with room for up to three of the next four blocks stacked beside it: **Tier status**, **Points balance**, **Referrals**, and **Birthday**.
* **Tier status**: the customer's current membership tier, with an optional **Show progress to next tier**.
* **Points balance**: the customer's balance as its own card.
* **Referrals**: the referral offer, from your Referral program.
* **Birthday**: where customers enter their birthday.

{% hint style="warning" %}
The **Birthday** section is the only place customers can enter their birthday. Hiding it disables birthday-points collection for new customers.
{% endhint %}

These four blocks carry a **Stackable** tag in the sections list, which is how you spot the blocks that can sit beside the welcome panel.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fr5xKw3LELOyVRDeCloh1%2FScreenshot%202026-09-17%20at%209.16.40%E2%80%AFPM.png?alt=media&amp;token=7a868629-8267-4a91-9aa7-b24444d858e5" alt=""><figcaption></figcaption></figure>

* **Shop from collection**: a product carousel from one collection that earns bonus points. Give it a **Heading** (blank uses the collection name) and a **Description**, and set **Products per row**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FeJuqQwjePmLT1DeOqIg3%2FScreenshot%202026-09-17%20at%209.22.15%E2%80%AFPM.png?alt=media&#x26;token=1f2c70b8-be53-4ae6-b43d-1fc2f3f19d97" alt=""><figcaption></figcaption></figure>

* **Product rewards**: the products customers can redeem points for.
* **Ways to redeem**: the discount rewards customers can redeem points for.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FvfDlLF2gyb7Zfx2gRKBH%2FScreenshot%202026-09-17%20at%209.23.28%E2%80%AFPM.png?alt=media&#x26;token=21fe56cb-fec1-4c88-9e5b-c06ddb675bc4" alt=""><figcaption></figcaption></figure>

* **Ways to earn**: a grid of the active ways customers can earn points, with a **Tile columns** setting.
* **Your rewards**: the customer's active discount codes, ready to copy and use. **Discounts per row** set to one per row puts the discount on the left and its code on the right.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F0orXdOyNMBjSCKaMxg8M%2FScreenshot%202026-09-17%20at%209.24.32%E2%80%AFPM.png?alt=media&#x26;token=dc355035-b801-4b62-8f78-8ac1453dc894" alt=""><figcaption></figcaption></figure>

* **VIP rewards & perks**: all membership tiers and their benefits, with **Tiers per row** and an **Edit tiers** link through to each tier's storefront display settings.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F0p5eUsDPdbNbrvgs9btz%2FScreenshot%202026-09-17%20at%209.35.55%E2%80%AFPM.png?alt=media&#x26;token=2a6aef6e-5952-486d-87a2-fec596ecb4f5" alt=""><figcaption></figcaption></figure>

### How the layout works

* A full-width block gets a row of the page to itself; two half-width blocks share a row side by side.
* A tall half-width block takes one side, and up to three small blocks can stack on the other side. Only **Points balance**, **Tier status**, **Birthday**, and **Referrals** can share a side like that; each shows a *Stackable* tag while it's half width.
* Any other block placed beside a tall one takes that whole side to itself, and scrolls if it holds a lot.
* Order decides the pairing: a block joins the tall block's side when you drag it just below the tall one.
* Blocks size themselves. Where you have a choice, opening the block shows a **Height** setting, and some settings only unlock at full width, like a block's **Display** mode (always open or collapsible).
* Column counts inside half-width blocks are capped at two, since a third column leaves the cards too narrow to read.
* The builder warns you when a choice will disturb the layout, so you can see the consequence before you save.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FVEhsjIbyIgoeWQNXTyYV%2FScreenshot%202026-09-17%20at%209.44.05%E2%80%AFPM.png?alt=media&#x26;token=e4516151-4024-4b32-93cd-cc1530103e6b" alt=""><figcaption></figcaption></figure>

The editor's list mirrors the page: a grey card has a row to itself, a white card with a blue border shares its row, a blue bar down the left means the block was pulled into the row above it, and a faded card is switched off.

### What customers see

Customers open the page from the account menu item you added, alongside Orders and Profile. Working top to bottom with every block on:

* The **hero** carries your intro text, the greeting, and the customer's points balance, with the **Current tier** and **Total points** cards stacked beside it, each with a **View history** link into the customer's tier and point history.
* **Refer your friends** shows both sides of the offer (what the advocate gets and what the friend gets), with an email field and **Send invite**.
* **Shop from collection** renders each product with its price and an *Earns N points* badge, plus a **Shop now** button.
* **Product rewards** cards show the product, its availability, and the points cost, with a **Select reward** button; **Ways to redeem** rows show each discount with its points cost and a **Redeem** button, and a redeemed reward swaps the button for the discount code with a copy action.
* **Ways to earn points** lists each active earner with its description, and some carry actions: the review earner links straight to writing a review, and the birthday earner shows **Add date** until the customer has entered one.
* **Your rewards** holds the customer's active discount codes, with an empty state until they have some.
* **VIP rewards & perks** shows every tier with its icon and subtitle, and a **Current** pill on the tier the customer holds.

### Give each tier its own look

The **VIP rewards & perks** block shows every tier, and each tier controls its own appearance from a **Storefront display** card on its Edit Membership Tier screen (the **Edit tiers** link in the block takes you there):

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FUGydaiGVwlaoAufMRRjY%2FScreenshot%202026-09-17%20at%204.26.37%E2%80%AFPM.png?alt=media&#x26;token=e334f7b7-2c51-443a-b6bd-4a6a3f1db1e3" alt=""><figcaption></figcaption></figure>

* **Tier icon**: shown before the tier name. Left empty, a default icon is used for every tier.
* **Subtitle**: leave blank to use the default milestone text.
* **Benefits**: until you add custom benefits, the tier's reward defaults are shown. **Add benefit** to write your own list.

### Where the content comes from

Icons, copy, and reward data are pulled from the loyalty app's other settings, so edit them at the source: earning actions, redemption options, and point values in **Points**, tier names and thresholds in **Membership Tiers**, and advocate and friend rewards in **Referral Program**.

Branding is Shopify-managed: colors, fonts, copy, and tier badge icons are controlled by Shopify's customer account theme editor, and changes there flow through. The builder's preview is a schematic of the layout, not the final styling.

#### Related guides

* [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets): the storefront widgets and legacy-account loyalty block
* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)
* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview)
* [Award points for birthdays](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-birthdays)


# Points & ways to earn


# Ways to earn points: overview

Every way customers can earn loyalty points in Roadmap, from orders and birthdays to anniversaries and tier promotions, plus the settings all earners share.

Ways to earn are the actions that award customers loyalty points. Find them in **Loyalty Program → Points**, alongside your [ways to redeem](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview).

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FxrOlLRYpGEWek3jeqv7t%2FScreenshot%202026-07-21%20at%204.00.19%E2%80%AFPM.png?alt=media&#x26;token=e0a6d269-10b0-4de3-93ab-6ecd3decf576" alt="Ways to earn picker"><figcaption><p>The Ways to earn picker. Types that can only be configured once appear dimmed when they are already in your program.</p></figcaption></figure>

Click **Add way to earn** and choose a type.

#### The ways to earn

* **Place an order** awards points for every dollar spent. You can run several rules at once.
* **Account Signup** awards points when a customer's loyalty account is enabled.
* **Celebrate a Birthday** awards points once yearly, on or around a birthday.
* **Membership Anniversary** awards points each year on the anniversary of the customer joining the program.
* **Tier Promotion** awards points when a customer is promoted into a tier you choose.
* **Leave a verified review** awards points when a purchased-product review is approved and published.
* **Customer Tag** awards points when Shopify applies a customer tag.
* **Display Only** adds a tile to the Ways to Earn block without awarding points, for showcasing rewards that live elsewhere, like referrals and birthday vouchers.
* **Subscription Rewards** awards points each time a customer reaches a set number of subscription products purchased. Eg. Every 3 products ordered on subscription earns 100 points.

{% hint style="info" %}
**Place an order**, **Customer Tag**, **Tier Promotion**, and **Display Only** can be added multiple times. Configure each other type once.
{% endhint %}

#### Settings every way to earn shares

* **Display name** and **Description** appear in storefront loyalty widgets.
* **Status** can be **Active** or **Draft**. Draft earners do not award points.
* **Storefront widget display** can be **Visible** or **Hidden**. Hidden earners still award points.

#### Related guides

* [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order)
* [Award points for account sign-up](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-account-sign-up)
* [Award points for birthdays](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-birthdays)
* [Award points on membership anniversaries](/loyalty-and-rewards/points-and-ways-to-earn/award-points-on-membership-anniversaries)
* [Award points for tier promotions](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-tier-promotions)
* [Award points for subscription purchases](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-subscription-purchases)
* [Add display-only tiles to the Ways to Earn block](/loyalty-and-rewards/points-and-ways-to-earn/add-display-only-tiles-to-the-ways-to-earn-block)
* [How to Stop Customers Earning Points on Discounted or Sale Items](/loyalty-and-rewards/points-and-ways-to-earn/how-to-stop-customers-earning-points-on-discounted-or-sale-items)
* [Limit Points Earning by Product, Variant, or Collection](/loyalty-and-rewards/points-and-ways-to-earn/limit-points-earning-by-product-variant-or-collection)


# Award points for placing an order

Configure the Place an order way to earn: points per dollar, earning conditions, product eligibility, active dates, and membership tier eligibility.

**Place an order** awards points for every dollar customers spend. Find it in **Loyalty Program → Points → Ways to earn**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fu7bEqBeBdRZMo0ypk5j8%2FScreenshot%202026-07-21%20at%201.18.37%E2%80%AFPM.png?alt=media&amp;token=605f9415-1b63-48ef-8470-38168d887ebb" alt="Place an order settings"><figcaption><p>The Place an order settings. The Summary panel restates your configuration in plain language.</p></figcaption></figure>

#### Points value

Set points for every `1` spent in your store currency. The currency comes from your store settings.

Set a **Display name** and **Description** for storefront loyalty widgets.

#### Earning conditions

Points are calculated after discounts. Choose whether points apply to:

* Discounted items via Roadmap or Shopify discounts.
* Orders containing loyalty point redemptions, where the customer [redeemed a reward](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview).
* Shipping fees.

These conditions apply to every line on the order, including Shopify gift cards. A separate setting controls whether the purchaser or the redeemer earns on a gift card, but it does not override the conditions here. See [Who earns points on Shopify gift cards](/loyalty-and-rewards/points-and-ways-to-earn/who-earns-points-on-shopify-gift-cards).

#### Product eligibility

Choose one option:

* **All products earn points**. This is the default.
* **All products earn points except** selected collections.
* **Only selected products earn points** from a collection.

{% hint style="warning" %}
Collection exclusions only catch products in that collection. Exclude checkout discount-code items through the discounted-items condition.
{% endhint %}

#### Active Dates

Set a **Start date and time**. Select **Set end date** for time-boxed offers.

#### Membership tier eligibility

Leave this empty for all customers. Select tiers to restrict the rule to those members.

{% hint style="info" %}
You can create several **Place an order** earners. When more than one applies, customers receive the most generous one.
{% endhint %}

#### Related guides

* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Run a double-points promotion](/loyalty-and-rewards/points-and-ways-to-earn/run-a-double-points-promotion)
* [How to Stop Customers Earning Points on Discounted or Sale Items](/loyalty-and-rewards/points-and-ways-to-earn/how-to-stop-customers-earning-points-on-discounted-or-sale-items)
* [Limit Points Earning by Product, Variant, or Collection](/loyalty-and-rewards/points-and-ways-to-earn/limit-points-earning-by-product-variant-or-collection)
* [Who earns points on Shopify gift cards](/loyalty-and-rewards/points-and-ways-to-earn/who-earns-points-on-shopify-gift-cards)


# Run a double-points promotion

Set up a time-boxed double-points or bonus-rate promotion with a second Place an order earner for all tiers or a specific tier.

A double-points promotion is a second **Place an order** earner. Set a higher rate and active dates alongside your everyday rule.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FseIJzo7MlZxuX1YPSBTa%2FScreenshot%202026-07-21%20at%204.04.28%E2%80%AFPM.png?alt=media&amp;token=4ccd088a-deda-408b-860f-4ef5d8507905" alt=""><figcaption></figcaption></figure>

#### Set up the promotion

{% stepper %}
{% step %}
**Add an earner**

Go to **Loyalty Program → Points**. Click **Add way to earn**, then choose **Place an order**.
{% endstep %}

{% step %}
**Set the promotional rate**

Set the higher rate. For example, set `2` points per `$1` when your default is `1`.
{% endstep %}

{% step %}
**Set Active Dates**

Set the **Start date**. Select **Set end date** to time-box the promotion.
{% endstep %}

{% step %}
**Choose eligible members**

Leave **Membership tier eligibility** empty for all customers. Select tiers for a members-only promotion.
{% endstep %}

{% step %}
**Set visibility and status**

The display name and description appear in the storefront widget while active. Set **Storefront widget display** to **Hidden** for a surprise offer. Set **Status** to **Active** when ready.
{% endstep %}
{% endstepper %}

#### How it interacts with your default earner

When two **Place an order** earners apply, the customer receives the most generous one. Rules do not stack.

{% hint style="info" %}
Roadmap currently applies one **Place an order** configuration per order. A collection-specific promotion can therefore determine points for a mixed order.
{% endhint %}

#### Related guides

* [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order)
* [Points on an order only came from one earning rule](/loyalty-and-rewards/troubleshooting/points-on-an-order-only-came-from-one-earning-rule)
* [How to Stop Customers Earning Points on Discounted or Sale Items](/loyalty-and-rewards/points-and-ways-to-earn/how-to-stop-customers-earning-points-on-discounted-or-sale-items)


# Show points earned on product pages

Add the Points Earned Badge to your product pages so customers see the points a purchase earns — with live promotion rates and a logged-out login prompt.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FsfHKxDw7OpNRlmfb7US5%2FScreenshot%202026-09-01%20at%208.59.59%E2%80%AFPM.png?alt=media&#x26;token=5cb1af5b-67c1-45f8-9cbf-dfa1bb69c7d6" alt="" width="375"><figcaption></figcaption></figure>

The **Points Earned Badge** puts your loyalty program at the moment of decision: a strip on the product page telling the customer exactly how many points this purchase earns — *Earn 50 points with this purchase*.

The number is calculated live from your earning rules, so it does the right thing without upkeep:

* **Promotions are reflected automatically.** During a [double-points promotion](/loyalty-and-rewards/points-and-ways-to-earn/run-a-double-points-promotion), the badge shows the promotional number.
* **Non-earning products show nothing.** If a product is excluded by your [earning rules](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order), the badge hides itself rather than promising points the order won't earn.

### Add the badge to your product pages

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FPfiTjsIBXHs74ZwQOjKT%2FScreenshot%202026-09-01%20at%208.58.52%E2%80%AFPM.png?alt=media&#x26;token=5d5635d8-431a-4abb-af2c-c5c400e0b830" alt=""><figcaption></figcaption></figure>

The badge is a standard Shopify app block:

1. In Shopify admin, go to **Online Store → Themes → Customize** and open a **product page** template.
2. In the **Product information → Details** section, click **Add block** and choose **Points Earned Badge** under Apps.
3. Drag it where you want it — directly under the **Buy buttons** is the natural home.
4. **Save**.

### Configure the content

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FcdatbDyBQusovtfQDpX7%2FScreenshot%202026-09-01%20at%208.51.46%E2%80%AFPM.png?alt=media&#x26;token=e0c9870e-3214-4cec-bd13-37d844b32e89" alt=""><figcaption></figcaption></figure>

Style and word the badge from **Edit Loyalty Widgets → Product Page → Points Earned** (not the theme editor):

* **Label Text** — supports the `{points}` placeholder: *Earn {points} points with this purchase*.
* **Show info tooltip** + **Tooltip Text** — an ⓘ explainer, e.g. *Points are added to your account when your order is placed.*
* **Logged-out Label Text** — what visitors see before logging in, e.g. *Log in to redeem your points for rewards.* Leave blank to reuse the Label Text (also supports `{points}`).
* **Logged-out Tooltip Text** — the tooltip for that state.

### Styling

* **Typography & Colors** — font size, text color, tooltip background, and tooltip text color. Fields tagged **Styler** inherit from the [Universal Styler](/getting-started/how-the-universal-styler-works) until you edit them.
* **Container** — background color, border radius, text alignment, and top & bottom padding.

Use the preview's **Logged out / Logged in** toggle and desktop/mobile switch to check both states as you style.

### Related guides

* [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets)
* [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order)
* [Run a double-points promotion](/loyalty-and-rewards/points-and-ways-to-earn/run-a-double-points-promotion)


# Award points for account sign-up

Award customers loyalty points when their loyalty account is enabled, using the Account Signup way to earn.

**Account Signup** awards a one-time bonus when a customer's loyalty account is enabled. It gives new members a points balance from day one.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FibAhZtwMTpCjbiSGQS02%2FScreenshot%202026-07-21%20at%204.10.24%E2%80%AFPM.png?alt=media&amp;token=84c83d56-20f6-4539-96ee-eb87f3bf9ecd" alt="Account Signup settings"><figcaption><p>Account Signup settings — one points value, awarded once.</p></figcaption></figure>

#### How it works

Points are awarded when customers meet your membership criteria. This happens when their email is captured or when they create a store account, depending on **Member Participant Criteria**.

Customers do not need to reach a membership tier first.

#### Settings

* **Points awarded on signup** sets the one-time bonus.
* **Display name** and **Description** appear in storefront loyalty widgets.
* Set **Status** to **Active** and **Storefront widget display** to **Visible** for a launch.

{% hint style="info" %}
With store-account-only participation, guests do not receive this award until they create a store account.
{% endhint %}

#### Related guides

* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)
* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)


# Award points for birthdays

Award loyalty points on a customer's birthday, the first of their birthday month, or a set number of days before.

**Celebrate a Birthday** awards points once yearly around each customer's birth date.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fh1jBHkIgopkgksEOrjgt%2FScreenshot%202026-07-21%20at%201.21.01%E2%80%AFPM.png?alt=media&amp;token=0ba14d7f-0abf-4843-b854-d73333f704c1" alt="Celebrate a Birthday settings"><figcaption><p>Choose when the birthday points land.</p></figcaption></figure>

#### Settings

* **Points awarded on customer's birthday** sets the yearly bonus.
* **When to trigger** controls timing:
  * **On their birthday** awards points that day.
  * **First of the birthday month** awards points at the month’s start.
  * **Days before birthday** awards points a set number of days early.
* **Display name** and **Description** appear in storefront loyalty widgets.

Points are limited to one award per customer each year.

{% hint style="info" %}
Roadmap needs the customer's birthday. Customers can provide it through loyalty widgets. You can also use **Loyalty Program → Manage Customers → Update Birthday**.
{% endhint %}

#### Related guides

* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Send discount codes for birthdays and tier promotions](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions) — the discount-based birthday perk, if you'd rather send a code than points.


# Award points on membership anniversaries

Award loyalty points every year on the anniversary of a customer joining your loyalty program, scoped by tier if you want and awarded automatically.

The **Membership Anniversary** way to earn awards points every year on the anniversary of the day a customer became a loyalty member. It's a set-and-forget retention touch: a yearly thank-you that arrives without the customer doing anything.

### Set it up

{% stepper %}
{% step %}

#### Add the earner

In **Loyalty Program → Points**, click **Add way to earn** and choose **Membership Anniversary**.
{% endstep %}

{% step %}

#### Set the points

Enter the points awarded on each membership anniversary.
{% endstep %}

{% step %}

#### Name the tile

Set the **Display name** and **Description** customers see in the loyalty widgets, and keep the default icon or upload your own.
{% endstep %}

{% step %}

#### Scope it by tier, if you want

Use **Membership tier eligibility** to restrict anniversary points to specific tiers, for example a thank-you reserved for your top tier. Leave it empty to include all members.
{% endstep %}

{% step %}

#### Activate and save

Set the status to **Active** and choose whether the tile is visible in the storefront widgets. The [shared earner settings](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview) apply here too.
{% endstep %}
{% endstepper %}

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F59tZrwfyOQWoWVodSiQV%2FScreenshot%202026-09-08%20at%201.39.51%E2%80%AFPM.png?alt=media&amp;token=fd32df77-c252-423d-bbc5-0bfa777b3538" alt=""><figcaption></figcaption></figure>

### Which date the anniversary uses

The anniversary is based on the customer's **member since** date: the day their loyalty account was created. The first award lands **one year after they join**, then once every year on the same date, with a limit of one award per year.

If you migrate customers in with a [customer import](/loyalty-and-rewards/getting-started/overview-of-the-loyalty-program-dashboard), their imported member-since date is what the anniversary follows, so long-standing customers keep their original join date.

### When the points arrive

Anniversary points are awarded automatically each anniversary day, early in the morning in your store's timezone.

The award appears on the customer's loyalty timeline like any other earn.

{% hint style="info" %}
You can configure **one** Membership Anniversary earner per program. It applies to loyalty members on any D2C tier, including the [tag-based tier](/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers). Customers in a [B2B company program](/loyalty-and-rewards/b2b-loyalty/b2b-loyalty-an-overview) don't earn anniversary points.
{% endhint %}

### Related guides

* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Award points for birthdays](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-birthdays)
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)


# Award points for tier promotions

Award loyalty points when a customer is promoted into a membership tier, once per customer or on every promotion, with skipped tiers still paying out.

The **Tier Promotion** way to earn awards points the moment a customer is promoted into a tier you choose. It turns reaching a tier into an immediate, tangible win on top of the tier's ongoing perks.

### Set it up

{% stepper %}
{% step %}

#### Add the earner

In **Loyalty Program → Points**, click **Add way to earn** and choose **Tier Promotion**.
{% endstep %}

{% step %}

#### Choose the destination tier

There's a single condition: **When a customer is promoted to** your chosen tier. The tier they came from doesn't matter, and a customer who jumps past this tier still earns the points.
{% endstep %}

{% step %}

#### Set the points and frequency

Enter the **Points awarded**, then decide how often with **Only award once**: leave it on to award only the first time the customer ever reaches this tier, or turn it off to award every time they make this move, including earning the tier back after being demoted at a period recalculation.
{% endstep %}

{% step %}

#### Write the customer note

The **Customer note** is the reason for the award, and it appears on the customer's loyalty point history, for example *100 points for reaching Gold*.
{% endstep %}

{% step %}

#### Name the tile and activate

Set the **Display name** and **Description** shown in the loyalty widgets, keep or replace the icon, and set the status to **Active**.
{% endstep %}
{% endstepper %}

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F17FLk6eNYhIpt53mbRa2%2FScreenshot%202026-09-08%20at%201.40.07%E2%80%AFPM.png?alt=media&amp;token=844d82da-e46c-4f79-9508-82d7a0103692" alt=""><figcaption></figcaption></figure>

Create one Tier Promotion earner per tier you want to reward, each with its own points.

### What counts as a promotion

Any move **up into** the configured tier awards the points, whether an order or point earner pushes the customer over the tier's milestone or you promote them manually.

{% hint style="info" %}
**Skipped tiers still pay.** If a customer jumps straight from Bronze to Platinum, every tier crossed fires its configured reward: they receive both the Gold promotion points and the Platinum promotion points in the same event.
{% endhint %}

### What doesn't count

Movements that aren't real milestone promotions don't award points:

* Joining or leaving the [tag-based secondary program](/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers), including the recalculation that runs when a customer leaves it.
* Tier shifts connected to [B2B company loyalty](/loyalty-and-rewards/b2b-loyalty/b2b-loyalty-an-overview).
* Demotions, naturally: only upward moves award.

### Points or perks: combining with Customer Rewards

Tier Promotion awards **points**. If you'd rather greet a new tier with a reward itself (a discount, a gift), use [Reward customers for reaching a tier](/loyalty-and-rewards/membership-tiers-and-referrals/reward-customers-for-reaching-a-tier). The two combine well: points for the milestone, plus a tangible welcome-to-the-tier perk.

### Related guides

* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)
* [Reward customers for reaching a tier](/loyalty-and-rewards/membership-tiers-and-referrals/reward-customers-for-reaching-a-tier)
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)


# Leave a verified review

Award loyalty points when a customer's verified review is approved and published, with reward frequency controls to cap multi-product orders.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FZ2UEZoLtye77Liaz44It%2FScreenshot%202026-07-21%20at%201.22.43%E2%80%AFPM.png?alt=media&amp;token=389d7ae2-5d94-4361-a01e-ddce428a4e59" alt="Verified review settings"><figcaption><p>Points are awarded on approval, with a frequency cap per order.</p></figcaption></figure>

**Leave a verified review** awards points when a purchased-product review is approved and published. Points are not awarded on submission.

A review is verified when it is linked to an order.

#### Reward frequency

* **Limited to one reward per order** awards points once, regardless of how many products from that order are reviewed.
* **Every verified review submitted** awards points for each approved verified review.

#### Other settings

* **Points awarded when review is approved and published** sets the reward amount.
* **Display name** and **Description** appear in storefront loyalty widgets.
* Set **Status** and **Storefront widget display** as needed.

{% hint style="info" %}
For photo or video review rewards, see [Can I award extra points for photo or video reviews?](/loyalty-and-rewards/troubleshooting/can-i-award-extra-points-for-photo-or-video-reviews).
{% endhint %}

#### Related guides

* [Control how often customers can submit reviews](/reviews/managing-reviews/review-rewards-and-limits/review-submission-limits)
* [Reward customers with loyalty points for reviewing](/reviews/managing-reviews/review-rewards-and-limits/loyalty-points-for-reviews)
* [Reward reviews with auto-generated discount codes](/reviews/managing-reviews/review-rewards-and-limits/discount-codes-for-reviews)


# Award points with customer tags

Use the Customer Tag way to earn to award points when a customer is tagged in Shopify — for quizzes, Shopify Flow automations, and subscription rewards.

**Customer Tag** awards points when Shopify applies a specific tag to a customer profile. Use it with quiz apps, Shopify Flow, subscription auto-tagging, or manual tagging.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FOEUhFhxLcuf4hZUhjhi4%2FScreenshot%202026-07-21%20at%204.21.15%E2%80%AFPM.png?alt=media&amp;token=cd0bbeba-cc3f-40a1-97a6-07300eee9250" alt="Customer Tag settings"><figcaption><p>A Customer Tag earner awarding 200 points when the tag fifth-subscription-ordered is applied.</p></figcaption></figure>

#### Settings

* **When customer is tagged with…** must match the Shopify tag exactly. Tags are case-sensitive.
* **Points awarded** sets the reward value.
* **Only award once** makes this a one-time reward. Leave it unticked for recurring milestones.
* **Customer note** appears in the point-history **Details** column, the customer Timeline, and storefront point history.
* **Display name** and **Description** appear in storefront loyalty widgets.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FRnhP9lNfr8npWl9f5ovo%2FScreenshot%202026-07-21%20at%204.27.37%E2%80%AFPM.png?alt=media&amp;token=1f40eb91-adbe-49aa-9680-ed6998694a00" alt="Customer point history details"><figcaption><p>The customer note appears in the Details column of the Point History and in the Timeline.</p></figcaption></figure>

#### Ideas for tag-driven rewards

* Reward quiz or survey completion.
* Use Shopify Flow for an order milestone or spend threshold.
* Pair subscription auto-tagging with a milestone reward.

{% hint style="warning" %}
If customers do not earn points, check tag spelling and casing first. `VIP-Member` and `vip-member` are different tags.
{% endhint %}

#### Related guides

* [Reward subscribers with loyalty points](/loyalty-and-rewards/points-and-ways-to-earn/reward-subscribers-with-loyalty-points)
* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)


# Reward subscribers with loyalty points

Combine subscription auto-tagging with the Customer Tag way to earn to reward subscribers at milestones and reuse the tags for Klaviyo segments.

Reward subscribers automatically at milestones, such as a fifth or tenth subscription order. Subscription auto-tagging applies a Shopify tag, then a **Customer Tag** earner converts it into points.

#### Set up subscriber rewards

{% stepper %}
{% step %}
**Turn on subscription auto-tagging**

In the Subscriptions dashboard, open **Customer Auto-Tagging**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FdEY7r5wt2vtZPXmhHClP%2FScreenshot%202026-07-21%20at%201.28.53%E2%80%AFPM.png?alt=media&amp;token=6cf4abe8-6d22-4500-ad47-1b963f47b074" alt="Subscriptions dashboard"><figcaption><p>Customer Auto-Tagging lives on the Subscriptions dashboard.</p></figcaption></figure>

Enable auto-tagging. Choose a **Count Method** and add **Tag Rules**. For example, use `1` → `first-subscription-ordered`, `5` → `fifth-subscription-ordered`, and `10` → `tenth-subscription-ordered`.

* **Order count** counts initial and renewal subscription orders.
* **Product count** counts subscription line items across all orders.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FAWm1YqFKqneMtOtpvKDJ%2FScreenshot%202026-07-21%20at%201.29.21%E2%80%AFPM.png?alt=media&amp;token=596068d6-34d4-4a47-9a31-17cb33b6780d" alt="Subscription auto-tag settings"><figcaption><p>Tag rules with a live preview of how customers will be tagged.</p></figcaption></figure>
{% endstep %}

{% step %}
**Award points for each tag**

In **Loyalty Program → Points**, add a **Customer Tag** way to earn for each milestone tag.

Copy the tag exactly. Tags are case-sensitive. Leave **Only award once** unticked if a milestone can recur. Write **Customer note** for customers to read.
{% endstep %}

{% step %}
**Reuse tags in Klaviyo**

Shopify syncs tags to Klaviyo through its native integration. Build a segment using the Shopify tag, then use it in retention flows.
{% endstep %}
{% endstepper %}

When a customer reaches a higher threshold, Roadmap removes the old auto-tag and applies the new one.

#### Keeping an eye on the counts

The subscription contract page shows a **Customer Subscription History** card. It lists subscription-order and subscription-product totals. A **Loyalty Points** card provides a **View loyalty account** link.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F4t16MBFmHIm40ybGtAcQ%2FScreenshot%202026-07-21%20at%204.35.01%E2%80%AFPM.png?alt=media&amp;token=273beab0-0b62-4fbf-ac36-f23ccbb4b527" alt="Subscription and loyalty cards"><figcaption><p>Subscription tallies and the customer's points balance, side by side on the contract page.</p></figcaption></figure>

#### Related guides

* [Award points with customer tags](/loyalty-and-rewards/points-and-ways-to-earn/award-points-with-customer-tags)
* [Subscription auto-tagging](/subscriptions/getting-started/subscription-auto-tagging)
* [Loyalty points × subscriptions](/subscriptions/storefront-and-accounts/loyalty-points-subscriptions)


# Award points for subscription purchases

Award bonus points every few subscription products a customer buys, counted across all of their subscriptions.

The **Subscription Rewards** way to earn pays points each time a customer's subscription product count reaches the next multiple, for example 100 points at 3 products, again at 6, and again at 9.

It counts **products, not orders**. A customer who takes three products in one delivery reaches the reward just as fast as one who takes three deliveries, so there is nothing to gain from splitting an order into several shipments.

{% hint style="info" %}
Only subscription products count. Anything bought outside a subscription is ignored, no matter how much of it there is.
{% endhint %}

### Set it up

In **Loyalty Program → Points**, click **Add way to earn** and choose **Subscription Rewards**.

{% hint style="warning" %}
You can configure one Subscription Rewards earner per program. Once you have one, the type appears dimmed in the **Add way to earn** list.
{% endhint %}

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FkaE2w5MboUYagNDAbF5n%2FScreenshot%202026-10-16%20at%201.21.58%E2%80%AFPM.png?alt=media&amp;token=41e60628-7423-4c1f-ad9d-33efba5bcbb8" alt="" width="563"><figcaption></figcaption></figure>

{% stepper %}
{% step %}

#### Reward

Set **Subscription products per reward** to the number of products that earns a reward, and **Points awarded** to the points paid each time.

For 100 points on every third product, that is `3` products and `100` points.

Then set the **Display name** and **Description** customers see in the storefront loyalty widgets, for example *Loyal subscriber reward* and *Earn 100 points for every 3 subscription products ordered*.
{% endstep %}

{% step %}

#### Counting

**Count orders placed on or after** sets the date counting begins. Orders placed before it are never counted.

You can choose today or a future date. An existing rule keeps whatever date it was saved with, but once you change that date you cannot set it back to an earlier one.
{% endstep %}

{% step %}

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F8XgcF2prbaMWESsFu89u%2FScreenshot%202026-10-16%20at%201.11.20%E2%80%AFPM.png?alt=media&amp;token=cc2c081e-522b-4890-bb55-ee34ceab207d" alt="" width="563"><figcaption></figcaption></figure>

#### Icon

Choose **Use default icon**, or **Upload your own icon** for the storefront tile.
{% endstep %}

{% step %}

#### Membership tier eligibility

Leave this empty to allow all customers, or select tiers to restrict the reward to those members only.

Read the tier rule below before you use it, because it behaves differently from the other ways to earn.
{% endstep %}

{% step %}

#### Check the Summary and activate

The **Summary** panel on the right restates the rule in plain English, including the counting date and the refund behaviour. Read it back before you go live, it is the quickest way to catch a reward you did not mean to configure.

Set **Status** to **Active**, and **Storefront widget display** to **Visible** or **Hidden**. A hidden earner still awards points.
{% endstep %}
{% endstepper %}

### How the count works

The count is the total number of subscription product units a customer has bought since the counting date, added up across every subscription they hold.

A reward is paid each time that count reaches the next multiple of your **Subscription products per reward** setting. At `3`, that is 3, 6, 9 and onward.

Two things follow from counting this way:

* **Extra products carry forward.** The count never resets. A customer who buys 4 products is paid once, at 3, and starts the next reward one product in.
* **One order can pay more than one reward.** A count that goes from 2 to 8 passes 3 and 6, and both rewards are paid on that order.

On the customer's loyalty record you will see both their lifetime subscription product count and the count since the rule's counting date. For a customer who joined after you switched the rule on, these are the same number.

### Tier eligibility is judged before the order

If you restrict this reward by tier, eligibility is decided on the tier the customer held **before** the order was placed, not the tier they end up in afterwards.

So an order that promotes someone into an eligible tier does not itself earn the reward. Their next qualifying purchase does.

{% hint style="info" %}
Products bought while the customer was in an ineligible tier **still count** toward their total. They are not earning yet, but they are not starting from zero either.
{% endhint %}

This is worth explaining to customers if you run a tier-restricted version, because it is the one part that reliably generates a support ticket.

### Refunds and cancellations

Refunded and cancelled products do not count, so a refund or cancellation reduces the customer's count.

If that takes the count back below a reward you have already paid, those points are taken back. If no reward had been paid at that point, nothing is taken back.

### What the loyalty timeline shows

Every outcome is written to the customer's loyalty timeline, with the counts spelt out so you can see exactly what happened:

* **Earned** — the points paid and the products that triggered them, with the order and the count before and after, for example *Order #2406 took subscription products purchased from 4 to 7. Rewarded every 3 purchased.*
* **Not earned** — when the customer's tier was not eligible, the entry says so and confirms the purchases still counted.
* **Reward removed** — names the refund or cancellation, the count before and after, and the reward the points had been paid for.
* **Nothing to remove** — logged when a refund drops the count but no reward had been paid at that point.

Point History shows the same thing in the **Details** column, as a reward against a product count, and as a reversal where points were taken back.

### Related guides

* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Reward subscribers with loyalty points](/loyalty-and-rewards/points-and-ways-to-earn/reward-subscribers-with-loyalty-points): the tag-based alternative, for rewards this earner cannot express
* [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order)
* [Understanding a customer's loyalty timeline](/loyalty-and-rewards/customer-management/understanding-a-customers-loyalty-timeline)
* [Managing point adjustments post-fulfilment](/loyalty-and-rewards/points-and-ways-to-earn/managing-point-adjustments-post-fulfilment)


# Add display-only tiles to the Ways to Earn block

Showcase rewards that don't award points, like referral rewards and birthday vouchers, as tiles in the Ways to Earn block, with an optional link button and active dates.

The Ways to Earn block shows your point-earning actions, but plenty of rewards live outside the points system: referral rewards, birthday discount vouchers from the [Discount Code Generator](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions), seasonal perks. **Display Only** tiles put those rewards in the block too, so customers see the full picture of what your program offers in one place.

As the form puts it: this tile awards no points; use it to show a reward you set up somewhere else.

### Set one up

{% stepper %}
{% step %}

#### Add a Display Only entry

In **Loyalty Program → Points**, click **Add way to earn** and choose **Display Only**.
{% endstep %}

{% step %}

#### Write the tile content

Set the **Display name** and **Description** to match the reward you're showcasing, for example *Refer a friend* with *Receive 200 points for every successful referral!*. Keep the default icon or upload your own.
{% endstep %}

{% step %}

#### Add a button, if you want one

The button is optional and only shows when both fields are filled in:

* **Button label**: the text on the button, for example *Refer Now*.
* **Button link**: where the button sends the customer, for example `/pages/rewards#refer-a-friend`, or an anchor that scrolls to another block on the same page.
  {% endstep %}

{% step %}

#### Set the active dates

**Active Dates** control when the tile shows: a start date and time, plus an optional end date. Perfect for campaign perks that should retire themselves.
{% endstep %}

{% step %}

#### Choose who sees it

Use **Membership tier eligibility** to show the tile to specific tiers only, or leave it empty for everyone. Then set the status to **Active**.
{% endstep %}
{% endstepper %}

### Good uses

* **A referral tile**: surface your referral program's offer inside the block, with the button linking to where customers share. Match the copy to your configured [referral rewards](/loyalty-and-rewards/membership-tiers-and-referrals/manage-referrals).
* **A birthday voucher tile**: if birthdays earn a generated discount code rather than points, a tile tells customers the perk exists.
* **Campaign perks**: anything temporary you want visible next to the everyday earners; give it an end date and it retires itself.

{% hint style="info" %}
Display Only tiles never award points; the description is yours to keep accurate. If you change the underlying reward (a referral amount, a voucher value), update the tile copy to match.
{% endhint %}

### Related guides

* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Manage referrals](/loyalty-and-rewards/membership-tiers-and-referrals/manage-referrals)
* [Send discount codes for birthdays and tier promotions](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions)
* [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets)

{% stepper %}
{% step %}

#### Add a Display Only entry

In **Loyalty Program → Points**, click **Add way to earn** and choose **Display Only**.
{% endstep %}

{% step %}

#### Write the tile

Set the title and description to match the reward you're showcasing, for example *Refer a friend: you both get $10*. The tile supports everything a normal earner tile does: a custom icon, membership tier eligibility, and Active or Draft status.
{% endstep %}

{% step %}

#### Add a button, if you want one

Fill in the button settings to give the tile a hover flip that reveals a button, linking to any page: your referral section, a landing page, or anywhere else. Leave the button settings empty and the tile stays a static card with no flip.
{% endstep %}
{% endstepper %}

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FdG2WGvKZy2YdPS9Rcmuc%2FScreenshot%202026-09-08%20at%201.41.17%E2%80%AFPM.png?alt=media&amp;token=f627817d-edb2-418d-90bf-de4b32fb3d7d" alt=""><figcaption></figcaption></figure>

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FgDOrRHZ2SYIPEjnJZCYN%2FScreenshot%202026-09-08%20at%201.48.02%E2%80%AFPM.png?alt=media&amp;token=d1678358-c8c0-4d94-bac4-662cd072db4b" alt=""><figcaption><p>Storefront button display of the display only tile</p></figcaption></figure>


# How to Stop Customers Earning Points on Discounted or Sale Items

### Where this is configured

Sale-item exclusions are controlled inside your **“Place an order”** points-earning rule. This is where you set:

* How many points customers earn (**Points value**)
* Whether discounted items should earn points (**Earning conditions**)
* Which products are eligible to earn points (**Product eligibility**)

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/UEuLDGZ6PAEQivnDVkl3/Screenshot_2026%2003%2006_at_3.03.57_PM.png" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

### Option 1: Exclude discounted items (automatic)

If your “sale items” are created using Shopify discounts (or Roadmap discounts), you can stop points from being earned on discounted line items.

* Open the Place an order rule\
  Go to the **Place an order** rule where you see **Points value**, **Earning conditions**, and **Product eligibility**.
* Update Discounted items setting\
  In **Earning conditions**, find **Discounted items via Roadmap/Shopify discounts** and change it from **Earn points** to the option that prevents earning on discounted items (for example, **Don’t earn points**).
* Save and test\
  Save your changes, then run a quick test order with a discounted item to confirm no points are awarded for that line item.

Notes:

* **Points are calculated after discounts.** The rule notes: “Points are always calculated on amounts after any discounts are applied.” This means even if you still allow discounted items to earn points, the points will be based on the discounted price (not the original price).
* **Gift cards are line items too.** If a Shopify gift card is sold at a discount, this condition stops that gift card earning, whichever option you chose in [Who earns points on Shopify gift cards](/loyalty-and-rewards/points-and-ways-to-earn/who-earns-points-on-shopify-gift-cards).
  {% endstep %}

{% step %}

### Option 2: Exclude “sale items” by product list (recommended for sale collections)

If your sale items are managed as a group (for example, a “Sale” smart collection), exclude those products using **Product eligibility**.

* Switch Product eligibility to an exclusion list\
  In **Product eligibility**, select **All products earn points except**.
* Choose what you’re excluding\
  Use the selector to choose the set you want to exclude (for example, a smart collection of sale items). If you’re excluding individual items instead, choose **Specific products or variants**.
* Add the sale items\
  Use **Search products or variants** (or click **Browse**) to add the products/variants you want to exclude from earning points.

Recommendation:

* If you frequently rotate sale items, exclude them using **All products earn points except** and a **smart collection**. That way, anything that enters/leaves the Sale collection is automatically excluded/included without manual updates.
  {% endstep %}
  {% endstepper %}

### Common related settings (optional)

* Should shipping earn points?\
  In **Earning conditions**, use **Shipping fee** to control whether points apply to shipping charges. Set it to the option that matches your policy.
* What about orders that use points redemptions?\
  Use **Orders containing loyalty point redemptions\*** to decide whether customers still earn points on orders where they redeemed points (including amount discounts or product redemptions).
* What about gift cards?\
  A separate setting decides whether the purchaser, the redeemer, both, or no one earns on a Shopify gift card. The conditions on this page still apply on top of it.
* Interaction note:\
  If you exclude products via **Product eligibility**, those items won’t earn points even at full price. If you only want to block points when an item is discounted, use **Discounted items via Roadmap/Shopify discounts** instead (Option 1).

Related articles:

* [Can I limit earning to certain products, collections, or customer groups?](/loyalty-and-rewards/points-and-ways-to-earn/limit-points-earning-by-product-variant-or-collection)
* [Why aren’t customers earning points?](/loyalty-and-rewards/troubleshooting/customers-not-earning-loyalty-points)
* [How do I set rules for tier progression?](/loyalty-and-rewards/membership-tiers-and-referrals/tier-progression-rules)
* [Who earns points on Shopify gift cards](/loyalty-and-rewards/points-and-ways-to-earn/who-earns-points-on-shopify-gift-cards)


# Limit Points Earning by Product, Variant, or Collection

Yes — by products (and collections). Not directly by customer groups.

In Roadmap Loyalty, points earning eligibility is controlled in your “Place an order” points-earning rule using the **Product eligibility** section.

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/UEuLDGZ6PAEQivnDVkl3/Screenshot_2026%2003%2006_at_3.03.57_PM.png" alt=""><figcaption></figcaption></figure>

### Limit earning to certain products or variants

{% stepper %}
{% step %}

#### Open the Place an order earning rule

Go to your loyalty setup and open the **Place an order** rule (the screen that includes **Points value**, **Earning conditions**, and **Product eligibility**).
{% endstep %}

{% step %}

#### Set Product eligibility to only include selected items

Under **Product eligibility**, select **Only selected products earn points**.
{% endstep %}

{% step %}

#### Choose what you want to include

Use the selector (for example **Specific products or variants**), then add items using **Search products or variants** or **Browse**.
{% endstep %}

{% step %}

#### Save and test

Save your changes, then place a test order with an included item and an excluded item to confirm only the included line earns points.
{% endstep %}
{% endstepper %}

### Exclude certain products or collections from earning

If you want most items to earn points, but need to block a set of products (for example, low-margin items or sale items), use the exclusion option.

{% stepper %}
{% step %}

#### Switch to an exclusion rule

Under **Product eligibility**, select **All products earn points except**.
{% endstep %}

{% step %}

#### Add items to exclude

Add the products/variants you want to exclude using **Search products or variants** or **Browse**.
{% endstep %}

{% step %}

#### Maintain exclusions via collections (recommended)

If your “excluded” items change often (for example a rotating Sale range), use a Shopify **smart collection** for that set and keep your exclusions aligned to that collection—so the rule updates automatically as products move in/out of the collection.

The easiest way to exclude sale items at scale is to use **All products earn points except** with a **smart collection** that automatically captures discounted products.
{% endstep %}
{% endstepper %}

### What about limiting earning by customer group (VIPs, wholesale, members)?

Roadmap’s points-earning control for orders is product-based via **Product eligibility**. There isn’t a matching **Customer Eligibility** section on the **Place an order** earning rule.

You can target customer groups for **discounts and GWPs** using the **Customer Eligibility** section in **Discounts / Gift with Purchase** (for example: **Customers tagged with**, **Customers NOT tagged with**, or **Members** with tiers selected in **Enter membership tiers…**). That targeting applies to the discount/GWP—separately from points earning.

### Related settings that affect earning

* Discounted items via Roadmap/Shopify discounts\
  In **Earning conditions**, use **Discounted items via Roadmap/Shopify discounts** to decide whether discounted line items can still earn points.
* Orders containing loyalty point redemptions\
  In **Earning conditions**, use **Orders containing loyalty point redemptions\*** to control whether customers earn points on orders where they redeemed points (including amount discounts or product redemptions).
* Shipping fee\
  In **Earning conditions**, use **Shipping fee** to control whether points apply to shipping charges.

Note: If you use **Only selected products earn points**, anything not explicitly added will earn **0** points — even if it’s full-price. If you only want to block points in certain cases (like discounted items), use the relevant setting in **Earning conditions** instead.


# Managing point adjustments post-fulfilment

Review and approve loyalty point changes created after a fulfilled order is refunded, returned, exchanged, or edited.

If you use **Require approval before adjusting**, Roadmap monitors order changes post-fulfilment and creates point adjustment recommendations for you to approve, customise or reject.

### Turn on pending adjustment review

Open **Loyalty Program** → **Points**.

Scroll to **Order Adjustments**.

Set **Fulfilled Order Adjustments** to **Require approval before adjusting**.

![Fulfilled Order Adjustments setting](https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FfdAicZHDBBPhzNL6onsh%2Floyalty-point-adjustment-settings.png?alt=media\&token=5f8b8122-9f9d-4bf6-9f0c-c557e2ced34b)

{% hint style="info" %}
Point adjustments for order changes are applied automatically if they occur **before** an order is fulfilled.

Pending adjustments are only created for **post-fulfilment** changes.
{% endhint %}

### When a pending adjustment is created

Roadmap creates a pending adjustment when a fulfilled order changes and the points-eligible order value changes.

Common triggers include:

* partial refunds
* full refunds
* returns
* exchanges
* cancellations on fulfilled orders
* Items added after fulfilment

This is especially useful for Shopify POS.

POS often fulfils orders immediately.

If a staff member adds or swaps items after that, Roadmap logs the point change for review.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F9pWTyxwgbJKAT9LGuRwG%2Floyalty-order-partial-refunded-order.png?alt=media&amp;token=a408040f-4bb4-4753-9c73-3ac411ef7865" alt=""><figcaption><p>An example of a fulfilled order that has been partially refunded.</p></figcaption></figure>

### Before fulfilment vs after fulfilment

Use this rule of thumb:

* **Unfulfilled order** → Roadmap updates points automatically
* **Fulfilled order** → Roadmap creates a pending adjustment for review

That means order edits made before fulfilment do not enter the pending log.

### What you see in the pending log

Each pending row shows the key details you need to review the change:

* order
* customer
* adjustment amount
* original points
* eligible order value change
* reason
* status
* created date

The queue can include both negative and positive adjustments.

### Review a pending adjustment

{% stepper %}
{% step %}

### Open the item

Go to **Pending Point Adjustments**.

If adjustments are waiting for review, Roadmap shows an indicator so your team can see there are pending items to action.

Click the **customer name** to open the customer’s loyalty profile.

Click anywhere else on the row to open the adjustment review panel.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FH1wy3lVQwW1uvRDZQojm%2Floyalty-pending-point-location.png?alt=media&amp;token=93784735-7e15-4487-b4b3-a5fb9bbd08ee" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Check the summary

The review panel shows:

* order
* customer
* original points
* eligible order value change
* reason
* adjustment amount
* internal note

If multiple items are waiting, Roadmap steps you through them one by one.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FQ2rdusWwxRa0RabtUsh7%2Floyalty-pending-point-log-overview.png?alt=media&amp;token=ab5a73c0-3abd-4a67-9f5d-f119a8cb1bb2" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Understand “Eligible Order Value Change”

This value is based on the part of the order that was eligible to earn points.

It is not always the same as the raw refund amount.

Roadmap respects your **Place an order** earning conditions, including:

* excluded products or variants
* excluded collections
* discounted items that do not earn points
* shipping rules
* orders containing point redemptions

If only part of the order was points-eligible, only that part affects the adjustment.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FctU09YqGNPRj30TlY2q1%2FScreenshot%202026-03-26%20at%2012.17.12%E2%80%AFPM.png?alt=media&amp;token=ac972f70-6ffe-4c58-b299-7ee33cdbc7a1" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Approve, reject, or override the amount

If the suggested amount is correct, approve it.

If you need to change it, use **Update with custom amount**.

Add an internal note if you want an audit trail.

Then choose **Approve** or **Reject**.
{% endstep %}
{% endstepper %}

### Example: partial refund after fulfillment

Here is the flow shown in the example:

* the original order awarded **140 points**
* a returned item reduced the eligible order value by **$60**
* Roadmap created a pending adjustment of **-60 points**
* the reason was **Partial Refund**

After approval, the point change appears in the customer’s point history.

The history line explains what changed and which order caused it.

### Positive adjustments also appear here

The pending log is not only for deductions.

It also captures extra points that should be awarded after fulfillment.

Common examples:

* a customer exchanges into a higher-value item
* a fulfilled POS order has extra items added later
* the net payment increases after the original order was fulfilled

In these cases, the adjustment can be a positive points amount.

### What happens after you action the adjustment

Once reviewed, the entry moves out of **Pending** and into:

* **Approved**
* **Rejected**
* **All**

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FGEWMYcnBh14qPcywCPx1%2FScreenshot%202026-03-26%20at%2012.51.31%E2%80%AFPM.png?alt=media&amp;token=a3805742-0d57-4e5e-98da-2355ee4d3c3c" alt=""><figcaption></figcaption></figure>

You can still open processed entries to review the summary and any internal note.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7JqqXWYgeV27kISlY3NX%2FScreenshot%202026-03-26%20at%2012.19.22%E2%80%AFPM.png?alt=media&amp;token=5a2f8c87-6e96-42be-a9db-f2562f3b4f78" alt=""><figcaption></figcaption></figure>

If you approve the adjustment:

* the customer’s points balance updates immediately
* the event appears in **Manage Customers** as a point history line
* Klaviyo loyalty properties sync from that event

{% hint style="warning" %}
Rejecting an adjustment does not apply the point change or record a event in the customers point history.
{% endhint %}

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FW8SSc9snvQJDBBoKZx1g%2FScreenshot%202026-03-26%20at%2012.21.42%E2%80%AFPM.png?alt=media&amp;token=5e5431a4-d421-4325-acaa-b2725373a251" alt=""><figcaption></figcaption></figure>

### Best practice

* Use **Require approval before adjusting** if staff regularly process returns or POS exchanges.
* Leave an internal note with the staff name or reason.
* Check the **Eligible Order Value Change** before using a custom amount.

### Related articles

* [How to configure your point settings](/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings)
* [How to Stop Customers Earning Points on Discounted or Sale Items](/loyalty-and-rewards/points-and-ways-to-earn/how-to-stop-customers-earning-points-on-discounted-or-sale-items)
* [Shopify POS integration](/loyalty-and-rewards/loyalty-integrations/set-up-roadmap-loyalty-in-shopify-pos)


# Ways to redeem points: overview

The two reward types customers can spend points on, where they redeem them, and how redemption works.

Ways to redeem are rewards customers can spend their points on. Find them in **Loyalty Program → Points**, below ways to earn.

#### The two reward types

* **Amount Discount** — redeem points for a fixed-amount or percentage-off coupon.
* **Product Redemption** — redeem a full product for a set number of points.

Product redemptions are available only through the **Product Redeemer** block.

Drag handles in **Ways to redeem** to reorder rewards. This sets their storefront order.

{% hint style="info" %}
Free gifts and discounts earned by **reaching a membership tier** aren't ways to redeem points. They're tier rewards, claimed through the **Customer Rewards** block instead: see [The Customer Rewards storefront redeeming block](/loyalty-and-rewards/membership-tiers-and-referrals/the-customer-rewards-storefront-redeeming-block).
{% endhint %}

#### Restrict a reward to specific tiers

Like ways to earn, each reward has a **Membership tier eligibility** setting. Leave it empty to offer the reward to all members, or select tiers to make it exclusive: members only see and redeem the rewards their tier is eligible for. Use this for VIP-only rewards or a tag-based tier's own redemption menu.

#### Where customers redeem

* **Loyalty page** — use **Redeem Loyalty Points** or **Product Redeemer**.
* **Customer accounts** — use the loyalty block in legacy customer accounts.
* **Cart** — use the cart point redeemer in the cart drawer or cart page.

{% hint style="info" %}
Using Shopify's new customer accounts? A point-redemption block is shipping very shortly. Check the app’s **Change Log** for updates.
{% endhint %}

#### How redemption works: two steps

1. **Redeem** — the customer spends points on a reward. This generates their discount.
2. **Apply** — the discount applies immediately to their current cart.

If they leave without checkout, the code stays attached to their account. It is ready next time they return. The cart redeemer shows unused codes with **CLICK TO APPLY**.

#### Who can use a redemption code

A redemption code is not a public code. It is restricted to the customer who redeemed it, so it cannot be passed on to someone else.

{% hint style="info" %}
B2B companies share a point balance, so their redemption codes work differently. See [Setting up B2B points: ways to earn and redeem](/loyalty-and-rewards/b2b-loyalty/setting-up-b2b-points-ways-to-earn-and-redeem).
{% endhint %}

#### What a code can stack with

Stacking is set per reward, not globally. Each Amount Discount has a **Coupon can be combined with** setting covering Shopify's three discount classes: Product Discounts, Order Discounts and Shipping Discounts. Anything you leave unticked will not combine with that coupon, and a cart holding an incompatible discount has the code rejected.

The same reward also carries a product scope and a minimum order value. See [Set up an amount discount reward](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward).

Product redemption codes are locked to the product chosen at redemption, so they cannot be spent on anything else.

#### If a customer redeems by mistake

Only an admin can return points. Search the code or customer email in **Loyalty Program → Unused Loyalty Coupons**, then refund it. This returns the points and deletes the Shopify discount. See [Refund an unused loyalty coupon](/loyalty-and-rewards/points-and-ways-to-earn/refund-an-unused-loyalty-coupon).

#### Related guides

* [Set up an amount discount reward](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward)
* [Set up product redemption](/loyalty-and-rewards/points-and-ways-to-earn/set-up-product-redemption)
* [Configure the cart point redeemer](/loyalty-and-rewards/points-and-ways-to-earn/configure-the-cart-point-redeemer)
* [Redeem points on subscription orders](/loyalty-and-rewards/points-and-ways-to-earn/redeem-points-on-subscription-orders)
* [Refund an unused loyalty coupon](/loyalty-and-rewards/points-and-ways-to-earn/refund-an-unused-loyalty-coupon)


# Set up an amount discount reward

Configure an Amount Discount reward, including point cost, value, product scope, discount combinations, tier eligibility, and minimum order value.

An **Amount Discount** lets customers redeem points for a fixed amount or percentage off. Add one from **Loyalty Program → Points → Ways to redeem → Add way to redeem**.

Many programs use a reward ladder. For example, `100` points for `$10` off.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Foio5FKLknOdhPVSXE9uV%2FScreenshot%202026-09-02%20at%208.42.10%E2%80%AFPM.png?alt=media&#x26;token=afb72118-c979-42c6-81cd-def04e7386c1" alt="" width="563"><figcaption></figcaption></figure>

#### Redemption

* **Points cost** sets the reward cost.
* **Storefront Card Display Name** and **Description** appear in storefront widgets.

Leave either storefront field blank to use its default. Enter one space to hide it.

#### Discount Value

Choose **Fixed amount** in your store currency, or **Percentage**. Then set the value.

#### Coupon can be redeemed on

Choose a product scope:

* **All Products**
* **Specific Products / Collections**
* **All Products / Collections except**

Use the last option to exclude a sale collection.

#### Coupon can be combined with

Select Shopify discount classes that can stack with this coupon:

* **Product Discounts**
* **Order Discounts**
* **Shipping Discounts**

The redeemer explains conflicts when a cart has an incompatible discount.

#### Membership tier eligibility

Restrict the reward to specific membership tiers, or leave it empty to offer it to all members. Members only see the rewards their tier is eligible for, so this is how you build tier-exclusive rewards, richer redemption rates for top tiers, or a tag-based tier's own redemption menu.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FMYPtXExbFK75DfRDAWVO%2FScreenshot%202026-09-02%20at%208.42.46%E2%80%AFPM.png?alt=media&#x26;token=0a5233c7-5f88-4b98-98ab-4a5467b38972" alt="" width="563"><figcaption></figcaption></figure>

#### Minimum order value

Set the required cart value. Use `0` for no minimum.

The storefront shows this requirement. For example, `$10 OFF (1000 POINTS / $25 MIN SPEND)`.

{% hint style="info" %}
Set **Status** to **Active** when the reward should be live. See [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview) for redemption surfaces.
{% endhint %}

#### Related guides

* [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview)
* [Configure the cart point redeemer](/loyalty-and-rewards/points-and-ways-to-earn/configure-the-cart-point-redeemer)
* [Refund an unused loyalty coupon](/loyalty-and-rewards/points-and-ways-to-earn/refund-an-unused-loyalty-coupon)


# Set up product redemption

Let customers redeem whole products with points. Set the cost, the per-customer limit, the product options they choose from, and how many units each redemption adds to the cart.

**Product Redemption** lets customers spend points on an entire product. Add one from **Loyalty Program → Points → Ways to redeem → Add way to redeem**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FHTBq1hg53viRI4n0vCcn%2FScreenshot%202026-08-07%20at%204.38.54%E2%80%AFPM.png?alt=media&amp;token=4b357e19-39df-4284-8485-aa5ce65cf624" alt=""><figcaption></figcaption></figure>

#### Redemption Settings

* **Points cost**: what the reward costs, whichever product the customer picks.
* **Redemption limit per customer**: how many times each customer can redeem this reward. Set 1 for a once-per-customer perk, or raise it to let customers come back for more.
* **Storefront Card Display Name**: leave blank to use the product title, or enter a space to hide it from your storefront. Blank works best when the reward offers several products: every card labels itself with its own Shopify title. Set a name only for a single product you want to present differently.

#### Product Options

Customers can redeem their points for **any one** of the products you add here. Add multiple products to give customers choices: one points cost, their pick.

* **Search or Browse** to add products. Selection is variant-level, so you can offer the `200ml` without the `500ml`, or only the flavours you choose.
* **Qty**: how many units one redemption adds to the cart. Set Qty to 2 and a single redemption puts **two units** of that product in the customer's cart for the same points cost.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FfnUru1UmIQHFotVzTnn6%2FScreenshot%202026-08-07%20at%204.39.07%E2%80%AFPM.png?alt=media&amp;token=23d45a9e-af22-4a81-aadc-4c9cf37463c8" alt=""><figcaption></figcaption></figure>

* **Drag the handles** to reorder the options. This sets the order the product cards appear in on your storefront.
* Remove an option with the **×**.

Group similarly priced products under one points cost. This gives customers a clear reward with useful choice.

The **Summary** panel restates the configuration (*Redeem 500 Points for any one of 3 product options*). Set **Status** to *Active* when the reward should be live.

#### Membership tier eligibility

Leave empty to allow all customers, or select specific tiers to restrict the reward to those members only. Members only see the rewards their tier is eligible for, so this is how you build tier-exclusive product rewards or a [tag-based tier's](/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers) own redemption menu.

#### Stock and sold-out rewards

Roadmap checks stock before letting customers spend points, so nobody redeems something you cannot ship.

Stock is judged **in the shopper's country**. Shopify holds inventory per location and different countries are served by different locations, so the same reward can be redeemable for one customer and sold out for another. A reward with no stock in your home country but stock in the UK shows as sold out at home and stays redeemable for UK shoppers.

When a reward offers several product options, the two levels behave differently:

* An option that is out of stock is marked in the dropdown and **cannot be selected**. The remaining options stay redeemable, so the reward keeps working.
* The reward only turns fully sold out, replacing the **Redeem** button, once **every** option on it is out of stock.

#### What a sold-out card looks like

A sold-out reward stays on the page rather than disappearing, so customers can see it exists and come back for it:

* The badge switches to **SOLD OUT** in place of the unlocked badge.
* The product image is greyed out.
* The line under the title reads **Sold out** instead of *Available to redeem*, and the points cost is dropped.
* The **Redeem** button is replaced by a disabled **Sold out** button.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FiN4lvOzlbFnu7ncVXYo1%2FScreenshot%202026-09-24%20at%2010.00.16%E2%80%AFPM.png?alt=media&amp;token=ca918145-f455-4b62-8ed7-0cdcf1489a74" alt=""><figcaption></figcaption></figure>

#### Sold-out wording

The wording lives with the **Product Redeemer** block settings in the loyalty widget editor, under **Sold Out State**, described there as *shown when the reward is out of stock in the shopper's country*:

* **Badge Text**: the badge on a sold-out card. `SOLD OUT` by default.
* **Sold Out Button**: replaces the Redeem button once every option is out of stock. `Sold out` by default.
* **Sold Out Option Suffix**: added to out-of-stock choices in the dropdown, which cannot be selected. `Sold out` by default.

{% hint style="info" %}
There is nothing to switch on. The stock check applies automatically to every product reward, and you only need to visit these settings to change the wording.
{% endhint %}

If a reward looks sold out when you expect it to be available, check the stock level at the location serving that country in Shopify, rather than the total inventory across all locations.

#### Where customers redeem it

Customers redeem products only through the **Product Redeemer** block on your loyalty page. Each eligible product appears with its points cost. Customers choose a variant when needed, redeem, then the product, at its configured quantity, is added to their cart.

Customize the block's badges, buttons, confirmation prompts, and card layout in [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets).

{% hint style="info" %}
Two layers of ordering: drag **rewards** in the Ways to redeem list to order the Product Redeemer's rewards, and drag **product options** within a reward to order the choices inside it.
{% endhint %}

#### Related guides

* [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview)
* [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets)
* [Reward customers for reaching a tier](/loyalty-and-rewards/membership-tiers-and-referrals/reward-customers-for-reaching-a-tier)
* [The Customer Rewards storefront redeeming block](/loyalty-and-rewards/membership-tiers-and-referrals/the-customer-rewards-storefront-redeeming-block)


# Configure the cart point redeemer

Set up the cart point redeemer, including the customer flow, messages, states, and styling.

The point redeemer lets logged-in customers spend points without leaving the cart. It appears in the cart drawer, or on the cart page when your theme has no drawer.

#### What customers see

The redeemer uses a deliberate flow:

1. **Select a reward** — the dropdown lists affordable amount discounts, point costs, and minimum spend. Unused redeemed codes show **CLICK TO APPLY**.
2. **Confirm** — **Redeem** asks **Are you sure?** with **Yes** or **No**.
3. **Loading** — a short processing state appears.
4. **Applied** — the discount applies immediately. The code appears with **Remove**.

If the customer does not check out, their code stays ready for next time. See [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview).

#### Configure it in Edit Loyalty Widgets

Open **Edit Loyalty Widgets** from the Loyalty Program dashboard. Select the point redeemer.

The preview is interactive. Switch between **Logged out** and **Logged in**, desktop and mobile. Click through redemption states while editing settings.

Configure:

* **Content** — the dropdown title and **Redemption Method**. **Coupon** creates a discount code. **Automatic** applies the discount through cart attributes.
* **Messages** — select-reward, insufficient-points, minimum-order-value, discount-conflict, no-eligible-items, and operation-error messages.
* **Logged Out State** — optionally show a login prompt with its message, link text, and URL. Disable it to hide the widget for logged-out customers.
* **Checkout Messages** — text in the checkout loyalty redeemer.
* **Styling** — colors, buttons, dropdowns, borders, typography, spacing, and **Abbreviate text** for narrow drawers.

{% hint style="info" %}
Fields tagged **Styler** inherit from **Universal Styler**. A manually changed field is tagged **Edited** and no longer updates from the Styler.
{% endhint %}

#### Related guides

* [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview)
* [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets)
* [Set up an amount discount reward](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward)


# Redeem points on subscription orders

Let subscribers apply loyalty points to an upcoming subscription order through Subscriptions Integration.

Subscribers earn points on every renewal. **Subscriptions Integration** lets them apply points to an upcoming subscription order.

#### Turn it on

In **Loyalty Program → Points**, find **Subscriptions Integration**. Select **Allow loyalty points redemption on subscriptions**, then save.

#### How it works

* Customers apply the loyalty program’s amount discounts from the subscription widget dashboard.
* Redemption criteria carry over. A reward with a minimum spend stays unavailable until the upcoming order meets it.

For the customer flow, see [Loyalty points × subscriptions](/subscriptions/storefront-and-accounts/loyalty-points-subscriptions).

#### Related guides

* [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview)
* [Set up an amount discount reward](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward)
* [Reward subscribers with loyalty points](/loyalty-and-rewards/points-and-ways-to-earn/reward-subscribers-with-loyalty-points)


# Refund an unused loyalty coupon

Return a customer's points when they've redeemed a coupon they don't want or can't use, for amount discounts and product redemptions alike, and let them redeem fresh.

Refund a coupon when a customer has redeemed points and wants them back, or redeemed the **wrong thing** and needs to start over. It works for both reward types:

* **Amount discounts**: the customer changed their mind, or the coupon's restrictions (minimum spend, product scope) don't fit their order.
* **Product redemptions**: the customer picked the wrong product, or the product is no longer available. Product-redemption coupons are **locked to the product chosen at redemption**, so refund plus a fresh redemption is how a customer "swaps" products.

{% hint style="warning" %}
Refunds are **admin-only**. Customers cannot reverse a redemption themselves. This is standard across loyalty platforms, so it's worth stating in your own store FAQ that customers should contact you to undo a redemption. Coupons also can't be **edited**: refund and re-redeem is the only way to change one.
{% endhint %}

#### Refund the coupon

{% stepper %}
{% step %}
**Open Unused Loyalty Coupons**

From the Loyalty Program dashboard, open **Unused Loyalty Coupons**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FOxrwz2FgfSkHOqCQD7e2%2FScreenshot%202026-09-02%20at%2010.24.02%E2%80%AFAM.png?alt=media&#x26;token=3fc03f8b-1c11-46ef-be99-d6709370ec98" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Find the coupon**

Search by coupon code or customer email. The table shows the code, customer, redemption method, point cost, and creation date.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FEQyHkE1Edkoky5vM84uw%2FScreenshot%202026-09-02%20at%2010.28.25%E2%80%AFAM.png?alt=media&#x26;token=9f9611f9-34a8-492b-ba95-c509cc32cb47" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Click Refund and confirm**

A confirmation shows the code, customer, and points to refund. Confirming returns the points and deletes the Shopify discount. The code cannot be used afterward.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FN4tweaT0NFc7PLj2VwNB%2FScreenshot%202026-09-02%20at%2010.29.00%E2%80%AFAM.png?alt=media&#x26;token=4f43910e-533b-45b4-8a57-2ca8738db615" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

The refund appears in the customer's point history, their balance updates immediately, and they can redeem again straight away.

#### Coupon statuses

A customer's full coupon history, including used ones, lives in [Manage Customers](/loyalty-and-rewards/customer-management/manage-loyalty-customers): open their profile, then **Point History → Discounts**.

* **Active**: generated and still unused. This is the refundable state (it appears in Unused Loyalty Coupons). *Active does not mean the customer has spent it.*
* **Used**: spent on an order. Cannot be refunded here.
* **Refunded**: already refunded; the points went back.
* **Deleted**: removed from Shopify.

{% hint style="info" %}
Only **unused** coupons appear in Unused Loyalty Coupons. Once an order uses a coupon, it can't be refunded from this screen.
{% endhint %}

#### Related guides

* [A customer's loyalty coupon isn't working](/loyalty-and-rewards/troubleshooting/a-customers-loyalty-coupon-isnt-working)
* [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview)
* [Where is a customer's loyalty discount code?](/loyalty-and-rewards/troubleshooting/where-is-a-customers-loyalty-discount-code)


# Who earns points on Shopify gift cards

Decide whether the purchaser, the redeemer, both, or no one earns points on Shopify gift cards, and how your Place an order earning conditions still apply.

A Shopify gift card creates two separate moments where points could be earned: when a customer purchases the card, and when someone redeems it against an order. **Who earns points on Shopify gift cards** lets you decide which of those moments earns.

Find it in **Loyalty Program → Points**, in the **Gift cards** section of your [point settings](/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings). It applies across your whole program, not per earning rule.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FAIXTLx66tV0UsASF5QFV%2FScreenshot%202026-09-24%20at%209.13.18%E2%80%AFPM.png?alt=media&amp;token=36ed569b-080a-4362-9c82-117862cf3915" alt="" width="563"><figcaption></figcaption></figure>

#### Choose who earns

| Option                          | What it does                                                   |
| ------------------------------- | -------------------------------------------------------------- |
| **No one**                      | Gift cards never earn points, whether purchased or redeemed.   |
| **The purchaser**               | Purchasing a gift card earns points. Redeeming one does not.   |
| **The redeemer**                | Redeeming a gift card earns points. Purchasing one does not.   |
| **Both purchaser and redeemer** | Purchasing a gift card earns points, and so does redeeming it. |

Each option's help text also reminds you that the earning conditions on your **Place an order** rule, such as excluding discounted items, still apply to gift cards.

{% hint style="warning" %}
**Both purchaser and redeemer** awards points on the same spend twice. A customer can purchase a gift card, redeem it themselves, and earn points on both orders. The admin shows a caution banner when you pick it.
{% endhint %}

#### Purchasing and redeeming are different things

When a gift card is purchased it is a line item, so it sits on the order like any other product.

Redeeming a gift card is a payment method. It does not change whether the rest of the order earns points. Every other item is still assessed against your **Place an order** earning conditions exactly as it would be on a card payment.

#### Your earning conditions still apply

This setting decides **who** earns on a gift card. It does not exempt gift cards from the earning conditions on your [Place an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order) rule.

The case that catches people out: if **Discounted items via Roadmap/Shopify discounts** is set not to earn points, and the gift card itself was sold at a discount, that gift card earns nothing even when the setting is **The purchaser**. A gift card is a line item, so a discount applied to it counts as a discounted item.

{% hint style="info" %}
Points are always calculated on amounts after discounts.
{% endhint %}

#### What you will see on a customer's timeline

Every order assessed by an active **Place an order** rule produces one entry on the customer's [loyalty timeline](/loyalty-and-rewards/customer-management/understanding-a-customers-loyalty-timeline), either **Earned** or **Not Awarded**. When a gift card affects the outcome, the entry names it.

| What happened                                                                     | What the timeline shows                                                                                                                                           |
| --------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| The order contained only a gift card, and that gift card was discounted           | **Not Awarded**: The gift card in this order was discounted. Your Place an order rule excludes discounted items from earning, and this applies to gift cards too. |
| A gift card was redeemed, and every product in the order was discounted           | **Not Awarded**: All items in this order were discounted and excluded from earning by your Place an order rule.                                                   |
| Other items earned, and a discounted gift card was the only excluded line         | **Earned**, noting: A discounted gift card in this order was excluded from earning.                                                                               |
| Other items earned, and a gift card was excluded alongside other discounted items | **Earned**, noting: Some items, including a gift card, were discounted and excluded from earning.                                                                 |
| A gift card was redeemed and some products were discounted                        | **Earned**, noting: Some items were discounted and excluded from earning. The gift card is not named, because the payment method is not the reason.               |
| Your setting excludes the purchaser, and the order contained only a gift card     | **Not Awarded**: Gift cards do not earn points for the purchaser under your gift card setting.                                                                    |
| Your setting excludes the purchaser, and other items earned                       | **Earned**, noting: The gift card in this order does not earn points for the purchaser under your gift card setting.                                              |

#### Which option to choose

* **The purchaser** rewards the person spending money with you, and is the closest match to how the rest of your program behaves.
* **The redeemer** suits stores that use gift cards to reach new customers, since the recipient often has not shopped with you before.
* **Both purchaser and redeemer** is the most generous. Read the warning above before choosing it.
* **No one** keeps gift cards entirely outside the loyalty program.

#### Related guides

* [How to configure your point settings](/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings)
* [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order)
* [How to Stop Customers Earning Points on Discounted or Sale Items](/loyalty-and-rewards/points-and-ways-to-earn/how-to-stop-customers-earning-points-on-discounted-or-sale-items)
* [Understanding a customer's loyalty timeline](/loyalty-and-rewards/customer-management/understanding-a-customers-loyalty-timeline)
* [Customers not earning loyalty points](/loyalty-and-rewards/troubleshooting/customers-not-earning-loyalty-points)


# Membership tiers & referrals


# Loyalty Tiers

Create membership tiers — names, levels, customer tags, and the milestone that earns each tier — and choose between points-earned, amount-spent, item-purchased, and tag-based progression.

#### What loyalty tiers are

Create a visible membership ladder for loyal customers. Set tiers in **Loyalty Program → Membership Tiers**.

Each tier has a milestone. Customers progress as they qualify.

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/l1ezeHXpZo7nSmnr17RA/Screenshot_2026%2002%2022_at_4.31.20_PM.png" alt=""><figcaption><p>The Membership Tiers page — your tier ladder, with Membership Settings below it.</p></figcaption></figure>

#### Create a tier

Click **Add tier**, then configure **Tier name**, **Tier level**, **Customer Tag Name**, and **Milestone to achieve tier**.

* **Points earned**: Customers qualify when they reach the points threshold you set.
* **Amount spent**: Customers qualify when they reach the spend threshold you set (shown in your store currency, for example `AUD`).
* **Specific item purchased**: Customers qualify when they purchase a specific product you select (via **Search products** or **Browse**).
* **Secondary loyalty program**: Membership is granted by a Shopify customer tag instead of points or spend.

**Tier name** is visible to customers. **Tier level** sets display order. Lower levels display first.

**Customer Tag Name** applies a Shopify customer tag when a customer enters the tier. Use the tag in segments, Klaviyo, Flow automations, and theme logic.

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/7VAKhzVng05AFeh7Hp0N/Screenshot_2026%2002%2022_at_4.31.52_PM.png" alt=""><figcaption><p>A tier is a name, a level, a tag, and a milestone.</p></figcaption></figure>

#### Choose a milestone

Use one milestone type across your tier ladder where possible. This keeps progression easy to understand.

**Amount spent** maps tier status directly to revenue. Other earning rules cannot accelerate progression.

**Points earned** rewards engagement across orders, reviews, birthdays, sign-ups, and tags. Plan thresholds around bonus-point promotions.

**Specific item purchased** supports a purchased membership. Pair it with a fixed-duration membership and communicate renewal terms clearly.

**Secondary loyalty program** sits outside the ladder: it's a tag-granted tier for paid memberships, VIPs, and staff, and customers keep it for as long as the trigger tag is assigned. Full guide: [Tag-based membership tiers](/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers).

#### What determines the order of tiers

Tier order is controlled by **Tier level** on the **Edit Membership Tier** screen. Lower tiers are displayed first.

If you want a classic tier ladder, set **Tier level** to 1 for Bronze, 2 for Silver, and 3 for Gold.

#### Members without a tier

Customers can belong to the program without holding a tier. If the first tier starts at `200` points, lower-balance members show **None** in **Manage Customers**.

An entry threshold preserves tier status and gives new members a clear goal.

#### Tier-specific cart messages

The **Edit Membership Tier** form includes a **Cart announcement bar** card. Give a tier its own **Message** and its members see it in the cart bar instead of the default. Snippet chips personalise it: `{amount}`, `{total_points}`, `{cart_points}`, `{current_tier_name}`, `{next_tier_name}`, `{points_required}`, `{amount_required}`. Snippets with no value are removed from the message, so keep next-tier wording out of your top tier's message. The bar itself is configured in [Cart Announcement Bar settings](https://docs.roadmap.so/cart-and-checkout/cart-announcement-bar).

#### Progression and membership duration

See [Tier progression rules](/loyalty-and-rewards/membership-tiers-and-referrals/tier-progression-rules) for tier-change mechanics. See [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings) for participation and membership duration.

#### Edit tiers

{% stepper %}
{% step %}

#### Open Membership Tiers

Go to **Membership Tiers** and find the tier you want to change in the list.
{% endstep %}

{% step %}

#### Click Edit

Select **Edit** on the tier row (for example, next to `Level 1`).
{% endstep %}

{% step %}

#### Update display details

In **Display**, edit **Tier name** (for example, Bronze/Silver/Gold), confirm **Tier level**, and set a **Customer Tag Name** to apply when a customer enters that tier.
{% endstep %}

{% step %}

#### Choose how the tier is earned

Under **Milestone to achieve tier**, select **Points earned**, **Amount spent**, **Specific item purchased**, or **Secondary loyalty program**, then enter the threshold, pick the product, or set the trigger tag.
{% endstep %}

{% step %}

#### Save changes

Click **Save**.
{% endstep %}
{% endstepper %}

#### Add or delete tiers

* To add a new tier, select **Add tier** on the **Membership Tiers** page.
* To delete a tier, open it with **Edit** and select **Delete** on the **Edit Membership Tier** screen.

**Deleting a tier removes that tier configuration.** If you’re using **Customer Tag Name** in other tools, review any workflows or segments that rely on that tag before deleting.

#### Frequently asked questions

<details>

<summary>Can I use different milestones across tiers?</summary>

Yes. Each tier has its own milestone. Use one scale where possible so customers understand progression.

</details>

<details>

<summary>What’s the difference between Tier name and Customer Tag Name?</summary>

**Tier name** is what customers see (for example, Bronze). **Customer Tag Name** is the tag applied when their membership tier changes, which is useful for targeting or filtering customers by tier.

</details>

<details>

<summary>Where do I set eligibility and membership duration?</summary>

Use [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings).

</details>

#### Related guides

* [Tag-based membership tiers](/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers)
* [Tier progression rules](/loyalty-and-rewards/membership-tiers-and-referrals/tier-progression-rules)
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)
* [Reward customers for reaching a tier](/loyalty-and-rewards/membership-tiers-and-referrals/reward-customers-for-reaching-a-tier)
* [Send discount codes for birthdays and tier promotions](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions)
* [B2B membership tiers](/loyalty-and-rewards/b2b-loyalty/b2b-membership-tiers)


# Tag-based membership tiers

Run a secondary loyalty program granted by a Shopify customer tag: an invite-style tier alongside your milestone tiers for paid memberships, VIPs, staff, or app-driven cohorts.

Milestone tiers reward what customers **do**: points earned, amount spent, or an item purchased. A **tag-based tier** works differently: membership is granted by a **Shopify customer tag**. Whoever carries the tag is in the tier; remove the tag and they return to your regular tier ladder.

That makes it the tool for tiers that aren't earned through activity:

* **Paid memberships**: a membership product purchase applies the tag (via Shopify Flow or subscription auto-tagging).
* **VIPs, ambassadors, and staff**: hand-picked members, tagged manually or in bulk.
* **Cohorts**: a specific groups of customers you are looking to run specific offers and marketing to.

You can have **one tag-based tier** per program, running alongside your milestone tiers as a secondary track.

### Set it up

Go to **Loyalty Program → Membership Tiers** and add or edit a tier. Under **Milestone to achieve tier**, choose **Secondary loyalty program**: membership is granted by a Shopify customer tag instead of points or spend.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7Y3tImhSF3jEtWPP1Zij%2FScreenshot%202026-09-03%20at%202.37.12%E2%80%AFPM.png?alt=media&#x26;token=1e56e44b-23be-409c-ae5c-8a00775138d9" alt="" width="375"><figcaption></figcaption></figure>

* **Trigger tag**: customers carrying this Shopify tag are granted this tier.
* **Lifetime membership (membership and points never expire)**: when enabled, this tier and the points earned in it are excluded from expiry. Ideal for paid memberships where points should never lapse mid-membership.

Set the **Tier name** and **Tier level** as usual. This tier cannot be promoted or demoted: customers keep it for as long as the trigger tag is assigned.

### How customers enter

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FcUB2iqWBPt5xLhXOLBDX%2FScreenshot%202026-09-03%20at%202.40.32%E2%80%AFPM.png?alt=media&#x26;token=6e91d61d-cfd5-4f0f-8e81-490d084c5698" alt="" width="375"><figcaption></figcaption></figure>

Apply the trigger tag to the customer in Shopify (manually, via Flow, or from another app). Roadmap then:

* assigns the customer to the tag-based tier immediately
* removes their previous tier's program tag automatically, so tags never conflict
* sets their new membership start date (using your store's timezone) and removes any expiry date (tag-based tiers do not expire).
* Any loyalty points that customer already had before entering this tier remain. However, they will still expire per the terms applied when the points were earned.
* logs the promotion on their timeline

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FueOq5iqSuoDvIZukTc4J%2FScreenshot%202026-09-03%20at%202.45.17%E2%80%AFPM.png?alt=media&#x26;token=09702407-0fe7-4383-be2b-69ccccc0c1de" alt="" width="302"><figcaption></figcaption></figure>

### What tag-based members see

* **Ways to earn and ways to redeem scoped to their tier.** Use the **Membership tier eligibility** setting on earners and rewards to build the tier's own earning rates and redemption options. Members only see what their tier is eligible for.
* **No progress bar.** The Loyalty Progress Bar app block hides itself for tag-based members, since milestone progression doesn't apply to them.
* **Klaviyo properties adjust.** Progression and expiry properties are cleared, everything else keeps syncing. See the breakdown below.

### Klaviyo properties for tag-based members

A tag-based tier has no "next tier" and no membership expiry, so those Klaviyo profile properties are **cleared** while the customer holds the tier:

| Cleared                    | Klaviyo property                          |
| -------------------------- | ----------------------------------------- |
| Next tier name             | `person.roadmap_loyalty_next_tier_name`   |
| Points away from next tier | `person.roadmap_loyalty_next_tier_points` |
| Membership expiry date     | `person.roadmap_loyalty_expiry_date`      |

Everything else **remains and keeps syncing** as normal:

| Remains                               | Klaviyo property                                      |
| ------------------------------------- | ----------------------------------------------------- |
| Total points earned                   | `person.roadmap_loyalty_total_points`                 |
| Total points earned in period         | `person.roadmap_loyalty_total_points_earnt_in_period` |
| Total points expiring in next 30 days | `person.roadmap_loyalty_expiring_points`              |
| Current tier name                     | `person.roadmap_loyalty_current_tier_name`            |
| Has Membership account                | `person.roadmap_has_account`                          |
| Total spent in period                 | `person.roadmap_total_spent_in_period`                |
| Birthday                              | `person.roadmap_loyalty_birthday`                     |
| Member since                          | `person.roadmap_loyalty_member_since`                 |
| Membership start date                 | `person.roadmap_loyalty_start_date`                   |
| Next point expiry date                | `person.roadmap_loyalty_point_expiry_date`            |
| Points expiring on next expiry date   | `person.roadmap_loyalty_next_expiring_points`         |
| Latest order points earnt             | `person.roadmap_loyalty_latest_order_points_earnt`    |

Worth knowing when building flows and segments:

* `roadmap_loyalty_current_tier_name` holds the tag-based tier's name, so Klaviyo splits and segments on tier name keep working for these members.
* The period counters (points earned in period, total spent in period) restart from the customer's new membership start date.
* With **Lifetime membership** enabled, points earned inside the tier never expire, so the point-expiry properties only reflect points the customer earned **before** joining the tier.

Full property reference: [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets).

### Tier-specific cart messages

The **Edit Membership Tier** form includes a **Cart announcement bar** card. Give the tier its own **Message** and members of this tier see it in the cart bar instead of the bar's default message. Click the snippet chips to personalise it: `{amount}`, `{total_points}`, `{cart_points}`, `{current_tier_name}`, `{next_tier_name}`, `{points_required}`, `{amount_required}`. Snippets with no value behind them are removed from the message, so keep next-tier wording out of your top tier's message.

Leave the field blank to use the default bar, configured in [Cart Announcement Bar settings](https://docs.roadmap.so/cart-and-checkout/cart-announcement-bar).

### How customers exit

Remove the tag, and Roadmap recalculates the customer into your milestone ladder:

* Their start date refreshes to todays date and their current period's points or spend decide which milestone tier they land in. If nothing qualifies, they hold no tier.
* Their tier tags update to match, and the change is logged on their timeline.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F1emPaT0Qdiq9Za8RDdJl%2FScreenshot%202026-09-03%20at%202.49.34%E2%80%AFPM.png?alt=media&#x26;token=d875e9ef-a225-4fcd-848a-cd998685f14d" alt="" width="288"><figcaption></figcaption></figure>

So a lapsed paid member, for example, drops back to exactly the tier their organic activity has earned. Nothing needs manual cleanup.

{% hint style="info" %}
The tag is the single source of truth: apply it to enrol, remove it to exit. Whatever system controls the tag (Flow, a membership app, your team) controls the tier.
{% endhint %}

### Related guides

* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)
* [Award points with customer tags](/loyalty-and-rewards/points-and-ways-to-earn/award-points-with-customer-tags): tags that award points rather than tiers
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)
* [Reward subscribers with loyalty points](/loyalty-and-rewards/points-and-ways-to-earn/reward-subscribers-with-loyalty-points): auto-tagging as the entry mechanism
* [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets)


# Manage referrals

Reward customers for referrals with Referral Program, and how a referral discount applies once per order.

Use **Referral Program** to reward both the existing customer who refers a friend and the friend who places their first order.

The existing customer receives their reward **once the friend makes their first order**.

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/RSNXqMMExSBM5bHYpMWt/Screenshot_2026%2002%2022_at_4.26.04_PM.png" alt=""><figcaption></figcaption></figure>

### Set the reward for the referring customer

Open the Customer reward settings

From **Referral Program**, find **Customer reward** and select **Edit**.

Choose what to reward

Select one option:

* **No reward** (turns off the customer reward)
* **Points** (enter the number of points)
* **Discount** (configure a coupon-style discount)

If you choose Discount, configure the rules

Fill in the available fields as needed:

* **Percentage** or **Fixed amount**
* **Code prefix** (the beginning of the generated code; the example updates underneath)
* **Applies to** (for example, **Specific products or variants**)
* **Select variants** (optional; select specific variants, or leave blank to match any product). Use **Browse** to pick items.
* **Purchase Type** (for example, **One-time purchase**)
* **Minimum spend**
* **Expires after** (leave as **No expiry** to keep codes active indefinitely)

Save your changes

Select **Save**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FIp3bR3oZ3bt4gnoVc4pN%2FScreenshot%202026-09-24%20at%209.41.06%E2%80%AFPM.png?alt=media&amp;token=5be412da-a93b-4ec2-a2dd-37ff635b16e1" alt=""><figcaption></figcaption></figure>

### How a referral discount applies

A referral reward is a single reward for a single referral, so the discount applies **once per order**.

If you set a fixed amount and the order contains more than one qualifying product, the reward is spread across those products rather than repeated on each one. A `$30` referral reward takes `$30` off the order in total, however many qualifying items are in the cart.

**Applies to** and **Select variants** still decide which products qualify. They scope eligibility; they do not multiply the reward.

{% hint style="info" %}
One referral produces one successful referral in your [loyalty analytics](/loyalty-and-rewards/loyalty-analytics), counted against the order rather than the number of products the code touched.
{% endhint %}

### Set the reward for the referred friend

The **Friend reward** is what your customer's friend receives to use on their **first purchase**.

Open the Friend reward settings

From **Referral Program**, find **Friend reward** and select **Edit**.

Choose Points or Discount

Pick **No reward**, **Points**, or **Discount**, then configure the same discount rule fields if you choose **Discount**.

Save your changes

Select **Save**.

### Activate your Referral Program

Check Referral status

On the **Referral Program** page, look for the **Referral status** section.

Turn it on

If it shows **inactive**, select **Activate**.

If you're testing, set a small **Points** reward first (for example, 50–200) to verify the referral flow, then switch to a **Discount** once you're ready.

### FAQ

<details>

<summary>When does the referring customer get rewarded?</summary>

The referring customer receives their reward after the friend makes their **first order**.

</details>

<details>

<summary>Do I have to use both rewards?</summary>

No. You can choose **No reward** for either **Customer reward** or **Friend reward**, and keep the other one active.

</details>

<details>

<summary>What does “Code prefix” do?</summary>

It sets the starting characters for generated discount codes. The example shown beneath the field updates to preview what the code will look like.

</details>

<details>

<summary>Can a referral discount apply more than once on an order?</summary>

No. A referral reward applies once per order. If several qualifying products are in the cart, a fixed-amount reward is spread across them so the total taken off matches what you configured.

</details>

### Related guides

* [Referral rewards not applying?](/loyalty-and-rewards/troubleshooting/referral-rewards-not-applying)
* [What the roadmap.referrer note on a customer means](/loyalty-and-rewards/troubleshooting/what-the-roadmapreferrer-note-on-a-customer-means)
* [Loyalty analytics](/loyalty-and-rewards/loyalty-analytics)


# Tier progression rules

### Where tier progression rules are set

Tier progression is configured in your **Loyalty Program** under **Membership Tiers**. Each tier has its own earning rule in the **Milestone to achieve tier** section on the **Edit Membership Tier** screen.

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/l1ezeHXpZo7nSmnr17RA/Screenshot_2026%2002%2022_at_4.31.20_PM.png" alt=""><figcaption></figcaption></figure>

### Set progression rules for a tier

{% stepper %}
{% step %}

#### Open Membership Tiers

Go to **Loyalty Program** → **Membership Tiers**.
{% endstep %}

{% step %}

#### Edit the tier

In the tier list (for example, `Level 1`, `Level 2`, `Level 3`), click **Edit** on the tier you want to change.
{% endstep %}

{% step %}

#### Choose the milestone

On **Edit Membership Tier**, find **Milestone to achieve tier** and choose one option:

* **Points earned** — progress when customers reach the points threshold you set.
* **Amount spent** — progress when customers reach the spend threshold (shown in your store currency, for example `AUD`).
* **Specific item purchased** — progress when customers purchase a product you select.
  {% endstep %}

{% step %}

#### Enter the threshold or pick a product

* If you chose **Points earned** or **Amount spent**, enter the number in the input field.
* If you chose **Specific item purchased**, use **Search products** or click **Browse** to select the qualifying item.
  {% endstep %}

{% step %}

#### Save

Click **Save** to apply the new progression rule.
{% endstep %}
{% endstepper %}

&#x20;

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/7M4TG0VeORDfBEqumGMX/Screenshot_2026%2002%2022_at_4.31.34_PM.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/7VAKhzVng05AFeh7Hp0N/Screenshot_2026%2002%2022_at_4.31.52_PM.png" alt=""><figcaption></figcaption></figure>

### Set tier order (what customers see first)

Tier order is controlled by the **Tier level** field in the **Display** section on **Edit Membership Tier**. Lower tiers are displayed first.

If you want a standard ladder (Level 1 → Level 2 → Level 3), set **Tier level** to `1`, `2`, and `3` respectively.

### Use tags when a tier changes

Each tier can apply a tag to customers when their tier changes. On **Edit Membership Tier**, set **Customer Tag Name** (for example, `level-1`). This is helpful if you segment or filter customers elsewhere using tags.

**Tier name** is the label customers see (for example, Bronze). **Customer Tag Name** is the internal tag applied when their tier changes.

### How tier progression is recalculated over time

On the **Membership Tiers** page, review the **Membership Settings** panel for the lifecycle rules:

* **Only customers with a store account created** can participate in your loyalty program.
* **Memberships automatically expire after 12 months.**
* **Membership tiers will be recalculated at the end of each period** based on the customer’s **total points earned OR total amount spent** during that period (depending on how your tiers are configured).

Because tiers are recalculated at the end of each period, a customer may move down a tier after the period closes if they didn’t maintain the required points/spend during that period.

### Add or remove tiers

* **Add a tier:** On **Membership Tiers**, click **Add tier**.
* **Delete a tier:** Open the tier with **Edit**, then click **Delete** on the **Edit Membership Tier** screen.

Deleting a tier removes that tier configuration. If you use the tier’s **Customer Tag Name** in other tools or campaigns, update those workflows before deleting.

### FAQ

<details>

<summary>Can different tiers use different progression rules?</summary>

Yes. Each tier has its own **Milestone to achieve tier** setting, so one tier can be based on **Amount spent** while another is based on **Points earned** or **Specific item purchased**.

</details>

<details>

<summary>Why does my tier list show Level 1, Level 2, Level 3?</summary>

Those are default names. You can rename them using the **Tier name** field on **Edit Membership Tier**.

</details>

<details>

<summary>Where do I set VIP perks for reaching a tier?</summary>

Tier progression rules decide *who qualifies*. Tier perks are configured separately under **Membership Tiers** in **Reward Customers** / **Customer Rewards** using triggers like **Tier Reached** or **Time Completed**.

</details>


# Reward customers for reaching a tier

Give customers a direct reward when they reach a membership tier or maintain it through a membership period.

**Customer Rewards** gives members a direct reward when they reach a tier. It can also reward members who maintain their tier through a membership period. Add one from **Loyalty Program → Points → Customer Rewards**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FVcaWzIRSnJukmS0Qkt17%2FScreenshot%202026-09-08%20at%205.23.17%E2%80%AFPM.png?alt=media&amp;token=39dd4fa2-6c1e-4983-9812-dbd328156fc4" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
With **Fixed duration**, a customer who keeps their tier through recalculation can receive the reward again.
{% endhint %}

### The reward

* **Reward Name**: an internal admin reference.
* **Target Tier**: the tier that unlocks the reward.
* **Minimum Spend Amount**: the order value required to qualify. Use `0` for no minimum.

### What can customers redeem?

The **Target Selection** decides what the reward covers and what its storefront card shows:

* **Specific Products**: hand-picked products, up to 20.
* **Products from Collections**: the products from up to 10 collections you select.
* **Any Product in Store**: the customer can redeem against any product in your inventory.
* **Card Image**: for **Any Product in Store** rewards, upload an image (under 500 KB; .png, .jpg, .jpeg, .svg, .gif, or .webp) so the reward's storefront card isn't text-only.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FSUom85ZkCLLIt6FkOA3X%2FScreenshot%202026-09-08%20at%205.24.43%E2%80%AFPM.png?alt=media&amp;token=f130443b-26f0-4a0a-9605-39f7984cccaf" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Use **Any Product in Store** carefully. For percentage rewards, **Discount Code Generator** is often the simpler option.
{% endhint %}

### The discount

* **Discount Configuration**: choose **Percentage Discount** or **Fixed Amount Discount**. A percentage of `100%` makes a product free.
* **Products Per Redemption**: how many products one checkout can discount.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FTjtSA4xKssLDkhXMh7SD%2FScreenshot%202026-09-08%20at%205.24.57%E2%80%AFPM.png?alt=media&amp;token=7bc313e9-cc1d-4c66-98cb-04e531e7a4f6" alt="" width="563"><figcaption></figcaption></figure>

### Usage and expiry

* **How many times can this reward be used?** Choose unlimited uses per tier achievement or a limit.
* **Expiry Configuration**: choose **Never expires** or set days until expiry.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FAQyJqbl5bHM6Lli92OLs%2FScreenshot%202026-09-08%20at%205.25.07%E2%80%AFPM.png?alt=media&amp;token=5034cc1e-5327-4196-b653-6036bcb31f53" alt="" width="563"><figcaption></figcaption></figure>

### Coupon can be combined with

Choose the Product, Order, and Shipping discounts that can stack with the reward's coupon.

The **Reward Preview** panel summarizes the configuration. Set **Status** to **Active** when ready. Every active reward appears in the **Customer Rewards** block on your loyalty page.

### What customers see

The **Customer Rewards** app block shows each reward as a card on your loyalty page, with locked, available, sold out, redeemed, and fully redeemed states. The customer clicks the claim button, for example **Claim reward**, and the product is added to their cart with the discount applied. The full walkthrough of the block's states, cart behaviour, and settings is in [The Customer Rewards storefront redeeming block](/loyalty-and-rewards/membership-tiers-and-referrals/the-customer-rewards-storefront-redeeming-block).

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F6UurK4tOeAft468my4FB%2FScreenshot%202026-09-08%20at%204.22.12%E2%80%AFPM.png?alt=media&amp;token=4427d906-73d8-4297-9170-dd183ad6538c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Add it through the theme editor like any app block. Customize it in [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets).
{% endhint %}

### Related guides

* [The Customer Rewards storefront redeeming block](/loyalty-and-rewards/membership-tiers-and-referrals/the-customer-rewards-storefront-redeeming-block): where customers see and redeem these rewards
* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)
* [Send discount codes for birthdays and tier promotions](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions)


# The Customer Rewards storefront redeeming block

Let customers see and redeem their tier rewards on the storefront: the block's states, how redemption behaves in the cart, and every setting explained.

The **Customer Rewards** block is the storefront home for your tier rewards: the free gifts and discounts you configure under [Reward customers for reaching a tier](/loyalty-and-rewards/membership-tiers-and-referrals/reward-customers-for-reaching-a-tier). Customers see the rewards their tier has unlocked, the ones still locked ahead of them, and redeem straight into the cart.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FAvGctD9V4Ur6SIy55Gwc%2FScreenshot%202026-09-08%20at%204.22.12%E2%80%AFPM.png?alt=media&amp;token=ceb2f8cf-0d99-4878-a712-388bee1fdae3" alt=""><figcaption></figcaption></figure>

### Add the block

Add **Customer Rewards** to your theme like the other Roadmap loyalty blocks, through the app blocks in the theme editor: see [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets). Its styling controls mirror the Product Redeemer's, so the two sit naturally side by side.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F7OtIu50abFnvpxbrZ2vL%2FScreenshot%202026-09-08%20at%204.23.31%E2%80%AFPM.png?alt=media&amp;token=3dd8cba8-07e7-4398-a8db-5a148c358337" alt=""><figcaption></figcaption></figure>

### What customers see

Each reward renders as a card, and the card's state follows the customer:

* **Locked**: the reward's tier hasn't been reached yet, with your locked text, for example *Reach Platinum to unlock*. Rewards for **maintaining** a tier show a time-locked state once the tier is reached but the membership period isn't complete, with your available-after text.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FBgOy7rQWNm8AEQATNwXS%2FScreenshot%202026-09-08%20at%204.29.32%E2%80%AFPM.png?alt=media&amp;token=0e7d3a93-13a7-456c-ae1b-e05315c48b83" alt=""><figcaption></figcaption></figure>

* **Available**: the reward is redeemable, with a claim button, for example **Claim reward**. The badge can show the discount itself (free, a percentage, or an amount off) using the dynamic discount value, and the card shows the reward's minimum spend when one is set.

<div align="left"><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FNTUjpDqP4xBPJnZ5Gs0D%2FScreenshot%202026-09-08%20at%204.25.21%E2%80%AFPM.png?alt=media&amp;token=fb6739b5-c20e-42f5-8d33-6eb6a363cbc4" alt="" width="375"><figcaption></figcaption></figure></div>

* **Sold out**: the reward's product is out of stock **in the shopper's country**. The card keeps its badge and pricing, but the claim button is replaced with a greyed-out **Sold out** button until the product is back in stock. Because Shopify holds inventory per location, the same reward can be available to one customer and sold out for another.

<div align="left"><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fl1GejcWEDZN6sdoLHHtk%2FScreenshot%202026-09-08%20at%204.50.11%E2%80%AFPM.png?alt=media&amp;token=eb8eac08-a884-4929-b608-cf2a152066db" alt="" width="375"><figcaption></figcaption></figure></div>

* **Redeemed**: the reward is in the cart, with a **Remove** action, and optionally the discount code shown after claiming.

<div><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F3ImjLAtL96hZ3rMH8ioa%2FScreenshot%202026-09-08%20at%204.26.41%E2%80%AFPM.png?alt=media&amp;token=e2592995-3ab1-437d-b792-e247f3b3ea4d" alt=""><figcaption><p>Redemption in the Customer Rewards block</p></figcaption></figure> <figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F8ApiOSASlOgyaYUDzzda%2FScreenshot%202026-09-08%20at%204.26.15%E2%80%AFPM.png?alt=media&amp;token=a51b7228-da24-465c-9377-cceb8e64a2e9" alt=""><figcaption><p>Redemption in the cart</p></figcaption></figure></div>

* **Fully redeemed**: the customer has used their maximum redemptions for the reward.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fq7TOTDUFiIFCSkusJJTo%2FScreenshot%202026-09-08%20at%204.29.32%E2%80%AFPM.png?alt=media&amp;token=a10054d8-8de3-45cb-bf32-1239235961c8" alt=""><figcaption></figcaption></figure>

The rewards appear in the same order as your admin list: drag them into position in **Customer Rewards** and the block follows.

### How redemption behaves in the cart

Redemptions are coupon-based: redeeming adds the product to the cart and applies the reward's coupon.

* **One reward at a time.** If a reward is already in the cart, redeeming another shows your *You already have a reward in your cart* message instead of stacking or replacing.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FMvY2N3uyhoH2IxykXS1b%2FScreenshot%202026-09-08%20at%204.36.27%E2%80%AFPM.png?alt=media&amp;token=e8c0d40f-cf29-4839-b7ff-a09dbad1ee78" alt=""><figcaption></figcaption></figure>

* **The discount stays on the chosen product.** Adding other eligible products or changing quantities doesn't move it, and extra units the customer adds beyond the redemption aren't discounted.
* **Minimum spend is enforced.** Below the reward's minimum order value, redemption is blocked with your configured message. If the cart later drops below the minimum, the card swaps its Remove action for the minimum-spend message and the discount won't apply at checkout.
* **Combinations**: tier-reward coupons can't stack with each other, since only one coupon applies at checkout. They can combine with automatic discounts (Roadmap and Shopify native) when the reward allows combinations.

### What each card displays

The reward's **Target Selection** in the admin (*What can customers redeem?*) decides the card's contents:

* **Specific Products**: up to 20 hand-picked products, browsable in the card's scroll view.
* **Products from Collections**: the collections' products populate the card, up to 10 collections with 10 products shown per collection.
* **Any Product in Store**: customers can redeem against any product in your inventory, so the block shows the reward on its own, without a product.

#### Give Any Product rewards a Card Image

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FBLRvHQoqrzO2V7hEV6IV%2FScreenshot%202026-09-08%20at%204.44.22%E2%80%AFPM.png?alt=media&amp;token=b5c33466-371e-4d74-8ae9-c8a419dd0b09" alt="" width="375"><figcaption></figcaption></figure>

An *Any Product in Store* reward has no product image of its own, so by default its card renders as text only, which looks bare next to the product cards around it. The reward's **Card Image** setting fixes that: upload an image (under 500 KB; .png, .jpg, .jpeg, .svg, .gif, or .webp) and the card carries the same visual weight as its neighbours.

<div><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fme7dFLxpYchvB3U5vGLt%2FScreenshot%202026-09-08%20at%204.45.55%E2%80%AFPM.png?alt=media&amp;token=7acc7d95-d98d-496d-8e57-d6d9b181e399" alt=""><figcaption><p>Card without an image</p></figcaption></figure> <figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FbnakmaUI9fKszU0n4u9e%2FScreenshot%202026-09-08%20at%204.43.03%E2%80%AFPM.png?alt=media&amp;token=14ae01b5-948b-4f81-b522-db834f15e4c6" alt=""><figcaption><p>Card with an Image uploaded</p></figcaption></figure></div>

### The block settings

The settings are grouped in the roadmap loyalty widget editor, top to bottom:

* **Block headings**: the block's title and subtitle, with sizing.
* **Card labels and text, by state**: locked and logged-out text, the time-locked available-after text, unlocked text, and redeemed text, plus **Show discount code after claiming**.
* **Error messages and styling**: the already-have-a-reward, minimum-spend, and not-eligible messages in one place.
* **Badge styles**: per-state badge text for locked and available (with the discount value as a dynamic insert), plus position and size.
* **Card style**, **Typography**, and **Button styles**: matching the Product Redeemer's controls, including applied-state styling, text and hover colours, and the loading animation colour.
* **Layout**: grid or carousel mode, card width, spacing, and the image ratio.

### Related guides

* [Reward customers for reaching a tier](/loyalty-and-rewards/membership-tiers-and-referrals/reward-customers-for-reaching-a-tier): configuring the rewards the block displays
* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)
* [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets)
* [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview)
* [Set up product redemption](/loyalty-and-rewards/points-and-ways-to-earn/set-up-product-redemption)


# Send discount codes for birthdays and tier promotions

Generate a unique discount code for a member birthday or tier promotion. Deliver it through Roadmap or a Klaviyo event.

**Discount Code Generator** creates a unique, per-customer code when a member has a birthday or reaches a new tier. Deliver it by email through Roadmap or a Klaviyo event.

It is the discount-based alternative to awarding points. Use it for percentage-off loyalty perks.

In Roadmap’s **Discounts** section, create a discount and choose **Discount Code Generator**.

#### Pick the trigger

Give the generator a **Name** for admin reference. Then choose a trigger:

* **On member birthday** — choose **On their birthday**, **First of the birthday month**, or **Days before birthday**.
* **On member promotion** — runs when a customer moves into a selected tier.

Other triggers, **When review is published** and **When specific products are purchased**, belong to the Discounts & GWP guides.

{% hint style="info" %}
Send birthday discounts before the birthday when customers need planning time. An expiry date keeps the offer urgent.
{% endhint %}

#### Configure the discount code

Set:

* **Percentage** or **fixed amount**.
* **Code prefix**. Generated codes can look like `ROADMAPA83XO123`.
* **Applies to** — all products, or selected products, variants, or collections.
* **Purchase Type** — one-time purchase or subscription.
* **Minimum spend** and **Quantity limit**.
* **Expires after** — leave blank for no expiry.
* **Customer Eligibility** — all customers or members of selected tiers. Leave the tier field blank to match all tiers.

#### Choose how the code is delivered

Under **Mail Template**, choose one option:

* **Send mail via Roadmap** — Roadmap emails the customer directly.
* **Trigger a Klaviyo event** — Roadmap fires a metric and your Klaviyo flow sends the email.

For a Klaviyo event, use a recognizable metric name. For example, `Roadmap: Birthday Discount For Tier 1`.

Roadmap creates the metric after the [Klaviyo integration setup](/reviews/integrations/klaviyo-review-integration/how-to-integrate-roadmap-with-klaviyo). The event properties include the generated code. Use Klaviyo’s event-property Liquid snippet in your flow email.

#### Where generated codes live

Shopify Discounts stores every generated code. Search the customer’s email in Shopify admin if they lose it.

See [Where is a customer's loyalty discount code?](/loyalty-and-rewards/troubleshooting/where-is-a-customers-loyalty-discount-code).

#### Tier-promotion promotions

**On member promotion** uses the same configuration. Choose the trigger and target tier, then configure the amount-off or percentage-off code.

Use it when the tier perk is a discount. Use Customer Rewards when it is a specific free product.

#### Related guides

* [Reward customers for reaching a tier](/loyalty-and-rewards/membership-tiers-and-referrals/reward-customers-for-reaching-a-tier)
* [Award points for birthdays](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-birthdays)
* [Where is a customer's loyalty discount code?](/loyalty-and-rewards/troubleshooting/where-is-a-customers-loyalty-discount-code)


# Loyalty Klaviyo Integration


# Loyalty × Klaviyo: overview

How Roadmap loyalty connects to Klaviyo — the metrics and profile properties that sync, the loyalty-side controls, and a guide for every loyalty flow.

Once Roadmap is connected to Klaviyo, your loyalty program starts speaking Klaviyo natively: every loyalty moment fires a **metric** you can trigger flows from, and every member's loyalty standing is written to their **profile properties** for segments, splits, and email content.

Setting up the connection itself is covered in the [Klaviyo integration](/getting-started/klaviyo-integration) guide: it's one setup shared by loyalty, reviews, and subscriptions.

### Where to find it in the app

In the Roadmap app, go to **Settings → Klaviyo Integration**. Three areas matter for loyalty:

* **Klaviyo Profile**: the profile properties Roadmap writes to each customer, under the **Loyalty** tab, with a **Manual Sync** button to push everything on demand.
* **Klaviyo Metrics**: every loyalty metric with its sync status, under the **Loyalty** tab. After install, click **Sync Metrics** once so the metrics appear in Klaviyo for the first time.
* **Connection Settings**: manage your Klaviyo API keys.

A few metrics carry their own controls on the Klaviyo Metrics page:

* **Roadmap: Loyalty Points Expiring** and **Roadmap: Loyalty Tier Demotion Alert**: a **Set Alert** button controls how far ahead the alert event fires.
* **Roadmap: Loyalty Monthly Update**: use **Set Time** to schedule it, **Send Now** to fire a test, and tick **Enabled** to turn it on. It doesn't fire until you enable it.
* **Placed Order (Roadmap)** and **Roadmap: Checkout Started**: a **Filter Products** button to exclude products (gift wrapping, sample swatches) from the events.

{% hint style="info" %}
These controls live in **Roadmap**, not Klaviyo. Roadmap decides when the events fire; Klaviyo decides what happens next (your flows).
{% endhint %}

{% hint style="info" %}
**Excluding products from your loyalty events**: the Filter Products button on the order metrics keeps utility products out of your flow emails, and an order of only excluded products doesn't fire the metric at all. Filters can also be applied to every Roadmap metric at once. Full guide: [Excluding products from Klaviyo metrics (Filter Products)](/getting-started/klaviyo-integration/excluding-products-from-klaviyo-metrics-filter-products).
{% endhint %}

### The loyalty flows

Each metric gets its own guide: what fires it, the event properties it carries, and the flow to build on it. They fall into two camps.

**The essentials** — the flows every program should run:

* [Loyalty welcome emails](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-welcome-emails) — greet every new member
* [Points earned emails](/loyalty-and-rewards/loyalty-klaviyo-integration/points-earned-emails) — confirm every earn, the program's heartbeat
* [Tier earned emails](/loyalty-and-rewards/loyalty-klaviyo-integration/tier-earned-emails) — celebrate new status, tier by tier
* [Birthday points emails](/loyalty-and-rewards/loyalty-klaviyo-integration/birthday-points-emails) — deliver the birthday reward
* [Review reward emails](/loyalty-and-rewards/loyalty-klaviyo-integration/review-reward-emails) — thank reviewers, grow media reviews
* [Referral invitation emails](/loyalty-and-rewards/loyalty-klaviyo-integration/referral-invitation-emails) — the friend's invite
* [Referral completed emails](/loyalty-and-rewards/loyalty-klaviyo-integration/referral-completed-emails) — thank the referrer, prompt the next share

**The retention levers** — strategic flows that bring customers back:

* [Points expiring reminders](/loyalty-and-rewards/loyalty-klaviyo-integration/points-expiring-reminders) — expiry deadlines as re-purchase triggers
* [Tier demotion alerts](/loyalty-and-rewards/loyalty-klaviyo-integration/tier-demotion-alerts) — save at-risk status before renewal
* [Monthly loyalty updates](/loyalty-and-rewards/loyalty-klaviyo-integration/monthly-loyalty-updates) — a scheduled digest that keeps the balance salient

There's also a metric for every **Discount Code Generator** you create (carrying the name you gave it) — see [Send discount codes for birthdays and tier promotions](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions).

{% hint style="info" %}
Roadmap ships **pre-built example flows** for the essentials during onboarding, on request — ask your onboarding contact. Each guide above describes its example flow (or a recommended structure where no example ships).
{% endhint %}

### Profile properties

Alongside the event stream, Roadmap writes `roadmap_loyalty_*` properties (points balance, current and next tier, expiry dates, and more) to each customer's Klaviyo profile — the always-current data for segments and email content. Full list and snippets: [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets).

### B2B customers behave differently

When a customer joins a B2B company, their loyalty profile properties are removed and most loyalty metrics stop applying to them — see [B2B loyalty and Klaviyo](/loyalty-and-rewards/b2b-loyalty/b2b-loyalty-and-klaviyo) before enabling loyalty flows on a store with B2B.


# Loyalty profile properties and email snippets

Every loyalty property Roadmap writes to Klaviyo profiles, and the liquid snippets to show points balances, tiers, and expiry dates in your emails.

Roadmap keeps every customer's loyalty standing written to their Klaviyo profile. That gives you two superpowers: **segments and flow splits** built on loyalty status, and **email content** that shows each customer their own numbers.

### The properties

| Data point                            | Klaviyo property                                      |
| ------------------------------------- | ----------------------------------------------------- |
| Total points earned                   | `person.roadmap_loyalty_total_points`                 |
| Total points earned in period         | `person.roadmap_loyalty_total_points_earnt_in_period` |
| Total points expiring in next 30 days | `person.roadmap_loyalty_expiring_points`              |
| Points away from next tier            | `person.roadmap_loyalty_next_tier_points`             |
| Next tier name                        | `person.roadmap_loyalty_next_tier_name`               |
| Current tier name                     | `person.roadmap_loyalty_current_tier_name`            |
| Has Membership account                | `person.roadmap_has_account`                          |
| Total spent in period                 | `person.roadmap_total_spent_in_period`                |
| Birthday                              | `person.roadmap_loyalty_birthday`                     |
| Member since                          | `person.roadmap_loyalty_member_since`                 |
| Membership start date                 | `person.roadmap_loyalty_start_date`                   |
| Membership expiry date                | `person.roadmap_loyalty_expiry_date`                  |
| Next point expiry date                | `person.roadmap_loyalty_point_expiry_date`            |
| Points expiring on next expiry date   | `person.roadmap_loyalty_next_expiring_points`         |
| Latest order points earnt             | `person.roadmap_loyalty_latest_order_points_earnt`    |

You can also view this list — with the Subscriptions and Reviews property sets on their own tabs — inside the Roadmap app's Klaviyo integration settings.

{% hint style="info" %}
**Two expiring-points properties, two meanings:** `roadmap_loyalty_expiring_points` totals everything expiring in the **next 30 days**; `roadmap_loyalty_next_expiring_points` is the amount expiring on the **next expiry date** (with `roadmap_loyalty_point_expiry_date` telling you when that is). Use the pair for "your points expire on {date}" emails, and the 30-day total for urgency campaigns.
{% endhint %}

### Showing a property in an email

Drop the property into any Klaviyo email with a template tag. Always include a `default` so the email degrades gracefully for profiles without the property:

```liquid
{{ person.roadmap_loyalty_total_points|default:'' }}
```

Both syntaxes work — dotted and lookup:

```liquid
You have {{ person.roadmap_loyalty_total_points|default:'0' }} points.
{{ person|lookup:"roadmap_loyalty_next_expiring_points"|default:'0' }} points expire on {{ person.roadmap_loyalty_point_expiry_date|default:'' }}.
You're {{ person.roadmap_loyalty_next_tier_points|default:'' }} points away from {{ person.roadmap_loyalty_next_tier_name|default:'the next tier' }}.
```

That last pair — points away + next tier name — is the single most effective loyalty email line: a concrete, personal reason to place the next order.

### Profile properties vs event properties

Profile properties are the customer's **current standing** and work in any email. Each flow's **event properties** describe the specific moment that triggered it (the points earned on that order, the tier just reached) and only exist inside flows triggered by that metric — each [flow guide](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview) documents its metric's event properties.

### Splitting flows and building segments

Use the properties in Klaviyo conditional splits and segment definitions — *Properties about someone*:

* `roadmap_has_account` **is true** — the customer has a loyalty account (the standard gate at the top of loyalty flows).
* `roadmap_loyalty_current_tier_name` **contains** *Gold* — tier-specific branches. This is exactly how the pre-built [Tier Earned flow](/loyalty-and-rewards/loyalty-klaviyo-integration/tier-earned-emails) routes customers to tier-specific emails.

### Related guides

* [Loyalty × Klaviyo: overview](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview)
* [Points earned emails](/loyalty-and-rewards/loyalty-klaviyo-integration/points-earned-emails)
* [Points expiring reminders](/loyalty-and-rewards/loyalty-klaviyo-integration/points-expiring-reminders)


# Loyalty welcome emails

Greet every new loyalty member the moment they join, with the Roadmap: Loyalty Welcome metric and the pre-built welcome flow.

The welcome email is an **essential** flow — every program should run one. It lands at the moment of maximum attention: the customer just joined, and this email sets their expectations for how earning and redeeming work.

### Klaviyo event name

* `Roadmap: Loyalty Welcome` — fires when a customer joins the loyalty program.

### Event properties

| Data point               | Event property   |
| ------------------------ | ---------------- |
| Points awarded on signup | `points_awarded` |
| Customer first name      | `first_name`     |
| Customer last name       | `last_name`      |
| Customer ID              | `customer_id`    |

### The pre-built flow

Roadmap's example flow (shipped during onboarding, on request) is deliberately simple:

1. **Trigger:** `Roadmap: Loyalty Welcome`
2. **Filter:** customer is *not currently in this flow* — nobody gets double-welcomed
3. **Email — immediately:** "Welcome to \[Loyalty Program Name]"

Fill the *\[Loyalty Program Name]* placeholder with your program's name.

### What the email should do

* **Confirm the signup reward** if you award one: `You've started with {{ event.points_awarded|default:'' }} points.`
* **Explain the top 2–3 ways to earn** — link your loyalty page rather than listing every rule.
* **Show the first goal**: `You're {{ person.roadmap_loyalty_next_tier_points|default:'' }} points from {{ person.roadmap_loyalty_next_tier_name|default:'your first tier' }}.`

### Related guides

* [Loyalty × Klaviyo: overview](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview)
* [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets)
* [Points earned emails](/loyalty-and-rewards/loyalty-klaviyo-integration/points-earned-emails)


# Points earned emails

Confirm every points earn with the Roadmap: Loyalty Points Earned metric — the highest-volume loyalty email and the heartbeat of the program.

The points earned email is an **essential** flow and the highest-volume one — it fires on every earn. Done well, it's the heartbeat of your program: a small, consistent reminder that shopping with you pays.

### Klaviyo event name

* `Roadmap: Loyalty Points Earned` — fires when any earning rule awards points.

### Event properties

| Data point                  | Event property                                    |
| --------------------------- | ------------------------------------------------- |
| Points earned in this event | `points_earned`                                   |
| How they were earned        | `points_earned_method` (e.g. `place-order`)       |
| Human-readable detail       | `details` (e.g. *Points awarded for Order #1080*) |
| Order/reference ID          | `reference_id`                                    |
| Transaction date / time     | `transaction_date`, `transaction_time`            |
| Customer ID                 | `customer_id`                                     |

### The pre-built flow

1. **Trigger:** `Roadmap: Loyalty Points Earned`
2. **Email — immediately:** "Thanks for choosing us"

The example email deliberately uses **profile lookups** for the balance rather than event values — so the numbers are current even if the email is opened days later:

```liquid
You just earned {{ event.points_earned|default:'' }} points — {{ event.details|default:'' }}.
Your balance is now {{ person.roadmap_loyalty_total_points|default:'' }} points.
```

### Strategy

* **Keep it light.** This email fires often — one clear number, one redemption nudge, done.
* **Filter small earns if volume gets noisy.** Add a flow filter on `points_earned` (e.g. greater than 50) so a small puchase doesn't trigger the flow.
* **Always show the next goal**: `{{ person.roadmap_loyalty_next_tier_points|default:'' }} points to {{ person.roadmap_loyalty_next_tier_name|default:'the next tier' }}` turns a receipt into a reason to come back.

### Related guides

* [Loyalty × Klaviyo: overview](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview)
* [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets)
* [Tier earned emails](/loyalty-and-rewards/loyalty-klaviyo-integration/tier-earned-emails)


# Tier earned emails

Celebrate a customer reaching a new tier with the Roadmap: Loyalty Tier Earned metric and tier-specific emails.

Reaching a tier is the biggest moment in a member's loyalty life — the payoff for everything your tiers promised. This **essential** flow celebrates it and, more importantly, tells the customer exactly what their new status unlocks.

### Klaviyo event name

* `Roadmap: Loyalty Tier Earned` — fires when a customer reaches a tier.

### Event properties

| Data point                | Event property                                                      |
| ------------------------- | ------------------------------------------------------------------- |
| New tier                  | `new_tier` — an object with `name`, `id`, `level`                   |
| Previous tier             | `previous_tier` — same shape (`name` is empty for first-tier earns) |
| Membership expiry         | `membership_expiry`                                                 |
| Points earned this period | `points_earned_during_period`                                       |
| Customer ID               | `customer_id`                                                       |

Use `{{ event.new_tier.name }}` in subjects and copy: *You've reached {{ event.new\_tier.name }}!*

### The pre-built flow

The most sophisticated of the examples:

1. **Trigger:** `Roadmap: Loyalty Tier Earned`
2. **Filter:** email marketing consent
3. **Delay:** 1 day (weekdays) — so the celebration doesn't collide with the points earned email from the same order
4. **Conditional split** on `roadmap_loyalty_current_tier_name` *contains* *\[insert tier 2 name]* → the "Tier 2 Reached" email
5. **Second split** for *\[insert tier 3 name]* → the "Tier 3 Reached" email

Fill the *\[insert tier … name]* placeholders with your actual tier names, and duplicate the split for extra tiers. If you rename a tier in Roadmap, update the split values too.

### Strategy

* **Tier-specific emails beat a generic one.** Each email should list that tier's actual benefits — this is the moment the customer decides whether tiers matter.
* **Point at the next rung**: even in the celebration, `{{ person.roadmap_loyalty_next_tier_name }}` keeps the ladder visible.
* Pair with a [tier-reached Customer Reward](/loyalty-and-rewards/membership-tiers-and-referrals/reward-customers-for-reaching-a-tier) or a [tier-promotion discount code](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions) so the email has a concrete gift to deliver.

### Related guides

* [Tier demotion alerts](/loyalty-and-rewards/loyalty-klaviyo-integration/tier-demotion-alerts) — the other side of the tier lifecycle
* [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets)


# Birthday points emails

Deliver birthday points with a well-timed email using the Roadmap: Loyalty Birthday Points Reward metric.

Birthday emails routinely outperform every other automated send — the occasion does the selling. This flow delivers the [birthday points](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-birthdays) your earner awards, at an hour that feels human.

### Klaviyo event name

* `Roadmap: Loyalty Birthday Points Reward` — fires when birthday points are awarded.

{% hint style="info" %}
If your Klaviyo account also shows an older *Roadmap: Loyalty Customer Birthday Reward* metric, it's legacy — Roadmap no longer fires it; don't build flows on it.
{% endhint %}

### Event properties

Same shape as points earned, with birthday specifics:

| Data point              | Event property                         |
| ----------------------- | -------------------------------------- |
| Points awarded          | `points_earned`                        |
| Method                  | `points_earned_method` = `birthday`    |
| Detail                  | `details` = *Birthday*                 |
| Transaction date / time | `transaction_date`, `transaction_time` |
| Customer ID             | `customer_id`                          |

### The pre-built flow

1. **Trigger:** `Roadmap: Loyalty Birthday Points Reward`
2. **Delay:** until **8:00 AM in the customer's own timezone** — a birthday email at 3am reads like a robot sent it
3. **Email:** "A birthday gift from us"

### Strategy

* **Points or discount — or both.** This flow handles birthday *points*. If you'd rather send a birthday *discount code* (per tier, with an expiry for urgency), use the [Discount Code Generator](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions) — its metric triggers its own flow.
* **Match the earner's timing.** If your birthday earner fires *days before* the birthday, the email lands while they're already thinking about treating themselves.
* Show the full balance, not just the gift: their birthday points plus everything saved up is a bigger number.

### Related guides

* [Award points for birthdays](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-birthdays)
* [Points earned emails](/loyalty-and-rewards/loyalty-klaviyo-integration/points-earned-emails)


# Review reward emails

Thank reviewers for their points — and celebrate photo and video bonuses — with the Roadmap: Loyalty Review Reward metric.

When a review earns points, this flow closes the loop — and with photo/video bonuses, it's also your best channel for teaching customers that media reviews earn more.

### Klaviyo event name

* `Roadmap: Loyalty Review Reward` — fires when review points are awarded (on approval and publish).

### Event properties

| Data point                      | Event property                |
| ------------------------------- | ----------------------------- |
| Total points awarded            | `points_awarded`              |
| Base review points              | `base_points`                 |
| Photo bonus                     | `photo_bonus_points`          |
| Video bonus                     | `video_bonus_points`          |
| Review included a photo / video | `has_photo`, `has_video`      |
| Reviewed product                | `product_title`, `product_id` |
| Customer ID                     | `customer_id`                 |

### Recommended flow structure

There's no pre-built example for this one — a simple recipe:

1. **Trigger:** `Roadmap: Loyalty Review Reward`
2. **Email — immediately:** thank them for reviewing `{{ event.product_title }}` and confirm `{{ event.points_awarded }}` points
3. **Optional split** on `has_photo` / `has_video`:
   * Media reviewers → celebrate the bonus: *Your photo earned you an extra {{ event.photo\_bonus\_points }} points!*
   * Text-only reviewers → plant the seed: *Add a photo next time for bonus points.*

That second branch quietly grows your UGC pipeline with every review cycle.

### Strategy

* The breakdown properties (`base_points` + bonuses) answer "why did I get 250?" before the customer asks.
* Points are only awarded for verified, published reviews — the [eligibility rules](https://docs.roadmap.so/reviews/managing-reviews/review-rewards-and-limits/loyalty-points-for-reviews) explain who enters this flow.

### Related guides

* [Leave a verified review](https://docs.roadmap.so/loyalty-and-rewards/points-and-ways-to-earn/leave-a-verified-review) — the earner, including the photo/video bonus settings
* [Loyalty points for reviews](https://docs.roadmap.so/reviews/managing-reviews/review-rewards-and-limits/loyalty-points-for-reviews)


# Referral invitation emails

Deliver the referral invitation to the friend with the Roadmap: Loyalty Referral Share metric.

When a member shares a referral, this flow delivers the invitation to their **friend** — the first email your brand ever sends that person, arriving with borrowed trust.

### Klaviyo event name

* `Roadmap: Loyalty Referral Share` — fires when a customer shares their referral. The event is attached to the **friend's** email address.

### Event properties

| Data point                                         | Event property   |
| -------------------------------------------------- | ---------------- |
| Referral link                                      | `referral_link`  |
| Friend's email                                     | `referral_email` |
| Referrer's name                                    | `referrer_name`  |
| The friend's reward                                | `reward_name`    |
| Coupon code (when the friend reward is a discount) | `coupon_code`    |
| Customer ID                                        | `customer_id`    |

### The pre-built flow

1. **Trigger:** `Roadmap: Loyalty Referral Share`
2. **Email — immediately:** "Someone thinks you'll love \[insert brand name]" — delivering `{{ event.coupon_code|default:'' }}` for their first order

Fill the *\[insert brand name]* placeholder.

### Strategy

* **Lead with the referrer.** `{{ event.referrer_name }} thought you'd love us` converts far better than an anonymous discount — the recommendation is the product.
* **Make the reward unmissable**: `{{ event.reward_name }}` and the code above the fold.
* Remember this is a cold inbox — keep it short, one CTA, no navigation maze.

### Related guides

* [Referral completed emails](/loyalty-and-rewards/loyalty-klaviyo-integration/referral-completed-emails) — the other half of the pair
* [Manage referrals](/loyalty-and-rewards/membership-tiers-and-referrals/manage-referrals) — configuring the rewards themselves


# Referral completed emails

Thank the referrer when their friend's first order lands, with the Roadmap: Loyalty Referral Complete metric.

When a referred friend places their first order, this flow thanks the **referrer** — and its real job is to prompt the *next* share. Referrers who get thanked refer again.

### Klaviyo event name

* `Roadmap: Loyalty Referral Complete` — fires for the **referrer** when their friend's first order lands.

### Event properties

| Data point                                           | Event property                      |
| ---------------------------------------------------- | ----------------------------------- |
| The referrer's reward                                | `reward_name` (e.g. *1,000 Points*) |
| Friend's order value                                 | `order_value`                       |
| Friend's order number / ID                           | `order_number`, `order_id`          |
| Referrer ID / email                                  | `referrer_id`, `referrer_email`     |
| Coupon code (when the referrer reward is a discount) | `coupon_code`                       |
| Customer ID                                          | `customer_id`                       |

### The pre-built flow

1. **Trigger:** `Roadmap: Loyalty Referral Complete`
2. **Email — immediately:** "Thanks for spreading the word {{ person.first\_name|default:'You' }}!" — confirming `{{ event.reward_name }}` and showing their updated balance via `{{ person.roadmap_loyalty_total_points|default:'' }}`

### Strategy

* **Close the loop fast.** The reward confirmation is the payoff moment — don't batch or delay it.
* **Ask for the next referral in the same email.** The customer just experienced the program working; that's the moment to hand them their link again.
* Show the updated points balance from profile properties rather than event data, so it's always current.

### Related guides

* [Referral invitation emails](/loyalty-and-rewards/loyalty-klaviyo-integration/referral-invitation-emails)
* [Manage referrals](/loyalty-and-rewards/membership-tiers-and-referrals/manage-referrals)


# Points expiring reminders

Turn point expiry into a comeback trigger with the Roadmap: Loyalty Points Expiring metric and its Set Alert window.

This is a **retention lever**, not a courtesy note. If your program [expires points](https://docs.roadmap.so/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings), the expiry deadline is one of the strongest re-purchase triggers you have — points a customer is about to lose feel more valuable than points they might earn.

### Klaviyo event name

* `Roadmap: Loyalty Points Expiring` — fires when a customer's points approach expiry.

You control how far ahead it fires: in Roadmap's Klaviyo settings, click **Set Alert** on the metric and choose the alert window.

### Event properties

| Data point                              | Event property                                                                                                     |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Points expiring on the next expiry date | `points_expiring`                                                                                                  |
| Total points expiring                   | `total_points_expiring`                                                                                            |
| Next expiry date                        | `expiry_date`                                                                                                      |
| Days until expiry                       | `days_until_expiry`                                                                                                |
| Your configured alert window            | `alert_window_days`                                                                                                |
| Per-date breakdown                      | `expiry_breakdown` — a list of `{expiry_date, points, transaction_count}` when points expire across multiple dates |
| Current balance / tier                  | `current_point_balance`, `current_tier`                                                                            |
| Customer name                           | `customer_first_name`, `customer_last_name`                                                                        |

### Recommended flow structure

No pre-built example ships for this one — mirror the demotion recipe:

1. **Trigger:** `Roadmap: Loyalty Points Expiring`
2. **Email 1 — immediately:** `{{ event.points_expiring }} points expire on {{ event.expiry_date }}` — with the best redemption they can afford
3. **Email 2 — a few days before expiry:** final urgency, if they haven't redeemed

Gate email 2 with a flow filter on *placed order* or a profile check so redeemed customers drop out.

### Strategy

* **Name the number and the date.** "Your points are expiring" is ignorable; "258 points expire on 19 September" isn't.
* **Pair the reminder with the redemption**, not the earn: link the loyalty page or list what their balance buys right now.
* **Match the alert window to your redemption ladder.** Customers need enough runway to place an order — 30 days is a sensible default.

### Related guides

* [How to configure your point settings](https://docs.roadmap.so/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings) — where expiry itself is configured
* [Tier demotion alerts](/loyalty-and-rewards/loyalty-klaviyo-integration/tier-demotion-alerts) — the same play for tier status
* [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets)


# Tier demotion alerts

Warn customers before they drop to a lower loyalty tier, then trigger a Klaviyo flow at the right time.

Use this metric to warn customers before they drop to a lower tier.

It gives them time to spend more and keep their current status.

Customers close to losing status are often highly motivated.

The alert works best when they know it is coming.

### How tier demotion alerts work

Roadmap checks each customer against their current tier requirement.

This metric supports tiers based on **Points earned** or **Amount spent** within the membership period.

If a customer is at risk of missing that requirement by their renewal date, Roadmap sends a Klaviyo event before the demotion happens.

You choose how early the event fires by setting your **demotion alert days**.

* Default: **30 days**
* Maximum: **90 days**

#### Example

A customer is currently in **Gold**.

Gold requires `1,000` points in the current period.

The customer is `30` days from renewal and has only `650` points.

Roadmap sends the demotion alert event.

Your Klaviyo flow can then email the customer and show they need `350` more points to keep Gold.

Customers who are on track to keep their current tier do not enter the flow.

### Set your alert timing

{% stepper %}
{% step %}

#### Open Klaviyo metrics in Roadmap

In **Roadmap**, go to **Klaviyo Integration** → **Metrics**.
{% endstep %}

{% step %}

#### Open Tier demotion alert

Find **Tier demotion alert**.

Then click **Set alert**.
{% endstep %}

{% step %}

#### Enter the number of days

Choose how many days before tier renewal the event should fire.
{% endstep %}

{% step %}

#### Save the setting

Click **Save**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FQbaCzJlfQWeJJk0LWkT9%2FScreenshot%202026-04-29%20at%2010.13.09%E2%80%AFAM.png?alt=media&amp;token=09602785-4a7c-4bde-8b97-ae16a2d09146" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="info" %}
**30 days is a strong starting point.**

It gives customers time to act without losing urgency.
{% endhint %}

### Klaviyo event name

When a customer is at risk of demotion, Roadmap sends this event to Klaviyo:

* `Roadmap: Loyalty Tier Demotion Alert`

Use this event as the trigger for your Klaviyo flow.

Only customers who are expected to be demoted enter the flow.

You do not need extra Klaviyo logic to exclude customers who will retain their tier.

### Event properties for email personalisation

The demotion alert includes properties from the customer’s current membership period.

Use them to show the customer what they need to do before renewal.

| Data point                           | Event property                 |
| ------------------------------------ | ------------------------------ |
| Membership expiry date               | `membership_expires_at`        |
| Days until renewal                   | `days_until_renewal`           |
| Current tier name                    | `current_tier`                 |
| Current tier level                   | `current_tier_level`           |
| Projected tier name                  | `projected_tier`               |
| Projected tier level                 | `projected_tier_level`         |
| Tier qualification method            | `tier_condition`               |
| Points required for the current tier | `current_tier_points_required` |
| Amount required for the current tier | `current_tier_amount_required` |
| Points earned during the period      | `points_earned_during_period`  |
| Amount spent during the period       | `amount_spent_during_period`   |
| Points needed to maintain the tier   | `points_needed_to_maintain`    |
| Amount needed to maintain the tier   | `amount_needed_to_maintain`    |

#### Show the amount needed to retain status

Use `tier_condition` to tailor the message to the tier's qualification method.

For points-based tiers, use `points_needed_to_maintain`.

For spend-based tiers, use `amount_needed_to_maintain`.

For example:

`Earn {{ event.points_needed_to_maintain }} more points by {{ event.membership_expires_at }} to keep your {{ event.current_tier }} tier.`

Or:

`Spend ${{ event.amount_needed_to_maintain }} more by {{ event.membership_expires_at }} to keep your {{ event.current_tier }} tier.`

You can also calculate the remaining spend from profile data:

```liquid
{{ person|lookup:"roadmap_total_spent_in_period"|multiply:-1|add:(tier point/spend required)|floatformat:2 }}
```

Replace `(tier point/spend required)` with the requirement for the relevant tier.

#### Encourage the next achievable tier

A customer can face a larger demotion at renewal.

For example, a customer in Tier 3 may project to Tier 1.

Do not only ask them to retain Tier 3.

Also show the lower tier they can still reach this period.

Use these profile properties:

| Data point                      | Klaviyo property                          |
| ------------------------------- | ----------------------------------------- |
| Next tier name                  | `person.roadmap_loyalty_next_tier_name`   |
| Points needed for the next tier | `person.roadmap_loyalty_next_tier_points` |

This gives customers a realistic goal when retaining their current tier is unlikely.

### Profile properties for email personalisation

These properties sync to the customer profile in Klaviyo.

They update in real time and can be used in email copy, splits, and segments.

| Data point              | Klaviyo property                                      |
| ----------------------- | ----------------------------------------------------- |
| Points earned in period | `person.roadmap_loyalty_total_points_earnt_in_period` |
| Total spent in period   | `person.roadmap_total_spent_in_period`                |
| Current tier name       | `person.roadmap_loyalty_current_tier_name`            |
| Tier expiry date        | `person.roadmap_loyalty_tier_expiry_date`             |

### Recommended flow structure

For most stores, keep the flow simple:

1. **Trigger:** `Roadmap: Loyalty Tier Demotion Alert`
2. **Email 1 — immediately:** Explain their current tier, progress, and renewal date
3. **Email 2 — 7 to 10 days later:** Add urgency if they still have not purchased
4. **Email 3 — 3 days before expiry:** Send a final reminder

Personalised copy performs better than a generic warning.

For example:

`You've spent $340 this year. Spend $160 more by 15 June to keep your Gold tier.`

### Best practices

* **Lead with what they keep.** Focus on retaining benefits, not punishment.
* **Do not set the alert too short.** Customers need time to act.
* **Do not set it too long.** Alerts sent too early lose urgency.

If you are unsure, start with `30` days and adjust later.

### Turn alerts off

To stop emails from sending, keep the Klaviyo flow in **Draft** or pause the live flow.

Roadmap still sends the metric event.

The profile properties still stay synced in Klaviyo.

That means you can still use the data in segments and other flows.

### Related guides

* [How to integrate Roadmap with Klaviyo](/reviews/integrations/klaviyo-review-integration/how-to-integrate-roadmap-with-klaviyo)
* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)


# Monthly loyalty updates

Send a scheduled monthly loyalty digest with the Roadmap: Loyalty Monthly Update metric — enable it, set the time, and pair it with profile properties.

A monthly digest keeps the program salient for members who haven't shopped recently — a **retention lever** that works by simply reminding customers the balance exists. Unlike every other loyalty metric, this one fires on a schedule you control, not on customer behaviour.

### Klaviyo event name

* `Roadmap: Loyalty Monthly Update` — your scheduled monthly digest event.

It's **off by default**. In Roadmap's Klaviyo settings: tick **Enabled**, use **Set Time** to choose when it fires each month, and **Send Now** to fire a test immediately.

### Event properties

| Data point   | Event property               |
| ------------ | ---------------------------- |
| Update month | `update_month` (e.g. *July*) |
| Update year  | `update_year`                |
| Customer ID  | `customer_id`                |

The event is deliberately thin — the content comes from [profile properties](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets), which are always current at send time.

### Recommended flow structure

1. **Trigger:** `Roadmap: Loyalty Monthly Update`
2. **Email — immediately:** "Your {{ event.update\_month }} loyalty summary"

Build the body entirely from profile lookups:

```liquid
Balance: {{ person.roadmap_loyalty_total_points|default:'0' }} points
Tier: {{ person.roadmap_loyalty_current_tier_name|default:'—' }}
Next tier: {{ person.roadmap_loyalty_next_tier_points|default:'' }} points to {{ person.roadmap_loyalty_next_tier_name|default:'' }}
Expiring soon: {{ person.roadmap_loyalty_expiring_points|default:'0' }} points in the next 30 days
```

### Strategy

* **One email, four numbers.** Balance, tier, next goal, expiring — that's the whole digest; resist making it a newsletter.
* **Suppress zero-value sends.** Add a flow filter (e.g. `roadmap_loyalty_total_points` greater than 0) so point-less profiles don't get an empty summary.
* The expiring-points line quietly feeds the [points expiring](/loyalty-and-rewards/loyalty-klaviyo-integration/points-expiring-reminders) urgency play all year round.

### Related guides

* [Loyalty × Klaviyo: overview](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview)
* [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets)


# Customer management


# Manage loyalty customers

The Manage Customers area — filter and save member views, open a customer's loyalty profile, adjust their points, redeem on their behalf, and read their history.

**Manage Customers** is the admin home for loyalty members. Open it from the **Loyalty Program** dashboard.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FsumkvsCYex0b6y33kpNp%2FScreenshot%202026-07-31%20at%201.32.30%E2%80%AFPM.png?alt=media&#x26;token=be20652f-ed3c-461e-9cda-d86558d72e7d" alt=""><figcaption></figcaption></figure>

#### The customer list

The list includes name, email, **Tier**, **Expiry Date**, **Member since**, **Last active**, **Total spent**, and **Points**.

**Tier** can show **None** for members without a tier. It shows **B2B** when company membership pauses personal loyalty.

Search by name or email. Use the D2C / B2B toggle to open the B2B Companies dashboard. Use the **Members**, **Non-members**, and **All** tabs to filter customers.

#### Save your own views

{% stepper %}
{% step %}
**Create the view**

Click **+** next to the tabs. Name and create the view.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FT2qJ62DuXHUDLdU8J8Ea%2FScreenshot%202026-07-31%20at%201.32.39%E2%80%AFPM.png?alt=media&#x26;token=e1efe9ae-982c-4072-9b92-36a4aff9a031" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Add filters**

Click the search/filter icon, then add filters. For example, use **Status: Members** and **Membership Tier**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F2SYxZ5VYqZI7TTDP2gSu%2FScreenshot%202026-07-31%20at%201.33.29%E2%80%AFPM.png?alt=media&#x26;token=e445de5d-ec23-44e6-a089-8570e9c3c4fd" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Save the filtered view**

Click **Save as** and enter a name. Save after filtering so the view retains its filters.
{% endstep %}
{% endstepper %}

#### The customer detail page

Select a customer to open their loyalty profile. Click **View Customer** to open their Shopify profile.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F0sDRDDvFoBlulExyMNQb%2FScreenshot%202026-07-31%20at%205.28.43%E2%80%AFPM.png?alt=media&#x26;token=53594d51-1e4b-405b-b64f-d3ff527ab9d5" alt=""><figcaption></figcaption></figure>

**Point History** contains:

* **Transactions** for every earning, spending, and adjustment, including award and expiry dates.
* **Discounts** for redeemed codes, reward value, `Active`, `Used`, `Refunded`, or `Deleted` status, creation date, and code copy.

**Membership History** records membership start-date and tier changes. **Orders** lists order history and totals.

You can also use **Update Birthday**. Under **Membership → Update**, change tier, start date, or expiry date.

#### Adjust their point balance

Use **Adjust point balance** to add or remove points. Enter a negative value to subtract.

* **Reason for adjustment** is internal.
* **Customer facing note** appears in the customer’s points history. It defaults to `Manual adjustment`.

The modal shows **New Balance** before you confirm.

#### Redeem points on a customer's behalf

Use **Redeem points** to generate an available reward for a customer. Copy the generated code to share it.

The code also appears on the customer’s redeemer surfaces: cart drawer, loyalty page, and Shopify Plus checkout redeemer.

#### The Timeline

The Timeline records earnings, spendings, admin actions, and non-awarded reasons. See [Understanding a customer's loyalty timeline](/loyalty-and-rewards/customer-management/understanding-a-customers-loyalty-timeline).

#### Related guides

* Understanding a customer's loyalty timeline
* Refund an unused loyalty coupon
* Loyalty Tiers


# Understanding a customer's loyalty timeline

Read a customer's loyalty timeline: earnings, spendings, admin actions, and the exact reasons an order or review didn't award points.

Every loyalty profile in **Manage Customers** has a **Timeline**. Use it to explain a customer’s points balance and loyalty activity.

#### What gets logged

The timeline can record events from when the customer enters Shopify. This includes non-awarded events before loyalty membership begins.

It records:

* Earnings from every rule that awards points.
* Spendings, including the code and acting user.
* Admin adjustments, redemptions, and membership changes.
* **Not Awarded** events and their reason.
* Personal loyalty pauses and resumptions for B2B company members.

Filter with **All**, **Earnings**, **Spendings**, and **Not Awarded**.

#### Why points were not awarded

**Not Awarded** events explain how earning conditions affected an order or review.

Every order assessed by an active **Place an order** rule produces one entry, either **Earned** or **Not Awarded**. An order is never left without an entry, even when nothing was earned.

Common notes include:

* `All items in this order were ineligible for points based on your earning rule filters`
* `Some items were discounted and excluded from earning`
* `Review points not awarded — Customer has not purchased the reviewed product`
* `The gift card in this order was discounted. Your Place an order rule excludes discounted items from earning, and this applies to gift cards too.`
* `Gift cards do not earn points for the purchaser under your gift card setting.`

An **Earned** entry can also carry a note about what was left out, for example `A discounted gift card in this order was excluded from earning.` See [Who earns points on Shopify gift cards](/loyalty-and-rewards/points-and-ways-to-earn/who-earns-points-on-shopify-gift-cards) for the full set of gift card outcomes.

Check the timeline before treating missing points as an issue. Most entries identify the matching earning condition.

#### Membership History

**Membership History** records membership start-date changes and tier changes.

#### Related guides

* [Manage loyalty customers](/loyalty-and-rewards/customer-management/manage-loyalty-customers)
* [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order)
* [Who earns points on Shopify gift cards](/loyalty-and-rewards/points-and-ways-to-earn/who-earns-points-on-shopify-gift-cards)
* [Customers not earning loyalty points](/loyalty-and-rewards/troubleshooting/customers-not-earning-loyalty-points)


# Loyalty analytics

Read the Loyalty Analytics dashboard: business growth, performance benchmarks, points activity, tier analysis, referrals, and product insights, with every metric explained.

Loyalty Analytics shows what your program is actually doing for the business: the revenue it drives, how members compare to non-members, where points flow, and which tiers, referrers, and products pull their weight.

### Controls

Every view shares the same controls:

* **Date range** with a comparison period (for example, *Last 30 days vs the previous 30*). Trend chips on each metric show the change against the comparison period.
* **Filters**: tiers, sources, members, and markets.
* **Export Data** to take the numbers elsewhere.

Four tabs organise the dashboard: **Overview**, **Tier Analysis**, **Referrals**, and **Products**.

### Overview: Business Growth

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FdrZsDYXreEtZwpolCI9I%2FScreenshot%202026-09-03%20at%203.15.33%E2%80%AFPM.png?alt=media&amp;token=a5fe922c-9301-42a4-b8c8-cda5aae388ba" alt=""><figcaption></figcaption></figure>

The headline cards show what the program contributes:

* **Loyalty-driven revenue**: sales from orders that used a Roadmap loyalty discount.
* **Member CLV**: customer lifetime value of loyalty members, with a comparison against non-members.
* **Member purchase frequency**: how often members order, versus non-members.
* **Member AOV**: members' average order value, versus non-members.

The member-versus-non-member chips on these cards are the fastest way to show stakeholders the program working: members who spend more, more often, at higher order values.

### Overview: Performance Benchmarks

Four rates assess program health at a glance:

* **Redemption rate**: points redeemed as a share of points earned. Low numbers mean points are piling up unspent; redemption is where loyalty actually changes behaviour, so a healthy rate matters more than a big points balance.
* **Order earning rate**: the share of all orders that earned points. If this is unexpectedly low, check your [earning rules](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order) for over-tight eligibility.
* **Reward usage rate**: the share of generated reward codes that end up used on an order.
* **Membership rate**: member-placed orders as a share of all orders.

### Overview: Customer Segments

A comparison table across three cuts: **Members vs non-members**, **Redeemers vs non-redeemers**, and **Non-members vs members**, each showing total customers, average spend, purchase frequency, and AOV with percentage deltas. The redeemers row answers a question merchants often ask: whether customers who redeem points are more valuable than those who only earn.

### Overview: Points Activity

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FVJe0nHza0oLJkz0akP3o%2FScreenshot%202026-09-03%20at%203.15.45%E2%80%AFPM.png?alt=media&amp;token=9f4fa4a2-61a1-47f5-8f4b-9b45db704e4a" alt=""><figcaption></figcaption></figure>

* **Points earned** and **Points redeemed** for the period.
* **Outstanding points**: the total unredeemed points in the system, with their dollar **value**. This is your program's liability figure, worth watching alongside redemption rate.
* **Discounts issued**: the financial value of loyalty discounts issued over the period.

Below the cards:

* **Top ways customers earn**: points earned by activity type (Place an Order, Customer Tag, Account Signup, Leave a Review), each with its transaction count.
* **Top ways customers redeem**: total redemptions by reward type.
* **Reward Codes Overview**: **Total Value Saved** across redemptions and the **Avg Discount** per redemption, plus a **Rewards Breakdown** table showing each reward's source type, reward type, discount value, amount used, and total value.

### Tier Analysis

**VIP Segments** breaks performance down per tier, based on members who ordered in the period: total customers (and share of the member base), total revenue (and share of the total), average spend, purchase frequency, and AOV, each compared against your base tier.

This is the table for tuning your ladder. A top tier that outperforms the base on every column is earning its benefits; a tier that doesn't may need its [milestone threshold](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers) or perks revisited.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fm4JkcewU9OerXP3SCvTM%2FScreenshot%202026-09-03%20at%203.16.29%E2%80%AFPM.png?alt=media&amp;token=5f44767c-4b7c-4a27-bd80-2b7b384611b7" alt=""><figcaption></figcaption></figure>

### Referrals

* **Referral Performance**: referral revenue, referral conversion rate, new referred customers, and active referrers for the selected period.
* **Top Referrers**: a lifetime table of your best advocates, with successful referrals, the total order value they generated, and the points they earned. This is a ready-made VIP list: your top referrers are strong candidates for a [tag-based tier](/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers) or a personal thank-you.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FQug71pJ4DXY0p0NMfJoV%2FScreenshot%202026-09-03%20at%203.38.03%E2%80%AFPM.png?alt=media&amp;token=10b4d1e0-a3da-4952-8dc7-d3a1405d8d52" alt=""><figcaption></figcaption></figure>

### Products

* **Top Products by Loyalty Revenue**: products purchased most often in orders where points were redeemed.
* **Top Products Earning Points**: products driving the most point-earning purchases by members, with units sold, revenue, and member orders.
* **Member vs Non-Member Purchases**: top products by revenue for members and non-members side by side. Differences here reveal what your loyal customers actually come back for, which is useful for choosing [product redemption](/loyalty-and-rewards/points-and-ways-to-earn/set-up-product-redemption) rewards and tier gifts.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F9jrThpzoWB7kn7ET9bBL%2FScreenshot%202026-09-03%20at%203.57.33%E2%80%AFPM.png?alt=media&amp;token=d7852131-7c0b-435d-a681-f1403849208b" alt=""><figcaption></figcaption></figure>

### Related guides

* [Ways to earn points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-earn-points-overview)
* [Ways to redeem points: overview](/loyalty-and-rewards/points-and-ways-to-earn/ways-to-redeem-points-overview)
* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)
* [Manage referrals](/loyalty-and-rewards/membership-tiers-and-referrals/manage-referrals)


# B2B Loyalty


# B2B Loyalty: an overview

Run a company-level loyalty program for your Shopify B2B customers alongside your regular D2C program — shared company point balances, company tiers, and a dedicated B2B admin view.

Run B2B loyalty alongside your D2C program. B2B loyalty pools points, tiers, and redemptions at company level.

#### How B2B loyalty works

* Orders through a B2B catalog earn into a shared company balance.
* Companies progress through their own B2B membership tiers.
* Any company member can redeem from the shared balance.

Your D2C program continues for everyone else.

{% hint style="info" %}
B2B Loyalty is available on plans that include B2B. Contact support if the B2B option is missing from **Loyalty Program**.
{% endhint %}

#### Switch between programs

When B2B Loyalty is enabled, use the D2C / B2B toggle in the top-right. It switches the page between programs.

The toggle appears on:

* **Loyalty Program** and its pending-adjustments badge
* **Points** and **Membership Tiers**
* **Manage Customers** and **Pending Adjustments**

If your plan only includes B2B, you see only the B2B view.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FA9NvU3ibFZ9v3cQLufol%2FScreenshot%202026-08-07%20at%203.42.05%E2%80%AFPM.png?alt=media&#x26;token=234df551-508f-4d54-a7a8-9860b4fd6de3" alt=""><figcaption></figcaption></figure>

#### Separate and shared settings

| Setting           | D2C                   | B2B                            |
| ----------------- | --------------------- | ------------------------------ |
| Who earns         | Individual customer   | Company, across all members    |
| Point balance     | Per customer          | One shared balance per company |
| Tiers             | D2C tiers             | Separate B2B tiers             |
| Ways to earn      | All earning methods   | **Place an order** only        |
| Ways to redeem    | Configured separately | Configured separately          |
| Activity timeline | Customer profile      | Company page                   |

Rules, tiers, and redemption methods never cross between programs.

Some settings apply to both programs. The admin labels them **Applies to D2C and B2B**:

* **Program Status** sets one start date and active state.
* **Fulfilled Order Adjustments** controls fulfilled-order refunds and edits.
* **Unused Loyalty Coupons** searches D2C and B2B outstanding coupons together.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FpRjSGBsrVwz5wsdhAIu4%2FScreenshot%202026-08-07%20at%203.44.04%E2%80%AFPM.png?alt=media&#x26;token=b839d51c-38e2-4e7f-80bc-bdd0c52f71df" alt=""><figcaption></figcaption></figure>

#### Which orders earn company points?

Only orders placed through the B2B catalog earn company points.

* A company member’s regular online-store order earns no points.
* A company member’s POS order earns no points.
* POS redemption is disabled for company members. Shopify POS does not support B2B.

#### Personal loyalty for company members

A company member’s personal loyalty pauses while they belong to a B2B company. Their points and tier are saved. They resume automatically if the customer leaves.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F8tnp3r2ksZj2LgH2gqZd%2FScreenshot%202026-08-07%20at%203.49.08%E2%80%AFPM.png?alt=media&#x26;token=b407a09d-ed93-49d5-81b1-93eaa5224728" alt=""><figcaption></figcaption></figure>

#### Related guides

* [Setting up B2B points: ways to earn and redeem](/loyalty-and-rewards/b2b-loyalty/setting-up-b2b-points-ways-to-earn-and-redeem)
* [B2B membership tiers](/loyalty-and-rewards/b2b-loyalty/b2b-membership-tiers)
* [Managing companies and their loyalty](/loyalty-and-rewards/b2b-loyalty/managing-companies-and-their-loyalty)


# Setting up B2B points: ways to earn and redeem

Configure how B2B companies earn and redeem loyalty points — the Place an Order earning rule, Amount Discount and Product Redemption, and how fulfilled order adjustments work for B2B.

Configure B2B company points in **Loyalty Program → Points**. Switch the top-right toggle to B2B. Your D2C rules remain unchanged.

#### Ways to earn

B2B companies earn through **Place an order**. Orders placed through the B2B catalog add points to the shared company balance.

Configure this rule like its D2C equivalent. It supports points per amount spent, earning conditions, product eligibility, and tier eligibility. See [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order).

{% hint style="info" %}
Birthday, signup, referral, review, and customer-tag points do not apply to companies. Company members do not earn them while in a B2B program.
{% endhint %}

#### Ways to redeem

B2B supports these separately configured redemption methods:

* **Amount Discount** gives `$X` off the whole order. See [Set up an amount discount reward](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward).
* **Product Redemption** redeems points for selected products. See [Set up product redemption](/loyalty-and-rewards/points-and-ways-to-earn/set-up-product-redemption).

The redemption deducts from the company balance. Any current company member can use the generated code. This is the main difference from D2C, where a code is restricted to the single customer who redeemed it.

{% hint style="warning" %}
Code eligibility is captured at redemption. Members joining later cannot use that code. Members who leave later still can, so when a contact moves on, refund any unused codes they could still spend.
{% endhint %}

#### B2B discount codes

Shopify enables B2B discounts automatically for new B2B stores. It also enables them for existing B2B stores without active or scheduled B2B discounts.

If a loyalty code does not apply at B2B checkout, contact Shopify Support. Ask them to enable B2B discounts for your store.

#### Fulfilled Order Adjustments

**Fulfilled Order Adjustments** applies to D2C and B2B programs.

* **Require approval before adjusting** holds the point change for review.
* **Ignore** makes no adjustment. The company timeline logs **Points not adjusted**.

Edits to unfulfilled B2B orders adjust the company balance immediately.

#### Review B2B pending adjustments

Use the D2C / B2B toggle on **Pending Adjustments**. The B2B view shows the company and the ordering member’s email.

Approving an item updates the shared balance, rechecks the company tier, and logs the approval. Rejecting it changes no balance.

See [Managing point adjustments post-fulfilment](/loyalty-and-rewards/points-and-ways-to-earn/managing-point-adjustments-post-fulfilment).

{% hint style="info" %}
Refund unused B2B redemption codes through **Unused Loyalty Coupons**. See [Refund an unused loyalty coupon](/loyalty-and-rewards/points-and-ways-to-earn/refund-an-unused-loyalty-coupon).
{% endhint %}

#### Program Status

**Program Status** applies to both programs. Its start date and activate/deactivate control affect D2C and B2B.

#### Related guides

* [B2B Loyalty: an overview](/loyalty-and-rewards/b2b-loyalty/b2b-loyalty-an-overview)
* [B2B membership tiers](/loyalty-and-rewards/b2b-loyalty/b2b-membership-tiers)
* [Managing companies and their loyalty](/loyalty-and-rewards/b2b-loyalty/managing-companies-and-their-loyalty)


# B2B membership tiers

Create membership tiers for your B2B companies and use tier tags to unlock better pricing, shipping rates, or exclusive products for your top wholesale accounts.

B2B tiers recognize your strongest wholesale accounts. A company can earn points or spend its way into a tier.

#### Create a B2B tier

Open **Loyalty Program → Membership Tiers**. Switch to B2B, then add a tier.

B2B tiers are separate from D2C tiers. Each tier has these fields:

* **Tier name** is visible to customers.
* **Tier level** sets display order. Lower levels display first.
* **Customer Tag Name** applies to company members when the company’s tier changes.
* **Milestone to achieve tier** is **Points earned** or **Amount spent** during the membership period.

Use one milestone scale across B2B tiers. **Amount spent** is often the better fit. B2B earning is order-based, and spend maps directly to company value.

The membership period follows your membership settings. It is lifetime or fixed from the company membership start date.

#### How companies progress

Roadmap rechecks the company tier whenever points land. This includes orders, order adjustments, and approved pending adjustments.

Companies are promoted when they qualify. They are never automatically demoted after refunds. Change a company tier manually from its company page.

#### Use tier tags

The tier tag applies to each company member’s Shopify customer record. Use it for:

* Better pricing through Roadmap discounts targeted at the tag.
* Better shipping rates for tagged customers.
* Exclusive products or catalogs outside Roadmap.

{% hint style="info" %}
Tags update when the company tier changes. Pricing and access rules using the tag update immediately.
{% endhint %}

#### Related guides

* [B2B Loyalty: an overview](/loyalty-and-rewards/b2b-loyalty/b2b-loyalty-an-overview)
* [Loyalty Tiers](/loyalty-and-rewards/membership-tiers-and-referrals/loyalty-tiers)
* [Managing companies and their loyalty](/loyalty-and-rewards/b2b-loyalty/managing-companies-and-their-loyalty)
* [Setting up B2B points: ways to earn and redeem](/loyalty-and-rewards/b2b-loyalty/setting-up-b2b-points-ways-to-earn-and-redeem)


# Managing companies and their loyalty

A tour of the Companies dashboard and the company detail page — point history, members, orders, adjusting the shared balance, generating discounts, and updating membership dates.

Open **Loyalty Program → Manage Customers**, then switch to B2B. The Companies dashboard lists Shopify companies with their tier, contacts, membership date, total spent, and point balance.

Use **All**, **Members**, and **Non-members** to filter companies. Search by company name.

#### The company page

Open a company to view its complete B2B loyalty record:

* **Point History** lists earned, redeemed, adjusted, and refunded points. Its **Discounts** tab lists generated codes, including unused codes.
* **Company Orders** lists orders from every company member.
* **Company Members** lists members with links to their customer pages.
* **Company** shows the name, contacts, and amount spent this period.
* **Membership** shows the tier, member-since date, start date, and expiry date.
* **Loyalty Points** shows the shared balance.
* **Activity Timeline** logs earnings, redemptions, adjustments, tier changes, and membership changes.

#### Take action on a company

{% stepper %}
{% step %}
**Adjust the shared balance**

Click **Adjust point balance** to add or deduct points. Use it for goodwill credit or an offline-order correction.
{% endstep %}

{% step %}
**Generate a company discount**

Click **Redeem points** to redeem from the shared balance. Any current company member can use the generated code.
{% endstep %}

{% step %}
**Update membership details**

Click **Update** on the **Membership** card to change the tier, start date, or expiry date.
{% endstep %}
{% endstepper %}

#### Understand the numbers

* **Amount spent this period** includes eligible order value processed through loyalty. It does not include raw Shopify totals or orders before B2B loyalty was enabled.
* The shared balance can briefly appear stale during simultaneous member orders. It self-corrects within moments.

#### Related guides

* [B2B Loyalty: an overview](/loyalty-and-rewards/b2b-loyalty/b2b-loyalty-an-overview)
* [B2B membership tiers](/loyalty-and-rewards/b2b-loyalty/b2b-membership-tiers)
* [Manage loyalty customers](/loyalty-and-rewards/customer-management/manage-loyalty-customers)
* [What happens to a customer's personal loyalty when they join a B2B company](/loyalty-and-rewards/b2b-loyalty/what-happens-to-a-customers-personal-loyalty-when-they-join-a-b2b-company)


# What happens to a customer's personal loyalty when they join a B2B company

When a customer joins a B2B company, personal loyalty pauses. Their points and tier are saved, then resume automatically when they leave.

A customer can actively earn in one program. Joining a B2B company pauses their personal loyalty. Their saved points and tier resume if they leave.

#### What the admin shows

* The D2C customer list shows **B2B** in the **Tier** column.
* The loyalty profile shows **Paused (B2B)** next to the customer name.
* The Shopify admin **Customer Loyalty Profile** block shows company balance and tier.
* The timeline logs **Personal loyalty paused** and **Personal loyalty resumed**.

It also logs company activity that does not award personal points.

#### While personal loyalty is paused

| Personal loyalty item               | Behavior                                                            |
| ----------------------------------- | ------------------------------------------------------------------- |
| Points balance                      | Saved and hidden from the storefront. Never zeroed.                 |
| Point expiry                        | Continues on original dates.                                        |
| Member-since and tier renewal dates | Unchanged.                                                          |
| Amount spent this period            | Frozen at the join date. Company spend never counts.                |
| D2C earning                         | Birthday, signup, referral, review, and tag points are not awarded. |
| Points-expiring emails              | Not sent.                                                           |
| Subscription redemption             | Not available for company points.                                   |
| POS                                 | Disabled, shown as `Disabled: B2B customer`.                        |

Company points and tier appear on the storefront while the customer belongs to the company.

#### When the customer leaves

Personal loyalty resumes automatically. No admin action is required.

* The saved balance and tier return, including expiry changes during the pause.
* Amount spent resumes from its frozen value with new personal orders.
* The timeline logs **Personal loyalty resumed**.
* A customer who was never a personal member starts personal membership on leaving.

{% hint style="info" %}
Joining or leaving never overwrites the original member-since date.
{% endhint %}

#### Related guides

* [B2B Loyalty: an overview](/loyalty-and-rewards/b2b-loyalty/b2b-loyalty-an-overview)
* [Managing companies and their loyalty](/loyalty-and-rewards/b2b-loyalty/managing-companies-and-their-loyalty)
* [Understanding a customer's loyalty timeline](/loyalty-and-rewards/customer-management/understanding-a-customers-loyalty-timeline)


# B2B loyalty and Klaviyo

How Klaviyo behaves for customers in a B2B company program — which loyalty properties are removed, which events still fire, and how to split your flows so B2B members get relevant emails.

Klaviyo tracks individual customer profiles. B2B members have company-level loyalty, so Roadmap handles their loyalty data differently.

#### Loyalty profile properties are removed

For D2C customers, Roadmap writes `roadmap_loyalty_*` properties to Klaviyo profiles.

When a customer joins a B2B company, Roadmap removes those properties. It stops writing them while the customer remains a company member.

The customer leaves Klaviyo segments and flows based on personal points, tiers, or expiry. Subscription, review, and account properties remain unchanged.

#### Points earned still fires

B2B members can still earn company points from orders. A points-earned event reaches Klaviyo for those orders.

#### Split points-earned flows

Use a Klaviyo conditional split to give B2B members the right message. Roadmap applies each B2B tier’s customer tag to company members.

Add a conditional split on the **Shopify tags** profile property:

* Send tagged members to a B2B branch with company-balance content.
* Keep all other members in the D2C branch.

{% hint style="warning" %}
Add the tag split before enabling B2B loyalty. Otherwise, B2B members receive D2C emails with unavailable personal-balance placeholders.
{% endhint %}

#### Related guides

* [B2B membership tiers](/loyalty-and-rewards/b2b-loyalty/b2b-membership-tiers)
* [Roadmap Klaviyo metrics](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-klaviyo-overview)
* [Loyalty Klaviyo code snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets)


# Storefront loyalty blocks for B2B customers

What B2B company members see in your storefront loyalty blocks — company points and tier, B2B-only earning and redemption rules, and the one block that's shared with D2C.

Existing storefront loyalty blocks adapt for logged-in B2B company members. Install nothing extra. Each block shows company data instead of personal data.

#### What company members see

When a company member logs in:

* Points and tier show the shared company balance and B2B tier.
* Ways to earn show only B2B rules.
* Ways to redeem show only B2B methods.
* Tier progress shows B2B tiers.

A new balance appears on the member’s next page load after a company order, redemption, or adjustment.

#### Blocks that support B2B

* **Loyalty banner** shows company points, tier, and B2B earn and redeem rules.
* **Redeeming loyalty points** redeems the company balance for discounts.
* **Product redeemer** redeems company points for products.
* **Cart drawer point redeemer** supports company redemption in the cart drawer.

Style these blocks through **Edit Loyalty Widgets** and **Universal Styler**.

Any redemption deducts from the company balance. The code is available to any current company member.

{% hint style="warning" %}
The **Frequently Asked Questions** block is shared across D2C and B2B. Avoid D2C-only explanations, such as birthday points, in its copy.
{% endhint %}

#### Related guides

* [B2B Loyalty: an overview](/loyalty-and-rewards/b2b-loyalty/b2b-loyalty-an-overview)
* [Setting up B2B points: ways to earn and redeem](/loyalty-and-rewards/b2b-loyalty/setting-up-b2b-points-ways-to-earn-and-redeem)
* [Customize the loyalty widgets](/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets)


# Loyalty integrations


# Set up Roadmap loyalty in Shopify POS

Add the Redeem loyalty points and Loyalty point adjustments tiles to Shopify POS from Shopify admin or directly on the POS device.

Use this guide to add Roadmap loyalty to Shopify POS.

This setup gives staff two loyalty tiles:

* **Redeem loyalty points**
* **Loyalty point adjustments**

The adjustments tile is your pending points log in POS.

### Before you start

Make sure these are already true:

* your loyalty program is active
* staff can access the Shopify POS device
* **Fulfilled Order Adjustments** is set to **Require approval before adjusting** if you want to use the adjustments tile

{% hint style="info" %}
Changes made in **Point of Sale → Settings → POS apps** apply to all POS devices across all locations.
{% endhint %}

### Option 1: Add the tiles from Shopify admin

{% stepper %}
{% step %}

#### Open Shopify POS settings

In Shopify admin, go to **Point of Sale**.

Then open **Settings**.
{% endstep %}

{% step %}

#### Open POS apps

In **Settings**, select **POS apps**.

Choose **Roadmap** from the app list.
{% endstep %}

{% step %}

#### Add the loyalty extensions

Open **App extensions**.

Add these two Roadmap extensions:

* **POS UI extension** — this becomes the **Redeem loyalty points** tile
* **Loyalty Points Adjustments** — this becomes the **Loyalty point adjustments** tile

If the redemption extension appears as **POS UI extension**, that is expected.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FCJWDq6dSt6rr6iXxMqRQ%2FScreenshot%202026-05-06%20at%202.06.13%E2%80%AFPM.png?alt=media&amp;token=427cc4ae-8ff2-4060-9435-6dc870b7c387" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Refresh Shopify POS

Close and reopen Shopify POS on the device.

Then confirm both tiles appear on the smart grid.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
After setup, Shopify POS can show one Roadmap entry as **Roadmap** and the other as **Loyalty Points Adjustments**. That is expected.
{% endhint %}

### Option 2: Add the tiles on the POS device

{% stepper %}
{% step %}

#### Open the smart grid

On the POS home screen, tap **Add tile**.
{% endstep %}

{% step %}

#### Choose an app tile

Tap **App**.

Then select **Roadmap**.

<div align="left"><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FYE4ddHBHGn4KyRbIZahn%2FIMG_2732.PNG?alt=media&amp;token=795804a4-7ff2-48fe-b63e-43b3189a4338" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Add the loyalty extensions

Add these two options:

* **POS UI extension** — this becomes **Redeem loyalty points**
* **Loyalty Points Adjustments** — this becomes **Loyalty point adjustments**

Repeat the same flow if you only add one tile first.
{% endstep %}

{% step %}

#### Confirm the tiles are visible

Return to the smart grid.

Check that both loyalty tiles now show on the POS home screen.

<div align="left"><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FG3ahpXSCyp9eH6P7FpKl%2FIMG_2726.PNG?alt=media&amp;token=b6d14468-4882-4af1-95be-39f356513a2d" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

### What each tile does

#### Redeem loyalty points

Use this tile when a customer is attached to the cart and wants to use their points.

Staff can:

* view the customer's available points
* redeem an available reward
* apply an existing loyalty discount if one already exists

<div><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FcaejsYbUgLl5Ot1Q3e4W%2FIMG_2727.PNG?alt=media&amp;token=6e9acdd8-8185-4016-b897-faac07364c7f" alt=""><figcaption></figcaption></figure> <figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FeozHRtHIE6lZahZpKDpD%2FIMG_2728.PNG?alt=media&amp;token=e8fd413d-ba96-4268-944c-e938e72ccbde" alt=""><figcaption></figcaption></figure> <figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FttOnoQxSFlt1HeYjlh9r%2FIMG_2729.PNG?alt=media&amp;token=ad97b7d1-5a30-4be0-9395-012709d86c22" alt=""><figcaption></figcaption></figure></div>

#### Loyalty point adjustments

Use this tile to review pending point changes created after a fulfilled order changes.

Staff can:

* open the pending adjustment list
* review the suggested points change
* approve or reject the adjustment

This is useful for POS refunds, returns, exchanges, and other post-fulfilment edits.

<div align="left"><figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F8gn4KkUPOu8xupnsg0Zf%2FIMG_2724.PNG?alt=media&amp;token=bc88bdbd-0952-44af-95f3-d55693d82c0b" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FfgkEWSPQxvKvrUy6p92i%2FIMG_2725.PNG?alt=media&amp;token=5850e115-ac5d-47a9-8ef9-c701d35ed8a8" alt="" width="375"><figcaption></figcaption></figure></div>

### Test the setup

After adding the tiles, run a quick test:

1. Attach a loyalty customer to the cart.
2. Open **Redeem loyalty points** and confirm rewards appear.
3. If you use pending adjustments, open **Loyalty point adjustments** and confirm pending items appear when expected.

{% hint style="warning" %}
If the tiles do not appear, close and reopen Shopify POS first.

If they still do not appear, check that both Roadmap app extensions were added.
{% endhint %}

### Related guides

* [How to configure your point settings](/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings)
* [Managing point adjustments post-fulfilment](/loyalty-and-rewards/points-and-ways-to-earn/managing-point-adjustments-post-fulfilment)
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings)


# Troubleshooting


# Referral rewards not applying?

If referral rewards aren't applying the way you expect (no points awarded, or a referral coupon won't work), the cause is usually one of these: the **Referral Program** is inactive, the reward is set to **No reward**, the **friend hasn't placed their first order** yet, or the discount reward has restrictions that the order doesn't meet.

The referring customer receives their reward **once the friend makes their first order**. The **Friend reward** is intended to be used on the friend's **first purchase**.

![Referral Program page showing Customer reward, Friend reward, and Referral status](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/RSNXqMMExSBM5bHYpMWt/Screenshot_2026%2002%2022_at_4.26.04_PM.png)

### Quick checklist

* Confirm the program is active\
  Open **Referral Program** and look at **Referral status**. If it shows **inactive**, click **Activate**.
* Verify reward types (not “No reward”)\
  In **Referral Program**, check both **Customer reward** and **Friend reward**. Click **Edit** and confirm the correct option is selected: **Points** or **Discount** (not **No reward**).
* Make sure the trigger happened\
  Confirm the referred friend completed their **first order**. The referring customer's reward is only granted after that first order is placed.
* If using a Discount reward, check restrictions\
  In the reward's **Edit** panel, verify restrictions like **Applies to**, **Purchase Type**, and **Minimum spend** match the test order.
* Rule out conflicts with other promos\
  Temporarily pause other active promotions (for example in **Discounts / Gift with Purchase**) and retest. Overlapping offers can cause unexpected results.

### Step-by-step troubleshooting

{% stepper %}
{% step %}

#### Referral status is inactive

If the program is inactive, no referral rewards will be generated or granted.

* Go to **Referral Program**.
* Find **Referral status**.
* If it shows **inactive**, click **Activate**.
  {% endstep %}

{% step %}

#### The reward is set to “No reward”

Either side of the referral can be turned off. If a customer expects a reward but that reward is set to **No reward**, nothing will apply.

* From **Referral Program**, click **Edit** next to **Customer reward**.
* Confirm **Points** or **Discount** is selected (or intentionally keep **No reward**).
* Repeat for **Friend reward**.

![Customer reward edit panel showing No reward, Points, and Discount options](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/aQdbIUeekZ25xQntrFq6/Screenshot_2026%2002%2022_at_4.26.23_PM.png)
{% endstep %}

{% step %}

#### The friend hasn't placed a first order yet

This is the most common reason the referring customer doesn't see points (or a reward) show up.

* The referring customer's reward is granted **after** the referred friend makes their **first order**.
* If you're testing, ensure the friend completes checkout (not just adds items to cart).

When testing, use a real customer account and complete a real first-order flow for the friend. Tests that stop before checkout completion won't trigger the advocate reward.
{% endstep %}

{% step %}

#### Discount reward restrictions don't match the cart

If your referral reward is a **Discount**, it behaves like a coupon-style discount with rules. If any rule doesn't match, the code may not apply.

In **Referral Program**, click **Edit** on the reward and review:

* **Applies to** (for example, **Specific products or variants**)
* **Select variants** (if set, the cart must include those variants; you can use **Browse** to choose them)
* **Purchase Type** (for example, **One-time purchase** or **Both**)
* **Minimum spend**
* **Expires after** (if not **No expiry**, the code can become invalid after the set number of days)

![Friend reward edit panel showing Discount settings including Code prefix, Applies to, Purchase Type, Minimum spend, and Expires after](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/TatoiLXoOeSchIAD0pgy/Screenshot_2026%2002%2022_at_4.26.45_PM.png)

If **Applies to** is set to **Specific products or variants**, the discount will only work when the cart includes those items. A common testing mistake is using a different product (or a different variant).
{% endstep %}

{% step %}

#### The discount looks smaller than expected on a multi-product order

A referral reward applies **once per order**, not once per product.

If the cart holds several qualifying products, a fixed-amount reward is spread across them. Each line shows part of the discount, and the amounts add up to the reward you configured. A `$30` reward across two products might show as `$23.66` on one and `$6.34` on the other.

This is the reward applying correctly. Check the order total rather than the per-line amounts.
{% endstep %}

{% step %}

#### Another promotion or coupon is taking precedence

If you run multiple offers at once (or the customer uses another coupon), it can change what applies at checkout.

* If you're also running offers in **Discounts / Gift with Purchase**, temporarily pause them and retest the referral reward.
* If the customer redeemed points (loyalty coupons) from **Redeem points → Ways to redeem**, those coupons may conflict with other discounts.

If you're unsure whether you're testing a referral coupon vs. a loyalty coupon, double-check where it was configured: referral coupons come from **Referral Program** when the reward type is **Discount**.
{% endstep %}
{% endstepper %}

### FAQ

<details>

<summary>The friend reward coupon won't apply, what should I check first?</summary>

* In **Referral Program**, click **Edit** on **Friend reward** and confirm it's set to **Discount** (not **No reward**).
* Check **Minimum spend**, **Applies to**, and **Purchase Type** restrictions.
* Confirm the friend is using the reward on their **first purchase**.

</details>

<details>

<summary>The advocate didn't get points, does it happen immediately?</summary>

No. The referring customer receives their reward **once the friend makes their first order**.

</details>

<details>

<summary>What does “Code prefix” do?</summary>

**Code prefix** sets the starting characters for generated referral discount codes. The example displayed under the field updates to show a preview of the code format.

</details>

<details>

<summary>Why does one referral show as one, when the code appeared on several products?</summary>

A referral is counted against the order, not the number of products the code touched. One referred friend placing one order is one successful referral. See [Manage referrals](/loyalty-and-rewards/membership-tiers-and-referrals/manage-referrals).

</details>


# Customers not earning loyalty points

A checklist for when customers aren't earning points: rule mismatches, unmet limits, the loyalty timeline, and a deleted collection pausing an earning rule.

If customers aren’t earning points, the issue is usually that the action they took doesn’t match your **Ways to earn** rules (or the rule has a limit/requirement that wasn’t met). Use this checklist to quickly find what’s missing.

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/Kwfq4JrHyr27VScYS3CO/Screenshot_2026%2002%2022_at_4.18.41_PM.png" alt=""><figcaption></figcaption></figure>

### Start with the customer's timeline

Before checking rules one by one, open **Loyalty Program → Manage Customers**, open the customer, and look at the **Timeline** under the **Not Awarded** tab. Roadmap logs the exact reason an order or review didn't earn, for example *"All items in this order were ineligible for points based on your earning rule filters"*. In most cases the timeline names the cause for you. See [Understanding a customer's loyalty timeline](/loyalty-and-rewards/customer-management/understanding-a-customers-loyalty-timeline).

### Quick checklist

**Confirm a matching earning rule exists**

* [ ] Go to **Loyalty Program** → **Points** and review **Ways to earn**. Make sure you have a rule for the action the customer took (for example **Place an order** or **Account Signup**).
* [ ] Open the rule and verify limits
* [ ] In **Ways to earn**, click **Edit** next to the relevant rule and confirm you didn’t set a limit that would block the customer (for example a once-per-year limit on birthdays).

**Make sure the trigger actually happened**

Some earning actions only award points after a specific event occurs (for example, a review being **approved and published**). Confirm the customer completed the full requirement.

* [ ] Check the customer record
* [ ] Go to **Loyalty Program** → **Manage Customers** and open the customer to confirm whether points were awarded (and to rule out a storefront display issue). If you’re testing with your own account, use a clean test customer and perform one earning action at a time. This makes it obvious which rule is (or isn’t) firing.

{% stepper %}
{% step %}

#### Step 1: Verify your “Ways to earn” setup

Open **Loyalty Program** → **Points**. On the **Loyalty Points** screen, your earning actions appear under **Ways to earn**.

* To change a rule, click **Edit** next to it.
* To create a new rule, click **Add way to earn**.

Common earning rules you might see include **Account Signup**, **Celebrate a Birthday**, **Place an order**, **Customer Tag**, and **Leave a review**.
{% endstep %}

{% step %}

#### Step 2: Match the customer’s action to the right earning rule

Place an order: points didn’t show up

Check the **Place an order** rule in **Ways to earn**.

* Confirm the customer actually placed an order (not just added items to cart).
* In **Ways to earn**, click **Edit** next to **Place an order** and verify the points rate shown under the rule (for example: **“1 Point for every 1 AUD spent (shipping excluded)”**).

If your rule excludes shipping (as shown in the rule description), customers may earn fewer points than expected when they compare against the checkout total.

Account Signup: points weren’t awarded

Check that **Account Signup** exists in **Ways to earn** and that it’s configured to award points (the rule description shows the amount, for example **“50 Points awarded on signup”**).

* If the customer checked out as a guest, they may not have completed an account signup event.
* If you changed the signup rule after customers already signed up, earlier signups won’t retroactively earn points.

Celebrate a Birthday: points didn’t trigger

Birthday points depend on the customer having a birthday on file and the birthday date being reached.

* In **Ways to earn**, click **Edit** next to **Celebrate a Birthday** and check the rule’s limit (the list may show a limit like **“Limit of 1 per year”**).
* If the customer already earned birthday points within the limit window, they won’t receive them again until they’re eligible.

If you’re testing, make sure your test customer profile has a birthday set and that your expectation matches the rule’s limit timing.

Leave a review: points didn’t trigger

In Roadmap, the **Leave a review** earning rule is awarded when the review is **approved and published** (this is shown in the rule description).

* Confirm the customer actually submitted a review.
* Confirm the customer has a loyalty program
* Confirm the review has been published (unapproved reviews won’t earn points yet).
* Check the rule amount by clicking **Edit** next to **Leave a review**.

Customer Tag: points didn’t trigger

The **Customer Tag** earning rule awards points when a specific tag is applied to the customer (the rule description shows the tag name and whether it’s repeatable).

* In **Ways to earn**, locate **Customer Tag** and confirm the tag name shown in the rule description matches (case-sensitive) what you’re applying (for example: `pouch-returned`).
* Click **Edit** to confirm whether the rule is **repeatable** or intended as a one-time award.

If the wrong tag is applied (or applied to the wrong customer), the points won’t award—even if everything else looks correct.
{% endstep %}

{% step %}

#### Step 3: Check the customer’s points in “Manage Customers”

If the earning rules look correct but the customer claims they didn’t earn points, confirm what Roadmap recorded for that customer:

Open Manage Customers

Go to **Loyalty Program** → **Manage Customers**.

Find the customer

Search for the customer and open their record.

Verify points and recent activity

Confirm the customer’s current points balance and check whether the expected points were added after the qualifying action. If the points are present in **their loyalty profile** but the customer can’t see them on your storefront, they may of undertaken the recent action under a different email address.
{% endstep %}
{% endstepper %}

### A deleted collection paused an earning rule

The **Place an order** rule's product eligibility can be scoped to collections (only a collection earns, or everything except a collection earns). If that collection is later **deleted in Shopify**, the rule is left pointing at nothing. Roadmap detects this and steps in:

* An alert appears on the **Loyalty Program** dashboard: *A 'Ways to earn' rule is linked to a deleted collection*.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FTJaNc7L8TmdlqGKJUjKV%2FScreenshot%202026-09-02%20at%2012.04.26%E2%80%AFPM.png?alt=media&amp;token=e7a4d338-fc47-4ae8-a407-09419f468512" alt=""><figcaption></figcaption></figure>

* The affected rule is **set to Draft**, so customers will not earn points on eligible orders until it's fixed.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FcLgeQaIS2Z9nD2VOCeS3%2FScreenshot%202026-09-02%20at%2012.04.49%E2%80%AFPM.png?alt=media&amp;token=d93aa247-98c1-4882-b7b6-cc1fe0c6b526" alt=""><figcaption></figcaption></figure>

To fix it:

1. Click **Fix this rule** in the alert. (If you dismissed it, open **Points → Ways to earn** and edit the affected rule; it's the one sitting in **Draft**.)
2. In **Product eligibility**, reselect a current collection, or switch to **All products earn points**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FeAgzbiMCQBxkop68aUcO%2FScreenshot%202026-09-02%20at%2012.06.07%E2%80%AFPM.png?alt=media&amp;token=66e572df-e45f-4708-8e64-efc7da757975" alt=""><figcaption></figcaption></figure>

1. Set the rule's **Status** back to **Active**, then **Save**.

Once fixed, reach out to Roadmap support and we'll **backdate the missing points** for eligible orders placed while the rule was paused.

{% hint style="warning" %}
Before deleting a collection in Shopify, check whether any **Ways to earn** rule (or [redemption reward scope](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward)) uses it, and repoint the rule first.
{% endhint %}

### When to contact support

If none of the checks above explain the issue, collect these details before clicking **Contact Support** (on the **Loyalty Program** page):

* Which earning action you expected (for example **Place an order** or **Leave a review**)
* A screenshot of the relevant rule from **Points** → **Ways to earn** (including the rule description)
* The customer email (or Shopify customer name) and the order number / review details / tag applied
* What you see in **Manage Customers** for that customer


# Points on an order only came from one earning rule

Why an order awarded points from a single Place an order rule when two rules with different product eligibility were active — and what's changing.

An order can qualify for two **Place an order** earners with different product eligibility. Roadmap applies the most generous eligible rule.

#### Why this happens

Roadmap applies one **Place an order** configuration per order. This keeps earning predictable and prevents rules from stacking on the same items.

For example, if an order includes a double-points collection item, the double-points rule applies. The default rule does not also award points for remaining items.

#### What to do today

* For storewide promotions, set product eligibility to **All products earn points**.
* For collection promotions, mixed orders use the most generous matching rule. Use a storewide promotion when full coverage matters most.

{% hint style="success" %}
This behavior is being enhanced. An upcoming update will let orders earn from multiple **Place an order** configurations. Check the in-app **Change Log** for updates.
{% endhint %}

#### Related guides

* [Run a double-points promotion](/loyalty-and-rewards/points-and-ways-to-earn/run-a-double-points-promotion)
* [Award points for placing an order](/loyalty-and-rewards/points-and-ways-to-earn/award-points-for-placing-an-order)


# Can I award extra points for photo or video reviews?

Whether you can award additional loyalty points for reviews that include a photo or video, and what to set up in the meantime.

**Leave a verified review** awards one points value for every approved verified review. This is the same whether the review includes media or not.

#### Where this stands

Tiered rewards for photo and video reviews are on the way. Once available, you will be able to set separate points values by review type.

New features appear in the in-app **Change Log**.

#### What you can do in the meantime

* Set a generous single review reward. Mention photos and videos in the earner description.
* Reward standout media reviews manually. Open the customer in **Loyalty Program → Manage Customers** and use **Adjust point balance**.

The adjustment appears in the customer's point history.

#### Related guides

* [Loyalty points for reviews](/reviews/managing-reviews/review-rewards-and-limits/loyalty-points-for-reviews)
* [Review rewards & limits](/reviews/managing-reviews/review-rewards-and-limits)


# Where is a customer's loyalty discount code?

Find a discount code from a loyalty redemption or promotion by searching Shopify Discounts with the customer email.

Find a discount code when a customer has lost one from a loyalty redemption, birthday promotion, or tier reward.

#### Search Shopify Discounts by email

Roadmap-generated codes are stored in Shopify Discounts. In Shopify admin, open **Discounts** and search the customer’s email.

Open a result to copy the code for the customer. This includes Discount Code Generator promotions and loyalty redemptions.

#### For unused point redemptions, check loyalty admin too

For an unused point-redemption code, open **Loyalty Program → Unused Loyalty Coupons**. Search by code or email.

Read the code to the customer. Or refund it if they would rather receive their points back.

#### Related guides

* [Refund an unused loyalty coupon](/loyalty-and-rewards/points-and-ways-to-earn/refund-an-unused-loyalty-coupon)
* [Send discount codes for birthdays and tier promotions](/loyalty-and-rewards/membership-tiers-and-referrals/send-discount-codes-for-birthdays-and-tier-promotions)


# A customer's loyalty coupon isn't working

A customer says their loyalty code isn't working, shows insufficient points, or they want to undo a redemption. How to diagnose it and put the points back.

**Symptom:** a customer redeemed points for a coupon, but at checkout it's rejected. They see "code not working", an *insufficient points* message, or the discount simply won't apply. Or they've changed their mind and want the redemption undone.

Almost every case resolves the same way: find the coupon, identify which rule it's tripping, then **refund it so the customer can redeem fresh**.

### Step 1: Find the coupon and check its status

Open **Loyalty Program → Manage Customers**, open the customer, and switch **Point History** to the **Discounts** tab. Every code they've generated is listed with its status:

* **Active**: generated and unused. The code is valid; the problem is one of the restrictions below. *Active does not mean it has been spent.*
* **Used**: already spent on an order. It won't apply again.
* **Refunded / Deleted**: the code no longer exists; the customer may be trying an old code.

(You can also search the code or email in **Unused Loyalty Coupons**, or search the customer's email in **Shopify → Discounts**.)

### Step 2: Match the symptom to the cause

**The code is for a different product than the one in the cart.** Product-redemption coupons are **locked to the specific product chosen at redemption**. If the customer redeemed a coupon for Product A and is trying to buy Product B, the checkout rejects it. To the customer, this often reads as "Q3DCB3FU is valid but not applicable. Check discount terms." via Shopify default checkout messaging. The customer's loyalty timeline history shows which product each redemption was for.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FNbn6WsOJDUQ9Z5IftcaX%2FScreenshot%202026-09-02%20at%2010.33.29%E2%80%AFAM.png?alt=media&amp;token=8cf42cd4-3464-4264-8392-f2bcff386cc8" alt=""><figcaption></figcaption></figure>

> Customers often don't realise a redemption code is product-specific; to them, "a code is a code". The fix is always the same: refund the coupon and have them redeem the product they actually want.

**The product is out of stock.** If the redeemed product can't be purchased right now, the coupon can't be used. Refund it and let the customer redeem something else, alternatively, the customer can wait for restock.

**The order doesn't meet the coupon's restrictions.** Amount discounts can carry a **minimum order value**, **product/collection scoping**, and **combination rules**. A coupon that can't combine with another discount already in the cart will be rejected. Check the reward's settings in **Points → Ways to redeem**. The storefront redeemer block messages (e.g. *Reach minimum order value of…*) will surface when an error is occurring.

**The code was already used, refunded, or deleted.** The status tells you. If they need the discount again, that's a fresh redemption.

{% hint style="info" %}
The checkout's own error wording is controlled by **Shopify**, not Roadmap, so it can be generic. The Discounts tab and the storefront redeemer are where the specific reason shows.
{% endhint %}

### Undoing a redemption

Customers **cannot reverse a redemption themselves**. Refunds are admin-only, which is industry standard. At this time, coupons also cannot be edited or transferred to a different product.

So whether it's a change of mind, a wrong product, or a tripped restriction, the resolution is the same: refund the unused coupon. The points return to their balance immediately, the old code is deleted from Shopify, and the customer redeems fresh.

{% hint style="success" %}
**Reduce these tickets:** add a line to your store's FAQ explaining that product redemption codes only work on the product selected, and that customers should contact you to undo a redemption. The [Loyalty FAQ block](https://docs.roadmap.so/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets) is a good home for it. Here is an example:\
\
**Can I change or cancel a points redemption?**

When you redeem points, the code is tied to the reward you selected. A code for one product won't work on a different product, and an amount discount cannot be exchanged or upgraded once the redemption for the code has taken place. If you've redeemed the wrong reward or changed your mind, contact us: we'll refund the coupon, your points will go straight back to your balance, and you can redeem again.
{% endhint %}

### Related guides

* [Refund an unused loyalty coupon](/loyalty-and-rewards/points-and-ways-to-earn/refund-an-unused-loyalty-coupon)
* [Where is a customer's loyalty discount code?](/loyalty-and-rewards/troubleshooting/where-is-a-customers-loyalty-discount-code)
* [Set up an amount discount reward](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward)
* [Set up product redemption](/loyalty-and-rewards/points-and-ways-to-earn/set-up-product-redemption)


# What the RoadmapReferrer note on a customer means

Seeing a RoadmapReferrer note on a Shopify customer profile? That's Roadmap's referral attribution. What it records, where it appears, and how to trace the referral.

If a customer profile carries a note like `RoadmapReferrer:9671301300396`, that's Roadmap's referral attribution at work, not an error or leftover data. It marks the customer as referred and records exactly who referred them.

### What the note records

When a friend places their qualifying order through your referral program, Roadmap stamps a note onto the new **customer's Shopify profile**:

```
RoadmapReferrer:<the referrer's Shopify customer ID>
```

This is the durable link between the new customer and the person who referred them, and it's what the referral reward and your referral reporting are built on.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FrRcaTgFvY0GaVmXrYuMi%2FScreenshot%202026-09-07%20at%2012.20.48%E2%80%AFPM.png?alt=media&amp;token=33415154-d832-481f-9a37-abf6936beb57" alt=""><figcaption></figcaption></figure>

### Where you'll see it

* **On the customer**: the Shopify customer profile's **Notes** card carries the `RoadmapReferrer` line.
* **From an order**: the note lives on the customer, not the order (the order's own Notes card reads *No notes from customer*). To see it from an order, open the note icon in the order's **Customer** card, which shows the customer's notes. The friend's referral discount does appear in the order's discount lines, so that's the order-level signal of a referred purchase.
* **In Roadmap**: open **Loyalty Program → Manage Customers** and select the customer. The **Customer** card shows **Referred by** with the referrer's email address, alongside their point history.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FxYQe5dAQHuk1QTnCTbf1%2FScreenshot%202026-09-07%20at%2012.21.21%E2%80%AFPM.png?alt=media&amp;token=3cb7a315-ecaf-4173-a1c2-021cb59b02fd" alt=""><figcaption></figcaption></figure>

### Finding the referrer from the note

The number after `RoadmapReferrer:` is the **referrer's Shopify customer ID**. Two ways to reach them:

* In Roadmap, open the referred customer in **Manage Customers** and click the **Referred by** email.
* In Shopify, append the ID to your admin's customer URL: `admin.shopify.com/store/your-store/customers/<id>`.

{% hint style="info" %}
The note is written automatically when the referred order is placed. You don't need to add, edit, or clean these notes up.
{% endhint %}

### Tracking referrals in aggregate

For program-level numbers rather than a single customer, open **Analytics → Loyalty & Referrals → Referrals**: **Referral Performance** shows referral revenue, conversion rate, new referred customers, and active referrers for the selected period, and **Top Referrers** ranks your best advocates lifetime.

### Related guides

* [Manage referrals](/loyalty-and-rewards/membership-tiers-and-referrals/manage-referrals)
* [Referral rewards not applying?](/loyalty-and-rewards/troubleshooting/referral-rewards-not-applying)
* [Loyalty analytics](/loyalty-and-rewards/loyalty-analytics)


# A discount is smaller than the points value shown

A customer redeemed points and the discount on their order was smaller than the value shown against the redemption. Here is why, and how to fix it.

**Symptom:** a customer redeemed points, their loyalty history shows the reward as one amount, and the order applied a smaller discount. For example, the history reads **500 points / €30** and the order shows **€25.47 off**.

This happens on stores selling into more than one market through Shopify Markets.

### Why this happens

The two figures come from different places.

* The **€30 in their history** is a display figure. It comes from the rate you entered for that market under **Loyalty Program** → **Points** → **Currency Conversion**.
* The **discount on the order** is the real value of the code, which is a fixed amount of your store's base currency. Shopify converts it into the customer's currency at checkout, at its own exchange rate.

If the display rate you entered is more generous than the live exchange rate, the customer sees the larger number first.

In the example above, the EUR market was set to 100 points = €6, which assumes 1 NZD is worth €0.60. The real rate was closer to €0.50, so a $50 NZD reward converted to €25.47 rather than €30.

### How to fix it

1. Go to **Loyalty Program** → **Points** → **Currency Conversion**.
2. For each market, work out the display rate from your default rate and the current exchange rate. A default of 100 points = $10 NZD at a rate of 0.50 means the EUR market should be near 100 points = €5.
3. Round down rather than up, so the figure customers see is slightly conservative.
4. Click **Save**.
5. Review these rates periodically. They are fixed numbers you enter, not live rates.

{% hint style="info" %}
Changing a market's display rate does not alter points already earned or rewards already issued. It only changes the money figure shown alongside points.
{% endhint %}

### What this is not

* It is not a discount code failing to apply in full. The code applied correctly, for its full base currency value.
* It is not a tax or shipping difference.
* It is not something a different reward setup would avoid. Every reward is valued in your base currency.

### Related articles

* [How loyalty works across multiple currencies](/loyalty-and-rewards/getting-started/how-loyalty-works-across-multiple-currencies)
* [How to configure your point settings](/loyalty-and-rewards/getting-started/how-to-configure-your-point-settings)
* [A customer's loyalty coupon isn't working](/loyalty-and-rewards/troubleshooting/a-customers-loyalty-coupon-isnt-working)


# Getting started

Start here to set up reviews, core collection flows, and the first decisions that affect moderation and rewards.

Start here if you're setting up reviews for the first time.

These guides cover the core setup, the first customer-facing surfaces, and the settings that affect how reviews are collected and published.

* [Getting started with reviews](/reviews/getting-started/getting-started-with-reviews)
* [Review auto publishing settings](/reviews/getting-started/review-auto-publishing-settings)


# Getting started with reviews

Set up review collection, moderation, storefront display, and request flows in the right order.

Use this guide for your first review setup.

It walks through the core decisions in the order most stores need them.

### What to set up first

1. Decide how reviews will be published.
2. Add reviews to your product pages.
3. Choose how you will request reviews.
4. Decide whether reviews should trigger rewards.
5. Add optional sharing or syndication features.

### 1. Choose your moderation approach

Start with [Review auto publishing settings](/reviews/getting-started/review-auto-publishing-settings).

Use **Disabled** if you want to approve reviews manually.

Use **Enabled** if you want qualifying reviews to publish automatically once they meet your minimum star threshold.

### 2. Add reviews to your storefront

Use [Add Reviews to Product Pages](/reviews/storefront-and-display/add-reviews-to-product-pages) to place the review widget on your product templates.

Then refine the display with [Customise review widget design](/reviews/storefront-and-display/customise-review-widget-design).

If you collect photo reviews, also enable [image display in the PDP review widget](/reviews/storefront-and-display/enable-image-display-in-the-pdp-review-widget).

### 3. Set up review request emails

If you want automated review capture, start with [How to integrate Roadmap with Klaviyo](/reviews/integrations/klaviyo-review-integration/how-to-integrate-roadmap-with-klaviyo).

Then follow [Introduction to Klaviyo review flow setup](/reviews/integrations/klaviyo-review-integration/introduction-to-klaviyo-review-flow-setup).

If you use Roadmap's reminder timing controls, review [Review reminder emails](/reviews/integrations/klaviyo-review-integration/review-reminder-emails).

### 4. Decide whether reviews should earn rewards

Use [Review rewards & limits](/reviews/managing-reviews/review-rewards-and-limits) to control who can submit reviews and what happens after submission.

Start with submission rules, then add points or discount incentives if needed.

### 5. Add optional advanced features

Use [Shared Reviews](/reviews/managing-reviews/shared-reviews) if related products or connected stores should share review content.

Use [Integrate reviews with Google Merchant Center](/reviews/integrations/integrate-reviews-with-google-merchant-center) if you want product ratings to appear on Google Shopping and Search.

### Recommended setup order

* Set moderation first.
* Add storefront widgets second.
* Launch review-request emails third.
* Add rewards only after the submission flow works.
* Add sharing and Google syndication last.


# Review auto publishing settings

### What review auto publishing does

**Auto Publish** controls whether new reviews are published automatically, or if you need to publish them manually.

* **Disabled**: New reviews are not published automatically. The screen notes: “You must manually publish new reviews.”
* **Enabled**: New reviews are automatically published when they meet your minimum star rating.

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/bzLdaC29y3AVQCJ0R5ke/Screenshot_2026%2002%2024_at_9.20.34_AM.png" alt=""><figcaption></figcaption></figure>

### Update your auto publish setting

{% stepper %}
{% step %}

#### Open Settings

In the app, go to **Settings**.
{% endstep %}

{% step %}

#### Find Auto Publish

In the **Auto Publish** section, choose one of the options: **Disabled** or **Enabled**.
{% endstep %}

{% step %}

#### Set the minimum star rating (if enabled)

If you select **Enabled**, set the star threshold under: **“New reviews are automatically published if it is at least:”** (for example, **4 stars**).
{% endstep %}

{% step %}

#### Save your changes

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

### How the star threshold works

When **Enabled**, only reviews with a star rating equal to or higher than the value you select are auto published. Reviews below that threshold won’t be auto published.

If you want to maintain quality while reducing moderation time, start with a higher threshold (for example, **4 stars**), then adjust as you learn what works for your store. Auto publishing makes reviews visible without manual review. If you’re concerned about spam or sensitive content, keep **Auto Publish** set to **Disabled** and publish reviews manually.


# Storefront & display

Configure how reviews appear across your storefront widgets and product pages.

Use this section to configure the customer-facing review experience.

It covers product-page widgets, display settings, and how review content appears on the storefront.

Start with the product-page setup guide if reviews are not yet visible on your storefront.

* [Add reviews to product pages](/reviews/storefront-and-display/add-reviews-to-product-pages)
* [Customise review widget design](/reviews/storefront-and-display/customise-review-widget-design)
* [Enable image display in the PDP review widget](/reviews/storefront-and-display/enable-image-display-in-the-pdp-review-widget)


# Add reviews to product pages

### Overview

You can display Roadmap reviews directly on your product detail pages (PDPs) using the **Roadmap Reviews 2.0** app block. The block is added in the Shopify theme editor and inherits your theme’s design by default. If **Shared Reviews** is enabled, the same review content can be shown across multiple related products.

### Optional walkthrough

Open the [interactive Arcade walkthrough](https://app.arcade.software/flows/2GEsWM30f1zQjbLzkJFv).

If the Arcade link opens a sign-in page, open it in a browser where you’re already logged in, or ask your team admin for access to the flow.

### Add the Reviews block in Shopify

{% stepper %}
{% step %}

#### Open the theme editor

In Shopify, go to **Online Store** → **Themes** and click **Customize** on the theme you want to edit.
{% endstep %}

{% step %}

#### Select the product template

In the top dropdown, open the **Products** template you want to update (for example, your default product template or a custom product template).
{% endstep %}

{% step %}

#### Add the app block

Click **Add section** (or **Add block**, depending on your theme), then choose **Apps** → **Roadmap Reviews 2.0**.

Place it where you want reviews to appear (commonly below the product description or near the bottom of the PDP).
{% endstep %}

{% step %}

#### Save

Click **Save** in the theme editor.

Reviews will display on any product that uses this product template, as long as the **Roadmap Reviews 2.0** block/section is set to be visible. If you have multiple product templates, you’ll need to add **Roadmap Reviews 2.0** to each template where you want reviews to appear.
{% endstep %}
{% endstepper %}

### Configure how reviews display

In the Shopify theme editor, click the **Roadmap Reviews 2.0** block to open its settings. You can adjust:

* **Layout** — widths, padding, styles, and corner radius
* **Colours & Fonts** — font sizing and the colors for the review block elements

For advanced styling control, you can apply **custom CSS** (recommended only if you’re comfortable maintaining theme-level styling changes).

### Why show reviews on PDPs?

* **Build trust** — reviews reassure first-time buyers.
* **Boost conversions** — social proof helps shoppers decide faster.
* **Make PDPs more engaging** — reviews with photos add real customer context.

### Common questions

<details>

<summary>Can I choose where reviews display on the PDP?</summary>

Yes. In the Shopify theme editor, you can place the **Roadmap Reviews 2.0** block anywhere within your product template.

</details>

<details>

<summary>Do reviews support photos?</summary>

Yes. Photo uploads are supported and can display alongside written reviews (if enabled in your review settings).

</details>

<details>

<summary>Can reviews be styled to match my store?</summary>

Yes. The block inherits theme styling automatically, and you can further control styling using the block settings under **Layout** and **Colours & Fonts**, plus optional custom CSS.

</details>

<details>

<summary>Do star ratings show outside the PDP?</summary>

Star ratings can also be displayed in other places (for example, collections, search, or above the fold on the PDP). If you’d like help placing star ratings, contact Roadmap support for implementation guidance.

</details>

<details>

<summary>Why do I see the same review twice in the review block?</summary>

This usually means the same review exists as separate review records in more than one connected store.

The most common cause is importing the same historical review into each store, then enabling Shared Reviews across stores.

Import each historical review into one source store, then let Shared Reviews syndicate it to the mapped stores.

</details>

### Summary

* Add **Roadmap Reviews 2.0** to your product template in Shopify: **Online Store** → **Themes** → **Customize** → **Apps**.
* Adjust styling in the block settings: **Layout** and **Colours & Fonts** (plus optional custom CSS).
* If you want reviews shared across products, enable **Shared Reviews** in Roadmap’s Reviews settings.


# Customise review widget design

This page explains how to customise the design of your review widget using the in-app **Review Form** editor — including layout choices, section visibility, ordering, and the content shown to shoppers.

{% hint style="info" %}
Want your review widgets to match the rest of your Roadmap blocks in one action? The [Universal Styler](/getting-started/how-the-universal-styler-works) applies your brand colors, border radius, and typography across every Roadmap block at once, including the **Reviews PDP Block** and **Reviews Form**. Use this page for the review-specific layout and content settings on top of that base.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/wqwsPfUqCZ3yuoOZwV4I/Screenshot_2026%2003%2006_at_10.08.01_PM.png" alt=""><figcaption></figcaption></figure>

### Open the review widget editor

Go to Review Form

* In your admin, open **Review Form**. At the top, choose whether you’re editing **Product Reviews** or **Store Reviews**.

Use the live preview

* Use the preview on the right (e.g., **Share your thoughts**, **Rate your experience**, **Add a headline**, **Write a review**) to see design changes as you make them.

Save your changes

* Click **Save** in the top-right of the page to apply your updates. Some settings affect only **Product Reviews** or only **Store Reviews**. Always confirm the correct tab is selected before you save.\\

### Choose a layout (Block vs Columns)

You can switch the overall widget layout using **Edit Layout**. This changes how the review summary, image (optional), and review list are arranged on the page.

* Click **Edit Layout**.
* Choose a layout card such as **Block** or **Columns**, then click **Use This Layout** on the option you want.
* In the layout modal, click **Save**.

![Edit Layout modal with Block and Columns layout options and Save button](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/iL2JsTVTpSPuQkkXruSz/Screenshot_2026%2003%2006_at_10.08.21_PM.png)

If you want a more editorial look (large image alongside reviews), **Columns** is usually the best starting point.

### Customise what appears (and in what order)

After you’ve chosen a layout, use **Layout Settings** to show/hide sections, reorder them, and configure what content appears inside each section.

### Reorder sections

* In **Layout Settings**, drag sections using the **drag handle** (the dotted/grip icon) next to a section title (for example: **Review Stats & Form**, **Image**, **Reviews List & Filters**).
* Drag to rearrange where each section appears in the widget.

### Show or hide a section

* Click the **eye** icon next to a section title to hide/show that entire section.
* Within sections, use the **checkboxes** to show/hide individual items (for example: **Total Rating**, **Star Rating**, **Review Body**, **Review Rating**, **Verified Badge**).

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/t46fFTjR5mYe0H2gIVfM/Screenshot_2026%2003%2006_at_10.09.05_PM.png" alt=""><figcaption></figcaption></figure>

### Add an image section (optional)

If your layout includes an **Image** section, you can either upload an image or connect the section to a product metafield:

* Click **Upload an image for this section** to choose a static image.
* Or use **Product Metafield** to pull an image dynamically per product (for example, the field shown as `pdp.reviews_block_image` in the editor).

If you use a **Product Metafield** for the image section, make sure your products have that metafield populated — otherwise the image area may appear blank on some product pages.

### Configure the review list and filters

In **Reviews List & Filters**, you can control which parts of the review list are visible, such as:

* **Header Group**: **Header** and **Filters**
* **Review Body**: **Review Body**
* **Rating Group**: **Review Rating**, **Verified Badge**
* **Author Group**: e.g., **Author Name**

### Customise the form labels and questions

The left-hand settings panels in **Review Form** control the look and wording of what shoppers see.

* Review Block Settings\
  Open **Review Block Settings** to adjust what appears in the main review block (summary/content shown around the widget depending on your layout).
* Review Form Settings\
  Open **Review Form Settings** to edit form text and fields — such as the heading (**Share your thoughts**) and the labels shown in the preview (e.g., **Name**, **Email**, **Add a headline**, **Write a review**).
* Question Settings\
  Open **Question Settings** to manage any custom questions you want to ask. Use **+ Add Question** to create new questions.

Use the preview pencil icons (edit indicators) next to headings/labels to quickly spot which text is editable from your settings.

### Publish your design changes

* When you’re happy with the layout and settings, click **Save** (top-right) on the **Review Form** page.
* If you used a layout modal, ensure you also clicked **Save** inside that modal before closing it.

If you’re changing where the widget appears on your storefront, use **Edit Storefront Widgets** (next to **Edit Layout**) to manage widget placement separately from its design.

<details>

<summary>Why don’t I see my changes on the storefront?</summary>

* Confirm you clicked **Save** on the **Review Form** page (top-right).
* If you changed layout, confirm you clicked **Save** in the **Edit Layout** / **Layout Settings** modal.
* Make sure you edited the correct tab: **Product Reviews** vs **Store Reviews**.

</details>

<details>

<summary>What does “Product Metafield” do in Layout Settings?</summary>

**Product Metafield** lets you pull per-product content into the widget (for example, an image). This is useful when you want the review widget to match each product’s branding or imagery.

</details>

![Example of a customised review widget layout with rating summary, large image, and review list](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/ElrXYRSASBuDlLBn5Sdw/Screenshot_2026%2003%2006_at_10.11.16_PM.png)


# Edit your review form

Customise the review form your customers receive: reorder and hide fields, add questions, collect photos and videos, use scale sliders and tablet display, and let shoppers filter reviews by question

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fpm96M26H8hDArKjLSLEJ%2FScreenshot%202026-09-07%20at%2010.30.32%E2%80%AFAM.png?alt=media&#x26;token=d75404fd-4108-4b94-be66-c51f25f4ee1e" alt=""><figcaption></figcaption></figure>

The review form is what customers fill in when they leave a review. You control everything about it from the form editor: the heading and button text, which fields show and in what order, and any extra questions you want to ask, from photo uploads to sliding scales.

### Open the form editor

1. In Roadmap, open the **Reviews** dashboard.
2. Select the **Review Form** tab, you will automatically land on the review form within the modal.
3. Use the tabs at the top to switch between your **Product Reviews** form and your **Store Reviews** form. Each is edited separately.

The left-hand panel is ordered the same way as the form itself, top to bottom:

1. **Form heading**, the title customers see at the top of the form.
2. **Field Order**, the default fields (Review Title, Review Body, Rating, Email, Name) plus any questions you've added.
3. The **Add Question** button, which always sits below your question list.
4. **Submit button text**, the label on the form's submit button.

The centre preview updates as you edit, using sample data. Actual appearance can vary with your store's theme, and the product image and title will not appear in the editor.

### Reorder and hide fields

Every field and question in **Field Order** has a drag handle. Drag to reorder, and the form preview follows.

* **Questions can sit anywhere.** A new question lands below the default fields, but you can drag it up between them, for example placing a "Softness?" scale directly under Rating.
* **Hide fields you don't need.** Review Title and Rating carry an eye toggle. Hidden fields stay in the list with a "Hidden" badge so you can bring them back any time. Review Body, Email and Name are required for a valid review, so they can't be hidden.

### Add a question

Select **+ Add Question** at the bottom of the field list. The new question appears above the button, ready to edit. Expand any question to change its settings, and use the red **Delete question** button inside the expanded view to remove it.

Inside every question you can set:

* **Question Text**: the question as it appears on the form.
* **Question Type**: Multiple Choice, scale, media upload and more.
* **Options**: for a Multiple Choice question, the answers a reviewer can pick from. Use **Add Option** and **Remove** to manage the list.
* **Options Layout**: how the options are arranged on the form, Column by default.
* **Required**: the review can't be submitted without answering.
* **Private Response**: the answer is kept for your reporting only and never displays with the published review.
* **Show in Review Filter**: adds the question to your review feed filters (see below).
* **Display as tablet call-out**: shows the reviewer's answers as tablets on their published review (see below).

Questions appear on the form for every reviewer, and their answers show with the published review unless marked as a private response.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FFbb7dxSHxi4alrr0u29V%2FScreenshot%202026-09-07%20at%2011.15.27%E2%80%AFAM.png?alt=media&#x26;token=e77446f3-c51a-45d6-8c9d-9dc375d13ee1" alt="" width="300"><figcaption></figcaption></figure>

### Collect photos and videos

Add a media upload question (for example "Send us your results!") to let reviewers attach photos or a video to their review:

* Reviewers can upload **multiple photos, or a video in MP4/MOV format up to 50MB**.
* Uploads can be removed and replaced during submission, so a wrong pick doesn't block the review.
* Approved media displays in your review widgets alongside the written review.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FPtRx5aqRkNItmnhabFaz%2FScreenshot%202026-09-07%20at%2011.22.54%E2%80%AFAM.png?alt=media&#x26;token=de4a4885-08c4-4ca8-abcc-3320a71b292b" alt=""><figcaption><p>How the image/video question appears in the review form</p></figcaption></figure>

{% hint style="info" %}
Photo and video reviews pair well with loyalty: you can award extra points for reviews that include media. See [Loyalty points for reviews](/reviews/managing-reviews/review-rewards-and-limits/loyalty-points-for-reviews).
{% endhint %}

### Ask scale questions: slider or numbered tablets

Scale questions let reviewers answer along a range, like "Softness?" from Soft to Buttery Soft. When you add one, choose a **scale style**:

* **Slider**: a graph-style slider the reviewer drags to their answer.
* **Numbered**: the scale displays as a row of clickable number tablets (1, 2, 3, 4, 5) and the reviewer taps one.

Both styles share the same settings:

* **Range**: set the scale length that suits the question, for example 1 to 4 or 1 to 5.
* **End labels**: add labels under either end of the scale, such as "Soft" on the left and "Buttery Soft" on the right. Any label you leave empty is simply not shown, so you can label just the two ends, every point, or nothing at all.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FdXOS16g8iJIuXLGnAHWE%2FScreenshot%202026-09-07%20at%2011.20.01%E2%80%AFAM.png?alt=media&#x26;token=5a0d7b60-2b74-47c4-87f5-e2e5991e46ee" alt=""><figcaption><p>How question appears in review form</p></figcaption></figure>

#### Scale answers become a graph on your product page

Scale answers don't just sit inside each review. The Product Reviews block aggregates them into a **graph** near the top of your reviews display, showing shoppers at a glance where most customers land on the scale. The graph inherits your widget styling colours, so it matches the rest of the block.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F8FKetg81CRSPD6kB06IV%2FScreenshot%202026-09-07%20at%2011.18.20%E2%80%AFAM.png?alt=media&#x26;token=5be6591e-6495-4f88-bfb7-4a72f75087e9" alt=""><figcaption><p>How the answer will appear in the storefront review block</p></figcaption></figure>

### Display answers as tablet call-outs

Multiple Choice answers can do more than sit in the review text: they can display as **tablet call-outs**, pill-shaped highlights shown alongside the written review in your review widgets. Shoppers scanning the review feed see results like "Improved Regularity" or "Better Energy & Focus" at a glance, without reading every review.

To turn this on, expand the question and tick **Display as tablet call-out**. Every published review that answers the question then shows the reviewer's selected answers as tablets next to their review.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FMGQjpmTtkVXQxS9H14zQ%2FScreenshot%202026-09-07%20at%2011.36.56%E2%80%AFAM.png?alt=media&amp;token=2c61e802-172f-4d4a-8d13-a63a75d6ab4c" alt=""><figcaption></figcaption></figure>

### Let shoppers filter reviews by answers

Multiple question answers can also power the filters on your review feed. Tick **Show in Review Filter** in a question's settings to include it. Shoppers can then narrow the review list by the answers customers gave, for example showing only reviews where reviewers reported "Improved Sleep Quality", or only reviews rated 4 or higher on your softness scale.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fsa5bT817AOQ6s2RGurmK%2FScreenshot%202026-09-07%20at%2011.27.39%E2%80%AFAM.png?alt=media&#x26;token=422eda3f-1d00-4f64-9105-12dc41f8262f" alt="" width="266"><figcaption></figcaption></figure>

This turns your questions into a browsing tool: the more consistently you ask them, the more useful your review feed becomes.

Please note: Filter is only available on 'block' layout.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FMvA18xm524stEzQN8bdl%2FScreenshot%202026-09-07%20at%2011.30.39%E2%80%AFAM.png?alt=media&#x26;token=bd293c27-295e-4d0a-908f-768966187c67" alt=""><figcaption></figcaption></figure>

### Style the form

Formatting lives in the **Widget Stylings** panel on the right of the editor, grouped into:

* **Review Form**: heading and paragraph colours, sizes and weights, plus the option to show an asterisk on required fields.
* **Rating & Buttons**: star colour and size, selector shape for radio buttons and checkboxes, and full button styling.
* **Questions & Form Container**: borders, radius and background colours for question boxes and the form container, plus max width.
* **Form Accents**: input focus colour and the rating style (stars or numbers) used on review questions.

Settings marked **Styler** inherit from the [Universal Styler](/getting-started/how-the-universal-styler-works), so your form matches the rest of your Roadmap widgets automatically. Anything you change here shows an **Edited** badge and overrides the inherited value.

For anything beyond the built-in settings, select **Custom CSS** in the top right of the editor. Choose the Review Form widget and edit its CSS variables directly, things like `--form-max-width`, `--star-color` and `--button-color`.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2F6NPSFTjnxkC2cpvuh7N9%2FScreenshot%202026-09-07%20at%2011.25.17%E2%80%AFAM.png?alt=media&#x26;token=90328b25-18f8-41af-9f1f-25f426ba5306" alt=""><figcaption></figcaption></figure>

### Add the form to your theme

The review form is an app block, so it can live on any page you like:

{% stepper %}
{% step %}

#### Open the theme editor

In Shopify, go to **Online Store → Themes → Customize** and open the page where you want the form, for example a dedicated "Leave a review" page.
{% endstep %}

{% step %}

#### Add the Reviews Form block

Select **Add block** (or **Add section**), open the **Apps** tab, and choose **Reviews Form** from Roadmap.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fj5iGAg92O1oKV8515Mzm%2FScreenshot%202026-09-07%20at%2010.33.36%E2%80%AFAM.png?alt=media&#x26;token=a105d536-ec0e-45b0-97ab-198a5e38d491" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Save and preview

Position the block, then save. The form on your storefront always reflects your latest changes in the form editor, no republishing needed.
{% endstep %}
{% endstepper %}

### Related guides

* [Customise review widget design](/reviews/storefront-and-display/customise-review-widget-design)
* [Universal Styler](/getting-started/how-the-universal-styler-works)
* [Loyalty points for reviews](/reviews/managing-reviews/review-rewards-and-limits/loyalty-points-for-reviews)
* [Review submission limits](/reviews/managing-reviews/review-rewards-and-limits/review-submission-limits)


# Enable image display in the PDP review widget

Show customer-uploaded images in the PDP widget and control how they appear.

Customer-uploaded images can appear automatically in the PDP widget.

Use the **Images** settings inside **PDP Block** to show, hide, and style them.

### Before you start

Make sure these are true first:

* you are editing **Product Reviews**
* customers are submitting reviews with images
* you are in **Roadmap App Admin**, not the Shopify theme editor

### Enable images in the PDP widget

{% stepper %}
{% step %}

#### Open the review widget editor

In Roadmap, go to **Reviews** → **Review Form**.

At the top, select **Product Reviews**.
{% endstep %}

{% step %}

#### Switch to PDP Block

Open the dropdown in the top-left.

Select **PDP Block**.

This opens the design settings for the product page review widget.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FvdAmfMtdYEK57hB2Df2U%2FScreenshot%202026-04-07%20at%202.55.29%E2%80%AFPM.png?alt=media&amp;token=2e297bd5-a710-49ef-9a74-375b58ebe90e" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Open the Images section

In **Widget Stylings**, expand **Images**.

This section controls both in-review images and the image gallery.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FnNC4igLy61Yg8vNUiFPk%2FScreenshot%202026-04-07%20at%202.58.59%E2%80%AFPM.png?alt=media&amp;token=ac8aae8f-9f74-4a02-88bd-b29d0f8e7871" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Choose how review images display

Set **Review image display** to one of these options:

* **Below review text**
* **Side-by-side**
* **Hidden**

If customers have uploaded images, they appear in the review preview immediately.
{% endstep %}

{% step %}

#### Choose how the gallery displays

Set **Image gallery display** to one of these options:

* **Below heading**
* **In line with heading**
* **Hidden**

This controls the row of customer photos at the top of the reviews section.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FJtgyQunF4WRlV2Q0TCMR%2FScreenshot%202026-04-07%20at%202.59.08%E2%80%AFPM.png?alt=media&amp;token=d6a4da08-aa96-49fa-9f9a-fb105e6c7edc" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Adjust the image styling

Use the remaining controls to style the images:

* **Image Border Radius (px)** controls the corners for both review images and gallery images
* **Image Size (px)** controls image size inside each review on desktop
* **Mobile Image Size (px)** controls image size on mobile
* **Image Aspect Ratio** controls the review image crop, such as **1:1 (Square)** or **3:4 (Portrait)**
* **Gallery Image Size (px)** controls the size of the gallery thumbnails
  {% endstep %}

{% step %}

#### Preview and save

Use the live preview on the right as you make changes.

You can click gallery images in the preview to open the image popup.

When you are happy with the result, click **Save**.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FLyy1cyslKJMJbgYGuQZK%2FScreenshot%202026-04-07%20at%203.00.09%E2%80%AFPM.png?alt=media&amp;token=5e0ea9bd-853a-4f72-99bd-5d6275494ac9" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### Troubleshooting

<details>

<summary>Why don’t I see any images?</summary>

Check these first:

* you are editing **Product Reviews**
* the top-left dropdown is set to **PDP Block**
* **Review image display** is not set to **Hidden**
* **Image gallery display** is not set to **Hidden**
* your reviews actually include customer-uploaded images

</details>

<details>

<summary>Can I hide images without turning off photo capture?</summary>

Yes. Set **Review image display** or **Image gallery display** to **Hidden**.

This only changes storefront display.

</details>

<details>

<summary>Do changes show immediately while I edit?</summary>

Yes. The preview updates in real time.

You can also click gallery images in the preview to test the popup.\
\
But you need to 'save' your edits for the changes to populate onto the storefront widget.

</details>

### Related guides

* [Customise review widget design](/reviews/storefront-and-display/customise-review-widget-design)
* [Add reviews to product pages](/reviews/storefront-and-display/add-reviews-to-product-pages)


# Managing reviews

Manage moderation rules, review sharing, and reward logic for your review program.

Use these guides to manage how reviews are published, shared, and rewarded.

They cover shared review behaviour, review reward settings, and the main decisions that affect how review collection works.

Start with **Shared Reviews** if you need one review pool across similar products or connected stores.

* [Shared Reviews](/reviews/managing-reviews/shared-reviews)
* [Review rewards & limits](/reviews/managing-reviews/review-rewards-and-limits)


# Shared Reviews

Share reviews across stores & products

Roadmap Reviews can **share and aggregate reviews** across:

* **Products** (group similar SKUs so they share the same review pool)
* **Stores** (sync reviews between connected stores)
* **Bundles** (optionally include component-product reviews on bundle products)

You’ll configure Shared Reviews in **Settings**, then manage everything from the **Shared Reviews** page (store connections, product mapping, and review groups).

If you only need same-store product sharing, use [Shared reviews across products](/reviews/managing-reviews/shared-reviews/shared-reviews-across-products).

Use this page when you also need store connections, store-to-store product mapping, or both.

### Before you start

* Make sure you can open **Apps → Roadmap → Reviews** in each store you want to connect.
* If you plan to share reviews between stores, you’ll need to enable Shared Reviews in **each** store.

![Screenshot 2026-03-11 at 2.47.26 PM](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/xWOAgBcvv3AVkRqgBphO/Screenshot_2026%2003%2011_at_2.47.26_PM.png)

{% stepper %}
{% step %}

#### Enable Shared Reviews in Settings

Open Reviews Settings

In Shopify admin, go to **Apps → Roadmap → Reviews**, then click **Settings**.

Turn on Shared Reviews

In the **Shared Reviews** section, set it to **Enabled**.

Then choose your **Scope**:

* **Across products only** (share within product groups you create)
* **Across products & store** (also generates a **Store share key** used to connect stores)

(Optional) Enable bundle aggregation

Under **Bundle aggregation**, set to **Enabled** if you want bundle products to also show reviews from their component products.

Save

Click **Save**.

If you’re connecting two stores, repeat these steps in your **secondary store** as well. Store sharing won’t work unless Shared Reviews are enabled in each store.
{% endstep %}

{% step %}

#### Connect your stores (Store Sharing)

Once you’ve enabled **Across products & store**, your store generates a **Store share key**. You’ll use this key to link stores.

Copy the Store share key

In **Reviews → Settings**, find the **Store share key** and copy it.

Open Shared Reviews

Go to **Apps → Roadmap → Reviews** and open the **Shared Reviews** page (it shows **Review Groups** and **Store Sharing**).

Add the store

In the **Store Syncs** area, click **Add Store**, paste the key, and connect.

After connecting, you’ll see the store listed with a **Connected** status.

![Screenshot 2026-03-11 at 2.50.43 PM](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/ak8909NCx7IFCXdRLb3h/Screenshot_2026%2003%2011_at_2.50.43_PM.png)
{% endstep %}

{% step %}

#### Map products between stores

After stores are connected, map which products should share reviews across those stores.

Open Map Products

From **Shared Reviews**, in the connected store row, click **Map Products**.

Run Auto Map

On the **Map Products** page, click **Auto Map**. This automatically matches products between stores by **SKU**.

When it completes, review the mappings shown in the **Product mapping** list.

Adjust (if needed) and save

You can remove incorrect matches using the delete (trash) action in the **Action** column.

When you’re happy, click **Save mappings**.

**Auto Map may take a while** for large catalogs. If your store has many products, allow time for the process to run.

![Screenshot 2026-03-11 at 2.52.07 PM](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/wI66fEA7Gj233eoH1sgD/Screenshot_2026%2003%2011_at_2.52.07_PM.png)
{% endstep %}

{% step %}

#### Create review groups to share reviews across similar SKUs

Review groups let you share a single review pool across multiple products (for example: different sizes, colors, flavors, or variations that are separate SKUs).

Roadmap bundle review sharing is automatic once you enable **Bundle aggregation** in **Settings**.

Open Shared Reviews and start a group

Go to **Reviews → Shared Reviews** and click **Create Group** in the **Groups** area.

Name the group

On **Create Review Group**, enter a **Name**.

The **Handle** is used as a unique identifier for **export/import**.

Add products

In the **Products** section, click **Browse** to open **Select products**.

Use **Search products** to find items, tick the checkboxes, then click **Select**.

Save the group

Click **Save**. Your group will appear back on the **Shared Reviews** page and will begin aggregating review counts/ratings across the products in that group.

![Screenshot 2026-03-11 at 2.53.55 PM](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/8ByAq5XuEeguPwvQaP6C/Screenshot_2026%2003%2011_at_2.53.55_PM.png)

![Screenshot 2026-03-11 at 2.54.43 PM](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/m2qky70HQNeVFIH0Nm1r/Screenshot_2026%2003%2011_at_2.54.43_PM.png)
{% endstep %}
{% endstepper %}

![Screenshot 2026-03-11 at 2.56.31 PM](https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/pasnMfG69402wPg3AbDL/Screenshot_2026%2003%2011_at_2.56.31_PM.png)

### Import/export groups to another store (store-by-store)

Review groups are managed **per store**. If you want the same groups in another connected store:

* In the store where groups already exist, go to **Shared Reviews** and click **Export**.
* In your other store, go to **Shared Reviews** and click **Import**.

### Why duplicate reviews can appear across stores

Shared Reviews syncs review records between connected stores.

If the same historical review is imported into more than one store first, each store already holds its own copy.

When those stores sync, the storefront review block can show what looks like duplicate reviews.

This usually happens when the same review text was imported separately into each connected store, then Shared Reviews was enabled afterward.

The same pattern can also appear in each store's Google review feed.

Each feed is still store-specific. The duplication comes from the review records already existing in multiple stores.

To avoid this:

* import a given historical review into one source store only
* let Shared Reviews syndicate that review to mapped stores
* avoid importing the same review separately into every connected store

<details>

<summary>What does ‘Across products only’ vs ‘Across products &#x26; store’ do?</summary>

* **Across products only**: lets you create **Review Groups** so similar products share reviews within the same store.
* **Across products & store**: adds store-to-store syncing using the **Store share key**, plus product mapping via **Map Products**.

</details>

<details>

<summary>Why do I need to map products between stores?</summary>

Mapping tells Roadmap which product in Store A corresponds to which product in Store B so reviews can sync correctly. **Auto Map** matches by SKU, and you can remove incorrect matches before you **Save mappings**.

</details>

<details>

<summary>Does Shared Reviews combine reviews into one Google Merchant Center feed?</summary>

No. Shared Reviews syncs reviews between connected stores inside Roadmap.

Each Google Merchant Center feed is still fetched from a single store domain. The feed contains only the reviews for that specific store instance.

If the same review was imported into multiple connected stores before syncing, that same review content can still appear in multiple store feeds. In that case, each feed is reflecting that store's own duplicated review record.

</details>

<details>

<summary>Why am I seeing the same review twice in the storefront review block?</summary>

This usually means the same review exists as separate review records in more than one connected store.

The most common cause is importing the same historical review into each store, then enabling Shared Reviews across stores.

Use one store as the import source, then let Shared Reviews syndicate from that store instead of importing the same review into every connected store.

</details>


# Shared reviews across products

Use this guide when you want multiple products in the **same store** to share one review pool.

If you also need to connect stores or map products between stores, use [Shared Reviews](/reviews/managing-reviews/shared-reviews).

**Shared Reviews** lets you reuse the same pool of reviews across products that are effectively the same item. This helps new or lower-traffic products display meaningful review content sooner.

<figure><img src="https://content.gitbook.com/content/J8asLD4FVCFagK40xEr4/blobs/KQjnNHsjPNHjI8ut9wWt/Screenshot_2026%2002%2024_at_9.21.57_AM.png" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

#### Open Reviews settings

In your Reviews settings, open **Shared Reviews**.
{% endstep %}

{% step %}

#### Enable Shared Reviews

Under **Shared Reviews**, select **Enabled**.
{% endstep %}

{% step %}

#### Choose **Across products only**

Under **Scope**, select **Across products only**.

Use this option when you want review sharing between grouped products in one store.
{% endstep %}

{% step %}

#### Optional: enable bundle aggregation

Under **Bundle aggregation**, choose whether bundles should also show reviews from their component products.
{% endstep %}

{% step %}

#### Create a review group

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FtHEmEZBaj4MSRuI8PIdZ%2FScreenshot%202026-08-03%20at%209.47.54%E2%80%AFAM.png?alt=media&amp;token=810f367c-132d-4045-9d20-7812d223355a" alt=""><figcaption></figcaption></figure>

Go to **Reviews → Shared Reviews** and click **Create Group**.

Enter a **Name**, then add the products that should share reviews.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2Fr6HJuztcywdqyp83D7VP%2FScreenshot%202026-08-03%20at%209.49.28%E2%80%AFAM.png?alt=media&amp;token=5bd0d050-1379-48c5-aee6-dc3b11b179e6" alt=""><figcaption></figcaption></figure>

Click **Save** to start using one shared review pool across that group.
{% endstep %}
{% endstepper %}

### Across products only

Select **Across products only** to share reviews among products you’ve grouped together—without pulling in any store-wide review pool.

This is the right option for refills, separate product listings for different sizes, or similar SKUs that should show the same reviews.

### If you also need store sharing

Use **Across products & store** if you want review sharing across connected stores as well.

That setup adds a **Store share key** and product mapping between stores. For that flow, use [Shared Reviews](/reviews/managing-reviews/shared-reviews).

### Bundle aggregation (bundles vs component products)

**Bundle aggregation** controls what reviews appear on bundle products.

* **Disabled**: “Bundle products will show only their own reviews.”
* **Enabled**: “Also show reviews of bundle component products.”

If you sell bundles that are primarily a combination of existing products (rather than a truly unique product), enabling **Bundle aggregation** can make the bundle page feel more trustworthy faster.

### Common use cases

* **Refills:** Share reviews between a starter product and its refill SKU(s).
* **Variants split into separate products:** Share reviews across sizes, colors, or packs when each is a separate product listing.
* **Model refreshes:** Carry review momentum from an older model to a new model when the experience is materially similar.

Only share reviews across products that are genuinely comparable. Sharing reviews across meaningfully different products can confuse shoppers and reduce trust.

### Troubleshooting duplicate reviews

#### A review appears in multiple review groups

A review can appear in more than one review group. This is expected when its product belongs to multiple groups.

The review is not duplicated. It displays in every group associated with its product.

To prevent this, ensure each product belongs only to the review group where you want its reviews shown.

#### The same review appears twice across stores

Reviews can appear twice when the same review exists in each connected store.

This can happen when you submit or import the same review separately into every store. Shared Reviews syncs these records, so both copies display in the storefront.

Keep the original review in its store of origin. Remove each duplicate from the other stores.

### FAQ

<details>

<summary>Will Shared Reviews change the original review text or rating?</summary>

No—Shared Reviews changes where reviews can be displayed. Individual review content stays the same; the setting controls which products can surface that content.

</details>

<details>

<summary>When should I use “Across products &#x26; store”?</summary>

Use it when many products should draw from a broader, store-wide pool (for example, a product line where items are highly similar). If you only want sharing within a tightly defined set of products, use **Across products only**.

</details>

<details>

<summary>Do I need Bundle aggregation?</summary>

Only if you sell bundles and want bundle pages to display reviews from the bundle’s component products. If bundles are unique (and should be reviewed on their own), leave **Bundle aggregation** set to **Disabled**.

</details>




---

[Next Page](https://docs.roadmap.so/llms-full.txt/1)

