Measure
Is it working? Connect Search Console and your site analytics once, and your agent reads every number each week, starting with pages indexed long before the first click.
You, to your agent
Is any of it working?
Show me what moved this week.
curl -X POST https://api.sb/leaseline.app/integrations/connect \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"system":"analytics","scope":"startup","grants":["search-performance","site-analytics"],"venue":"google-search"}'
curl -X POST https://api.sb/leaseline.app/metrics/query \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"metric":"organic-visits","shape":"trend","breakdown":"source","window":"7d"}'
curl -X POST https://api.sb/leaseline.app/metrics/query \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"metric":"play-sourced-customers","shape":"trend","breakdown":"play","window":"28d"}'
curl -X POST https://api.sb/leaseline.app/metrics/organic-visits/watch \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"threshold":100,"direction":"above"}'
# Not live yet (gaps #12)
curl -X POST https://api.sb/leaseline.app/domains/leaseline.app/verify \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"import { $ } from 'startup-builder'
await $.Integration.connect({ system: 'analytics', scope: 'startup', grants: ['search-performance', 'site-analytics'], venue: 'google-search' }) // Search Console and your site analytics, once
await $.Metric.query({ metric: 'organic-visits', shape: 'trend', breakdown: 'source', window: '7d' }) // visits and signups by source
await $.Metric.query({ metric: 'play-sourced-customers', shape: 'trend', breakdown: 'play', window: '28d' }) // the customers each Play brought
await $.Metric.watch({ metric: 'organic-visits', threshold: 100, direction: 'above' }) // a Task the week search visits pass 100
return await $.Domain.verify({ domain: 'leaseline.app' }) // pages submitted against pages indexed · Not live yet, gaps #12
npx startup-builder do Integration.connect --json '{"system":"analytics","scope":"startup","grants":["search-performance","site-analytics"],"venue":"google-search"}'
npx startup-builder do Metric.query --json '{"metric":"organic-visits","shape":"trend","breakdown":"source","window":"7d"}'
npx startup-builder do Metric.query --json '{"metric":"play-sourced-customers","shape":"trend","breakdown":"play","window":"28d"}'
npx startup-builder do Metric.watch --json '{"metric":"organic-visits","threshold":100,"direction":"above"}'
npx startup-builder do Domain.verify --json '{"domain":"leaseline.app"}' # Not live yet (gaps #12){
"name": "do",
"arguments": {
"code": "await $.Integration.connect({ system: 'analytics', scope: 'startup', grants: ['search-performance', 'site-analytics'], venue: 'google-search' }) // Search Console and your site analytics, once\nawait $.Metric.query({ metric: 'organic-visits', shape: 'trend', breakdown: 'source', window: '7d' }) // visits and signups by source\nawait $.Metric.query({ metric: 'play-sourced-customers', shape: 'trend', breakdown: 'play', window: '28d' }) // the customers each Play brought\nawait $.Metric.watch({ metric: 'organic-visits', threshold: 100, direction: 'above' }) // a Task the week search visits pass 100\nreturn await $.Domain.verify({ domain: 'leaseline.app' }) // pages submitted against pages indexed · Not live yet, gaps #12"
}
}Response200
application/json{
"$type": "WeeklyReport",
"week": "2026-10-19",
"indexed": {
"google": {
"submitted": 38,
"indexed": 21
},
"bing": {
"submitted": 38,
"indexed": 29
}
},
"search": {
…
sample · 1 Not live yet- The first report: free
- First run
- Coming
- Status
- API
- Runs by
- Search Console and your site analytics, once.
- Connect once
What you get
| Field | What it says |
|---|---|
| Indexed | Pages submitted against pages indexed, on Google and on Bing. |
| Impressions | How often your pages showed in results, per term. A new site reads not measured yet, never zero. |
| Clicks and position | Clicks per page and term, and the average position each one held. |
| Rank | Where each approved term places you on the live results page, read before Search Console has rows. |
| Visits by source | Visits from search, answer engines, links, posts and ads, each counted once. |
| Signups by source | Signups traced to the source that brought them. |
| Per Play | Customers each Play brought, its cost and its payback. |
| Verdict | Keep, fix or switch, with the number it rests on. |
How it runs
| When | What happens | Runs by | Your part | Takes |
|---|---|---|---|---|
| Day 0 | Connect Search Console and your site analytics | API | connect once, about 2 min | about two days for the first search rows |
| Day 1 | Read pages submitted against pages indexed (Submitted and indexed) | API | nothing | the same day |
| Weekly | Read your position for each approved term (Rank check) | API | nothing | the same day |
| Weekly | Read clicks, impressions and position per page and term (Search performance) | API | nothing | rows lag about two days |
| Weekly | Read visits and signups by source, and each Play’s customers and cost (Numbers per Play) | API | nothing | the same day |
| Monday | Write the weekly report with one verdict (Weekly report) | API | read it, about 10 min | the same day |
| Any day | Open a Task when a number crosses the line you set (Alert on a number) | API | act on the Task | the same day |
Jobs inside it
Where and how it runs
| Where it works | How it runs | Connect once |
|---|---|---|
| Google Search, Bing | API | Search Console and your site analytics, once. |
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 |
|---|---|
| Smoke test | Paid |
Reference
Compiled, not written: edit the records it reads (catalog/measure), 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.