Skip to content

Rewards

Rewards add free gift products to subscriber orders. There are two kinds, and they behave quite differently:

Kind When it fires Customer picks the gift?
At checkout The first order only On the storefront, before subscribing
After Nth order A repeat order you choose, e.g. the 3rd Yes, from the customer portal

A checkout reward is a signup incentive. An Nth order reward is a loyalty perk the customer works towards, and it is the one that appears in the portal.

Navigate to Retention → Loyalty & Rewards in the Gro dashboard and create a reward.

Give the reward a name and optional description. Both are internal, for your team. The Active switch controls whether the reward runs at all.

  • Free gift: a product added to the order, free of charge.
  • Store credit: an amount of store credit, added once the order is placed. It comes off their next order automatically.

Store credit rewards are always given on a set order number, never at checkout, and only show in the customer portal.

Choose when the reward is given:

  • At Checkout puts the gift on the first order.
  • After Nth Order puts the gift on a repeat order. Set the order number, so 3 means the gift lands on the customer’s third order. A store credit reward can also use order 1, which works as a welcome credit.

Restrict the reward to subscriptions containing specific products. Leave it empty and every subscription qualifies.

This is what lets you run different rewards for different customers. A reward eligible on your coffee product only reaches coffee subscribers, so you can run a tumbler gift for them and something else entirely for tea.

Eligibility is checked against what is on the subscription right now, not what was on it when they signed up. See When Things Change.

Choose the gift products, from collections, from individual products, or both. Products need to be active in Shopify and have at least one active variant.

If you pick more than one gift, the customer gets to choose between them. Pick one and everyone receives that gift. Store credit rewards skip this step.

Where the reward is advertised on your storefront: the product page, the Build a Box wizard, or the customer portal.

The heading and subheading shown to customers on the storefront banner and above the gift choices in the portal.

  1. The customer subscribes through Shopify checkout.
  2. Gro adds the gift to the order afterwards, using Shopify Order Edit.
  3. The gift is added at a 100% discount, so it is free.

The gift is never added to the subscription contract, so it does not repeat.

  1. After each order, Gro checks whether the customer’s next order is a reward order.
  2. If it is, the gift is queued as a one off item at no charge.
  3. When billing runs, the gift is added to the subscription contract and appears on the order.
  4. After billing, the gift is removed from the contract so it does not repeat.

Because the gift is a real item on the order at zero cost, it never changes the order total.

The Loyalty rewards card on a subscription. The punch card shows the orders placed so far, with gift icons on reward orders, and the next reward reads A$25.00 store credit, on next order

  1. Once the reward order is placed, Gro adds the credit to the customer’s balance.
  2. It comes off their next order automatically, like any store credit.
  3. It’s paid once, even if Shopify sends the order to Gro twice.

Give a gift and a store credit reward the same order number and the customer picks one: the gift, or the credit. They can change their mind until the order is placed.

Nth order rewards appear as a Loyalty rewards card on the subscription page.

With more than one reward configured, the card shows a row of punches, one per order, like a coffee card. Filled punches are orders already placed, and a gift icon marks the orders that unlock something. Configure a single reward and the punch row is dropped, since there is no progress to show.

Only the next gift is named. Later ones keep their slot on the card, so the customer knows a gift is coming, but the product stays hidden. This is done on the server, so the later gifts are not sent to the browser at all.

If a reward offers more than one gift, a Change button lets the customer pick. They can keep changing until the gift is added to their contract for billing, at which point it is locked.

If the customer never chooses, Gro assigns one so the order is never giftless.

  • Product page and Build a Box wizard: a banner showing the gift image and name, plus when it arrives. A checkout reward reads “With your first order” and an Nth order reward reads “On your 3rd order”, so a gift several orders away is never mistaken for one arriving immediately.
  • Cart: line item properties recording the chosen reward.

Three days before a reward order, Gro fires one of two events you can build flows on:

Event Fires when
subscription_upcoming_gift A gift is coming and it is settled
subscription_upcoming_gift_choice_needed A gift is coming and the customer can still pick which

Neither sends anything on its own. Build a flow on the event to email or text.

