Setting up loyalty

A loyalty program is the set of things your customers can earn, the levels they climb, and what they can spend their points on. Overview in the sidebar is the catalog of everything your members can see, and Rules is where you write it.

Points are one reward type among several, not the whole product. A program can run on stamp cards and coupons with no points at all, and the most interesting programs mix the three: points for the everyday, a stamp card for the habit you want to build, and offers scoped to a tier so your best customers get something nobody else does.

This guide sets up one program end to end. It uses a coffee roaster called Ridgeline as a worked example, with points called beans, a Coffee club stamp card, and a launch-week offer that only Gold members see.

The quickest way in

Set up loyalty in the sidebar, or /loyalty-programs/setup, asks one question: what your customers can do. Pick as many as you like, and each one writes a working example you can publish straight away:

You pickCascade writes
Earn pointsA program called Rewards with points named "point" and "points", plus three rules: Points for every order at a point per dollar, a Welcome bonus of 100 points, and $5 off for 500 points.
Refer a friendRefer a friend, which pays the member who shared the link, and Referred by a friend, which gives their friend $10 off. The welcome bonus narrows to direct joins so nobody is paid twice.
Claim offersOne offer, Free shipping on your next order, good for the first 100 orders. It has no end date, so it waits for you rather than expiring while you work.
Collect stampsOne stamp card, Loyalty card, earning a stamp per order, and the rule that completes it: Ten stamps, $10 off.

It also attaches the program to every site you have, which is what puts it on a storefront.

Members are enrolled the first time they do something the program rewards. If you would rather they joined themselves, change Automatic enrollment under Program settings; it is not a first-day decision.

The program it writes is a draft, so nothing reaches a shopper until you press Publish. Every number above is a starting point rather than a recommendation: change any rule from the Rules page before you publish, or after.

Creating the program

An organization with no program yet sees Set up your loyalty program on the Overview page. Create one and you land on Settings, Loyalty, which is where every piece of configuration below lives (the Settings button on the Overview page goes there too). The Overview page itself is read-only: it lists what members will see, and each section has a button through to the screen that manages it.

A new program is a draft. Nothing you do to it reaches a shopper until you publish it, so you can name the points, write the rules and build the tiers with no rush. See Draft, live and paused below.

A program applies to every site you have, including sites you add later, so there is nothing to attach. Most organizations run one program. The API can create more, and when it has, a program picker appears in the header of both the Overview page and the Loyalty settings page, so each one can be configured on its own. A site shows every published program, with a tab per program in the widget.

Program

The Program section on the settings page holds the two things every program has:

  • Name is what members see wherever the program is shown: the widget, the emails and the admin. Type a new one and press Save; the button stays quiet until the name has actually changed.
  • Joining decides whether customers enroll themselves or are enrolled by their first rewarded activity. It saves on selection. See Who joins, and how.

Draft, live and paused

The buttons in the settings page header are the program's lifecycle, and they are the only thing that decides whether shoppers see the program at all. Only the moves that make sense are shown: a draft offers Preview and Publish, a live program offers Pause, and a paused one offers Republish.

StatusWhat it means
DraftNobody can see it. It enrolls nobody, earns nothing, and no storefront shows it. This is where every new program starts.
LiveMembers can see it, join it and earn in it on every site it is attached to.
PausedFrozen. Members keep their balances, rewards and history and can still see all of it, but nothing earns, spends or joins.

Publishing cannot be undone. There is no way back to draft, because a member who joined a live program cannot be un-joined. If you need to take a published program down, pause it: that is what pause is for, and it loses nothing.

Publishing a program with no rules, or in an organization with no site yet, is allowed. Cascade warns you first that it will not do anything visible yet, and you can fill the rest in afterwards.

Draft covers the program and nothing inside it. Rules, tiers, offers and stamp cards on a live program are edited in place and take effect the moment you save them. There is no draft version of a rule, and no "publish changes" step. If you want to work on a rule without members seeing it, set its Starts date in the future or deactivate it.

Previewing a draft

