Size up competitors
Who am I up against, and what works for them? Name your site: your agent finds who shares your search results, the terms they rank for and buy, and the ads they keep running.
You, to your agent
Who am I up against for rent tracking?
Show me what they rank for, what they pay for and the ads they keep running, then watch their pricing pages.
curl -X POST https://api.sb/leaseline.app/domains/benchmark \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"hostname":"leaseline.app"}'
curl -X POST https://api.sb/leaseline.app/domains/benchmark \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"hostname":"leaseline.app","competitors":["rentroll.example","ledgernest.example","keyplace.example"],"fields":["paid","ads","gap"]}'
curl -X POST https://api.sb/leaseline.app/monitors \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"outside","target":"rentroll.example/pricing","every":"1d"}'import { $ } from 'startup-builder'
const field = await $.Domain.benchmark({ hostname: 'leaseline.app' }) // finds the sites that share your search results
const rivals = await $.Domain.benchmark({ hostname: 'leaseline.app', competitors: field.competitors, fields: ['paid', 'ads', 'gap'] }) // their terms, paid terms, ads and the gap
await $.Monitor.create({ kind: 'outside', target: 'rentroll.example/ pricing', every: '1d' }) // a Page watch on each pricing page, daily
return rivals
npx startup-builder do Domain.benchmark --json '{"hostname":"leaseline.app"}'
npx startup-builder do Domain.benchmark --json '{"hostname":"leaseline.app","competitors":["rentroll.example","ledgernest.example","keyplace.example"],"fields":["paid","ads","gap"]}'
npx startup-builder do Monitor.create --json '{"kind":"outside","target":"rentroll.example/pricing","every":"1d"}'{
"name": "do",
"arguments": {
"code": "const field = await $.Domain.benchmark({ hostname: 'leaseline.app' }) // finds the sites that share your search results\nconst rivals = await $.Domain.benchmark({ hostname: 'leaseline.app', competitors: field.competitors, fields: ['paid', 'ads', 'gap'] }) // their terms, paid terms, ads and the gap\nawait $.Monitor.create({ kind: 'outside', target: 'rentroll.example/pricing', every: '1d' }) // a Page watch on each pricing page, daily\nreturn rivals"
}
}Response200
application/json{
"$type": "Domain",
"hostname": "leaseline.app",
"observedAt": "2026-10-25",
"readings": [
{
"hostname": "rentroll.example",
"sharedTerms": 212,
"searchVisits": 18400,
"paidTerms": 64,
"adBudget": "about $6, 200 a month",
"ads": {
"google": 38,
"facebook": 12,
…
sampleWhat you get
| Field | What it says |
|---|---|
| Competitor | A site that shares your search results, or one you name, with how much of your ground it holds. |
| Search visits | Estimated monthly visits from search, and what the same clicks would cost as ads. |
| Ranked terms | Each term they rank for, with position, searches a month and the cost of a click. |
| Paid terms | The terms they bid on and their estimated monthly ad budget. A blank reads unknown, never zero. |
| Ads | Each ad they run on Google, Facebook, Instagram, LinkedIn and TikTok, with first and last seen. The longest-running ad is the one that works for them. |
| Gap | The terms and links they hold and you do not, which feed Research demand and Earn first links. |
| Pricing | Their plans and prices as their own pages state them, dated. |
| Changes | A change on their pricing or product page, with before and after, the day it happens. |
| Cost | The most the read can cost, shown before it runs, and what it cost after. |
How it runs
| When | What happens | Runs by | Your part | Takes |
|---|---|---|---|---|
| Minute 1 | Find the sites that share your search results, or start from the rivals you name (Competitors) | API | your site, and any rival you already know | the same minute |
| Minute 2 | Read each rival’s search visits, ranked terms and best pages (Their ranked terms) | API | nothing | the same minute |
| Minute 3 | Read the terms they pay for and every ad they run, with first and last seen (Their paid terms and ads) | API | nothing | the same minute |
| Minute 4 | Mark the terms and links they hold and you do not, and pass them to Research demand and Earn first links (Keyword gap) | API | nothing | the same minute |
| Day 1 | Read each rival’s pricing page, then watch it and their product page every day (Page watch) | API | nothing | a change shows the day it happens |
| Weekly | Read their ads again, so a new ad or a stopped one shows the same week (Their paid terms and ads) | API | nothing | the same day |
Jobs inside it
Where and how it runs
| Where it works | How it runs | Connect once |
|---|---|---|
| Google Search, Facebook, Instagram, LinkedIn, TikTok | 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 |
|---|---|
| Paid search | Paid |
Reference
| Tool | Runs today |
|---|---|
POST /{namespace}/domains/benchmark | Coming |
POST /{namespace}/monitors | Coming |
Compiled, not written: edit the records it reads (catalog/size-up-competitors), 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.