Made-with line
Adds one disclosed “Made with” line to what your Customers send to people outside, so each report or notice can bring a signup.
- Channel
- Partnerships
- Kind
- Word of mouth
- Summary
- startupbuilder.dev
Be our Partner Manager for the made-with line: put one plain “Made with Leaseline” line on the owner reports and renewal notices our Customers send. Tell each Customer first, and let Pro remove it in one click. Credit a Customer when someone their line brought pays. Show me what’s missing; don’t stamp anything.
# Not live yet (gaps #2)
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":"made-with"}'import { $ } from 'startup-builder'
return await $.Campaign.create({ play: 'made-with' }, { mode: 'try' }) // dry run on the day-0 Startup, 2026-08-24 · Not live yet, gaps #2
npx startup-builder do Campaign.create --json '{"play":"made-with"}' --try # Not live yet (gaps #2){
"name": "do",
"arguments": {
"code": "return await $.Campaign.create({ play: 'made-with' }, { mode: 'try' }) // dry run on the day-0 Startup, 2026-08-24 · Not live yet, gaps #2",
"mode": "try"
}
}application/json{
"type": "https: //startupbuilder.dev/ errors/ refused",
"title": "Refused",
"status": 422,
"detail": "made-with can’t start: 2 checks fail and 1 warns.",
"checks": [
{
"check": "use-when",
"status": "pass",
"observed": "41 Customers; 5, 900 outputs a month leave a Tenant",
"doc": "/plays/ made-with#check-use-when",
"then": "Metric.query"
},
{
…
Hand our latest Customer output to the Partner Manager agent and show me what it chose and why. Don’t send.
curl "https://api.sb/leaseline.app/events?where=name%20in%20(%22Thing.shared%22%2C%20%22Event.captured%22%2C%20%22Visitor.identified%22%2C%20%22Invoice.collected%22%2C%20%22Document.rendered%22%2C%20%22Subscription.switched%22%2C%20%22Version.deployed%22%2C%20%22Monitor.checked%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_1219"}'
# Not live yet (gaps #7)
curl "https://api.sb/leaseline.app/decisions?where=on%20%3D%20%22customer_22%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%22customer_22%22" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"import { $ } from 'startup-builder'
const { events: [last] } = await $.Event.list({ where: 'name in ("Thing.shared", "Event.captured", "Visitor.identified", "Invoice.collected", "Document.rendered", "Subscription.switched", "Version.deployed", "Monitor.checked")', 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 (\"Thing.shared\", \"Event.captured\", \"Visitor.identified\", \"Invoice.collected\", \"Document.rendered\", \"Subscription.switched\", \"Version.deployed\", \"Monitor.checked\")","limit":1}'
npx startup-builder do Trigger.fire --json '{"like":"event_1219"}' --try # Not live yet (gaps #7)
npx startup-builder do Decision.list --json '{"where":"on = \"customer_22\""}' # Not live yet (gaps #7)
npx startup-builder do Action.list --json '{"where":"on = \"customer_22\""}' # Not live yet (gaps #7){
"name": "do",
"arguments": {
"code": "const { events: [last] } = await $.Event.list({ where: 'name in (\"Thing.shared\", \"Event.captured\", \"Visitor.identified\", \"Invoice.collected\", \"Document.rendered\", \"Subscription.switched\", \"Version.deployed\", \"Monitor.checked\")', 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"
}
}application/json{
"decision": {
"$id": "https: //api.sb/ leaseline.app/ decisions/ decision_446",
"$type": "Decision",
"choice": "stamp-the-line",
"reason": "Juniper Homes’ October owner reports go to 14 owners, none of them Customers; Juniper is on Starter and kept the line, and saw the line notice on Aug 26",
"stakes": "low",
"options": [
"stamp-the-line",
"stamp-with-credit",
"offer-the-share-card",
"credit-the-customer",
"to-you",
"not-now"
…
sample · 4 Not live yetPreviewOn PATCH /{namespace}/campaigns/{id}Off PATCH /{namespace}/campaigns/{id}Take this one POST /{namespace}/tasks/{task}/claim
action_1 renders the 14 reports with the line after Juniper’s signature, smaller than the body, each link coded and marked nofollow. In try mode nothing sends.
2.0 signups per 1,
| Try another: the Customer | Choice | Reason |
|---|---|---|
| Juniper Homes: October owner reports to 14 owners | stamp-the-line | requested outputs to people outside; the line is kept |
| Maple Court: a value receipt, 212 renewal notices on time this quarter | offer-the-share-card | numbers from their own Events, worth posting |
| Harbor Row: at risk since Oct 2 | not-now | keep-first: their CSM sees them first |
| Juniper Homes runs Leaseline for 6 client owners | to-you | a heavy marker: partner terms are yours |
- 30 min once, then 10 a week
- Your time
- Day 11: first paying signup from a line
- First signal
Where it sits: Stranger → Lead → Trialing → Activated → At risk → Churned → Won back · Mark signups → New Leads → New Customers ↑ → ARR added each week → ARR
Worth’s formula: about +1.8 signups per 1,000 marked outputs (Other Startups’ results; no lift of your own to read) × 6,100 marked outputs a month × 0.17 signups to paid × $347 first order ARR ≈ +$648. Under First signal: At 41 Customers, no held-back tenth reads within 90 days, so your file starts at holdout: and reads before-after.
sample · api.sb/
Start it this week
npx startup-builder add play made-with # 1 · writes plays/made-with.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":"made-with"}'
# 3 · keep it: the line notice goes first, then lines stamp
curl -X POST https://api.sb/leaseline.app/campaigns \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"play":"made-with"}'
# on
curl -X PATCH https://api.sb/leaseline.app/campaigns/made-with \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"endsAt":null}'
# off: the next render of every output carries no line
curl -X PATCH https://api.sb/leaseline.app/campaigns/made-with \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"endsAt":"now"}' | Check | Fix | Then |
|---|---|---|
use-when pass · Not live yet, gaps #8 | 41 Customers; 5,900 outputs a month leave a Tenant | POST /{namespace}/metrics/query |
billing-connected fail · Not live yet, gaps #8 | Connect Stripe so Pro removes the line and credits post as Credit Grants. | POST /{namespace}/integrations/connect |
line-on-pricing fail | Say on your Pricing Page that free plans carry the line and Pro removes it. | POST /{namespace}/sites/{site}/publish |
baseline pass · Not live yet, gaps #8 | 2 signups in 56 days named a Leaseline output as how they heard, n 90 days | POST /{namespace}/metrics/query |
role-unstaffed warn · Not live yet, gaps #8 | Staff the CSM, or leave it: at-risk Customers come to you, and Priya’s 4 get drafts in her queue. | POST /{namespace}/roles/{role}/staff |
JSON
{
"type": "https://startupbuilder.dev/errors/refused",
"title": "Refused",
"status": 422,
"detail": "made-with can’t start: 2 checks fail and 1 warns.",
"checks": [
{
"check": "use-when",
"status": "pass",
"observed": "41 Customers; 5,900 outputs a month leave a Tenant",
"doc": "/plays/made-with#check-use-when",
"then": "Metric.query"
},
{
"check": "billing-connected",
"status": "fail",
"doc": "/plays/made-with#check-billing-connected",
"fix": "Connect Stripe so Pro removes the line and credits post as Credit Grants.",
"then": "Integration.connect"
},
{
"check": "line-on-pricing",
"status": "fail",
"doc": "/plays/made-with#check-line-on-pricing",
"fix": "Say on your Pricing Page that free plans carry the line and Pro removes it.",
"then": "Site.publish"
},
{
"check": "baseline",
"status": "pass",
"observed": "2 signups in 56 days named a Leaseline output as how they heard, n 90 days",
"doc": "/plays/made-with#check-baseline",
"then": "Metric.query"
},
{
"check": "role-unstaffed",
"status": "warn",
"roles": [
"success-manager"
],
"owned": 4,
"doc": "/plays/made-with#check-role-unstaffed",
"fix": "Staff the CSM, or leave it: at-risk Customers come to you, and Priya’s 4 get drafts in her queue.",
"then": "Role.staff"
}
]
}It says no, says why, and names the fix.
| Check | Fix (one call) | Your time | Wait |
|---|---|---|---|
use-when · baseline · pass: 41 Customers, 5,900 outputs a month; 2 heard-from signups (gaps #8) | POST /{namespace}/metrics/query on mark-signups, which fills Before in Your number | 1 min | none |
billing-connected · fail | POST /{namespace}/integrations/connect with system recurring-billing (Stripe) | 5 min | the first sync, about 10 min |
line-on-pricing · fail (gaps #8) | POST /{namespace}/sites/{site}/publish the Pricing Page with the line’s terms | 10 min | none |
role-unstaffed · warn (gaps #8): 4 of your Customers have a person owner, Priya | POST /{namespace}/roles/{role}/staff, or leave it: CSM routes come to you | 0 min | none |
Your number · Before 2 heard-from signups per 56 days · Now 2.0 signups per 1,
The line costs nothing to render. A credit is one month of the lowest paid Price, $29, per paying signup a line brings, inside a $500 monthly credit Limit. That came to $116 for 4 credits in 56 days, plus about $1 a month of Worker cost for share cards.
When it starts
| When | Trigger id | Starts on | Window | How it gets in |
|---|---|---|---|---|
| An owner report or notice with the line goes to someone who is not a Customer | marked-output-sent | event on Thing.shared where line = true and recipient.customer = false | 30d | your Product renders it through POST /{namespace}/documents/{document}/render |
| Someone signs up through a line’s link code | mark-signup | event on Visitor.identified where firstAcquisition.linkCode is set | 30d | the code rides the link; nothing to connect |
| That signup pays, and 14 days pass with no refund | mark-first-payment | state on Invoice.collected where a mark-acquired Customer’s first Invoice collected, 14 days with no refund or Dispute | 14d | POST /{namespace}/integrations/connect (Stripe) |
+ 5 more for arrivals, value receipts, line settings, new output kinds and heavy markers (?lanes=) |
{
"$id": "https://api.sb/leaseline.app/events/event_1219" ,
"$type": "Event",
"name": "Thing.shared",
"at": "2026-10-19T08:00:05Z" ,
"seq": 1219,
"data": {
"customer": "customers/customer_22" ,
"name": "Juniper Homes",
"kind": "owner-report",
"recipients": 14,
"recipientsCustomers": 0,
"offer": "Starter",
"line": "kept"
}
}# each delivery is signed with the Watch’s secret
curl -X POST https://api.sb/leaseline.app/watches \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"selector":"Thing.shared","url":"https://leaseline.app/hooks/sb"}'
npx startup-builder trigger Thing.shared --like event_1219 # replays the delivery through the stamp
npx startup-builder clock advance --by 30d # reads the signups the line broughtWho runs it
Partner Manager · your agent (role:, worker_9) holds the Key Result: it stamps lines, records arrivals, credits Customers and runs the weekly audit. Heavy markers hand to you (Dana Okafor, person, worker_1), and at-risk Customers stay with their owner: AE · Priya Shah (person) for the 4 she owns, else you, since the CSM Role has no person.
| Option | Rung today | Evidence (passed of n) | Moves up at | Drops back when | You can |
|---|---|---|---|---|---|
| Stamp the line · Stamp it with credit | It does it | 11,400 outputs marked, 0 audit misses | met on day 7 (the first audit passed) | a recipient or label Stop → that kind pauses | POST /{namespace}/customers/{customer}/exempt · the off switch |
| Offer the share card | It does it, you can stop it | 9 offered, 3 posted by Customers | met on day 21 | a number its Events lack → You approve each one | POST /{namespace}/actions/{action}/cancel inside the hold |
| Credit the Customer | It does it | 4 of 4 | — | the fraud Stop → credits hold | POST /{namespace}/credit-grants/{creditGrant}/void |
| To you · Not now | It does it | 1 of 1 · 6 of 6 | — | — | POST /{namespace}/actions/{action}/redirect |
| Change the line | You approve each one | 1 merged of 1 | never | — | POST /{namespace}/changes/{change}/merge · POST /{namespace}/changes/{change}/revert |
| Never: a line saying the Customer recommends you; a line on an output to a Customer | Refused, every time | 1 drafted, 1 refused | never | — | the line-claim Check and the recipient Stop |
What it reads · What it may call. It reads each output’s kind and its recipients’ Customer status, never what the output says. It may call POST /{namespace}/documents/{document}/render, POST /{namespace}/referrals and POST /{namespace}/credit-grants/issue; the share card is the Customer’s to post. Its tools are POST /{namespace}/documents/{document}/render, POST /{namespace}/referrals, POST /{namespace}/messages/{message}/schedule, POST /{namespace}/credit-grants/issue, POST /{namespace}/tasks/{task}/assign, and any other call becomes an Approval under the Role’s Mandate.
You hold the Partner Manager Key Result: 2.5 signups per 1,000 marked outputs by 2026-12-31. ← worker, metric
On each output, choose one option and say why; an at-risk Customer gets Not now. ← triggers, chooses, keep-first
Mark owner reports only; tenant notices carry no line. ← your file, line 5
The line reads “Made with Leaseline” first, with at most 6 more words from the claims source. ← copyRules 1
Never say or imply the Customer recommends Leaseline. ← copyRules 3, line-claim
A line that earns credit says so in the same line, at the same size. ← copyRules 4 The slow loop, as a Change. decision_404 (2026-09-21, weekly) read 19 signups from owner reports against 2 from tenant notices, so change_34 kept the line on owner reports and dropped it from tenant notices (your file, line 5), and Dana merged it with POST /{namespace}/changes/{change}/merge. Replayed on past outputs, POST /{namespace}/changes/{change}/review put the rate at 3.1 per 1,000; read back at +21d it is 2.9 per 1,000, n 3,800, ■■□□ Early sign (Example, day 49).
Bring your own agent (folded) stamps at the same rung when it matches the seated agent on the eval suite; POST /{namespace}/roles/{role}/staff seats it.
npx startup-builder eval --scenario made-with-41 --agent "claude -p" --seat partner-manager # seated: 0 lines on Customers, 0 unlabeled credit, 0 late removals · yours: 0, 0, 2 late removals → fix removals first What it can do next
| Option | Picked when | Decided by | Runs | Hands to | If it’s just you |
|---|---|---|---|---|---|
Stamp the line stamp-the-line | a requested output to someone outside, from a free Offer or a Customer who kept the line | Your rule (line 5) | POST /{namespace}/documents/{document}/render with the line after the signature, nofollow | nobody | the same |
Stamp it with credit stamp-with-credit | the Customer turned credit back on | Your rule (the Customer’s Setting) | POST /{namespace}/documents/{document}/render with the labeled line → POST /{namespace}/referrals on arrival | nobody | the same |
Offer the share card offer-the-share-card | a value receipt whose numbers the Customer’s own Events back | Agent’s call, with its reason | POST /{namespace}/documents/{document}/render the card → POST /{namespace}/messages/{message}/schedule a note offering it | the Customer, who posts it or not | the same |
Credit the Customer credit-the-customer | a Customer a line brought pays, and 14 days pass with no refund | Your rule (the credit) | POST /{namespace}/credit-grants/issue: one month of the lowest paid Price | nobody | the same |
To you to-you | lines brought 3 paying Customers in 90 days, or they run Leaseline for 5 or more clients | Agent’s call, with its reason | POST /{namespace}/tasks/{task}/assign, with the counts | you, due 1 business day · Take this one | you |
Not now not-now | an output to a Customer, a Suppressed address or a bulk send, a removed line, or keep-first | Your rule (rule j and the recipient rule) | nothing; names the rule or the Customer’s owner | their owner, for keep-first · Take this one | you |
| When they write back | Fixture reply | What happens | Who answers | By when | Call |
|---|---|---|---|---|---|
| Interested | an owner, from the landing Page: “Can I use this for my 3 buildings?” | a new Lead to instant-response, with the line’s link code on its Acquisition | SDR · your agent | 5 min | POST /{namespace}/leads |
| Send me pricing | a Customer: “What does it cost to remove the line?” | answers with the Pricing Page: Pro removes it in one click | Partner Manager · your agent | 5 min | POST /{namespace}/conversations/{conversation}/answer |
| Not now | a Customer: “Not posting the receipt this month.” | the share card closes, and customer-ask-cap frees the Customer | nobody | at once | GET /{namespace}/decisions |
| Wrong person | “Send the share card to our office manager.” | asks them to forward it; it never writes to an address from their text | Partner Manager · your agent | 1 business day | POST /{namespace}/conversations/{conversation}/answer |
| Out of office | an auto-reply to the line notice | no output carries the line until the notice reaches them | nobody | the return date | POST /{namespace}/messages/{message}/schedule |
| Question it can’t answer | “Does the line change what our tenants see?” | To you, with the output kinds listed | you (Dana, person) | 1 business day | POST /{namespace}/conversations/{conversation}/escalate |
| Stop | “Take the line off our reports.” | removed on the next render, and within 1 hour on hosted outputs | nobody | the next render | POST /{namespace}/customers/{customer}/exempt |
When it hands to you
Heavy markers hand to you (Dana Okafor, person) for partner terms; at-risk Customers stay with their owner, Priya for the 4 she owns and you for the rest. As captured, the Brief (brief is Not live yet, gaps #7).
[
{
"$id": "https://api.sb/leaseline.app/tasks/task_536" ,
"$type": "Task",
"assignee": "worker_1",
"due": "2026-10-20T17:00:00Z" ,
"on": "customer_22",
"brief": {
"who": "Juniper Homes, on Starter since 2026-05" ,
"counts": "lines brought 3 paying Customers in 90 days; Juniper runs Leaseline for 6 client owners" ,
"chose": "to-you",
"why": "a heavy marker: partner terms are yours, through `commission-partners`" ,
"never": [
"a credit past the $500 Limit",
"Juniper’s name on a landing Page without Consent"
]
}
}
]You answer with POST /{namespace}/tasks/{task}/claim (Take this one), POST /{namespace}/tasks/{task}/return with a reason, or POST /{namespace}/actions/{action}/redirect. A held Customer’s owner sees them with POST /{namespace}/tasks/next, and nothing marks for them while keep-first holds. A Task nobody claims by its due time goes up a Role through POST /{namespace}/tasks/{task}/escalate, and person-promise fires.
On time: You: 1 of 1 claimed within 1 business day, n 1, ■□□□ Too early to tell beside Other Startups’ 92 % on time. Your queue: counted by kind: 1 line approval at setup, then the 10-minute weekly audit digest and about 1 heavy-marker brief 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) | Refuses | Fix | Then |
|---|---|---|---|
owned-by-a-person (rule j; Not live yet, gaps #8) | a share-card note to a Customer whose open Deal or claimed Conversation a person holds | Leave it to the person who owns it: the draft waits in their queue. | POST /{namespace}/tasks/{task}/assign |
keep-first (rule j, gaps #8) | a share card, or a credit-back prompt, to a Customer who is at risk, past due or leaving | Let their CSM reach them first, then ask again once they are healthy. | POST /{namespace}/tasks/next |
customer-ask-cap (gaps #3) | a second open ask to one Customer in a window, from any Play | usage-upsell holds them until Nov 3. | GET /{namespace}/decisions |
approved-pages (Not live yet) | a line word, or a share-card number, that the claims source or the Customer’s own Events lack | Cut the word, or publish the Page that says it. | POST /{namespace}/sites/{site}/publish |
line-claim (copy rule 3) | a line that says or implies the Customer recommends Leaseline | Say “Made with Leaseline” and nothing about them. | POST /{namespace}/content/draft |
The captured refusal, then the Stop that fired as a Campaign.paused reason (Not live yet, gaps #2); the rewrite that shipped is the line thread in Example.
| Check | Fix | Then |
|---|---|---|
line-claim fail | Say “Made with Leaseline” and nothing about them. | POST /{namespace}/content/draft |
keep-first pass · Not live yet, gaps #8 | — | POST /{namespace}/tasks/next |
JSON
{
"type": "https://startupbuilder.dev/errors/refused",
"title": "Refused",
"status": 422,
"detail": "The line on Juniper Homes’ owner reports did not render: it says Juniper recommends Leaseline.",
"checks": [
{
"check": "line-claim",
"status": "fail",
"doc": "/plays/made-with#check-line-claim",
"fix": "Say “Made with Leaseline” and nothing about them.",
"then": "Content.draft"
},
{
"check": "keep-first",
"status": "pass"
}
]
}It says no, says why, and names the fix.
[
{
"reason": {
"limit": "removal",
"observed": "1 hosted report still marked after 1h 40m",
"bound": "1 hour",
"window": "hosted outputs"
},
"doc": "/plays/made-with#stop-removal" ,
"task": "task_444"
}
]Did it work
At 41 Customers, no held-back tenth reads within 90 days, so the basis is before-after (rule o): the columns read Now and Before, and 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).
2.0 signups per 1,
- Chose
- stamp-the-line
- Why
- Juniper Homes’ October owner reports go to 14 owners, none of them Customers; Juniper is on Starter and kept the line, and saw the line notice on Aug 26
- From
- stamp-the-line · stamp-with-credit · offer-the-share-card · credit-the-customer · to-you · not-now
- Expects
- Visitor.identified with this line’s link code within 30d
- Reopens when
- no Visitor.identified with Juniper’s link codes within 30d of 1,000 marked outputs
- By
- worker_9
JSON
{
"$id": "decisions/decision_446",
"$type": "Decision",
"choice": "stamp-the-line",
"reason": "Juniper Homes’ October owner reports go to 14 owners, none of them Customers; Juniper is on Starter and kept the line, and saw the line notice on Aug 26",
"stakes": "low",
"options": [
"stamp-the-line",
"stamp-with-credit",
"offer-the-share-card",
"credit-the-customer",
"to-you",
"not-now"
],
"by": "worker_9",
"on": "customer_22",
"expected": "Visitor.identified with this line’s link code within 30d",
"reopensWhen": "no Visitor.identified with Juniper’s link codes within 30d of 1,000 marked outputs"
}| Node | Now (56 days) | Before (the 90 days, per 56) | Added | Confidence | Basis |
|---|---|---|---|---|---|
mark-signups | 2.0 per 1,000: 23 signups from 11,400 matured marked outputs | no line on outputs; 2 signups named a Leaseline output as how they heard | — · Worth about +$650 a month | — | before-after, not proof · Other Startups’ results +1.8 per 1,000, ■■■□ Likely, n 2.1M outputs, 5 % of Customers held back at random |
new-leads | 23 Leads with a line’s link code | 2 | — | — | before-after |
new-arr ↑ | $1,388, 4 Customers on Pro · Booked: credited, not all caused by this Play | $347 | — · 6 trials still deciding | — | before-after, not proof |
net-new-arr · arr | carried from new-arr | carried | — | — | carried |
Before against after reads signups whose first Acquisition carries a line’s link code, within 30 days of each output, against the 90 days before, when outputs named nobody, scaled to 56 days. It is not proof; Other Startups’ results, read against 5 % of Customers held back at random, print beside it.
How it moves it: an owner reading a monthly report sees one plain line naming Leaseline after the Customer’s signature, with a coded link to a landing Page for owner reports.
Guardrails: before against after: outside-paying-customers, 4 against 1, and 60-day retention of marked Customers, 40 of 41 against a trailing 39 of 41; 0 complaints on marked emails.
{
"$id": "https://api.sb/leaseline.app/campaigns/made-with" ,
"$type": "Campaign",
"play": "play:made-with@1" ,
"path": [
"mark-signups",
"new-leads",
"new-arr",
"net-new-arr",
"arr"
],
"experiment": {
"metric": "mark-signups",
"unit": "per-1000",
"heldBack": 0,
"decision": null
},
"readout": {
"value": null,
"n": 11400,
"maturing": 2600,
"interval": null,
"readability": "inadmissible",
"basis": "before-after",
"pooled": true
},
"ledger": {
"spend": 116,
"workerCost": 1,
"hours": 1.5,
"pipelineArr": 2082,
"wonArr": 1388,
"projectedArr": 648,
"paybackDays": 30
}
}Outside benchmark: none measures a disclosed made-with line on business outputs for this kind of Product; Other Startups’ results, +1.8 per 1,000, ■■■□ Likely, stand in for one.
Before it · After it. Before it: usage-upsell and product-led keep Customers sending outputs. After it: owner signups go to instant-response and product-led, and heavy markers to commission-partners; keep-first holds an at-risk Customer’s line prompts.
Example
Leaseline ran it from 2026-08-24 to 2026-10-19 (56 days) on 41 Customers: 9 on Pro removed the line, and 32 sent 14,000 outputs to people outside, 11,400 of them matured past 30 days. Read every captured thread at ?threads=; three follow the tables.
| What happened, by option | Decisions | Outputs or cards | Signups | Paid (credited, not all caused by this Play) |
|---|---|---|---|---|
| Stamp the line | 286 | 14,000 marked (owner reports 3,800 since day 28) | 25 | 4 on Pro (+$1,388 ARR) |
| Stamp it with credit · Credit the Customer | 3 · 4 | 3 Customers · 4 credits ($116) | — | — |
| Offer the share card | 9 | 3 posted by Customers | 2 | 0, 1 trial still deciding |
| To you · Not now | 1 · 6 | — | — | — |
| All · Before (90 days, per 56) | 309 | 14,000 | 23 of 11,400 matured · 2 | $1,388 · $347 |
| At 6,100 a month (the Use it when volume) | about 130 a month | 6,100 | before-after, not proof | Other Startups’ results: +1.8 per 1,000, ■■■□ Likely |
| Day | Event | What happened | Your time |
|---|---|---|---|
| 0 | event_135 Campaign.created | the three steps; dry run fails billing-connected and line-on-pricing | 20 min |
| 2 | event_164 Message.created | the line notice to 32 Customers, before any output carried the line | 5 min |
| 11 | event_312 Invoice.collected | the first paying signup from a line, an owner who read a Juniper report | — |
| 25 | event_470 Campaign.paused | removal: a hosted report kept the line 1h 40m after Pro; fixed in 20 min | 10 min |
| 28 · 49 | event_544 Change.merged · event_878 Readout.created | owner reports only: replayed at 3.1 per 1,000, read back at +21d at 2.9, n 3,800 | 5 min |
| 1–56 | event_170 Task.assigned, first of 2 | you approved the line, read 8 audit digests and took 1 heavy marker | 1.3 h · total 1.5 h measured, 1.5 h asked |
Juniper Homes → an owner, Sep 1, monthly report · after Juniper’s signature: Made with Leaseline · renewal notices per owner ¹
Sep 3 · the owner, who self-manages 3 other buildings, followed the coded link to the owner-report landing Page and signed up (first Acquisition: Juniper’s link code). Sep 4 · paid for Pro; on Sep 18, 14 days with no refund,
POST /{namespace}/credit-grants/issuegave Juniper one month, $29.²
- Juniper Homes recommends Leaseline for renewals.
+ Made with Leaseline · renewal notices per ownerJuniper Homes, 2026-10-19 08:00 · its lines had brought 3 paying Customers in 90 days, and it runs Leaseline for 6 client owners. The agent chose To you, with the counts, due Oct 20 17:00. The Brief is in When it hands to you (
task_536); partner terms go throughcommission-partners.
¹ “Made with” first, 6 more words from the claims source, after the signature, smaller than the body, nofollow. ² A credit only after payment and 14 days with no refund.
Your settings
---
holdout: 0 # 41 Customers are too few to hold 1 in 20 back; it reads before-after
creditLimit: 500
---
Mark owner reports only; tenant notices carry no line. Pro removes the line in one click. $ npx startup-builder show plays/made-with
holdout 0 · credit Limit 500 · owner reports only your file plays/made-with.mdx:2,3,5 (Ask 2026-08-24; line 5 by change_34, 2026-09-21)
family referral · worker role:partner-manager, owns never · chooses 6 (4 rule, 2 read) · sequences line-notice, line-return-notice · checks owned-by-a-person, keep-first, customer-ask-cap, approved-pages, line-claim · stops 9 · placements gmail, outlook, yahoo-mail, linkedin, x, instagram catalog play:made-with@1 (Not live yet, gaps #5) Every key from the catalog
Compiled, not written: edit the Play record made-with 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.