Preview in the header of a draft opens your own storefront with the program showing, whether it is published or not. The link points at the site's loyalty page (or the site itself, if you have not set one) and carries #cascade-rewards, so the widget opens on arrival.

  • The link works for a day, and it works for anyone who has it, so you can send it to a colleague who has no Cascade login. Treat it as being as private as wherever you paste it.
  • A preview is read only. The panel says so, and nobody can join or claim through it, including you.
  • An organization with no site has nowhere to open the preview, and the button says so rather than silently doing nothing. Add a site under Settings, Sites first.

Publishing is recorded in your audit trail alongside pausing and resuming, so there is always a record of who made the program visible and when.

Points

The switch in the Points card's title turns points on and off. With it on, fill in One point is called and Several are called and press Save names. Ridgeline uses "bean" and "beans", so every balance in the widget, the emails and the admin reads "1,200 beans" rather than "1,200 points".

Switching points off clears the names, and a program with no points has no balance, no ledger and no "Redeem points" section, because there is nothing to spend. Everything else keeps working: stamp cards, coupons, gift cards and free shipping do not need points to exist. Cascade remembers the names you had, so switching points back on brings "bean" and "beans" back rather than a blank form. The expiry fields below are only shown while points are on.

When points expire

Two settings control this, and you can use either, both, or neither.

SettingWhat it does
Points expire afterEach batch of points ages out this many days after it was earned, counted from the earn itself.
Every balance expires onEvery balance in the program ends on one fixed date, for a program that runs to a deadline.

Leave both empty and points never expire. Set both and the earlier one bites. One Save expiry button writes both fields. Expiry is recorded as a debit on the member's activity feed rather than a silent rewrite, so the member can always see where the points went.

The second setting is the one to reach for when points are really tickets for a season or a campaign: everybody's balance ends on the same day, whenever they earned it.

Reminders

Warn this many days before, under the two expiry warnings in Member emails, sets one window for the whole program, and it covers both a reward about to lapse and a points balance about to age out. Leave it empty and no warning goes out. The field is only shown while at least one of the two warning emails is on. Ridgeline uses 14.

Who joins, and how

Joining on the settings page has two options:

  • Customers join the program themselves. Nobody is enrolled until they ask, from the widget on your storefront.
  • Enroll customers on their first rewarded activity. The first time a customer does something the program rewards, they are enrolled and the reward lands.

The second option fills a program much faster, and it enrolls people who never asked. The welcome email is treated as marketing for exactly that reason, so a customer who opted out of marketing email never gets it. See Email templates for the wording and the switches.

Rules

A rule is one sentence: when a customer does this, give them that, subject to some limits. Rules are what fill every section of the program except tiers.

Rules in the sidebar lists all of them: earning, spending and offers together, because spending points is just a rule whose trigger happens to be Spends points, and an offer is just a rule with a window on it. The list is sorted by what a rule gives, so points rules sit together, then coupons, then gift cards and free shipping. Search it, filter it, and save a filter as a quick filter like any other list.

New rule opens the rule editor. Above Trigger, Reward and Limits and availability sit the two things every rule has: its Name and its Group.

Groups

A rule's group is the section of the widget members find it in, and there are three:

GroupWhat sits there
Ways to earnEverything a member earns from, from joining to buying to birthdays.
Redeem pointsRules whose trigger is Spends points, which members act on.
OffersLimited-time promotions and campaigns, in their own widget section.

Only Offers is a real choice. Whether a rule earns or redeems follows from its trigger, so the group picker offers Offers and whichever of the other two the trigger implies. Change a rule's trigger to Spends points and it moves from Ways to earn to Redeem points on its own.

Group is one of the filter bar's dropdowns, so an offers-only view is a filter you save as a quick filter rather than a screen of its own. Rows in the offers group are badged Offers; the other two read off the Action column, so they are not badged.

Triggers

TriggerFires when
Places an orderAn order comes in. It can scale with the amount spent, and can be limited to certain products.
Joins the programA customer enrolls. You can count every sign-up, direct ones only, or referred ones only.
Visits the storeThe widget reports a visit. You set how many times per day, week or month it can pay out.
Follows on social mediaThe customer follows you on Instagram, Facebook, X or TikTok.
Subscribes to the newsletterThe customer signs up to your list.
Has a birthdayOnce a year, either on the day or at the start of the birthday month.
Refers a friendA referral converts. You can require several referrals, a minimum order size, or a deadline.
Fills a stamp cardA card reaches a given number of stamps. See Stamp cards.
Spends pointsThe member chooses to spend points on this reward. This is what makes a rule claimable.
Does something your own systems reportYour server posts an event to Cascade. See Loyalty events API.

