act · campaigns
Offers
What you're asking them to take.
In Campaigns
The offer is what a person gets for saying yes, and what you ask them to do for it. It is the single biggest lever in a campaign: the same segment and sequence with a different offer can go from zero joins to a steady trickle. This page lays out the offer ladder, fifteen offers with their asks and costs, and which offer fits which stage and trigger.
campaign library → segment · who → offer · what they get → arms · who gets what → stop and readout · when it ends
Give before you ask — Cold people get something useful first. The waitlist or the price comes after.
Match the ask to the warmth — A stranger can say yes to opening a link, not to a call. A trial user can say yes to a call.
Change the offer before the queue — When a campaign stalls, the offer is the first thing to swap, not the people.
in industry terms
The offer is the value exchanged for one specific next step.
Sales teams call it the call to action plus the incentive; growth teams call it the hook or the lead magnet. Either way it has two halves that are designed together: what they get, and what they have to do. Writing both down is what lets the experimentation engine test one offer against another.
half 1 — The value · An answer, their brief, three leads, early access, a price. It must be deliverable within a day.
half 2 — The ask · The one thing you need them to do: open a link, comment a word, join the waitlist, book a call, pay.
the fit — Stage × warmth · The product's stage decides which asks are possible; the lead's warmth decides which they'll accept.
how it works
The offer ladder: each yes earns the next, bigger ask.
A cold lead climbs one rung per touch. Jumping rungs is the most common reason a campaign gets replies but no joins.
- Give — answer, no ask
- Small give — brief, 3 leads
- Small ask — waitlist, early access
- Medium ask — beta, setup call
- Big ask — pay, switch each yes is logged against the offer that earned it
| Product stage | Cold lead | Warm lead | Customer |
|---|---|---|---|
| useful answer → free brief → waitlist | early access, founding price | early access for former customers | |
| Launched, no one paying | useful answer → free tool → trial | setup call, first month free | n/a |
| Signups, no payments | free tool → trial | setup call, done-for-you | card update, setup call |
| A few customers | comparison page → trial | founding price ending, migration | win-back, referral ask |
the object
The offer, as a record.
An offer is its own versioned object, so every touch can carry the offer id it made.
| Field | Type | What it holds |
|---|---|---|
offer_id | string | offer.<name>, stable. |
version | integer | Bumped when the value, the ask or the wording of the call to action changes. |
value | text | What they get, in one line, in their words. |
ask | enum | none · open_link · comment · reply · email · book_call · trial · pay · switch |
friction | 1 to 5 | How big the ask is. Rough, but it orders the ladder. |
cost | minutes, tool spend, revenue | What each acceptance costs you. |
deliver_within | hours | How fast the value arrives. Over 24 hours and the warmth is gone. |
fits | stages, triggers | Where it's allowed to be used. |
cta | text | The exact call-to-action line, with any tracked link. |
expires | date or none | For prices and launch offers. |
one record, as data
{
"offer_id": "offer.free-brief",
"version": 1,
"value": "a brief of your own product: who pays, what hurts, where they hang out",
"ask": "open_link",
"friction": 1,
"cost": {
"founder_minutes": 0,
"tool_spend_usd": 0.1
},
"deliver_within_h": 1,
"fits": {
"stages": [
"waitlist",
"launched"
],
"triggers": [
"public_pain",
"launched",
"asks_recommendation"
]
},
"cta": "here's the brief for {product}: {tracked_link}",
"expires": null
}the catalog
Fifteen offers, from a free answer to a price.
Grouped by the size of the ask: give (no ask), small asks, big asks, and price offers.
offer.useful-answer — Give
A useful answer, nothing asked
Answer the question in the thread. The product is named only if they ask.
- ask
- none
- cost
- 10 to 20 minutes
- fits
- cold, public pain, any stage
- cta
- none; profile does the work
offer.free-brief — Give
A free brief of their own product
VibeDraft reads their site and hands back a brief: who buys, what hurts, where they hang out.
- ask
- open a link
- cost
- about a minute of compute
- cta
- see your brief
offer.three-leads — Give
Three leads for their product
A lead magnet: real people asking for what they built, delivered by message.
- ask
- comment a keyword
- cost
- founder time per delivery
- fits
- comment-a-keyword posts
- cta
- comment the word
offer.playbook-pack — Give
A playbook pack
The written playbooks for their stage, filled with their product.
- ask
- comment or reply
- cost
- near zero once written
- fits
- audience building, hand-raises
- cta
- comment the word
offer.free-tool — Give
A free tool
A calculator, checker or generator that answers one question for free.
- ask
- use it
- cost
- build time once
- fits
- search and AI answers, always on
- cta
- try it
offer.waitlist — Small ask
A waitlist spot
Get in line for early access. The smallest ask a pre-launch product has.
- ask
- leave an email
- cost
- none
- cta
- join the waitlist
offer.early-access — Small ask
Early access
In before everyone else, usually with a direct line to the founder.
- ask
- sign up
- cost
- support time
- fits
- pre-launch, beta
- cta
- get early access
offer.beta — Small ask
Free beta, set up with them
Free access while it's in beta, and the founder sets it up on a call.
- ask
- 15 minutes
- cost
- founder call time
- fits
- finding testers
- cta
- reply to get set up
offer.setup-call — Big ask
A setup call
Fifteen minutes to get them to the key action.
- ask
- book a call
- cost
- founder time
- fits
- stalled trials, warm leads asking how
- cta
- pick a time
offer.done-for-you — Big ask
Done-for-you setup
The founder does the setup for them.
- ask
- give access
- cost
- high founder time
- fits
- high-value trials only
- cta
- want me to set it up?
offer.migration — Big ask
Free migration from a competitor
Move their data or setup over from the tool they're unhappy with.
- ask
- switch
- cost
- founder time
- fits
- competitor-unhappy, reviewers
- cta
- I'll move it for you
offer.founding-price — Price
A founding price
A lower price locked in for the first customers.
- ask
- pay
- cost
- revenue per customer
- fits
- launch, waitlist opening
- cta
- lock in the founding price
offer.first-month-free — Price
First month free
Removes the price for a month; the card still goes in.
- ask
- start a trial with a card
- cost
- one month of revenue
- fits
- switchers, launch week
- cta
- start free
offer.win-back — Price
Half price to come back
What changed since they left, and a month at half price.
- ask
- resubscribe
- cost
- half a month
- fits
- cancelled 30 to 90 days ago
- cta
- come back for half
offer.card-update — Price
A link to update the card
Nothing else. They already decided to pay.
- ask
- update card
- cost
- none
- fits
- failed payments only
- cta
- update your card
failure modes
What goes wrong, and how to catch it.
How each one shows up, and the check that catches it before it costs a week.
| Failure | How it shows up | How to catch it |
|---|---|---|
| Asking too early | Replies, but nobody takes the ask | Check which rung the ask sits on; insert a give step before it |
| Value not delivered fast | People said yes, then went quiet | Measure time from yes to delivery; keep it under 24 hours |
| Discount habit | Every campaign needs a price cut to work | Test value offers (brief, setup) against price offers in arms |
| Offer doesn't match the trigger | A migration offer to someone who just launched | Store fits on the offer and refuse mismatches at campaign setup |
| Untracked acceptance | Joins happen but can't be tied to the offer | Put the offer id and a tracked link in every call to action |
data to capture
Record it so a model can learn from it later.
Follows the guide's eight data-spine rules: log the decision, version what decided, freeze the inputs, keep the negatives, log the odds, treat every human touch as a label, keep one chain of ids, keep the raw.
record
- the offer id and version on every touch that made it
- shown vs accepted, with the time between them
- delivery time from yes to value received
- what each acceptance cost: minutes, tool spend, revenue given up
label
accepted or not, per touch; downstream conversion of those who accepted
trains
offer choice per segment and stage, and the value of each rung of the ladder
test
offer A against offer B inside one campaign · randomized arms with a holdout