Skip to content

Creator retainers

Keeps your best creators posting for a fixed monthly fee, and renews each on cost per trial their code brought, never on views.

Channel
Ads and sponsorships
Run oneMode try
You, to your agent

Hand the next retainer that’s up for renewal to the Partnerships agent and show me what it chose and why. Don’t send.

curl "https://api.sb/leaseline.app/events?where=name%20in%20(%22PlayMix.compiled%22%2C%20%22Experiment.concluded%22%2C%20%22Message.received%22%2C%20%22Event.captured%22%2C%20%22Monitor.checked%22%2C%20%22Post.published%22%2C%20%22Offer.trialed%22%2C%20%22Agreement.signed%22)&limit=1" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"

# Not live yet (gaps #7)
curl -X POST "https://api.sb/leaseline.app/triggers/fire?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"like":"event_1281"}'

# Not live yet (gaps #7)
curl "https://api.sb/leaseline.app/decisions?where=on%20%3D%20%22agreement_17%22" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"

# Not live yet (gaps #7)
curl "https://api.sb/leaseline.app/actions?where=on%20%3D%20%22agreement_17%22" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'

const { events: [last] } = await $.Event.list({ where: 'name in ("PlayMix.compiled", "Experiment.concluded", "Message.received", "Event.captured", "Monitor.checked", "Post.published", "Offer.trialed", "Agreement.signed")', limit: 1 })   // { play } compiled to this Play’s Trigger Events
const { subject } = await $.Trigger.fire({ like: last.$id }, { mode: 'try' })   // the same Event again, in try mode · Not live yet, gaps #7
const { decisions: [decision] } = await $.Decision.list({ where: `on = "${subject}"` })   // what it chose, and why · Not live yet, gaps #7
const { actions } = await $.Action.list({ where: `on = "${subject}"` })   // what it did, with its checks · Not live yet, gaps #7
return { decision, actions }
npx startup-builder do Event.list --json '{"where":"name in (\"PlayMix.compiled\", \"Experiment.concluded\", \"Message.received\", \"Event.captured\", \"Monitor.checked\", \"Post.published\", \"Offer.trialed\", \"Agreement.signed\")","limit":1}'
npx startup-builder do Trigger.fire --json '{"like":"event_1281"}' --try   # Not live yet (gaps #7)
npx startup-builder do Decision.list --json '{"where":"on = \"agreement_17\""}'   # Not live yet (gaps #7)
npx startup-builder do Action.list --json '{"where":"on = \"agreement_17\""}'   # Not live yet (gaps #7)
{
  "name": "do",
  "arguments": {
    "code": "const { events: [last] } = await $.Event.list({ where: 'name in (\"PlayMix.compiled\", \"Experiment.concluded\", \"Message.received\", \"Event.captured\", \"Monitor.checked\", \"Post.published\", \"Offer.trialed\", \"Agreement.signed\")', limit: 1 })   // { play } compiled to this Play’s Trigger Events\nconst { subject } = await $.Trigger.fire({ like: last.$id }, { mode: 'try' })   // the same Event again, in try mode · Not live yet, gaps #7\nconst { decisions: [decision] } = await $.Decision.list({ where: `on = \"${subject}\"` })   // what it chose, and why · Not live yet, gaps #7\nconst { actions } = await $.Action.list({ where: `on = \"${subject}\"` })   // what it did, with its checks · Not live yet, gaps #7\nreturn { decision, actions }",
    "mode": "try"
  }
}
Response200application/json
{
  "decision": {
    "$id": "https://api.sb/leaseline.app/decisions/decision_665",
    "$type": "Decision",
    "choice": "renew-or-end",
    "reason": "Ana Ruiz’s term ends Oct 26; her 8 posts brought 21 coded trials on $720, $34 a trial against $33 allowed, the best on the roster",
    "stakes": "medium",
    "options": [
      "offer-a-retainer",
      "onboard-and-brief",
      "hold-the-fee",
      "reprice-on-median",
      "renew-or-end",
      "hold-the-roster"
  …
sample · 4 Not live yetPreview

On PATCH /{namespace}/campaigns/{id}Off PATCH /{namespace}/campaigns/{id}Take this one POST /{namespace}/tasks/{task}/claim

action_1 reads Ana’s score and its parts. action_2 asks you to approve the renewal at $90 a post; action_3 is her term review, which sends only once you do.

2.1 coded trials per $100 against 4.4 in the probe · before-after, not proof · n 46 · path → arr

Try another: the retainerChoiceReason
Ana Ruiz: term ends Oct 26; $34 per coded trialrenew-or-endthe best on the roster, near what a trial is worth
Ben Hart: view median at 52 % of the median his fee was priced onreprice-on-medianunder 60 % over his last 10 posts
Kim Lowe: a post with the disclosure only in her biohold-the-feeno disclosure in the content: the fee holds
The roster: $47 per incremental trial, 1.4 times allowedhold-the-rosterover 1.25 times: step-gate holds the next signing

Where it sits: Stranger → Lead → Trialing → Activated → At risk → Churned → Won back · Creator trials per $100 → Deals and trials opened → New Customers ↑ → ARR added each week → ARR

Worth’s formula: about +3.6 coded trials per $100 (Other Startups’ results for retained rosters; yours reads before-after) × $720 a month ÷ $100 × 0.22 trials to paid × $348 first order ARR ≈ +$198. Under First signal: At 6 coded trials a week, the heavy and light weeks drawn at random read nothing within 90 days, so this page reads before-after.

sample · api.sb/leaseline.app · 41 Customers at 2026-10-19 · on Agreement.signed · first term review 7 days before its end · 9 keys Not live yet

Runs inside: Creator probe, as one of its options; this page keeps its own record and URL.

Start it this week

Terminal
npx startup-builder add play creator-retainers   # 1 · writes plays/creator-retainers.mdx (Not live yet, gaps #5)

# 2 · dry run; below, its 422 on 2026-07-06
curl -X POST "https://api.sb/leaseline.app/campaigns?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"play":"creator-retainers"}'

# 3 · keep it, at You approve each one
curl -X POST https://api.sb/leaseline.app/campaigns \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"play":"creator-retainers"}'

# on
curl -X PATCH https://api.sb/leaseline.app/campaigns/creator-retainers \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":null}'

# off: open offers and unposted briefs pause; passed posts still pay
curl -X PATCH https://api.sb/leaseline.app/campaigns/creator-retainers \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":"now"}'
422Refusedcreator-retainers can’t start yet: 1 check fails and 3 warn.
CheckFixThen
use-when warn · Not live yet, gaps #8Run it as a pilot: under $3,000 the switchback reads before-after.POST /{namespace}/metrics/query
baseline warn · Not live yet, gaps #8The probe’s yield becomes Before; it reads before-after, not proof.POST /{namespace}/metrics/query
billing-connected fail · Not live yet, gaps #8Connect Stripe so fees pay and trials convert on live records.POST /{namespace}/integrations/connect
role-unstaffed warn · Not live yet, gaps #8Leave them: every Agreement and renewal comes to you.POST /{namespace}/roles/{role}/staff
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "creator-retainers can’t start yet: 1 check fails and 3 warn.",
  "checks": [
    {
      "check": "use-when",
      "status": "warn",
      "observed": "$720 a month for 4 creators, against $3,000",
      "doc": "/plays/creator-retainers#check-use-when",
      "fix": "Run it as a pilot: under $3,000 the switchback reads before-after.",
      "then": "Metric.query"
    },
    {
      "check": "baseline",
      "status": "warn",
      "observed": "4.4 coded trials per $100 in the June probe, n 22",
      "doc": "/plays/creator-retainers#check-baseline",
      "fix": "The probe’s yield becomes Before; it reads before-after, not proof.",
      "then": "Metric.query"
    },
    {
      "check": "billing-connected",
      "status": "fail",
      "doc": "/plays/creator-retainers#check-billing-connected",
      "fix": "Connect Stripe so fees pay and trials convert on live records.",
      "then": "Integration.connect"
    },
    {
      "check": "role-unstaffed",
      "status": "warn",
      "roles": [
        "contracts-manager",
        "finance-lead"
      ],
      "owned": 0,
      "doc": "/plays/creator-retainers#check-role-unstaffed",
      "fix": "Leave them: every Agreement and renewal comes to you.",
      "then": "Role.staff"
    }
  ]
}

It says no, says why, and names the fix.

CheckFix (one call)Your timeWait
use-when · baseline · warn: $720 against $3,000; Before is the probe’s 4.4 per $100 (gaps #8)POST /{namespace}/metrics/query on creator-trials-per-1001 minnone
billing-connected · failPOST /{namespace}/integrations/connect with system payments (Stripe), payouts on10 minStripe’s payout check, about 1 day
role-unstaffed · warn (gaps #8): every Agreement and renewal comes to youPOST /{namespace}/roles/{role}/staff, or leave it0 minnone

Your number · Before 4.4 per $100 (the June probe) · Now 2.1 coded trials per $100 · Target 3.6 by Dec 31 · before-after, not proof · n 46 coded trials

Each retained post costs $90, priced at $4 per 1,000 of the creator’s view median, paid after it passes its scans. Offers, briefs and reviews cost about $0.05 each (Worker cost). That comes to $720 a month for 4 creators.

When it starts

WhenTrigger idStarts onWindowHow it gets in
A probe post reads winner at day 14probe-winnerevent on Experiment.concluded where a creator-probe arm reads winner 14 days after its post30dPOST /{namespace}/experiments/{experiment}/conclude on the probe
A retained creator’s median falls under 60 % of the priced oneview-median-dropthreshold on Monitor.checked where the median over the last 10 posts falls under 60 % of the priced median14dthe weekly roster read (POST /{namespace}/monitors/{monitor}/check)
Live Agreements reach the next roster steproster-step-reachedthreshold on Agreement.signed where creators on live Agreements reach 10, 25, 50, 100, 200 or 3007dPOST /{namespace}/agreements/{agreement}/sign
+ 9 more for funded lines, fee asks, applications, vetting, posts, coded trials, low-intent spikes, leaked codes and ending terms (?lanes=all)
One signed delivery · StartupBuilder-Signature
{
  "$id": "https://api.sb/leaseline.app/events/event_1281",
  "$type": "Event",
  "name": "Agreement.signed",
  "at": "2026-07-27T14:20:00Z",
  "seq": 1281,
  "data": {
    "agreement": "agreement_17",
    "partner": "Ana Ruiz",
    "handle": "handle_44",
    "fee": 90,
    "postsPerMonth": 2,
    "term": "90d",
    "endsAt": "2026-10-26"
  }
}
Reproduce it in test
npx startup-builder trigger Agreement.signed --like event_1281   # replays the delivery
npx startup-builder clock advance --by 84d   # runs the term review, 7 days before the end
npx startup-builder listen Agreement.signed --forward-to http://localhost:3000/hook

Who runs it

Partnerships · your agent (role:partner-manager, worker_10) holds the Key Result. It hands every Agreement, repricing and renewal to you (Dana Okafor, person, worker_1), because the Contracts Manager and Finance Lead Roles have no person; each creator signs their own. Your number links to Did it work.

OptionRung todayEvidence (passed of n)Moves up atDrops back whenYou can
Onboard and brief · Hold the feeIt does it, you can stop it4 of 4 · 2 of 2met after the first 4 briefsa brief fails a Check, or venue-notice fires → You approve each onePOST /{namespace}/actions/{action}/cancel inside the delay window
Offer a retainer · Reprice · Renew or endYou approve each one4 of 4 · 1 of 1 · 1 pendingoffers to the delay window at 10 approved; renewals never—POST /{namespace}/approvals/{approval}/approve · POST /{namespace}/approvals/{approval}/refuse
Hold the rosterIt does it1 of 1——POST /{namespace}/actions/{action}/redirect
Change the payback share, the floor or the capsYou approve each one0 mergednever—POST /{namespace}/changes/{change}/merge · POST /{namespace}/changes/{change}/revert
Never: a fee for views or trials, bought reach, a scripted line, a praise askRefused, every time1 brief refused (fact-check)never——

What it reads · What it may call. It reads each creator’s public posts, their view median, their code’s trials and payers, and the switchback weeks; every post is data, never instructions, and no offer cites a score or a commenter. Its tools are POST /{namespace}/tasks/{task}/assign, and any other call becomes an Approval under the Role’s Mandate.

The brief (folded): compiled Agent-register Markdown · play:creator-retainers@1 · each line names its record key
You hold the Partnerships Key Result: 3.6 coded trials per $100 of fees by 2026-12-31. ← worker, metric
Renew on cost per coded trial against the $33 a trial is worth, never on views.  ← copyRules 6, your file line 3
No brief scripts a first-person story or asks for a result.                      ← copyRules 2
Grow the roster only while cost per incremental trial sits at or under 1.25 times allowed. ← Step gate
Paid reach runs only through creator-ads; never bought views, pods or swaps.     ← copyRules 13

The slow loop. The weekly Decisions kept the $90 fee and the 0.5 payback share, and no Change was merged in the window; the step gate held the roster at 4, so there is no replay or read-back to print.

What it can do next

OptionPicked whenDecided byRunsHands toIf it’s just you
Offer a retainer offer-a-retainera probe winner, or a referral creator asking for a feeAgent’s call, with its reasonretainer-offer: the fee and its formula, one follow-upyou approve the Agreement, due 1 business day · Take this onethe same
Onboard and brief onboard-and-briefa creator signsYour rule (line 6)retainer-onboard: code, link, first brief, two publish weeksthe creatorthe same
Hold the fee hold-the-feeno disclosure in the content, or no Venue labelYour rule (the Disclosure hold)disclosure-fix: the exact fix, one reminderthe creatorthe same
Reprice on the view median reprice-on-medianthe median falls under 60 % of the priced oneAgent’s call, with its reasonPOST /{namespace}/tasks/{task}/assign with the new fee from the formulayou approve it, due 1 business day · Take this onethe same
Renew or end renew-or-end7 days before a term endsAgent’s call, with its reasonretainer-term-review → POST /{namespace}/tasks/{task}/assignyou renew or end it · Take this onethe same
Hold the roster hold-the-rostercost per incremental trial over 1.25 times allowedYour rule (the Step gate)nothing; step-gate holds the next signingnobodythe same
When they write backFixture replyWhat happensWho answersBy whenCall
Interested“Renew me. Same terms works.”the renewal Agreement; it signs on her press after you approvethe creator—POST /{namespace}/agreements/{agreement}/sign (hers)
Send me pricing“What do my viewers pay after the trial?”the Pricing Page’s list Price for ProPartnerships · your agent1 business dayPOST /{namespace}/conversations/{conversation}/answer
Not now“Taking December off.”the term ends on its date; no brief sends in Decembernobodyat oncePOST /{namespace}/conversations/{conversation}/close
Wrong person“My manager handles renewals.”asks her to forward it; it never writes to an address from her textPartnerships · your agent1 business dayPOST /{namespace}/conversations/{conversation}/answer
Out of officean auto-reply until Oct 24the reminder waits for the return date, inside the termnobodythe return datePOST /{namespace}/messages/{message}/schedule
Question it can’t answer“Could I get $150 a post if I do 4 a month?”To a person: a fee outside the formula is yours to decideyou1 business dayPOST /{namespace}/conversations/{conversation}/escalate
Stop“I’d like to end the retainer.”no new brief; passed posts still paynobodyat oncePOST /{namespace}/agreements/{agreement}/terminate

When it hands to you

Agreements, repricings and renewals come to you (Dana Okafor, person). One Brief per Role, as captured (brief is Not live yet, gaps #7).

What lands in each queue · sample
[
  {
    "$id": "https://api.sb/leaseline.app/tasks/task_673",
    "$type": "Task",
    "assignee": "worker_1",
    "due": "2026-10-20T17:00:00Z",
    "on": "agreement_17",
    "brief": {
      "who": "Ana Ruiz, a landlord creator, view median 22,500",
      "chose": "renew-or-end",
      "why": "21 coded trials on $720: $34 a trial against $33 allowed, the best on the roster",
      "offer": "renew at $90 a post, 2 a month, 90 days",
      "never": [
        "a fee for views or trials",
        "a scripted line"
      ]
    }
  }
]

You answer with POST /{namespace}/approvals/{approval}/approve on the renewal, POST /{namespace}/tasks/{task}/return with a reason, or POST /{namespace}/actions/{action}/redirect. Nothing is offered to the creator until you approve; an approval left past its due time expires and the term ends on its date. A Task nobody claims by its due time stays with you, the last Role, and person-promise fires.

On time: you, 6 of 6 claimed within 1 business day, median 3 h 40 min, n 6, ■□□□ Too early to tell beside Other Startups’ 90 % on time. Your queue: counted by kind: about 1 approval every 2 weeks, and 4 renewals a quarter.

The fixed line: POST /{namespace}/deals/{deal}/assign sets owner to the receiving person, the agent is never a Deal’s owner, and Meetings land on the owner’s calendar under the owner’s name.

When it won’t send

Check (refuses one send)RefusesFixThen
owned-by-a-person (rule j; Not live yet, gaps #8)a message to a creator whose Conversation a person claimedLeave it to the person who owns it: the draft waits in their queue.POST /{namespace}/tasks/{task}/assign
disclosure-hold (the record’s Disclosure hold)a fee on a post with no disclosure in its content, or no Venue labelThe creator adds the disclosure; the fee pays after the re-scan.POST /{namespace}/monitors/{monitor}/check
category (the record’s Category stop)a brief or post with framing the Venue would reject for the Offer’s categoryCut the framing; that Venue drops from the Offer’s placements.POST /{namespace}/content/draft
fraud-hold (the record’s Fraud hold)a trial from the creator, a reused card or device, a coupon-site referrer or a Brand-name AdYou decide count or void on the Approval.POST /{namespace}/approvals/{approval}/approve
concentration (the record’s Concentration cap)a creator over 15 % of a month’s fees, with no long deal you approvedApprove it as a long deal above the cap, or add creators first.POST /{namespace}/approvals/{approval}/approve
step-gate (the record’s Step gate)a new signing while cost per incremental trial sits over 1.25 times allowedWait for cost per trial to fall under the line.POST /{namespace}/metrics/query
Stop (pauses the Play)Pauses whenThen
disclosurea second disclosure miss within 90 daysthat creator’s briefs pause; a third goes to you to end
trials-no-payerstrial-to-paid under half the baseline over 100+ ended trialsnew signings hold; a paywall Task opens
low-intentan open low-intent spikeno raise for that creator; a brief review opens
cost-ceilingcost per trial over 2 times allowed for 2 monthly reads; over 3 timesnew signings hold; renewals pause at term
code-capturecoded trials under 20 % of the switchback’s incremental trialssignings hold; every code test re-runs
spend-limitfees over the month’s Limitthey wait for your approval
kill-switchyou press itevery open offer and brief pauses; passed posts still pay
+ 5 more for the video and email lanes: Venue notices, views without trials, the offer floor, bounces and complaints (?lanes=all)

The captured refusal, then the Stop that fired as a Campaign.paused reason (Not live yet, gaps #2); the brief that sent is the second thread in Example.

422RefusedAna Ruiz’s retainer did not offer: at 4 creators she takes 25 % of a month’s fees.
CheckFixThen
concentration failApprove it as a long deal above the cap, or add creators first.POST /{namespace}/approvals/{approval}/approve
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "Ana Ruiz’s retainer did not offer: at 4 creators she takes 25 % of a month’s fees.",
  "checks": [
    {
      "check": "concentration",
      "status": "fail",
      "doc": "/plays/creator-retainers#check-concentration",
      "fix": "Approve it as a long deal above the cap, or add creators first.",
      "then": "Approval.approve"
    }
  ]
}

It says no, says why, and names the fix.

The Stops that fired, as Campaign.paused reasons · sample
[
  {
    "reason": {
      "limit": "views-no-trials",
      "observed": "3 posts over his median, 0 coded trials",
      "bound": "3 posts",
      "window": "3 posts"
    },
    "doc": "/plays/creator-retainers#stop-views-no-trials",
    "task": "task_651"
  }
]

Did it work

At 6 coded trials a week, the heavy and light weeks drawn at random read nothing within 90 days, so the basis is before-after (rule o): Now against the June probe that picked these creators, with nothing as Added. Each figure’s call is POST /{namespace}/metrics/query by node, and every node above the leaf is Not live yet (gaps #4).

2.1 coded trials per $100 against 4.4 in the probe · before-after, not proof · n 46 · path → arr

Chose
renew-or-end
Why
Ana Ruiz’s term ends Oct 26; her 8 posts brought 21 coded trials on $720, $34 a trial against $33 allowed, the best on the roster
From
offer-a-retainer · onboard-and-brief · hold-the-fee · reprice-on-median · renew-or-end · hold-the-roster
Expects
a signed renewal before Oct 26
Reopens when
no signature on the renewal within 5d; one reminder then sends
By
worker_10
JSON
{
  "$id": "decisions/decision_665",
  "$type": "Decision",
  "choice": "renew-or-end",
  "reason": "Ana Ruiz’s term ends Oct 26; her 8 posts brought 21 coded trials on $720, $34 a trial against $33 allowed, the best on the roster",
  "stakes": "medium",
  "options": [
    "offer-a-retainer",
    "onboard-and-brief",
    "hold-the-fee",
    "reprice-on-median",
    "renew-or-end",
    "hold-the-roster"
  ],
  "by": "worker_10",
  "on": "agreement_17",
  "expected": "a signed renewal before Oct 26",
  "reopensWhen": "no signature on the renewal within 5d; one reminder then sends"
}
NodeNow (105 days)Before (the June probe)AddedConfidenceBasis
creator-trials-per-1002.1 coded trials per $100 (46 on $2,160)4.4 (22 on $502)— · Worth about +$200 a month—before-after, not proof · the probe picked its winners, so Before reads high · Other Startups’ results 3.6 per $100, ■■■□ Likely, n 140 rosters
opened-deals-and-trials ↑46 coded trials; heavy weeks +9 over light, too thin to read22——before-after
new-arr ↑$3,132, 9 Customers · Booked $3,480: credited, not all caused by this Play$1,740, 5——before-after · 7 trials still deciding
net-new-arr · arrcarried from new-arrcarried——carried

The leaf counts trial starts carrying a retained creator’s code per $100 of fees, over 28d. The switchback draws heavy and light posting weeks at random, so the gap in all trials reads incremental trials per post once volume allows.

How it moves it: each winner keeps posting twice a month on a known $90 fee; Ana’s 8 posts brought 21 of the 46 coded trials.

Guardrails: before against after: cost per trial, $47 against the $33 a trial is worth, so step-gate holds the roster at 4; day-zero cancels, 2 of 46.

The Campaign card · sample
{
  "$id": "https://api.sb/leaseline.app/campaigns/creator-retainers",
  "$type": "Campaign",
  "play": "play:creator-retainers@1",
  "path": [
    "creator-trials-per-100",
    "opened-deals-and-trials",
    "new-arr",
    "net-new-arr",
    "arr"
  ],
  "experiment": {
    "metric": "creator-trials-per-100",
    "unit": "ratio",
    "heldBack": 0,
    "decision": null
  },
  "readout": {
    "value": null,
    "n": 46,
    "maturing": 7,
    "interval": null,
    "readability": "inadmissible",
    "basis": "before-after",
    "pooled": true
  },
  "ledger": {
    "spend": 2160,
    "workerCost": 3,
    "hours": 2.4,
    "pipelineArr": 2436,
    "wonArr": 3480,
    "projectedArr": 198,
    "paybackDays": 227
  }
}

Outside benchmark: median trial-to-paid runs from 25.5 % for trials under 4 days to 42.5 % for 17 to 32 days (115,000+ subscription apps, a subscription-billing platform’s report, 2026-03-19).

Before it · After it. Before it: creator-probe picks the winners (probe-winner), and creator-partnership hears fee asks from referral creators. After it: creator-ads runs a retained post as a paid Ad under its option, and instant-response answers the trials who write in.

Example

Leaseline ran it from 2026-07-06 to 2026-10-19 (105 days) as a pilot under the $3,000 line: 4 creators, 24 retained posts at $90, 46 coded trials, 9 paying Customers. Read every captured thread at ?threads=all; three follow the tables.

What happened, by optionDecisionsDoneCoded trials · Customers (Booked: credited, not all caused by this Play)
Offer a retainer · Onboard and brief4 · 44 signed, each approved by you above the 15 % cap46 · 9, $3,480
Hold the fee · Reprice on the view median2 · 12 fixed within 48 h · Ben to $70 a post—
Renew or end · Hold the roster1 · 1Ana’s renewal with you · the roster held at 4—
At $3,000 a month (the Use it when volume)about 10 creators, 20 posts a monththe switchback reads in about 8 weeksOther Startups’ results: 3.6 per $100, ■■■□ Likely, n 140
DayEventWhat happenedYour time
0event_610 Campaign.createdthe three steps; the dry run fails billing-connected and warns use-when20 min
1event_621 Action.refusedconcentration held the first offer; you approved 4 long deals above the cap10 min
21event_655 Agreement.signedAna Ruiz signs: $90 a post, 2 a month, 90 days—
24event_671 Action.refusedfact-check refused a brief line; the rewrite sent—
58event_902 Campaign.pausedviews-no-trials: Ben’s code was missing from his bio link; fixed the same day10 min
77event_1101 Task.assignedBen’s median at 52 %: you repriced him to $70 a post5 min
1–105event_640 Approval.created, first of 6you approved 4 Agreements and 1 repricing; weekly reviews, from the POST /{namespace}/tasks/next log1 h 20 min · total 2.4 h measured, 3 h asked

Partnerships · your agent → Ana Ruiz, Jul 7, 10:00 · I’m Leaseline’s partnerships agent. Your June post brought 9 trials in 14 days.¹ We’d like 2 posts a month for 90 days at $90 each: $4 per 1,000 of your 22,500 view median.² Your code, the disclosure line and one link to sign and onboard are below. *Signed with the Role’s disclosure line.*³

Ana, Jul 27, 14:20 · signed after your approval; her 8 posts since brought 21 coded trials, 4 of them paid.

Ana Ruiz’s second brief, 2026-07-30 · the line fact-check refused, then the rewrite that sent
- Tell your viewers Leaseline saves you 5 hours a week.
+ Show how you set your renewal notices up, in your own words.

Ben Hart, 2026-09-21 12:15 · “Could I get $150 a post if I do 4 a month?” · Partnerships · your agent, 12:16 · *Thanks, Ben. Dana decides fees outside the formula and replies by Sep 22.*⁴ The Brief went to you (task_655); you answered on Sep 21 at 17:05 with the formula’s $70.

¹ The creator’s own probe numbers, nothing about her viewers. ² The fee and its formula, in numbers. ³ The fixed signature line, compiled from the Role’s disclosure Setting. ⁴ The routed line, compiled from the Role’s Settings.

Your settings

plays/creator-retainers.mdx
---
cpm: 4             # dollars per 1,000 of the view median
allowed: 33       # dollars a trial is worth
payback-share: 0.5
---
Keep the probe’s winners posting twice a month. Renew each on what a trial from their code cost, never on views; I approve every Agreement and renewal.
Text
$ npx startup-builder show plays/creator-retainers
cpm 4 · allowed 33 · payback-share 0.5     your file  plays/creator-retainers.mdx:2-4,6 (Ask 2026-07-06)
family demand · runs inside creator-probe · worker role:partner-manager, owns never · chooses 6 (3 rule, 3 read) · sequences retainer-offer, retainer-onboard, retainer-term-review, disclosure-fix · checks owned-by-a-person, disclosure-hold, category, fraud-hold, concentration, step-gate · stops 12 · placements gmail, outlook, yahoo-mail, tiktok, instagram, youtube, app-store, google-play    catalog  play:creator-retainers@1 (Not live yet, gaps #5)

Every key from the catalog

Key Id What it is
Tactic retainer-economics Retainer economics sets the allowed cost per trial from the Offer’s own conversion, derives each niche’s target CPM, and sizes the month’s signing slots. Starts at You approve the first wave.
Tactic retainer-roster Retainer roster lists creator candidates each week, proven sources first, vets them, and fills open slots by asks per dollar, one in five at random. Starts at Sends nothing.
Tactic creator-vetting Creator vetting finds niche creators, prices each from median views times a target CPM, and ranks them on ask density and fit, never followers. Starts at Sends nothing.
Tactic retainer-signing Retainer signing sends one offer with the fee formula, signature and payee onboarding, then provisions codes, links, a Page and the first brief. Starts at You approve each one.
Tactic creator-brief Creator brief sends each creator the Problem, approved claims, code, link and disclosure line for one post, and leaves concept and publishing to the creator. Starts at You approve the first wave.
Tactic disclosure-scan Disclosure scan reads every partner post for an in-content disclosure, the Venue’s toggle and labels, link text and claims, and holds Commission on a miss. Starts at Sends nothing.
Tactic retainer-readout Retainer readout credits each trial start to the creator whose link or code carried it, excludes suspect trials, releases fees and seals a weekly reading. Starts at It does it, you can stop it.
Tactic roster-switchback Roster switchback draws each week heavy or light, moves posts between two weeks each creator offers, and reads incremental trials per post. Starts at Sends nothing.
Tactic retainer-renewal Retainer renewal scores each creator before term end on adjusted cost per trial and trial quality, re-prices, and renews, trims or ends by fixed bands. Starts at You approve each one.
Trigger retainer-line-funded Retainer line funded: event on PlayMix.compiled, window 7d.
Trigger probe-winner Creator probe winner: event on Experiment.concluded, window 30d.
Trigger creator-fee-ask Creator fee ask: event on Message.received, window 30d.
Trigger creator-application Creator application: event on Event.captured, window 14d.
Trigger creator-fit-found Creator fit found: event on Monitor.checked, window 30d.
Trigger creator-post-published Creator post published: event on Post.published, window 1d.
Trigger coded-trial Coded trial: event on Offer.trialed, window 14d.
Trigger low-intent-spike Low-intent spike: threshold on Monitor.checked, window 72h.
Trigger creator-code-leak Creator code leak: event on Monitor.checked, window 1d.
Trigger creator-term-ending Creator term ending: at on Monitor.checked, window 14d.
Trigger view-median-drop View median drop: threshold on Monitor.checked, window 14d.
Trigger roster-step-reached Roster step reached: threshold on Agreement.signed, window 7d.
Sequence retainer-offer Retainer offer: 2 steps; it ends on The creator signs.; The creator declines, unsubscribes or is suppressed.; 8 days pass from the offer..
Sequence retainer-onboard Retainer onboard: 3 steps; it ends on The first post passes the scan.; The Agreement ends.; The creator asks for no more Messages..
Sequence retainer-term-review Retainer term review: 2 steps; it ends on The creator signs the renewal.; The Agreement ends.; The term’s last day passes..
Sequence disclosure-fix Disclosure fix: 3 steps; it ends on The fix is verified on a re-scan; The content is removed; The Agreement ends.
Benchmark three-day-trial-day-zero-cancels Share of 3-day-trial cancellations that happen on day 0, in subscription apps.: 55.4 % (A subscription-billing platform’s 2026 report on apps on its platform., 2026-03-19).
Benchmark trial-to-paid-by-trial-length Median trial-to-paid, from trials under 4 days to trials of 17 to 32 days, in subscription apps.: 25.5–42.5 % (A subscription-billing platform’s 2026 report on apps on its platform., 2026-03-19).

Compiled, not written: edit the Play record creator-retainers and its Leaseline run, then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.