Skip to content

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.

Find your first customers
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"
  }
}
Response200application/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
API
Runs by
nothing
Connect once

What you get

FieldWhat it says
FitStrong, possible or no, from one question your agent asks of each company’s own site.
EvidenceThe words on their site the fit rests on, quoted with the page.
Why nowThe latest dated event: funding, a hire, a new tool, a complaint about a rival or a question in public.
PersonThe decision maker’s name and title. Names and titles cost nothing.
Work emailFound and checked only for the rows you approve. A blank reads unknown, never zero.
First lineAn opening line that quotes the evidence or the reason to reach out now.
CostThe most the list can cost, shown before it runs, and what it cost after.

Jobs inside it

JobWhat it returnsPriceStatusRuns by
Market sizeHow many companies match your customer, by size and placefreeComingAPI
Describe your customerCompanies or people that match a plain sentence, by meaning$0.007 for 10 rowsComingAPI
People listNames and titles at the companies that fit, with whether an email existsfreeWorks todayAPI
Work emailThe person’s work address, checked in the same call1 to 3¢ a found address; misses are freeWorks todayAPI
Email checkValid, catch-all or invalid, before the first send$0.00178 an addressWorks todayAPI
LookalikesMore companies like your best one, each with the reason it matched$0.04 a rowComingAPI
Decision makersWho to talk to at a named account, ranked by role$0.0005 a rowComingAPI
Who just raisedCompanies that announced funding, with the round and the date$0.04 a rowComingAPI
Who is hiring for the job you doCompanies with an open role your product replaces or helps$0.0005 a rowComingAPI
Post engagersPeople who reacted to or commented on a post in your category$0.003 a postComingAPI
Company and person profilesSize, industry, tech stack and role for every row you keepabout $0.002 a rowComingAPI
Who is visitingThe companies behind the visits to your site todaya fraction of a cent a visitComingAPI
Saved listsThe approved rows as one saved list that refreshes weekly and feeds email, LinkedIn and adsfreeComingAPI

Where and how it runs

Where it worksHow it runsConnect once
LinkedIn, Reddit, X, GitHubAPInothing

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

Reference

ToolRuns 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}/icpsComing

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.

Contents