> For the complete documentation index, see [llms.txt](https://docs.shopperos.stackline.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.shopperos.stackline.com/growth/growth.md).

# Rewards and campaigns

Rewards campaigns give shoppers money back or a discount. You choose what a shopper must do, what they get, and which products count. You also choose how much budget the campaign can spend. Open **Growth** in the top navigation. Every project has it.

To begin, [turn on rewards](#step-1-turn-on-rewards), then [create a campaign](#step-2-create-a-campaign).

```mermaid
stateDiagram-v2
  [*] --> Draft: Save draft
  Draft --> Scheduled: Publish
  Draft --> Live: Publish
  Scheduled --> Live: start time
  Scheduled --> Ended: Cancel (end)
  Live --> Paused: Pause
  Paused --> Live: Resume
  Live --> OutOfBudget: budget spent
  OutOfBudget --> Live: Resume
  Live --> Ended: End
  Paused --> Ended: End
  OutOfBudget --> Ended: End
  Ended --> Archived: Archive
  OutOfBudget: Out of budget
```

*The life of a campaign. Shoppers can earn it only while it is Live and has budget. Resume brings an out-of-budget campaign back only if budget is left. Archive cannot be undone.*

## Four campaign types

Each type rewards a different shopper action.

<table data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Purchase</strong></td><td>A reward for buying your products.</td></tr><tr><td><strong>New Member</strong></td><td>A reward for joining your club.</td></tr><tr><td><strong>Coupon</strong></td><td>A discount code the shopper enters at checkout. It takes money off the qualifying items or the order.</td></tr><tr><td><strong>Referral</strong></td><td>A reward on the shopper's first order through a personal link or code from an influencer or customer. The referrer earns on each first order.</td></tr></tbody></table>

Open **Growth**. The **Rewards** menu on the left has **Overview** and one entry for each campaign type. **Overview** shows all campaign types together. Each type entry shows the same pages for that type only, for example **Purchase Rewards**.

## Before you start

* Your product catalog is connected for this project. See [Your catalog](/catalog/catalog.md).
* Shoppers sign in with **Brandclub sign-in**, not guest-only checkout. Set this in **Settings → Authentication**.
* For coupon codes at checkout, in-app checkout is on. See [Turn on checkout and payments](/selling-and-checkout/checkout-and-payments.md).

## Step 1: Turn on rewards

Reward offers stay hidden from shoppers until you turn on rewards.

1. Open **Settings → Rewards**.
2. Under **Rewards for shoppers**, turn on **Purchase rewards**.

While rewards are off, the **Before you turn this on** list shows what you need first.

When rewards are on, **Next steps** has two links:

| Step                             | Button            | What you do                                                        |
| -------------------------------- | ----------------- | ------------------------------------------------------------------ |
| **Create reward offers**         | **Growth**        | Create campaigns: pick products, amounts, and qualification rules. |
| **Show offers on product pages** | **Pages Modules** | Turn the buy box and product card reward badges on or off.         |

## Three tabs track your rewards

Each **Rewards** page has three tabs: **Summary**, **Balance**, and **Campaigns**. Click **Add Campaign** to create a campaign.

<figure><img src="https://489913050-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FblcXcPwOUg5osGsERflQ%2Fuploads%2Fgit-blob-c07f8634fe14756a5529a3f69fcad6341693fea6%2Fgrowth-overview.jpg?alt=media" alt="Growth → Rewards Overview"><figcaption><p>Growth → Rewards Overview. The tabs are at the top. Add Campaign is at the top right.</p></figcaption></figure>

{% tabs %}
{% tab title="Summary" %}
Choose the period at the top. **Key Metrics** shows:

| Group         | Metrics                                         |
| ------------- | ----------------------------------------------- |
| **Rewards**   | **Net Rewards**, **Rewards Granted**            |
| **Status**    | **Locked**, **Unlocked**                        |
| **Budget**    | **Remaining Budget**, **Available to Allocate** |
| **Campaigns** | **Live Campaigns**, **All Campaigns**           |

**Customer Transactions** lists each reward shoppers earned in the period: **Customer**, **Campaign**, **Amount**, **Status**, and **Date**. A reward's status is <mark style="color:orange;">Locked</mark>, <mark style="color:green;">Unlocked</mark>, <mark style="color:green;">Redeemed</mark>, or Expired. Click the export icon to download the list.
{% endtab %}

{% tab title="Balance" %}
**App Balance** shows the money in your app's reward pool:

| Figure                    | Meaning                                |
| ------------------------- | -------------------------------------- |
| **Funded**                | Money paid into the pool.              |
| **Pending**               | Money on its way into the pool.        |
| **Available to Allocate** | Money you can still give to campaigns. |
| **Allocated**             | Money held by campaigns.               |

**Campaign Balances** shows each campaign's **Available**, **Reserved**, **Spent**, **Returned**, and **Grants**.

<mark style="color:purple;">Stackline team</mark> Only your Stackline team can add funds to the pool. You allocate the money that is already there to your campaigns.
{% endtab %}

{% tab title="Campaigns" %}
The **Campaigns** tab lists your campaigns by type. Search by name or ID, or filter by status. Each row shows **Campaign**, **Net Rewards**, **Reward Amount**, **Remaining Budget**, **Ends**, and **Status**. Click a campaign name to open it.

| Status                                        | Meaning                                    |
| --------------------------------------------- | ------------------------------------------ |
| <mark style="color:orange;">Draft</mark>      | Not published yet.                         |
| <mark style="color:orange;">Scheduled</mark>  | Published, and waiting for its start time. |
| <mark style="color:green;">Live</mark>        | Shoppers can earn it.                      |
| Paused                                        | Stopped for now.                           |
| <mark style="color:red;">Out of budget</mark> | Its budget is spent.                       |
| Ended                                         | Stopped for good.                          |
| Archived                                      | Ended, and hidden from the active list.    |
| {% endtab %}                                  |                                            |
| {% endtabs %}                                 |                                            |

## Step 2: Create a campaign

A new campaign takes five steps: **Type**, **Settings**, **Products**, **Targets**, and **Confirm**. Go to **Growth → Add Campaign**. Click **Next** to go to the next step. Click **Save draft** at any time.

{% stepper %}
{% step %}

### Choose the type

Choose **Purchase**, **New Member**, **Coupon**, or **Referral**. If you start from a type's page, that type is already chosen.
{% endstep %}

{% step %}

### Set the rules

On **Settings**, set the rules of the reward or discount.

| Field                              | What it does                                                                                          |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------- |
| **Campaign name**                  | The name of the campaign.                                                                             |
| **Discount codes** (Coupon)        | The codes shoppers enter at checkout. Enter one per line. Case and spaces do not matter.              |
| **Amount type**                    | **Fixed amount**, or **Percent of price**. Percent is available only for **Purchase** and **Coupon**. |
| **Amount (USD)** or **Percent**    | The value of the reward or discount.                                                                  |
| **Cap per shopper (USD)**          | Optional. The most a percent reward can give one shopper.                                             |
| **Unlocks** (rewards)              | **Instantly**, or **On the next branded purchase**.                                                   |
| **Expires after (days)** (rewards) | How long an unlocked reward stays spendable.                                                          |
| **Applies to** (Coupon)            | **The qualifying items**, or **The whole order**.                                                     |
| **Minimum quantity of items**      | Optional. The number of items the cart must reach.                                                    |
| **Minimum purchase amount (USD)**  | Optional. The value of the qualifying items the cart must reach.                                      |
| **Configured budget (USD)**        | Optional. The most you can allocate to this campaign. Leave it empty for no cap.                      |
| **Starts** and **Ends**            | When the campaign runs. Leave the end date empty to run until you end it.                             |
| **Time zone**                      | The time zone for the start and end times.                                                            |

You can tick **Show shoppers the end date on the deal** when the campaign has an end date.

For a **Referral** campaign:

* **Buyer reward** is what the new customer earns.
* **Influencer reward** is what the referrer earns on each referred first order: **Fixed amount per order**, or **Percent of the referred order**.
* ShopperOS holds the referrer's reward until the refund window closes. The reward is released if the order is refunded.
  {% endstep %}

{% step %}

### Choose the products

On **Products**, under **Product Coverage**, choose what a shopper must buy:

* **Picked products**: search the catalog, and tick the products.
* **All** *your app* **products**: every product of your brand, including products added later.
* **All merchandise**: anything sold in this app.
  {% endstep %}

{% step %}

### Set the targets

On **Targets**, set who can earn the campaign, where, and how often.

| Setting                             | What it does                                                                                                  |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Targeting Type**                  | **General Population**: all shoppers who engage with your brand.                                              |
| **Channels**                        | **Web**, **Mobile**, or **Agent**. Leave all unticked to run on every channel.                                |
| **Times per customer**              | Optional. How many times one shopper can earn this.                                                           |
| **Max uses (total)**                | Optional. Stops the campaign after this many grants.                                                          |
| **Sign-in required**                | Rewards always need a signed-in shopper. A coupon can also run for guests.                                    |
| **Combines with other rewards**     | Off: a shopper gets the single best reward on an item. On: this reward stacks with others that also allow it. |
| **Combines with product discounts** | Whether this can apply on top of a checkout discount on the same item.                                        |
| {% endstep %}                       |                                                                                                               |

{% step %}

### Confirm and publish

1. On **Confirm**, check the summary.
2. Under **Allocate budget now**, enter an **Amount (USD)** from your pool. Leave it empty to publish without budget.
3. Click **Publish**.
   {% endstep %}
   {% endstepper %}

{% hint style="warning" %}
Shoppers see a campaign only when it has budget. If you publish without budget, allocate it later on the campaign's **Balance** tab.
{% endhint %}

Done. The campaign is <mark style="color:green;">Live</mark>, or <mark style="color:orange;">Scheduled</mark> when its start time is later. Next, [manage the campaign](#manage-a-campaign).

## Manage a campaign

Click a campaign to open **Campaign Details**. The left side shows its name, status, **Details**, and **Budget**.

| Tab                      | What it shows                                                                                                                             |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Summary**              | The campaign's key metrics for the period.                                                                                                |
| **Balance**              | Its budget and spend. Allocate more money under **Allocate from the app pool**.                                                           |
| **Settings**             | Its rules. On a draft, click **Save draft**. On a published campaign, click **Save and publish**. The change applies to shoppers at once. |
| **Targets**              | Its targeting and limits.                                                                                                                 |
| **Products**             | The products it covers.                                                                                                                   |
| **Referrers** (Referral) | The influencers and customers who share the campaign.                                                                                     |
| **History**              | Each published version.                                                                                                                   |

### Change the status

Click the status under the campaign name, and choose an action. Each action asks you to confirm first.

| Action           | What happens                                                                               |
| ---------------- | ------------------------------------------------------------------------------------------ |
| **Pause**        | Shoppers stop seeing it at once. Its budget stays, and earned rewards stay valid.          |
| **Resume**       | Shoppers see it again at once. An out-of-budget campaign goes live only if budget is left. |
| **End**          | Shoppers stop seeing it. Unused budget returns to the app pool. Earned rewards stay valid. |
| **Cancel (end)** | Ends a scheduled campaign before it starts.                                                |
| **Archive**      | Hides an ended campaign from the active list. You cannot undo this.                        |
| **Publish…**     | Opens the draft at its **Confirm** step.                                                   |

### Invite a referrer

On a **Referral** campaign, open **Referrers**.

Each referrer gets a personal link and code.

1. Under **Who**, choose **Influencer / creator (no shop account)** or **Existing customer (by user id)**.
2. Enter the **Display name**. For a customer, enter their **User id**. For an influencer, enter the **Email** where the invite goes.
3. Enter a **Personal code**. It must be unique in this app.
4. Optional: enter a **Stats page password (optional)** of at least 12 characters.
5. Click **Invite**.

Done. The link and code work as soon as the campaign is live and has budget. When shoppers arrive through the link, ShopperOS applies the code for them.

## Sync coupons to Shopify

ShopperOS can copy your coupon codes into **Discounts** in your Shopify store. Klaviyo and other Shopify apps can then use the codes.

```mermaid
flowchart LR
  C[Coupon campaign] -->|Publish, Pause, End or edit| S[Sync coupons]
  S -->|Live or Scheduled| A[Active in Shopify]
  S -->|any other status| I[Inactive in Shopify]
```

*The sync goes one way only. A change that you make to the discount in Shopify does not come back to ShopperOS.*

### Before you start

* Your Shopify store is connected. See [Connect your Shopify store](/selling-and-checkout/shopify-integration.md).
* The ShopperOS app can create discounts in the store. If it cannot, reinstall the Shopify app to grant discount access.

### Turn on the sync

1. Open **Settings → Rewards**.
2. Under **Coupons in Shopify**, turn on **Sync coupons**.

Done. From then on, ShopperOS copies the codes when you publish, pause, end or edit a coupon campaign. A live or scheduled coupon is active in Shopify. A coupon with any other status is inactive in Shopify.

**Your coupons in Shopify** lists each coupon campaign and its state. The **Campaigns** tab and **Campaign Details** show the same state in the **Shopify** field.

| State                                                   | Meaning                                                         |
| ------------------------------------------------------- | --------------------------------------------------------------- |
| <mark style="color:green;">In Shopify Discounts</mark>  | The code is in Shopify. **Open in Shopify** opens the discount. |
| <mark style="color:blue;">Syncing</mark>                | ShopperOS is copying the code now.                              |
| <mark style="color:orange;">Syncs when published</mark> | A draft. It copies when you publish it.                         |
| <mark style="color:orange;">Waiting to sync</mark>      | The copy has not run yet.                                       |
| Inactive in Shopify                                     | The discount is in Shopify, but it is turned off.               |
| <mark style="color:red;">Not synced</mark>              | The coupon cannot copy. The reason shows next to it.            |
| <mark style="color:red;">Off</mark>                     | The sync is off for this project.                               |

{% hint style="warning" %}
A code that a shopper uses in Shopify's own checkout does not use your coupon budget or limits.
{% endhint %}

### What a coupon needs to sync

Shopify discounts have fewer rules than ShopperOS coupons. A coupon copies only when Shopify can apply the same rules. Set the coupon like this:

| Setting                                                       | Set it to                                                                                                                                 |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Discount codes**                                            | At least one code.                                                                                                                        |
| **Amount type**                                               | **Fixed amount**, or **Percent of price** with no **Cap per shopper**.                                                                    |
| **Applies to**                                                | **The qualifying items**, or **The whole order**. **The whole order** copies only when the coupon covers all products or all merchandise. |
| **Product Coverage**                                          | Picked products that are in your Shopify store, all your products, or all merchandise.                                                    |
| **Minimum quantity of items** and **Minimum purchase amount** | One of the two, or neither. Shopify cannot use both.                                                                                      |
| **Channels**                                                  | All unticked. Shopify cannot limit a code to one channel.                                                                                 |
| **Times per customer**                                        | Empty or 1. Shopify can limit a code to one use per customer, not more.                                                                   |
| **Sign-in required**                                          | Off. Shopify cannot require a signed-in shopper.                                                                                          |

The name, start and end dates, **Max uses (total)**, and the **Combines with** settings copy to Shopify too.

## What if…?

<details>

<summary>What if I publish a campaign without budget?</summary>

The campaign is published, but shoppers do not see it. Allocate budget on the campaign's **Balance** tab.

</details>

<details>

<summary>What if I edit a published campaign?</summary>

Click **Save and publish** on its **Settings** tab. The change applies to shoppers at once. **History** keeps each published version.

</details>

<details>

<summary>What if I end a campaign?</summary>

Shoppers stop seeing it. Unused budget returns to the app pool. Rewards that shoppers already earned stay valid.

</details>

<details>

<summary>What if a coupon shows Not synced?</summary>

Read the reason, change the coupon, and click **Save and publish**. See [What a coupon needs to sync](#what-a-coupon-needs-to-sync).

</details>

## Troubleshooting

| Message                                                                                         | What to do                                                                                     |
| ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| **Published v… — live, unfunded**                                                               | Allocate budget on the campaign's **Balance** tab. Shoppers do not see it until then.          |
| **Only … is available to allocate**                                                             | Enter a smaller amount, or ask your Stackline team to add funds.                               |
| **Enter a dollar amount**                                                                       | Enter the amount as a number, for example 500.                                                 |
| **A percent needs a price to apply to, so it is only available on a cart or purchase trigger.** | Use **Fixed amount** for this campaign type.                                                   |
| **Someone else changed this draft**                                                             | Reload the page before you edit again.                                                         |
| **No funded campaigns**                                                                         | Publish a campaign with an allocation, or allocate from a campaign's **Balance** tab.          |
| **Sync coupons** is greyed out                                                                  | Connect your Shopify store, or reinstall the Shopify app to grant discount access.             |
| **Not synced** · **The code already exists in Shopify.**                                        | Remove the discount with that code in Shopify, or use another code.                            |
| **Not synced** · **Shopify cannot …**                                                           | Change the coupon as described in [What a coupon needs to sync](#what-a-coupon-needs-to-sync). |

## Next step

{% content-ref url="/pages/EvzqonjzXxzewODsDb5o" %}
[Settings reference](/reference/settings.md)
{% endcontent-ref %}
