Skip to content

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.

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

FieldWhat it says
IndexedPages submitted against pages indexed, on Google and on Bing.
ImpressionsHow often your pages showed in results, per term. A new site reads not measured yet, never zero.
Clicks and positionClicks per page and term, and the average position each one held.
RankWhere each approved term places you on the live results page, read before Search Console has rows.
Visits by sourceVisits from search, answer engines, links, posts and ads, each counted once.
Signups by sourceSignups traced to the source that brought them.
Per PlayCustomers each Play brought, its cost and its payback.
VerdictKeep, fix or switch, with the number it rests on.

How it runs

WhenWhat happensRuns byYour partTakes
Day 0Connect Search Console and your site analyticsAPIconnect once, about 2 minabout two days for the first search rows
Day 1Read pages submitted against pages indexed (Submitted and indexed)APInothingthe same day
WeeklyRead your position for each approved term (Rank check)APInothingthe same day
WeeklyRead clicks, impressions and position per page and term (Search performance)APInothingrows lag about two days
WeeklyRead visits and signups by source, and each Play’s customers and cost (Numbers per Play)APInothingthe same day
MondayWrite the weekly report with one verdict (Weekly report)APIread it, about 10 minthe same day
Any dayOpen a Task when a number crosses the line you set (Alert on a number)APIact on the Taskthe same day

Jobs inside it

JobWhat it returnsPriceStatusRuns by
Submitted and indexedPages submitted against pages indexed on Google and Bing, weeks before clicksfreeComingAPI
Search performanceClicks, impressions and position per page and termfreeComingAPI
Rank checkYour position for each approved term, read from the live results page each week$0.002 a termComingAPI
Site analyticsVisits and signups by sourcefreeComingAPI
Numbers per PlayThe customers each Play brought, what it cost and how fast it paid backfreeComingAPI
Weekly reportOne page each Monday: what moved, the number to watch, and keep, fix or switchfreeComingAPI
Alert on a numberA Task the day a number crosses the line you setfreeComingAPI

Where and how it runs

Where it worksHow it runsConnect once
Google Search, BingAPISearch 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

PlayStrategy that runs it
Smoke testPaid

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.

Contents