"Places an order" measures against the order subtotal by default, which excludes shipping and tax. Switch Measured against to the order total if you would rather reward the whole amount.

Birthdays are collected as a month and day only. Cascade never stores a year, because a birthday reward needs the day and not the age. A member born on February 29 is awarded on February 28 in years that have no February 29.

Rewards

RewardWhat the member gets
PointsA credit to their balance, shown in your program's own words.
Coupon for a fixed amountA code worth a set amount, optionally limited to certain products and to orders above a minimum.
Coupon for a percentage offA code worth a percentage, with the same product and minimum controls.
Free shippingShipping waived on the next order, optionally capped at an amount.
Gift cardA gift card loaded with a value. Needs Shopify Plus on a connected store.

A points reward needs the program to have named points, and Cascade refuses to save one otherwise. A product filter has to name products or tags that actually exist, so a rule can never be saved in a state where it quietly never matches.

Ridgeline's earning rules are three: 100 beans for joining, 1 bean for every dollar of subtotal, and 250 beans on a birthday.

Limits and availability

FieldWhat it does
Times one customer can earn itA per-customer cap. Empty means unlimited.
Times it can be earned in totalA cap across everybody, with the remainder shown on the rule's row. Empty means unlimited.
Starts / EndsThe availability window. Empty on either side means open.
Tiers it applies toRestricts the rule to members of certain tiers. Empty means every member qualifies.

Raising or lowering the total cap moves the remaining count by the same amount, so awards already made stay spent.

A rule has no on/off switch. It is live when it is inside its availability window. That is why the row menu's Deactivate simply sets Ends to now, and Activate clears it again. Rows are badged Running, Scheduled or Not running so you can see which is which at a glance.

Rules are edited in place rather than versioned. What keeps old awards readable is a snapshot: every award records the rule's name, trigger and reward as they were at the time, so an entry from last spring still describes last spring's rule. Every create, update and delete is also written to the audit trail.

Deleting a rule keeps everything it already handed out and only stops it firing again. If you might want it back, deactivate it instead.

Tiers

Tiers are levels members climb by earning. Add them from the Tiers section of the Overview page.

  • How the tier is reached is either By points earned or Assigned by hand only.
  • Points to earn and Counted over set the threshold. The window is All time or Last 12 months.
  • Points multiplier multiplies points earned from rules, so 1.5 is fifty percent more. It never applies to manual adjustments, imports, or rewards that are not points.
  • Color badges the tier. Members' rule rows are tinted with it, so pick something that reads as your brand rather than as a warning.

Members are promoted as soon as they qualify. Demotion only happens on a rolling window, and only when a member's twelve-month review date passes, so nobody drops a tier the week after a big order. You can pin an individual customer to a tier from their customer page, and Resume automatic placement hands them back to the calculation.

Archiving a tier stops it taking new members and leaves the ones it has where they are.

Tier-scoped offers, the interesting part

Because Tiers it applies to is on every rule, any reward in the program can be made exclusive. This is the part that is hard to do with points alone, and it is worth building your program around.

Ridgeline's launch week is one rule in the Offers group: trigger Places an order, reward a 15% coupon that lasts 14 days, Tiers it applies to set to Gold, one per customer, 200 in total, and a Starts and Ends covering the week. Gold members see it in their widget. Everybody else does not see it at all, because a section only ever sends a member the rules they qualify for.

Offers

An offer is a rule in the Offers group, so it is written and listed on the Rules page with everything else. The list carries what each one takes, what it gives, how many are left and how many have been issued, and the row menu's Activity opens the ledger narrowed to that one rule.

To run a campaign, filter the Rules page by Group is Offers and save it as a quick filter. The Overview page keeps its own Offers section, read-only, and its Manage offers button lands on the Rules page already filtered that way.

Stamp cards

