> ## Documentation Index
> Fetch the complete documentation index at: https://dub.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Sale-based rewards

> Learn how to reward partners with a revenue share or flat fee for every sale they drive

> [!TIP]
>
> Sale rewards are available on [Business plans and
> above](https://dub.co/pricing).

A **sale-based reward** (pay-per-sale) pays partners when a customer they referred makes a purchase. It's the most common reward type on Dub, and the one most partners expect: they earn either a percentage of the sale (revenue share) or a fixed fee per sale.

Unlike [click](/help/article/click-rewards) and [lead](/help/article/lead-rewards) rewards, sale rewards can be **recurring**, so a partner keeps earning on every renewal for as long as you choose.

## How sale rewards work

Sale rewards are triggered by **sale events** on Dub. A sale event is created whenever:

* You track a sale via the [`/track/sale`](/docs/api-reference/track/sale) endpoint or one of our [SDKs](/docs/sdks/overview)
* A payment or invoice is paid via your [Stripe integration](/docs/integrations/stripe)
* A lead [submitted by a partner](/help/article/submitted-leads) reaches **Closed won**
* A deal is marked as `closed won` in HubSpot via your [HubSpot integration](/docs/integrations/hubspot#when-a-deal-is-closed-sale-event)

Each sale event creates a [commission](/help/article/partner-commissions) for the partner whose link the customer came from. Dub applies the sale reward in this order:

1. a [link-level](/help/article/partner-rewards#link-level-rewards) reward if one is set,
2. otherwise a [partner-level](/help/article/partner-rewards#partner-level-rewards) reward,
3. otherwise the partner's [group](/help/article/partner-groups) reward.

The commission amount is determined by that reward, plus any [conditions](#sale-reward-conditions) that match the sale.

If a sale is later refunded or disputed, Dub automatically creates a [clawback](/help/article/partner-commissions#creating-a-clawback) for the associated commission. See [handling refunds](/docs/conversions/sales/refunds).

## Creating a sale reward

In your [group rewards](https://app.dub.co/program/groups/default/rewards) tab, click **Create** next to the **Sale reward** type.

![Group rewards](https://mintcdn.com/dub/X4WOJ2-QM5IGKP1O/images/dub-partners/create-reward-sale.png?fit=max\&auto=format\&n=X4WOJ2-QM5IGKP1O\&q=85\&s=52cfdedd1e86af6dd2ec0ea235e43bcd)

When the reward builder is open, set your amount per sale, and optionally set your [sale reward conditions](#sale-reward-conditions).

![Sale reward](https://mintcdn.com/dub/X4WOJ2-QM5IGKP1O/images/dub-partners/create-reward-sale-default.png?fit=max\&auto=format\&n=X4WOJ2-QM5IGKP1O\&q=85\&s=5dc5bdab256954e12bd9761b0cb55815)

Once you've configured the reward, you'll see a [reward preview](/help/article/partner-rewards#reward-preview) and [quality score](/help/article/partner-rewards#reward-quality), and be asked to [confirm](/help/article/partner-rewards#confirm-reward-creation) before it goes live.

Dub generates the reward description partners see automatically, but you can customize how it's shown to partners by using the [customize the reward description](/help/article/partner-rewards#custom-reward-descriptions) by clicking the pencil button next to the reward.

You can also describe the reward in plain English using the [AI reward builder](/help/article/partner-rewards#using-the-ai-reward-builder), for example:

* "30% recurring for 12 months"
* "50% lifetime for customers who joined before Jan 2026, else \$100 one time"
* "\$500 if productId = 'prod\_xxx' (Pro Plan), else \$100 one time"

### Amount

Sale rewards support two payout models:

| Model | Description | Example |
| - | - | - |
| **Percentage** | Partners receive a share of each sale's value (revenue share) | 30% of sale value |
| **Flat** | Partners receive a fixed fee for each sale, regardless of its size | \$50 per sale |

Percentage rewards are calculated on the sale amount Dub receives. For Stripe, that's the invoice or checkout total after any discounts, and for `/track/sale` it's the `amount` you pass.

### Duration

The duration controls how long a partner keeps earning on a given customer after the first sale:

| Duration | Description |
| - | - |
| **One time** | The partner earns on the customer's first sale only. |
| **1 to 24 months** | The partner earns on every sale from that customer within the window (presets: 1, 3, 6, 12, 24 months, or a custom amount of months. |
| **Lifetime** | The partner earns on every sale from that customer, forever. |

## Sale reward conditions

> [!TIP]
>
> Customizing reward conditions is only available on the [Advanced plan and
> above](https://dub.co/pricing).

Conditions let you pay a different amount when a sale meets certain criteria. Click **Add condition** in the reward builder, and set the reward amount and duration for each condition block.

![Sale reward with conditions](https://mintcdn.com/dub/X4WOJ2-QM5IGKP1O/images/dub-partners/create-reward-sale-condition.png?fit=max\&auto=format\&n=X4WOJ2-QM5IGKP1O\&q=85\&s=8a8148d63007b92fcc79eac65b17b2be)

### Customer attributes

| Attribute | Description |
| - | - |
| **Country** | The customer's country, based on the location of the click that led to the signup. |
| **Source** | How the sale was created: <ul><li>`tracked sale` - The sale was tracked via the [`/track/sale`](/docs/api-reference/track/sale) endpoint, an SDK, or the [Stripe integration](/docs/integrations/stripe).</li><li>`closed won deal`: A lead [submitted by a partner](/help/article/submitted-leads) reached **Closed won**.</li><li>`HubSpot closed won deal`: A deal was marked as closed won in HubSpot via the [HubSpot integration](/docs/integrations/hubspot#when-a-deal-is-closed-sale-event).</li></ul> |
| **Subscription duration** | How many months the customer has been subscribed, counted from their first sale. |
| **Subscription start date** | The date of the customer's first sale. |
| **Signup date** | The date the customer was created on Dub (usually their lead event). |

### Partner attributes

| Attribute | Description |
| - | - |
| **Country** | The country on the partner's profile. |
| **Total clicks** | Total clicks the partner has driven. |
| **Total leads** | Total leads the partner has generated. |
| **Total conversions** | Total sale conversions the partner has generated. |
| **Total revenue** | Total sale amount the partner has driven (in USD). |
| **Total commissions** | Total commissions the partner has earned in your program (in USD). |

### Sale attributes

| Attribute | Description |
| - | - |
| **Product ID** | The product ID the sale is for. Use `Shown as` to modify how the reward shows to your partners. |
| **Amount** | The sale amount in USD. |
| **Type** | `new` for the customer's first sale, `recurring` for every sale after that. |
| **Metadata** | Any custom field attached to the sale via the `metadata`, or pulled from Stripe checkout session or invoice metadata. |

Learn more about [metadata conditions](/help/article/partner-rewards#metadata-conditions).

## Sale reward examples

### First-sale bonus

Pay a big rate on the first sale to reward customer acquisition, then a standard rate on renewals:

| Condition | Reward | Description |
| - | - | - |
| If `Sale` `Type` `is` `new` | Then pay a `Percentage` of `80%` per sale | First-sale bonus for new customers |
| If `Sale` `Type` `is` `recurring` | Then pay a `Percentage` of `30%` per sale | Standard reward for recurring sales |

![First-sale bonus condition example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/reward-example-firstsale-selected.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=bd1d69d582c7e38973acb5a8cdb6585b)

### Staggered reward durations

Tailor your reward amount by the customer's subscription duration, subscription start date, or signup date.

In this example, we're offering a 25% reward for the first 12 months and a 10% reward for all other sales:

![Staggered rewards example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/staggered-rewards-03.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=bf0943e6c450d15e42d979a257e38bdf)

There are 3 different conditions for staggered reward durations:

| Condition type | Description | Example |
| - | - | - |
| **Customer's subscription duration** | How long the customer has been subscribed for | 25% for the first 12 months, 10% for the rest of the customer's lifetime |
| **Customer's subscription start date** | The date the customer started their subscription | 25% if subscribed before Jan 1, 2026, else 10% |
| **Customer's signup date** | The date the customer signed up for your product | 25% if signed up before Jan 1, 2026, else 10% |

### Geo-specific

Tailor your reward amount by customer country. In this example, we're rewarding partners with a higher percentage for conversions from Canada and the United States:

![Global Boost condition example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/create-reward-geo-condition.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=13a1e3e4dd37b5d7c5abedb50f9674b7)

| Condition | Reward | Description |
| - | - | - |
| If `Customer` `Country` `is one of` `Canada, United States` | Then pay a `Percentage` of `40%` per sale | Higher reward for US and Canadian customers |
| If `Customer` `Country` `is not one of` `Canada, United States` | Then pay a `Percentage` of `30%` per sale | Lower reward for customers outside the US and Canada |

### Product spotlight

Tailor your reward amount by product. In this example, we're rewarding more when the sale is for the Gold Plan:

![Product Spotlight condition example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/condition-example-02.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=338abe9110707e82a59adb239189be72)

| Condition | Reward | Description |
| - | - | - |
| If `Sale` `Product ID` `is` `prod_xxx` | Then pay a `Percentage` of `40%` per sale | Higher reward for `prod_xxx` sales |
| If `Sale` `Product ID` `is not` `prod_xxx` | Then pay a `Percentage` of `10%` per sale | Lower reward for non-`prod_xxx` sales |

> [!TIP]
>
> You can also set what the partner sees as the product name by adding a `Shown
>     as` field to the reward.
>
> For example, if you want to show the product as "Gold Plan" instead of the
> actual product ID, you can set the `Shown as` to `Gold Plan`.

> [!NOTE]
>
> Where `Your product ID` is listed, you'll enter your product ID (the
> screenshot uses an example product ID)
>
> If you're manually tracking a sale event via our `/track/sale` endpoint, you
> can pass along the product ID via the [metadata
> prop](/docs/api-reference/track/sale#body-metadata-one-of-0)
> (e.g. `metadata.productId = "prod_xxx"`).
>
> If you're using our [Stripe
> integration](/docs/integrations/stripe), the product ID will be the Stripe
> product ID that the subscription is for (starts with `prod_xxx`). If a Stripe invoice contains multiple line
> items (e.g. a base subscription plus an add-on), Dub
> calculate the commission for each line item using the matching reward
> rate. [See full example here](/docs/integrations/stripe#multiple-line-items-per-invoice).

### Sale amount modifiers

For creating tiered rewards based on the sale amount. In this example, we're giving our partners a higher reward if the sale amount is over a specific dollar amount:

![The Climb condition example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/condition-example-04.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=29f7a6649e90e554114272870190e6b4)

| Condition | Reward | Description |
| - | - | - |
| If `Sale` `Amount` `is greater than or equal to` `$100` | Then pay a `Percentage` of `60%` per sale | Higher reward for sales over \$100 |
| If `Sale` `Amount` `is less than or equal to` `$100` | Then pay a `Percentage` of `25%` per sale | Lower reward for sales under \$100 |

### Partner performance tiers

Tailor your reward amount by partner performance. In this example, we offer a 50% base reward and increase it to 60% based on how many conversions the partner has:

![The Climb condition example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/condition-example-03.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=c7b3b46281b7b7d8ef763debcc13a169)

| Condition | Reward | Description |
| - | - | - |
| If `Partner` `Total conversions` `is greater than or equal to` `200` | Then pay a `Percentage` of `60%` per sale | Higher reward for partners with more than 200 conversions |
| If `Partner` `Total revenue` `is greater than or equal to` `$10,000` | Then pay a `Percentage` of `60%` per sale | Higher reward for partners with more than \$10K in referral revenue |
| If `Partner` `Total commissions` `is greater than or equal to` `$1,000` | Then pay a `Percentage` of `60%` per sale | Higher reward for partners who have earned more than \$1K in commissions |

> [!TIP]
>
> Want to move partners to a different partner group based on their performance
> instead? [Learn more about group move
> rules](/help/article/partner-groups#group-move-rules).

### Annual vs. monthly billing

Tailor your reward amount based on a [metadata condition](/help/article/partner-rewards#metadata-conditions). In this example, we're passing a `billingCycle` field on each sale (via the `metadata` prop on [`/track/sale`](/docs/api-reference/track/sale)) and rewarding partners more for driving annual plans over monthly plans:

| Condition | Reward | Description |
| - | - | - |
| If `Sale` `billingCycle` `is` `annual` | Then pay a `Percentage` of `40%` per sale | Higher reward for annual plans |
| If `Sale` `billingCycle` `is` `monthly` | Then pay a `Percentage` of `20%` per sale | Standard reward for monthly plans |

![Reward builder metadata sale example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/reward-builder-metadata-sale.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=8b28ae12caad434ece729642f9ea71ca)

### New vs. recurring sales

Tailor your reward amount based on whether the sale is the customer's first sale or a recurring sale. During reward creation, select `Sale` as the condition type and then choose `Type` as the condition field. This will allow you to differentiate between new and recurring sales.

![First-sale bonus condition example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/reward-example-firstsale.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=1415ac57d900637a8a1e3401ba81030b)

In this example, we're rewarding partners with a 80% reward for the first sale while keeping the standard recurring commission for all other sales:

![First-sale bonus selected condition example](https://mintcdn.com/dub/qQjdPT1OUxFBHJlR/images/dub-partners/reward-example-firstsale-selected.png?fit=max\&auto=format\&n=qQjdPT1OUxFBHJlR\&q=85\&s=bd1d69d582c7e38973acb5a8cdb6585b)

This is especially useful for subscription-based products, where you may want to offer a higher reward for the first sale to incentivize partners to acquire new customers, while offering a lower reward for recurring sales, while combining with other conditions.

| Condition | Reward | Description |
| - | - | - |
| If `Sale` `Type` `is` `new` | Then pay a `Percentage` of `80%` per sale | First-sale bonus for new customers |
| If `Sale` `Type` `is` `recurring` | Then pay a `Percentage` of `30%` per sale | Standard reward for recurring sales |

## Updating a sale reward

When you change a group's sale reward, historical commissions aren't changed. The new configuration applies to future sales – including renewals from customers the partner referred before the change – only when no [link-level](/help/article/partner-rewards#link-level-rewards) or [partner-level](/help/article/partner-rewards#partner-level-rewards) override is configured. If you switch a group from one-time to recurring, previously referred customers' renewals become eligible for commission again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.