Skip to content

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

You getInput that selects itPriceSuccess rate
Rank tracking, daily{"change":"rank-change","every":"1d"}About 0.9¢ a term a month99.1% of 1,710,120 calls
AI answer watch, weekly, 3 runs on 4 engines{"change":"answer-citation","every":"1w"}About 19¢ a question a month99.96% of 131,093 calls
Buying triggers on an account, weekly{"change":"funding","every":"1w"}About 4.3¢ an account a month99.98% of 34,785 calls
A page changes, daily{"change":"page-change","every":"1d"}About 0.6¢ a page a month100% of 14,847 calls
Problem posts on a site, daily{"change":"problem-question","every":"1d"}About 5.7¢ a phrase a month99.4% of 142,199 calls
Lost links, weekly{"change":"link-lost","every":"1w"}About 10¢ a domain a month100% of 298 calls
Index state of key pages, daily{"change":"index-change","every":"1d"}Free99.8% of 45,746 calls

Inputs

NameTypeDefaultMeaning
verbstringRequiredThe data call to run, such as Keyword.search; any call on this page’s list but the Monitor calls.
inputobjectRequiredThe 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'RequiredWhat counts as a change. A run that sees none records nothing.
thresholdnumber3With rank-change: places moved before it counts. With answer-citation: share points moved, default 5.
everystring'1w'How often it runs: 1d for ranks, posts and index state, 1w for answers, accounts and links.
windowstringper change``How long a recorded change stays actionable for a Trigger, such as 30 days for funding.
maxCostPerRunnumberthe wrapped call’s defaultThe most one run may spend, in USD. A run over it is skipped and says so.

Outputs

FieldTypeWhat null means
$idstringNever null: the Monitor’s address.
verbstringNever null.
inputobjectNever null.
changestringNever null.
thresholdnumber | nullThe change has no threshold.
everystringNever null.
nextRunAtstring, in ISO 8601Never null.
lastResultstring | nullIt has not run yet.
costPerRunCost, in USDNever null: what one run costs at the wrapped call’s price.

Read the result

FieldValueWhat it meansWhat to do
costPerRunTimes the runs a monthWhat 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)
thresholdUnder 3 for ranksRanks 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)
thresholdUnder 5 for answersAt 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)
changefunding or hiringA 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-Key with 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.created with { monitor, verb, input, change, every }

Performed by

Analyst

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-busy and 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

Text
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 valueAlways returnsWhat it is for
maxCost: 0.0001Refuses with max-costAny priced call with a maxCost of 0.0001 is refused before it spends: the price is above the cap.
rate-limited.testRefuses with rate-limitedAny call naming this hostname answers 429 with Retry-After, so your retry logic runs.
sources-busy.testRefuses with sources-busyAny call naming this hostname answers 503 as if every route were busy, and nothing is spent.

Used by