Monitor .create
Run any data call on a schedule and record an Event only when it changes: a rank moves, an answer names you, a link drops.
- Price
- Free
- Success rate
- 99.2% of 2,079,088 calls
- Freshness
- Read fresh each call
- Emits
Monitor.created- Capability
- Schedules
POST https: //api.sb/ {your-domain}/ monitors
Options and prices
Inputs
| Name | Type | Default | Meaning |
|---|---|---|---|
verb | string | Required | The data call to run, such as Keyword.search; any call on this page’s list but the Monitor calls. |
input | object | Required | The wrapped call’s input, exactly as on its page. |
change | 'rank-change' | 'answer-citation' | 'funding' | 'hiring' | 'job-change' | 'technology-change' | 'page-change' | 'index-change' | 'problem-question' | 'brand-mention' | 'link-lost' | 'link-gained' | 'new-ad' | 'new-term' | 'new-issue' | 'volume-change' | Required | What counts as a change. A run that sees none records nothing. |
threshold | number | 3 | With rank-change: places moved before it counts. With answer-citation: share points moved, default 5. |
every | string | '1w' | How often it runs: 1d for ranks, posts and index state, 1w for answers, accounts and links. |
window | string | per change`` | How long a recorded change stays actionable for a Trigger, such as 30 days for funding. |
maxCostPerRun | number | the wrapped call’s default | The most one run may spend, in USD. A run over it is skipped and says so. |
Outputs
| Field | Type | What null means |
|---|---|---|
$id | string | Never null: the Monitor’s address. |
verb | string | Never null. |
input | object | Never null. |
change | string | Never null. |
threshold | number | null | The change has no threshold. |
every | string | Never null. |
nextRunAt | string, in ISO 8601 | Never null. |
lastResult | string | null | It has not run yet. |
costPerRun | Cost, in USD | Never null: what one run costs at the wrapped call’s price. |
Read the result
| Field | Value | What it means | What to do |
|---|---|---|---|
costPerRun | Times the runs a month | What the Monitor costs you: daily is about 30 runs, weekly about 4.3. | Run ranks daily and answers weekly; an answer engine re-reads a page in 2 to 8 weeks, so daily answer checks buy noise. (the AEO playbook) |
threshold | Under 3 for ranks | Ranks move a place or two day to day without anything changing. | Keep the default of 3; a smaller move is not a change. (our planning number) |
threshold | Under 5 for answers | At 200 answers a 10% share reads ±4.2 points. | Flag a move of 5 points or more that holds for 2 weeks. (binomial interval, the strategy numbers) |
change | funding or hiring | A dated reason to write to that account. | Set window to 30 days and let a Trigger draft the first email from the Event. (the trigger rule for cold email) |
Effects
- Action class
None: no approval rule names it, so it runs within its seat’s Permissions and Limits
- Modes
try: Returns the Monitor it would create and its cost per run; nothing is scheduled and nothing is billed.send: Returns a pending Action at once; the Monitor is scheduled when the Action settles.do: Creates and schedules the Monitor, and returns it.
- Idempotency
The same
Idempotency-Keywith the same input returns the first Monitor; with other input it returns 409.- Saved or shared
Saves the Monitor to your records. Each run records the wrapped call’s Event, and a change records one more Event that a Trigger can fire on.
- Emits
Monitor.createdwith{ monitor,verb, input, change, every } - Performed by
- Price
Free. Free: creating, pausing and deleting a Monitor; each run bills at its wrapped call’s price. Rank tracking on 40 terms for a month: 40 × 0.9¢ a term a month is about 36¢.
- Reliability
The first route succeeds 99.2% of 2,079,088 calls. If it fails, the call refuses with
sources-busyand nothing is spent.- Freshness
Every call reads fresh. Readings about people are never shared across startups.
- Batch and pages
Up to 1 Monitor a call, up to 1,000 a startup. It answers in one response.
- Rate
The shared rate rules: 10 calls a second per key, and an array input counts as one call.
Refuses when
This call has no refusals of its own. Every data call can also meet the shared data-call refusals: filter-unsupported, input-missing, limit-exceeded, max-cost, rate-limited, sources-busy, venue-unsupported.
When it waits
Returns in one response; nothing waits.
Example
Watch where leaseline.app ranks for “rent tracking app for landlords”
every day, and tell me when it moves 3 places. To retry, send the same Idempotency-Key: the retry returns the first answer for $0. A new key reads again.
Test values
A sk_test_ key answers these the same way every time, at $0 (every test value).
| Test value | Always returns | What it is for |
|---|---|---|
maxCost: | Refuses with max-cost | Any priced call with a maxCost of 0.0001 is refused before it spends: the price is above the cap. |
rate-limited.test | Refuses with rate-limited | Any call naming this hostname answers 429 with Retry-After, so your retry logic runs. |
sources-busy.test | Refuses with sources-busy | Any call naming this hostname answers 503 as if every route were busy, and nothing is spent. |
Used by
- Jobs: Check AI answers · Earn first links · Get indexed · Publish and post · Research demand · Size up competitors