Stamp cards track a habit rather than a balance: ten coffees, then the eleventh is free. They have their own guide, including how a card completes and how to stamp one from your own systems. See Stamp cards.

Spending points

A rule whose trigger is Spends points is the only kind a member can act on themselves, and it is what members see under Redeem points in the widget. You write it on the same Rules page as everything else.

Set the price in the "it costs" field, which is labeled with your program's own points name, so Ridgeline's reads "Beans it costs". A reward here is a coupon, a gift card or free shipping: points cannot be bought with points, and Cascade refuses to save a rule that tries. Switching an existing rule's trigger to Spends points moves its reward off points for you.

Turn on Members choose how much to spend and the member can spend a multiple of the price, with the reward scaling to match. That works for fixed-amount coupons and gift cards, which have a face value to multiply. Percentage discounts and free shipping have no face value, so they are claimed one at a time.

Claim and redeem are different steps

Cascade uses these two words precisely, and so should your own copy:

  • Claim means the member spent their points and now holds a reward with a code. The reward is pending.
  • Redeem means the code was actually used at checkout.

A claim is one transaction: the reward is issued and the points are debited together, or neither happens. A member who cannot afford it is told so and nothing moves.

A pending reward can be canceled by the member or revoked by you, and either way the points come back exactly once. Once a code has been used, neither is possible, and the way to correct it is a manual points adjustment on the activity screen.

Rewards and when they lapse

Every reward except points can carry its own expiry, set in the rule editor under The reward expires:

  • On the program's schedule uses Rewards expire after from the Rewards section of the settings page. It is counted in days from the moment each reward is issued, and an empty field means rewards stay usable until they are used.
  • Never keeps it redeemable until it is used or withdrawn.
  • A set number of days after it is issued counts whole days from each member's own issuance.
  • On one date, for everybody ends every reward from that rule at the same moment.

The date is stamped when the reward is issued and never recalculated, so editing a rule never moves a date already on a member's reward. Days are whole 24-hour spans, which is why a daylight saving change cannot shift an expiry date.

Every reward the program issues shows up on Activity as a Reward entry. Open one and its Reward link takes you to the reward itself: its code, its status, where it came from, and the buttons to mark it used or withdraw it. To hand one out by hand, open the customer, find the program in the Loyalty block on their page and click Reward. The action lives with the member it applies to, so there is no member to pick and no way to give a reward to someone who has left the program.

On a connected Shopify store, Cascade creates a real discount at the moment the reward is issued, so the code works at checkout without anything else from you. Where that is not possible the reward falls back to being honored by hand and says why. Gift cards need Shopify Plus, and Cascade refuses to save a gift card rule on a store that cannot issue them rather than handing a member a code nothing accepts.

What members see

Members reach the program on your storefront, through the loyalty embed or a floating launcher. See Storefront widgets.

The Sections card on the settings page controls which parts members see: Ways to earn (the standing rules members earn from, like a welcome bonus or a birthday gift), Offers (limited-time promotions, managed on the Rules page) and Stamp cards (punch cards members fill by ordering or spending). Every rule is written on one Rules page, and its group decides which of these sections it lands in, so the Ways to earn switch covers the rules grouped there and the Offers switch covers the ones grouped as offers. Tiers appear whenever the program has any, and Redeem points appears once points are named. A section that is switched off is not merely hidden, its rules are never sent to the browser at all.

The loyalty page

Every storefront shows the program, and the Loyalty page section lists each of your sites with one URL field. Leave it empty and the links in your loyalty emails point at the site itself, on the assumption the launcher is there. Point it at a dedicated rewards page and they go there instead. Either way the link carries #cascade-rewards, which opens the launcher or scrolls to the embed rather than dropping the shopper on a page with nothing obvious on it.

Activity

Activity is the program's ledger, and it covers six kinds of entry:

KindWhat it records
PointsA balance moving, with the amount and the balance after it.
RewardA reward being issued.
StampsStamps landing on a card.
JoinA member enrolling, and how they arrived.
Tier changeA promotion, a demotion, or a hand-made move, with both names.
ReferralA referral being recorded, and later completed.

Only points entries move a balance, and only points entries can be revoked. The other four carry the story rather than a number, which is what makes the feed readable as a member's history rather than as an accounting table.

