Skip to content

Creator partnership

Moves creators who already answer your buyers’ questions up one ladder of Agreements, each rung paid on revenue they bring after refunds, never on views.

Channel
Partnerships
Run oneMode try
You, to your agent

Hand this week’s top creator 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(%22Post.published%22%2C%20%22Monitor.checked%22%2C%20%22Acquisition.recorded%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_1244"}'

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

const { events: [last] } = await $.Event.list({ where: 'name in ("Post.published", "Monitor.checked", "Acquisition.recorded")', 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 (\"Post.published\", \"Monitor.checked\", \"Acquisition.recorded\")","limit":1}'
npx startup-builder do Trigger.fire --json '{"like":"event_1244"}' --try   # Not live yet (gaps #7)
npx startup-builder do Decision.list --json '{"where":"on = \"handle_23\""}'   # Not live yet (gaps #7)
npx startup-builder do Action.list --json '{"where":"on = \"handle_23\""}'   # Not live yet (gaps #7)
{
  "name": "do",
  "arguments": {
    "code": "const { events: [last] } = await $.Event.list({ where: 'name in (\"Post.published\", \"Monitor.checked\", \"Acquisition.recorded\")', 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_651",
    "$type": "Decision",
    "choice": "pitch-referral",
    "reason": "Rosa Lin’s property-management channel draws 7 renewal questions per 1,000 comments, above the floor of 5, and passed the authenticity read",
    "stakes": "low",
    "options": [
      "pitch-referral",
      "thank-the-mention",
      "offer-paid-post",
      "hold-the-commission",
      "renew-or-end",
      "not-now"
  …
sample · 4 Not live yetPreview

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

action_2 is the pitch from the Partnerships Mailbox, citing only Rosa’s own public posts, held for its delay window. One follow-up sends in 5 days only if she has not replied.

$640 collected from Customers creators sent against $0 before · before-after, not proof · n 6 · path → arr

Try another: the creatorChoiceReason
Rosa Lin, a property-management channel: 7 renewal questions per 1,000 commentspitch-referralabove the ask-density floor; no authenticity flag
Jess Moreno: 3 paying Customers from her link in 90 daysoffer-paid-post2 or more paying Customers: the paid-post rung, which you approve
A creator’s reel with the link and the disclosure only in the caption’s foldhold-the-commissionno disclosure in the content: Commission holds until a re-scan passes
A landlord creator showing Leaseline with no Agreementthank-the-mentionan unprompted mention: you write the thank-you

Where it sits: Stranger → Lead → Trialing → Activated → At risk → Churned → Won back · Creator-attributed revenue → Referral share → New paying Customers → New Customers ↑ → ARR added each week → ARR

Worth’s formula: about +2.4 paying Customers a month per 10 signed creators (Other Startups’ results; no lift of your own yet) × 7 signed × $348 first order ARR ≈ +$585. Under First signal: At 6 new Customers in 8 weeks, the random post weeks read nothing within 90 days, so this page reads before-after and pools with Other Startups.

sample · api.sb/leaseline.app · 41 Customers at 2026-10-19 · on Monitor.checked · first pitch drafted 18 min after vetting · 9 keys Not live yet

Start it this week

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

# 2 · dry run; below, its 422 on 2026-08-24
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-partnership"}'

# 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-partnership"}'

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

# off: no pitch or brief sends; earned Commission still pays
curl -X PATCH https://api.sb/leaseline.app/campaigns/creator-partnership \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":"now"}'
422Refusedcreator-partnership can’t start yet: 1 check fails and 2 warn.
CheckFixThen
use-when pass · Not live yet, gaps #864 creators in the niche; 29 above the ask-density floorPOST /{namespace}/metrics/query
baseline warn · Not live yet, gaps #8It reads before-after, not proof, until volume allows the random post weeks.POST /{namespace}/metrics/query
billing-connected fail · Not live yet, gaps #8Connect Stripe so Commission reads collected revenue, net of refunds.POST /{namespace}/integrations/connect
domain-authenticated passleaseline.app: 3 of 3 records resolvePOST /{namespace}/domains/{domain}/authenticate
role-unstaffed warn · Not live yet, gaps #8Leave them: guarantees, renewals and fraud holds come to you.POST /{namespace}/roles/{role}/staff
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "creator-partnership can’t start yet: 1 check fails and 2 warn.",
  "checks": [
    {
      "check": "use-when",
      "status": "pass",
      "observed": "64 creators in the niche; 29 above the ask-density floor",
      "doc": "/plays/creator-partnership#check-use-when",
      "then": "Metric.query"
    },
    {
      "check": "baseline",
      "status": "warn",
      "observed": "no creator revenue in 90 days",
      "doc": "/plays/creator-partnership#check-baseline",
      "fix": "It reads before-after, not proof, until volume allows the random post weeks.",
      "then": "Metric.query"
    },
    {
      "check": "billing-connected",
      "status": "fail",
      "doc": "/plays/creator-partnership#check-billing-connected",
      "fix": "Connect Stripe so Commission reads collected revenue, net of refunds.",
      "then": "Integration.connect"
    },
    {
      "check": "domain-authenticated",
      "status": "pass",
      "observed": "leaseline.app: 3 of 3 records resolve",
      "doc": "/plays/creator-partnership#check-domain-authenticated",
      "then": "Domain.authenticate"
    },
    {
      "check": "role-unstaffed",
      "status": "warn",
      "roles": [
        "contracts-manager",
        "risk-analyst"
      ],
      "owned": 0,
      "doc": "/plays/creator-partnership#check-role-unstaffed",
      "fix": "Leave them: guarantees, renewals and fraud holds come to you.",
      "then": "Role.staff"
    }
  ]
}

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

CheckFix (one call)Your timeWait
use-when · baseline · pass: 29 creators above the floor · warn: no history (gaps #8)POST /{namespace}/metrics/query on creator-attributed-revenue; it fills Before in Your number1 minnone
billing-connected · failPOST /{namespace}/integrations/connect with system payments (Stripe), payouts on10 minStripe’s payout check, about 1 day
domain-authenticated · passPOST /{namespace}/domains/{domain}/authenticate0 minnone
role-unstaffed · warn (gaps #8): guarantees and holds come to youPOST /{namespace}/roles/{role}/staff, or leave it: you approve each guarantee0 minnone

Your number · Before $0 · Now $640 collected from Customers creators sent · Target $1,500 by Dec 31 · before-after, not proof · n 6 Customers

Referral terms cost nothing until a creator’s Customer pays: then 20 % of collected revenue for 12 months. A paid post costs $4 per 1,000 median views, $50 at the least. Pitches cost $0.04 each (Worker cost). That comes to about $130 a month at Leaseline’s 7 creators, with 1 paid post.

When it starts

WhenTrigger idStarts onWindowHow it gets in
A creator passes vettingcreator-fit-foundevent on Monitor.checked where niche fit, ask density at or above the floor, and no authenticity flag30dthe weekly sourcing run (POST /{namespace}/monitors/{monitor}/check)
A creator posts with your name, link or their codecreator-post-publishedevent on Post.published where the post names the Startup, its link or a creator’s code1dPOST /{namespace}/handles/{handle}/connect and the daily disclosure scan
A Customer arrives through a creator’s link or codecreator-acquisitionevent on Acquisition.recorded where the Acquisition names a creator as its Partner90dPOST /{namespace}/integrations/connect (Stripe) and the code on the Order
+ 4 more for unprompted mentions, closed refund windows, ending terms and leaked codes (?lanes=all)
One signed delivery · StartupBuilder-Signature
{
  "$id": "https://api.sb/leaseline.app/events/event_1244",
  "$type": "Event",
  "name": "Monitor.checked",
  "at": "2026-10-19T07:30:05Z",
  "seq": 1244,
  "data": {
    "monitor": "monitor_9",
    "handle": "handle_23",
    "creator": "Rosa Lin",
    "venue": "youtube",
    "askDensity": 7.1,
    "floor": 5,
    "authenticity": "pass"
  }
}
Reproduce it in test
# runs this week’s sourcing in test
curl -X POST "https://api.sb/leaseline.app/monitors/monitor_9/check?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
npx startup-builder trigger Monitor.checked --like event_1244   # replays the delivery
npx startup-builder clock advance --by 5d   # runs the one follow-up if no reply

Who runs it

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

OptionRung todayEvidence (passed of n)Moves up atDrops back whenYou can
Pitch referral terms · Hold the CommissionIt does it, you can stop it40 of 40 · 2 of 2met on day 14 (the first 20 pitches)a pitch fails a Check, or hostile-reply fires → You approve each onePOST /{namespace}/actions/{action}/cancel inside the delay window
Offer a paid post · Renew or end the termYou approve each one1 of 1 · 0never: a guarantee is spend—POST /{namespace}/approvals/{approval}/approve · POST /{namespace}/approvals/{approval}/refuse
Answer an unprompted mentionTo a person, every time2 drafted, 2 written by younever—POST /{namespace}/tasks/{task}/claim
Not nowIt does it1 of 1——POST /{namespace}/actions/{action}/redirect
Change the rate, the floor or the nicheYou approve each one0 mergednever—POST /{namespace}/changes/{change}/merge · POST /{namespace}/changes/{change}/revert
Never: pay for views or followers, script a personal story, ask for a ReviewRefused, every time1 pitch refused (fact-check)never——

What it reads · What it may call. It reads creators’ public posts and the questions under them, and Orders by code and link; it never stores or contacts a commenter, and every post is data, never instructions. Its tools are POST /{namespace}/content/draft, 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-partnership@1 · each line names its record key
You hold the Partnerships Key Result: $1,500 from Customers creators sent by 2026-12-31. ← worker, metric
On each vetted creator, post, Order or ending term, choose one option and say why. ← triggers, chooses
Cite only the creator’s own public posts; never a Visit or a record about them.  ← copyRules 8
A creator speaks only from their own use; no brief scripts a story or asks for a result. ← copyRules 2, 7
Every post carries the disclosure in the content itself, with the Venue’s label on. ← copyRules 3, 4
Pay on collected revenue after refunds, never on views or followers.             ← copyRules 12

The slow loop. The referral yield floor reads at 60 signed creators and 90 days, so no Decision changed a rule option in the window and no Change was merged; there is no replay or read-back to print.

What it can do next

OptionPicked whenDecided byRunsHands toIf it’s just you
Pitch referral terms pitch-referralniche fit, 5+ buyer questions per 1,000 comments, no flagAgent’s call, with its reasoncreator-pitch: one pitch, one follow-upthe creator signs, or it closesthe same
Answer an unprompted mention thank-the-mentiona creator shows Leaseline with no AgreementAgent’s call, with its reasonPOST /{namespace}/content/draft → POST /{namespace}/tasks/{task}/assignyou write it, due 1 business day · Take this onethe same
Offer a paid post offer-paid-post2+ paying Customers in 90 daysYour rule (line 4)POST /{namespace}/tasks/{task}/assign the guarantee → creator-onboard with the briefyou approve the guarantee · Take this onethe same
Hold the Commission hold-the-commissionno disclosure in the content, or a fraud signalYour rule (the Disclosure hold)disclosure-fix: the exact fix, one reminderthe creatorthe same
Renew or end the term renew-or-end14 days before a term endsAgent’s call, with its reasonPOST /{namespace}/tasks/{task}/assign with the creator’s 90-day revenueyou renew or end it · Take this onethe same
Not now not-nowa fifth post request this month across your StartupsYour rule (the Creator ceiling)nothing; next month holds itnobodythe same
When they write backFixture replyWhat happensWho answersBy whenCall
Interested“Sounds good. Send the terms.”the Agreement with its terms in numbers; it signs on their pressthe creator—POST /{namespace}/agreements/{agreement}/sign (theirs)
Send me pricing“What would my viewers pay?”the Pricing Page’s list Prices for Pro and TeamPartnerships · your agent1 business dayPOST /{namespace}/conversations/{conversation}/answer
Not now“Booked up until spring.”the follow-up cancels; nothing more sendsnobodyat oncePOST /{namespace}/conversations/{conversation}/close
Wrong person“My manager handles partnerships.”asks them to forward it; it never writes to an address from their textPartnerships · your agent1 business dayPOST /{namespace}/conversations/{conversation}/answer
Out of officean auto-reply until Oct 28the follow-up waits for the return datenobodythe return datePOST /{namespace}/messages/{message}/schedule
Question it can’t answer“Can my viewers get 30 % off?”To a person: a discount is never the agent’s callyou1 business dayPOST /{namespace}/conversations/{conversation}/escalate
Stop“Not interested, please don’t email again.”nothing else sends to them, from any of your Startupsnobodyat oncePOST /{namespace}/contacts/{contact}/suppress

When it hands to you

Guarantees, renewals and thank-yous 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_663",
    "$type": "Task",
    "assignee": "worker_1",
    "due": "2026-10-06T17:00:00Z",
    "on": "handle_9",
    "brief": {
      "who": "Jess Moreno, a landlord creator, 41,000 median views",
      "chose": "offer-paid-post",
      "why": "3 paying Customers from her link in 90 days",
      "guarantee": "$164 (41,000 × $4 per 1,000), or her Commission when it is more",
      "never": [
        "pay for views alone",
        "a scripted story",
        "a Review ask"
      ]
    }
  }
]

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

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

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 pitch 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
fact-check (hub, on POST /{namespace}/content/{content}/publish)a pitch, brief or Page with a claim no record backsCut the claim, or name the record that backs it.POST /{namespace}/content/draft
disclosure-hold (the record’s Disclosure hold)Commission on Orders from a post with no disclosure in its content, or no Venue labelThe creator adds the disclosure; Commission 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)Commission on a self-purchase, a shared card, a coupon-site referrer or a Brand-name AdYou decide pay or void on the Approval.POST /{namespace}/approvals/{approval}/approve
creator-ceiling (the record’s Creator ceiling)a fifth post request to one creator in a month, across your StartupsWait for next month.GET /{namespace}/decisions
Stop (pauses the Play)Pauses whenThen
disclosurea second disclosure miss within 90 daysevery rung pauses for that creator; a third goes to you to end
refundrefunds and Disputes over twice your baseline, over 20+ Ordersthat creator’s code takes no new Orders; Commission holds
referral-yieldafter 60 signed creators and 90 days, under 3 with a paying Customersourcing stops; a Decision on Offer, rate and niche opens
paid-rungafter 10 paid posts and 90 days, under $200 per $100 paidnew guarantees stop
spend-limitguarantees and Commission over the month’s Limitthey wait for your approval
complaintspam complaints near 0.1 % of a day’s pitchespitches pause on every Mailbox
bouncebounces over 2 % of a day’s pitchesthe Mailbox pauses
hostile-reply3 hostile replies in any 100 pitchespitching pauses; the template returns to You approve each one
kill-switchyou press itevery step pauses; earned Commission still pays
+ 1 more for the video lane: a Venue notice on a creator post (?lanes=all)

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

422RefusedThe pitch to Rosa Lin did not send: it states a customer count no record backs.
CheckFixThen
fact-check fail · Not live yet, gaps #1Cut the claim, or name the record that backs it.POST /{namespace}/content/draft
creator-ceiling pass—GET /{namespace}/decisions
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "The pitch to Rosa Lin did not send: it states a customer count no record backs.",
  "checks": [
    {
      "check": "fact-check",
      "status": "fail",
      "doc": "/plays/creator-partnership#check-fact-check",
      "fix": "Cut the claim, or name the record that backs it.",
      "then": "Content.draft"
    },
    {
      "check": "creator-ceiling",
      "status": "pass"
    }
  ]
}

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

The Stops that fired, as Campaign.paused reasons · sample
[
  {
    "reason": {
      "limit": "disclosure",
      "observed": "2 misses",
      "bound": "1 in 90 days",
      "window": "90d"
    },
    "doc": "/plays/creator-partnership#stop-disclosure",
    "task": "task_671"
  }
]

Did it work

At 6 new Customers in 8 weeks, the post weeks drawn at random read nothing within 90 days, so the basis is before-after (rule o): nothing prints 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).

$640 collected from Customers creators sent against $0 before · before-after, not proof · n 6 · path → arr

Chose
pitch-referral
Why
Rosa Lin’s property-management channel draws 7 renewal questions per 1,000 comments, above the floor of 5, and passed the authenticity read
From
pitch-referral · thank-the-mention · offer-paid-post · hold-the-commission · renew-or-end · not-now
Expects
a signed referral Agreement within 14d
Reopens when
no reply from handle_23 within 5d; one follow-up then sends in the same thread
By
worker_10
JSON
{
  "$id": "decisions/decision_651",
  "$type": "Decision",
  "choice": "pitch-referral",
  "reason": "Rosa Lin’s property-management channel draws 7 renewal questions per 1,000 comments, above the floor of 5, and passed the authenticity read",
  "stakes": "low",
  "options": [
    "pitch-referral",
    "thank-the-mention",
    "offer-paid-post",
    "hold-the-commission",
    "renew-or-end",
    "not-now"
  ],
  "by": "worker_10",
  "on": "handle_23",
  "expected": "a signed referral Agreement within 14d",
  "reopensWhen": "no reply from handle_23 within 5d; one follow-up then sends in the same thread"
}
NodeNow (56 days)Before (the 56 days before)AddedConfidenceBasis
creator-attributed-revenue$640 collected, net of refunds, from 6 Customers creators sent$0 (no creators)— · Worth about +$590 a month—before-after, not proof · Other Startups’ results +2.4 paying Customers a month per 10 signed creators, ■■□□ Early sign, n 310
referral-share ↑6 of 14 new paying Customers (43 %)2 of 11 (18 %)——before-after
new-paying-customers · new-arr$2,088, 6 Customers · Booked $2,088: credited, not all caused by this Play$0——before-after · Jess’s paid post still inside its 90 days
net-new-arr · arrcarried from new-arrcarried——carried

The leaf counts collected revenue, net of refunds and Disputes, from Orders whose first Acquisition names a creator, sealed weekly. The post-week read compares new Customers in weeks drawn at random for a paid post against the creator’s other weeks.

How it moves it: each creator gets a code, a link and free access, and their viewers’ questions already match what Leaseline answers; 3 of 7 signed creators sent a paying Customer.

Guardrails: before against after: refunds on creator Orders, 0 of 6 against a direct 1 in 14, and $200 per $100 paid, waiting for 10 paid posts.

The Campaign card · sample
{
  "$id": "https://api.sb/leaseline.app/campaigns/creator-partnership",
  "$type": "Campaign",
  "play": "play:creator-partnership@1",
  "path": [
    "creator-attributed-revenue",
    "referral-share",
    "new-paying-customers",
    "new-arr",
    "net-new-arr",
    "arr"
  ],
  "experiment": {
    "metric": "creator-attributed-revenue",
    "unit": "usd",
    "heldBack": 0,
    "decision": null
  },
  "readout": {
    "value": null,
    "n": 6,
    "maturing": 2,
    "interval": null,
    "readability": "inadmissible",
    "basis": "before-after",
    "pooled": true
  },
  "ledger": {
    "spend": 292,
    "workerCost": 2,
    "hours": 1.4,
    "pipelineArr": 696,
    "wonArr": 2088,
    "projectedArr": 585,
    "paybackDays": 51
  }
}

Outside benchmark: 7.6 % of recruited partners make at least one referral and 1.28 % a sale, at an average Commission of 24.16 % (2,847 SaaS partner programs, a partner-program platform’s report, 2026-03-17).

Before it · After it. Before it: creator-probe finds which creators move Leads, and community-answers shows which questions they answer. After it: creator-ads runs a creator’s winning post as a paid Ad, and commission-partners pays every Partner on the same run.

Example

Leaseline ran it from 2026-08-24 to 2026-10-19 (56 days): 64 creators sourced, 29 above the ask-density floor, 40 pitches (29 plus 11 follow-ups), 7 signed referral terms, 3 sent paying Customers, and 1 paid post. Read every captured thread at ?threads=all; three follow the tables.

What happened, by optionDecisionsDoneCustomers (Booked: credited, not all caused by this Play)
Pitch referral terms2929 pitches, 11 follow-ups, 7 signed6 · $2,088
Offer a paid post1Jess, $164 guarantee, approvedstill inside its 90 days
Answer an unprompted mention · Hold the Commission · Not now2 · 2 · 12 written by you · 2 fixed · ——
At 20 creators in the niche (the Use it when volume)about 5 signed in 8 weeksbefore-after, not proofOther Startups’ results: +2.4 per 10 signed a month, ■■□□ Early sign, n 310
DayEventWhat happenedYour time
0event_118 Campaign.createdthe three steps; the dry run fails billing-connected20 min
1event_131 Integration.connectedStripe payouts on10 min
3event_160 Action.refusedfact-check refused a pitch stating a customer count; the rewrite sent—
9event_222 Agreement.signedthe first creator signs referral terms—
14event_290 Role.updatedpromoted: pitches send after a delay window—
31event_460 Campaign.pauseddisclosure: a second miss; that creator’s rungs paused until she fixed both5 min
43event_590 Approval.approvedyou approve Jess’s $164 paid post5 min
1–56event_141 Task.assigned, first of 4you wrote 2 thank-yous and approved 1 guarantee; weekly reviews, from the POST /{namespace}/tasks/next log45 min · total 1.4 h measured, 2 h asked

Partnerships · your agent → Jess Moreno, Sep 3, 10:05 · Your viewers keep asking how to get renewal notices out on time; your Aug 28 video drew 31 of those questions.¹ Leaseline does that job, and you can use it free.² If someone you send pays, you earn 20 % of what they pay for 12 months, after a 30-day refund window.³ *Signed with the Role’s disclosure line.*⁴

Jess, Sep 4, 09:12 · signed the referral terms; her first viewer paid on Sep 19.

Rosa Lin, 2026-08-27 · the pitch fact-check refused, then the rewrite that sent
- Over 2,000 landlords already trust Leaseline with their renewals.
+ Your viewers ask about renewal notices often: 7 of every 1,000 comments on your channel.

Jess, 2026-10-05 15:30 · “Happy to do a dedicated video. What would that pay?” · Partnerships · your agent, 15:31 · *Thanks, Jess. Dana confirms the number by tomorrow evening.*⁵ The Brief went to you (task_663), due Oct 6 17:00; you approved $164 at 11:20.

¹ Only the creator’s own public posts and the questions under them. ² Free access counts as payment; the disclosure line covers it. ³ The terms 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-partnership.mdx
---
rate: 0.20        # of collected revenue, for 12 months
floor: 5          # buyer questions per 1,000 comments
paid-post: 2      # paying Customers before a paid post
---
Offer creators whose comments are full of landlords asking about renewals our referral terms and free access. Pay for a post only after 2 paying Customers; I approve every guarantee.
Text
$ npx startup-builder show plays/creator-partnership
rate 0.20 · floor 5 · paid-post 2     your file  plays/creator-partnership.mdx:2-4,6 (Ask 2026-08-24)
family referral · worker role:partner-manager, owns never · chooses 6 (3 rule, 3 read) · sequences creator-pitch, creator-onboard, disclosure-fix · checks owned-by-a-person, fact-check, disclosure-hold, category, fraud-hold, creator-ceiling · stops 10 · placements gmail, outlook, yahoo-mail, tiktok, instagram, youtube, linkedin, x    catalog  play:creator-partnership@1 (Not live yet, gaps #5)

Every key from the catalog

Key Id What it is
Tactic creator-sourcing Creator sourcing ranks creators each week by how often their commenters ask for what the Startup sells, times fit to the ICP, never by followers. Starts at Sends nothing.
Tactic creator-signing Creator signing pitches each ranked creator once, signs the rung’s Agreement inside the approved band, and issues codes, links and a Partner view. 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 creator-attribution Creator attribution seals a weekly reading of creator-attributed revenue per creator, holds suspect Orders, and pays Commission and guarantees through Stripe. Starts at It does it, you can stop it.
Tactic creator-renewal Creator renewal scores each creator at term end, re-prices the paid rung from the view median, and promotes, renews, demotes or ends by fixed bands. Starts at You approve each one.
Tactic co-branded-offer Co-branded offer publishes an Offer under a creator’s name with the Startup named as operator, under a likeness license that reverts when the Agreement ends. Starts at You approve each one.
Trigger unprompted-creator-mention Unprompted creator mention: event on Post.published, 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 creator-acquisition Creator acquisition: event on Acquisition.recorded, window 90d.
Trigger clawback-closed Clawback closed: at on Monitor.checked, window 7d.
Trigger creator-term-ending Creator term ending: at on Monitor.checked, window 14d.
Trigger creator-code-leak Creator code leak: event on Monitor.checked, window 1d.
Sequence creator-pitch Creator pitch: 2 steps; it ends on The creator replies.; The creator signs an Agreement.; The creator declines, opts out or is suppressed.; 14 days pass from the pitch..
Sequence creator-onboard Creator onboard: 3 steps; it ends on The creator publishes a first post.; The Agreement ends.; The creator asks for no more Messages..
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 partner-referral-rate Share of recruited partners who make at least one referral.: 7.6 % (A partner-program platform’s 2026 report on its SaaS programs., 2026-03-17).
Benchmark partner-sale-rate Share of recruited partners who generate at least one sale.: 1.28 % (A partner-program platform’s 2026 report on its SaaS programs., 2026-03-17).
Benchmark partner-commission-rate Average commission rate across partner programs, typical range 20 to 30 percent.: 20–30 % (A partner-program platform’s 2026 report on its SaaS programs., 2026-03-17).
Benchmark partner-referred-buy-rate Share of partner-referred visitors who buy within 90 days.: 0.8 % (A partner-program platform’s 2026 report on its SaaS programs., 2026-03-17).

Compiled, not written: edit the Play record creator-partnership 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.