> For the complete documentation index, see [llms.txt](https://docs.roadmap.so/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roadmap.so/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers.md).

# 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.md).

### 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.md)
* [Award points with customer tags](/loyalty-and-rewards/points-and-ways-to-earn/award-points-with-customer-tags.md): tags that award points rather than tiers
* [Loyalty membership eligibility settings](/loyalty-and-rewards/getting-started/loyalty-membership-eligibility-settings.md)
* [Reward subscribers with loyalty points](/loyalty-and-rewards/points-and-ways-to-earn/reward-subscribers-with-loyalty-points.md): auto-tagging as the entry mechanism
* [Loyalty profile properties and email snippets](/loyalty-and-rewards/loyalty-klaviyo-integration/loyalty-profile-properties-and-email-snippets.md)


---

# 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
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.roadmap.so/loyalty-and-rewards/membership-tiers-and-referrals/tag-based-membership-tiers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