Every subscription event carries the customer’s gifts, not just the two above. Payment reminders, pauses, skips and order confirmations can all mention them.

  • loyalty_reward_upcoming is the next gift still to come.
  • loyalty_reward_timeline is every gift on their schedule, soonest first.

Each gift has its name, the order it lands on, how many orders to go, the product title and image, and whether the customer can choose. Send a test event to see a full sample, built from your own products and rewards.

Unlike the portal, events name every gift, not just the next one. If you want later gifts to stay a surprise, stick to loyalty_reward_upcoming.

The examples below use Klaviyo syntax. In Gro’s own Flow Builder the same fields are available as merge tags.

Tell Them a Gift Is Coming With the Payment Reminder

Section titled “Tell Them a Gift Is Coming With the Payment Reminder”

Add this to your payment reminder template. Customers whose next order carries a gift see it, everyone else sees nothing.

{% if event.loyalty_reward_upcoming.is_next_order %}
<img src="{{ event.loyalty_reward_upcoming.image_url }}" alt="{{ event.loyalty_reward_upcoming.product_title }}" width="120">
Good news! Your next order comes with a free {{ event.loyalty_reward_upcoming.product_title }}.
{% if event.loyalty_reward_upcoming.can_choose %}
Fancy something else? <a href="{{ event.magic_login_link }}">Pick a different gift</a>
{% endif %}
{% endif %}

Build a flow on subscription_upcoming_gift_choice_needed. It only fires when the customer has a choice and has not made one yet. Show the options and send them to the portal to choose.

Your free gift is almost here, and you get to choose it.
{% for gift in event.loyalty_reward_upcoming.options %}
<img src="{{ gift.image_url }}" alt="{{ gift.product_title }}" width="100">
{{ gift.product_title }}
{% endfor %}
<a href="{{ event.magic_login_link }}">Choose my gift</a>
Your order goes out in {{ event.days_until_billing }} days. If you don't pick, we'll send the {{ event.loyalty_reward_upcoming.product_title }}.

Works in any email, and keeps customers motivated between gifts.

{% if event.loyalty_reward_upcoming and not event.loyalty_reward_upcoming.is_next_order %}
Just {{ event.loyalty_reward_upcoming.orders_to_go }} more orders until your free {{ event.loyalty_reward_upcoming.product_title }}!
{% endif %}

Loop over loyalty_reward_timeline for a punch card style list of every gift, marking what they already have and what is next.

{% for gift in event.loyalty_reward_timeline %}
<img src="{{ gift.image_url }}" alt="{{ gift.product_title }}" width="80">
Order {{ gift.order_number }}: {{ gift.product_title }}
{% if gift.status == 'earned' %}
Received
{% elif gift.status == 'next' %}
Coming with your next order
{% else %}
{{ gift.orders_to_go }} orders to go
{% endif %}
{% endfor %}

On a pause or skip confirmation, the next gift is a gentle reason to come back.

{% if event.loyalty_reward_upcoming %}
Don't forget, your free {{ event.loyalty_reward_upcoming.product_title }} is waiting on order {{ event.loyalty_reward_upcoming.order_number }}.
{% endif %}

Reward state is kept in sync automatically. The cases worth knowing:

The customer removes the qualifying product. The reward no longer applies. The chosen gift and the queued item are removed, and if another reward still qualifies, a gift from that one is assigned instead.

The customer swaps their gift. The queued item is replaced with the new choice, as long as billing has not started.

You edit or deactivate a reward. Every affected subscription is swept and brought back in line. Gifts for a reward you switched off are pulled from upcoming orders, and subscriptions that newly qualify have a gift queued. Cosmetic edits such as a rename do not trigger a sweep.

A gift is already on the contract. Once billing has added the gift, it ships. Deactivating the reward at that point does not pull it back.

A Shopify webhook never arrives. Gifts are normally queued off the order webhook. A nightly sweep re-checks every subscription running a reward and queues anything that was missed, so a dropped webhook costs at most a day, not the gift.

To run rewards without showing them to customers, go to Storefront → Customer portal → Design → Layout and take the Loyalty rewards block off the page.

Gifts still get chosen, queued and delivered. Only the card is hidden, so the gift arrives as a surprise. The card is shown by default.