URL: /code/data/monitors · Id: `page:/code/data/monitors`

# Monitors

> A Monitor is “a scheduled check on something outside a startup’s control”: wrap any data call and hear only when it changes.

A [Monitor](https://startupbuilder.dev/business/nouns/monitor) is “a scheduled check on something outside a [startup](https://startupbuilder.dev/business/nouns/startup)’s control”: wrap any data call and hear only when it changes.

- **Noun:** [Monitor](https://startupbuilder.dev/business/nouns/monitor)
- **Calls:** 2
- **Emits:** `Monitor.created`, `Monitor.checked`

A Data Verb reads the market and returns a reading. A Software Verb changes your records and emits an Event. Every call here is a Data Verb: it reads, and it changes a record only where its Effects say so.

## Properties
| 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`](/code/data/types#cost), in USD | Never null: what one run costs at the wrapped call’s price. |
| `monitor` | `Monitor` | Never null: with its latest result. |
| `ranAt` | `string`, in ISO 8601 | Never null. |
| `changed` | `boolean` | Never null: whether this run crossed the Monitor’s `change` and `threshold`. |
| `summary` | `string` | Never null: what moved, in one sentence. |
| `event` | `string` | Never null: the address of the Event this run recorded. |
| `cost` | [`Cost`](/code/data/types#cost), in USD | Never null: what the wrapped call spent. |

## Object
```json
{
  "$id": "https://api.sb/leaseline.app/monitors/monitor_Rk2a",
  "verb": "Keyword.search",
  "input": {
    "keyword": "rent tracking app for landlords",
    "venue": "google-search"
  },
  "change": "rank-change",
  "threshold": 3,
  "every": "1d",
  "nextRunAt": "2026-10-28T06:00:00Z",
  "lastResult": null,
  "costPerRun": {
    "usd": 0,
    "maxUsd": 0.0003,
    "units": 1,
    "misses": 0
  }
}
```

## Verbs
| Verb | The question it answers | Price | Success rate |
| --- | --- | --- | --- |
| [`Monitor.create`](/code/data/monitors/create) | Can my agents tell me when something I care about changes? | Free | 99.2% of 2,079,088 calls |
| [`Monitor.check`](/code/data/monitors/check) | Has it changed since the last run? | Free | 99.6% of 2,079,088 calls |

## The order you call them in
1. [`Monitor.create`](/code/data/monitors/create): Can my agents tell me when something I care about changes?
2. [`Monitor.check`](/code/data/monitors/check): Has it changed since the last run?

## Works with
None.