The columns are Type, Customer, Activity, Rule and Date. Each Type badge carries its own colored icon, so a kind is recognizable before you read the word. Activity says what happened: a points entry is the signed amount in the currency your program uses, followed by the balance it left behind, so it reads "+300 stars (balance after: 500 stars)" rather than a bare number; a tier change reads "Bronze → Silver"; a reward reads "Claimed Free shipping" when a member spent points on it and "Issued Coupon" when a rule or you handed it over. Rule links to the rule that produced the entry, and the filter button on it narrows the feed to that one rule; the Rule filter in the bar does the same for several rules at once.

Joins and referrals are filtered out when the page opens. They are the two kinds that crowd out everything else, so the Type filter arrives with the other four selected. It is an ordinary filter pill: open it to put Join and Referral back, or clear it to see everything. Clearing it sticks, and a link that carries its own type filter uses that instead.

Balance after is not a column of its own. It sits beside each points entry's amount, on the entry's detail pane, in the activity export and in the API, which is where it belongs for reconciling a balance on a given date. The assistant can read it too, so you can ask it what a member's balance was on a date rather than counting back through the feed.

Tier changes are the tier history: a membership only stores the current tier, so these rows are the record of how a member got there. Names are copied onto the row, so the feed still reads after a tier is renamed or archived.

From this screen you can also add a manual adjustment, revoke a points entry, expire points in bulk against a filter, and export either the members or the whole ledger. The activity export is the file to hand to an accountant reconciling the points liability.

The feed starts from the day the program was built. There is no backfill, so memberships and referrals that predate it have no entries.

Emails

Six emails go to members, and each has its own switch in the Member emails section of Settings, Loyalty. The switches belong to the program, so an organization running two programs can keep one quieter than the other.

SwitchWhen it sendsDefault
Welcome a new memberOnce, the first time a customer joins a program. Someone who leaves and rejoins is not welcomed again.On
Say when points are earnedOne email per order or visit, covering everything it earned however many rules paid out. It is the noisiest of the six, which is why it starts off.Off
Hand over a new rewardWhen a rule or a manual issue gives a member a reward, with the code they can use at checkout.On
Confirm a claimed rewardWhen a member spends points on a reward. It carries the code they just bought, so it goes out even to customers who have opted out of marketing email.On
Warn before a reward expiresOnly for programs that set a warning window (see Reminders), and only once per reward.On
Warn before points expireOnly for programs that set a warning window, and only once for each batch of points.On

The wording is yours to edit under Settings, Email templates. Next to each switch is a template picker, offering only templates of that email's type. Leave it on Oldest template of this type and Cascade uses the oldest template of the type you have, or its own packaged copy if you have none; pick one and that template is used for this program. A template a program is using cannot be deleted until the email is pointed elsewhere. Every amount arrives already written in your program's words, so {{loyalty.points}} renders as "1,200 beans" and you should not add a unit after it. See Email templates.

A member who opted out of marketing email still gets the code for a reward they just claimed, because they paid for it. Everything else stops.

Time zone

Everything Cascade decides on a clock uses your organization's Time zone, under Settings, General: which day a birthday lands on, when a visit allowance resets, and when a sweep runs. There is no second policy, so a program never expires points on one clock and celebrates birthdays on another.

Set it before you launch. Changing it moves every future birthday, allowance and expiry onto the new clock, and leaves anything already sent alone.

Pausing and deleting

Pause in the settings page header freezes the program without losing anything. Nobody earns, spends or joins, and members keep their balances, rewards and history and can still see all of it. The widget keeps rendering every section and says the program will pick up where it left off. The two expiry warnings still go out, because a coupon does not stop running out of time just because you paused the program. This is the difference between pause and draft: paused means frozen and visible, draft means never seen. While a program is paused the Overview page shows a banner saying so, with a link back to the settings page, where Republish starts it up again.

There is no delete button. Deleting a program takes its members, rules, tiers, stamp cards, balances and issued rewards with it, permanently, so it is an API-only action: DELETE /loyalty-programs/{id} asks for a reason and records it in your audit trail. If you only want the program to stop running, pause it.

Where to go next