Skip to content

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
Run oneMode try
You, to your agent

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"
  }
}
Response200application/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 yetPreview

On 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,000 marked outputs, against none from outputs before · before-after, not proof · n 11,400 · path → arr

Try another: the CustomerChoiceReason
Juniper Homes: October owner reports to 14 ownersstamp-the-linerequested outputs to people outside; the line is kept
Maple Court: a value receipt, 212 renewal notices on time this quarteroffer-the-share-cardnumbers from their own Events, worth posting
Harbor Row: at risk since Oct 2not-nowkeep-first: their CSM sees them first
Juniper Homes runs Leaseline for 6 client ownersto-youa heavy marker: partner terms are yours

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: 0 and reads before-after.

sample · api.sb/leaseline.app · 41 Customers at 2026-10-19 · on Thing.shared · first marked output 1.2 s · 7 keys Not live yet

Start it this week

Terminal
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"}'
422Refusedmade-with can’t start: 2 checks fail and 1 warns.
CheckFixThen
use-when pass · Not live yet, gaps #841 Customers; 5,900 outputs a month leave a TenantPOST /{namespace}/metrics/query
billing-connected fail · Not live yet, gaps #8Connect Stripe so Pro removes the line and credits post as Credit Grants.POST /{namespace}/integrations/connect
line-on-pricing failSay 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 #82 signups in 56 days named a Leaseline output as how they heard, n 90 daysPOST /{namespace}/metrics/query
role-unstaffed warn · Not live yet, gaps #8Staff 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.

