Find your first customers
Where do I find my first 100 people? Describe your customer in one sentence: your agent counts the market, lists the companies that fit with evidence, and finds the person at each.
You, to your agent
Find property managers with 20 to 400 units who still run rent on spreadsheets.
Show me the first 25, and the person to email at each.
curl -X POST https://api.sb/leaseline.app/icps \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"description":"US property managers with 20 to 400 units still running rent on spreadsheets"}'
# Not live yet (gaps #11)
curl -X POST https://api.sb/leaseline.app/organizations/count \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"icp":"icps/icp_3"}'
# Not live yet (gaps #2)
curl -X POST https://api.sb/leaseline.app/prospects/find \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"icp":"icps/icp_3","question":"Do they still track rent in spreadsheets?","save":25}'
# Not live yet (gaps #11)
curl -X POST https://api.sb/leaseline.app/prospects/prospects%2Fprospect_118/verify \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"maxCost":0.03}'import { $ } from 'startup-builder'
const icp = await $.ICP.create({ description: 'US property managers with 20 to 400 units still running rent on spreadsheets' }) // your customer, in one sentence
await $.Organization.count({ icp }) // free: how many companies match · Not live yet, gaps #11
const rows = await $.Prospect.find({ icp, question: 'Do they still track rent in spreadsheets? ', save: 25 }) // fit with evidence, why now, the person · Not live yet, gaps #2
return await $.Prospect.verify({ prospect: rows.matches[0], maxCost: 0.03 }) // the work email, checked, only for rows you approve · Not live yet, gaps #11
npx startup-builder do ICP.create --json '{"description":"US property managers with 20 to 400 units still running rent on spreadsheets"}'
npx startup-builder do Organization.count --json '{"icp":"icps/icp_3"}' # Not live yet (gaps #11)
npx startup-builder do Prospect.find --json '{"icp":"icps/icp_3","question":"Do they still track rent in spreadsheets?","save":25}' # Not live yet (gaps #2)
npx startup-builder do Prospect.verify --json '{"prospect":"prospects/prospect_118","maxCost":0.03}' # Not live yet (gaps #11){
"name": "do",
"arguments": {
"code": "const icp = await $.ICP.create({ description: 'US property managers with 20 to 400 units still running rent on spreadsheets' }) // your customer, in one sentence\nawait $.Organization.count({ icp }) // free: how many companies match · Not live yet, gaps #11\nconst rows = await $.Prospect.find({ icp, question: 'Do they still track rent in spreadsheets?', save: 25 }) // fit with evidence, why now, the person · Not live yet, gaps #2\nreturn await $.Prospect.verify({ prospect: rows.matches[0], maxCost: 0.03 }) // the work email, checked, only for rows you approve · Not live yet, gaps #11"
}
}Response200
application/json{
"$type": "ProspectList",
"count": 4180,
"matches": [
{
"organization": "Northgate Rentals",
"units": 140,
"fit": "strong",
"evidence": "We still collect rent by check and track it in a spreadsheet (northgaterentals.com/ about)",
"whyNow": "posted a leasing coordinator role on 2026-10-21",
"person": "Owner",
"email": "verified"
},
{
…
sample · 3 Not live yet- Count free, 25 rows about 5¢, 100 checked emails about $2: about $2
- First run
- Partly works today
- Status
- API
- Runs by
- nothing
- Connect once
What you get
| Field | What it says |
|---|---|
| Fit | Strong, possible or no, from one question your agent asks of each company’s own site. |
| Evidence | The words on their site the fit rests on, quoted with the page. |
| Why now | The latest dated event: funding, a hire, a new tool, a complaint about a rival or a question in public. |
| Person | The decision maker’s name and title. Names and titles cost nothing. |
| Work email | Found and checked only for the rows you approve. A blank reads unknown, never zero. |
| First line | An opening line that quotes the evidence or the reason to reach out now. |
| Cost | The most the list can cost, shown before it runs, and what it cost after. |
Jobs inside it
Where and how it runs
| Where it works | How it runs | Connect once |
|---|---|---|
| LinkedIn, Reddit, X, GitHub | API | nothing |
Your agent acts as you on every Venue you authorize. Where a Venue has no API, a browser agent signs in as you and does the steps.
Plays that use it
| Play | Strategy that runs it |
|---|---|
| Cold email | Hands-on |
| LinkedIn outbound | Hands-on |
| Paid social | Hands-on |
| Buying committee | Hands-on |
Reference
| Tool | Runs today |
|---|---|
Prospect.find (Not live yet, gaps #2) | Coming |
Organization.count (Not live yet, gaps #11) | Coming |
Organization.find (Not live yet, gaps #11) | Coming |
Prospect.verify (Not live yet, gaps #11) | Coming |
POST /{namespace}/icps | Coming |
Compiled, not written: edit the records it reads (catalog/find-customers), 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.