Creating an Offer
How to set up a new branded offer page from scratch.
Before you start
Offers pull their personalized content from Advocate Custom Fields, so make sure you have those set up first. At minimum, you’ll want a custom field that holds each advocate’s unique coupon code (for example, an Hidden field named coupon_code with each advocate’s personal code as the value).
See Custom Advocate Fields for setup.
Creating the offer
- Go to Settings > Offers
- Click New Offer
- Fill in the basics:
- Name — your internal label (admins only)
- Headline — the big banner text the prospect sees (e.g., “$25 Off Your First Build”)
- Description — optional sub-headline below the headline
- Button Text — the text on the shop button (e.g., “Shop Now”)
- Button URL — where the button takes the prospect (see Destination URL below)
- Terms — optional small print at the bottom of the page
- Add at least one Field (the per-advocate content — see Fields below)
- Click Create
Fields
Each field on an offer pulls a value from one of your Advocate Custom Fields. The advocate who shared the offer determines whose value the prospect sees.
Each field has a Display Style that controls how it renders on the page:
| Style | Looks like | Use it for |
|---|---|---|
| Code | Large monospace text with a Copy to clipboard button | Coupon codes, discount codes |
| Prominent | Bold callout, larger than body text | A short tagline or featured detail |
| Text | Normal body paragraph | Notes, thank-you messages, longer copy |
Only one Code field per offer makes sense — that’s the value the destination URL can reference via merge variables (see below). Use Text or Prominent for everything else.
You can override the field’s display label per offer using Label. If blank, the underlying custom field’s label is used.
Drag fields by their handle to reorder.
Destination URL
The Button URL field decides where the Shop button takes the prospect. You can either paste a plain URL or use Liquid merge variables to pull in the advocate’s personalized data:
https://shop.example.com/?coupon={{ coupon_code }}&ref={{ advocate_first_name }}
When a prospect clicks the Shop button, the URL is rendered with that specific advocate’s field values. Available merge variables:
{{ <field_identifier> }}— any of your advocate custom field identifiers (the same identifier you set up under Settings > Advocate Custom Fields){{ advocate_first_name }}— the sharing advocate’s first name{{ advocate_profile_display_name }}— the sharing advocate’s display name{{ community_name }},{{ community_brand_name }}— your community’s names
The merge variable picker on the form has the full list. Liquid syntax errors are caught at save time.
The destination URL is rendered server-side at click time, so the coupon code never appears in the link the prospect copies — they have to click through to get to the shop with the code applied. This both protects the code from being shared outside the conversation and gives you click attribution.
Active vs. Inactive
A new offer is Active by default. You can toggle it to Inactive from the offer detail page — inactive offers are not reachable by prospects (the public page 404s) but stay in your settings list for re-activation later. Advocates’ canned responses that reference an inactive offer’s URL will still send, but the prospect will land on a 404.
Next steps
- Sharing an Offer — how to wire an offer into a canned response so advocates can send it in one click.
- Offer Analytics — see views and clicks per advocate.