CheckFix (one call)Your timeWait
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 number1 minnone
billing-connected · failPOST /{namespace}/integrations/connect with system recurring-billing (Stripe)5 minthe first sync, about 10 min
line-on-pricing · fail (gaps #8)POST /{namespace}/sites/{site}/publish the Pricing Page with the line’s terms10 minnone
role-unstaffed · warn (gaps #8): 4 of your Customers have a person owner, PriyaPOST /{namespace}/roles/{role}/staff, or leave it: CSM routes come to you0 minnone

Your number · Before 2 heard-from signups per 56 days · Now 2.0 signups per 1,000 marked outputs · Target 2.5 by Dec 31 · before-after, not proof · n 11,400 matured outputs

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

WhenTrigger idStarts onWindowHow it gets in
An owner report or notice with the line goes to someone who is not a Customermarked-output-sentevent on Thing.shared where line = true and recipient.customer = false30dyour Product renders it through POST /{namespace}/documents/{document}/render
Someone signs up through a line’s link codemark-signupevent on Visitor.identified where firstAcquisition.linkCode is set30dthe code rides the link; nothing to connect
That signup pays, and 14 days pass with no refundmark-first-paymentstate on Invoice.collected where a mark-acquired Customer’s first Invoice collected, 14 days with no refund or Dispute14dPOST /{namespace}/integrations/connect (Stripe)
+ 5 more for arrivals, value receipts, line settings, new output kinds and heavy markers (?lanes=all)
One signed delivery · StartupBuilder-Signature
{
  "$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"
  }
}
Reproduce it in test
# 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 brought

Who runs it

Partner Manager · your agent (role:partner-manager, 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.

OptionRung todayEvidence (passed of n)Moves up atDrops back whenYou can
Stamp the line · Stamp it with creditIt does it11,400 outputs marked, 0 audit missesmet on day 7 (the first audit passed)a recipient or label Stop → that kind pausesPOST /{namespace}/customers/{customer}/exempt · the off switch
Offer the share cardIt does it, you can stop it9 offered, 3 posted by Customersmet on day 21a number its Events lack → You approve each onePOST /{namespace}/actions/{action}/cancel inside the hold
Credit the CustomerIt does it4 of 4—the fraud Stop → credits holdPOST /{namespace}/credit-grants/{creditGrant}/void
To you · Not nowIt does it1 of 1 · 6 of 6——POST /{namespace}/actions/{action}/redirect
Change the lineYou approve each one1 merged of 1never—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 CustomerRefused, every time1 drafted, 1 refusednever—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.

The brief (folded): compiled Agent-register Markdown · play:made-with@1 · each line names its record key
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.

Terminal
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

OptionPicked whenDecided byRunsHands toIf it’s just you
Stamp the line stamp-the-linea requested output to someone outside, from a free Offer or a Customer who kept the lineYour rule (line 5)POST /{namespace}/documents/{document}/render with the line after the signature, nofollownobodythe same
Stamp it with credit stamp-with-creditthe Customer turned credit back onYour rule (the Customer’s Setting)POST /{namespace}/documents/{document}/render with the labeled line → POST /{namespace}/referrals on arrivalnobodythe same
Offer the share card offer-the-share-carda value receipt whose numbers the Customer’s own Events backAgent’s call, with its reasonPOST /{namespace}/documents/{document}/render the card → POST /{namespace}/messages/{message}/schedule a note offering itthe Customer, who posts it or notthe same
Credit the Customer credit-the-customera Customer a line brought pays, and 14 days pass with no refundYour rule (the credit)POST /{namespace}/credit-grants/issue: one month of the lowest paid Pricenobodythe same
To you to-youlines brought 3 paying Customers in 90 days, or they run Leaseline for 5 or more clientsAgent’s call, with its reasonPOST /{namespace}/tasks/{task}/assign, with the countsyou, due 1 business day · Take this oneyou
Not now not-nowan output to a Customer, a Suppressed address or a bulk send, a removed line, or keep-firstYour rule (rule j and the recipient rule)nothing; names the rule or the Customer’s ownertheir owner, for keep-first · Take this oneyou
When they write backFixture replyWhat happensWho answersBy whenCall
Interestedan 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 AcquisitionSDR · your agent5 minPOST /{namespace}/leads
Send me pricinga Customer: “What does it cost to remove the line?”answers with the Pricing Page: Pro removes it in one clickPartner Manager · your agent5 minPOST /{namespace}/conversations/{conversation}/answer
Not nowa Customer: “Not posting the receipt this month.”the share card closes, and customer-ask-cap frees the Customernobodyat onceGET /{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 textPartner Manager · your agent1 business dayPOST /{namespace}/conversations/{conversation}/answer
Out of officean auto-reply to the line noticeno output carries the line until the notice reaches themnobodythe return datePOST /{namespace}/messages/{message}/schedule
Question it can’t answer“Does the line change what our tenants see?”To you, with the output kinds listedyou (Dana, person)1 business dayPOST /{namespace}/conversations/{conversation}/escalate
Stop“Take the line off our reports.”removed on the next render, and within 1 hour on hosted outputsnobodythe next renderPOST /{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).

What lands in each queue · sample
[
  {
    "$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)RefusesFixThen
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 holdsLeave 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 leavingLet 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 Playusage-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 lackCut 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 LeaselineSay “Made with Leaseline” and nothing about them.POST /{namespace}/content/draft
Stop (pauses the Play)Pauses whenThen
recipienta line found on an output to a Customer, a Suppressed address, a bulk send or an unsolicited kindthe line pauses on that kind
labela line that earns credit shows without its labelcredit back pauses on every kind; lines carry on unrewarded
link-attributea line link without nofollow, or a rewarded link without sponsoredthe line pauses on that kind until every link carries it
removala removal not honored on the next render, or within 1 hour on hosted outputsthe line pauses for every paid Customer
complaint (email)complaints on marked emails near 0.1 %, or 0.05 points over unmarkedthe line leaves every email output
retentionheld-back Customers’ 60-day retention beats the marked arm’s by 2 points, at 500 per armthe line pauses on free Offers and opens a Decision
fraudself-referral matches over 5 % of credited signups in 30 daysevery pending credit holds
yield-floorunder 1 signup per 1,000 marked outputs after 10,000a Decision opens on landing, copy and placement; the base line stays
kill-switchyou press itevery Tactic pauses at once; the next render carries no line

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.

422RefusedThe line on Juniper Homes’ owner reports did not render: it says Juniper recommends Leaseline.
CheckFixThen
line-claim failSay “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.

The Stops that fired, as Campaign.paused reasons · sample
[
  {
    "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,000 marked outputs, against none from outputs before · before-after, not proof · n 11,400 · path → arr

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"
}
NodeNow (56 days)Before (the 90 days, per 56)AddedConfidenceBasis
mark-signups2.0 per 1,000: 23 signups from 11,400 matured marked outputsno 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-leads23 Leads with a line’s link code2——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 · arrcarried from new-arrcarried——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.

The Campaign card · sample
{
  "$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=all; three follow the tables.

What happened, by optionDecisionsOutputs or cardsSignupsPaid (credited, not all caused by this Play)
Stamp the line28614,000 marked (owner reports 3,800 since day 28)254 on Pro (+$1,388 ARR)
Stamp it with credit · Credit the Customer3 · 43 Customers · 4 credits ($116)——
Offer the share card93 posted by Customers20, 1 trial still deciding
To you · Not now1 · 6———
All · Before (90 days, per 56)30914,00023 of 11,400 matured · 2$1,388 · $347
At 6,100 a month (the Use it when volume)about 130 a month6,100before-after, not proofOther Startups’ results: +1.8 per 1,000, ■■■□ Likely
DayEventWhat happenedYour time
0event_135 Campaign.createdthe three steps; dry run fails billing-connected and line-on-pricing20 min
2event_164 Message.createdthe line notice to 32 Customers, before any output carried the line5 min
11event_312 Invoice.collectedthe first paying signup from a line, an owner who read a Juniper report—
25event_470 Campaign.pausedremoval: a hosted report kept the line 1h 40m after Pro; fixed in 20 min10 min
28 · 49event_544 Change.merged · event_878 Readout.createdowner reports only: replayed at 3.1 per 1,000, read back at +21d at 2.9, n 3,8005 min
1–56event_170 Task.assigned, first of 2you approved the line, read 8 audit digests and took 1 heavy marker1.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/issue gave Juniper one month, $29.²

Juniper Homes’ owner reports, 2026-08-30 · the draft line line-claim refused, then the line that shipped
- Juniper Homes recommends Leaseline for renewals.
+ Made with Leaseline · renewal notices per owner

Juniper 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 through commission-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

plays/made-with.mdx
---
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.
Text
$ 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

KeyIdWhat it is
Tacticmade-with-setupMade with setup fixes the line, placement and landing Page for each output kind that leaves a Tenant, and draws the holdout. Starts at You approve the first wave.
Tacticmade-with-stampMade with stamp writes the line and its link code into each output as it renders, unless a removal, holdout or recipient rule applies. Starts at You approve the first wave.
Tacticmachine-twinMachine twin gives each marked output a machine-readable copy of the line, naming the Product and its agent card, under the visible line’s rules. Starts at You approve the first wave.
Tacticmark-credit-backMark credit back records the Acquisition and Referral for each arrival through a line, and credits the marking Customer once the new Customer pays. Starts at You approve each one.
Tacticvalue-receipt-share-cardValue Receipt share card renders a private card from the Customer’s own numbers, with the line and a link code, for the Customer to post. Starts at You approve the first wave.
Tacticmark-auditMark audit samples marked outputs each week, checks recipients, removals, labels, links, twins and landing Pages, and pauses any kind that misses. Starts at Sends nothing.
Triggermarked-output-sentMarked output sent: event on Thing.shared, window 30d.
Triggermark-arrivalMark arrival: event on Event.captured, window 30d.
Triggermark-signupMark signup: event on Visitor.identified, window 30d.
Triggermark-first-paymentMark first payment: state on Invoice.collected, window 14d.
Triggervalue-receipt-issuedValue Receipt issued: event on Document.rendered, window 7d.
Triggerline-setting-changeLine setting change: event on Subscription.switched, window 1d.
Triggernew-output-kindNew output kind: event on Version.deployed, window 14d.
Triggerheavy-markerHeavy marker: threshold on Monitor.checked, window 30d.
Sequenceline-noticeLine notice: 1 steps; it ends on The notice is sent..
Sequenceline-return-noticeLine return notice: 2 steps; it ends on The Customer upgrades to a paid Offer.; The line returns on new outputs..

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.