Overview
Coupon assignment lets you attach per-user values (such as coupon codes or offer metadata) after defining an audience and before sending data to your destinations.
This is useful when:
- you need to assign unique values per user (e.g. single-use coupons)
- values come from a shared dataset (e.g. a coupon table)
- you shouldn't assign a coupon to a user that isn't in your campaign
How it works
Coupon assignment happens inside an audience-based Journey. For each user, Hightouch assigns a value from a dataset and makes it available for downstream syncs.
Example
- Parent model: 10,000 users
- Campaign A audience: 500 users
- Coupon pool: 500+ unique codes
Step 1: Create a coupon pool
Create a table in your warehouse that contains your coupon data.
Include:
- a coupon value column (e.g.
coupon_code) - optional metadata (e.g.
expiration_date) - a column filter on if you have cross-campaign coupons consolidated in one model (e.g.
campaign_id)
You can set it up in your Customer Studio schema with a coupons tag.

Step 2: Create an audience and Journey
Build an audience for your campaign (e.g. Campaign A) and create a Journey with:
User is in Audience: Campaign A
Only users in this audience will receive a coupon.

Event based journeys are not supported.
Step 3: Add a coupon assignment node
In the Assign coupon node:
- select your coupon dataset
- apply filters (e.g.
campaign_id = 10_dollars_off) - choose an "assignment" columns (e.g.
coupon_code). This is the column that will be unique (1:1) to a user. - choose any additional columns to assign (e.g.
expiration_date,coupon_threshold). These do not need to be unique to the user. - define variable names

For each user:
- Reuse existing assignment (if present)
- Assign a new coupon (if not)
- Store the result in:
- Journey variables (for syncs)
- Journey logs
Assignments are deterministic per coupon journey node: the same user will receive the same values when entering the same journey node.
Step 4: Sync assigned values
Use the assigned variables in a Sync node (e.g. to Braze or Salesforce). If you do not see the assigned variables in the Sync node, make sure to save the Journey first.

Tracking
Assignments are recorded in Journey logs and can be used to:
- map coupons to users
- join with downstream usage or redemption data
Behavior and constraints
- Inventory required: If coupons < audience size, the Journey fails before sending.
- Consistent assignment: Even if the underlying coupon pool changes, what coupon and coupon metadata a user is assigned stays the same if they visit the same coupon assignment node again. If you would like the user to be assigned a different value, use a different coupon assignment node.