URL: /code/data/pages-and-sites · Id: `page:/code/data/pages-and-sites`

# Pages and sites

> A page is “an addressable page of a Site”: find the fix that helps the most pages, then check them one by one.

A [page](https://startupbuilder.dev/business/nouns/page) is “an addressable page of a [Site](https://startupbuilder.dev/business/nouns/site)”: find the fix that helps the most pages, then check them one by one.

- **Noun:** [page](https://startupbuilder.dev/business/nouns/page)
- **Calls:** 2
- **Emits:** `Page.audited`, `Site.audited`

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 |
| --- | --- | --- |
| `url` | `string` | Never null: the URL after redirects. |
| `score` | `number`, in 0 to 100, share of weighted checks passed | Never null. |
| `checks` | `{ id: string; pass: boolean; detail: string \| null; fix: string \| null }[]` | Never null: every check run. `fix` is null on a pass. |
| `timings` | `{ lcpMs: number; cls: number; inpMs: number \| null } \| null` | Null unless `render: full`; `inpMs: null` when the page has no interaction to time. |
| `(page)` | [`Observed`](/code/data/types#observed) | The audit carries `observedAt` and `method`. |
| `cost` | [`Cost`](/code/data/types#cost), in USD | Never null. In try mode `usd` is 0 and `maxUsd` is what the call would have cost. |
| `hostname` | [`Hostname`](/code/data/types#hostname) | Never null. |
| `pages` | `number`, in pages crawled | Never null. |
| `complete` | `boolean` | Never null: `false` when the crawl stopped at `maxPages` or `maxCost`. |
| `issues` | `{ id: string; pages: number; example: string; fix: string }[]` | Never null: most pages first; empty when every check passed. |
| `urls` | `{ url: string; status: number; score: number \| null }[]` | Present with `mapOnly`; `score: null` because a map runs no checks. |
| `(crawl)` | [`Observed`](/code/data/types#observed) | The audit carries `observedAt` and `method`. |

## Object
```json
{
  "url": "https://leaseline.app/rent-ledger-template",
  "score": 84,
  "checks": [
    {
      "id": "title-length",
      "pass": true,
      "detail": null,
      "fix": null
    },
    {
      "id": "canonical",
      "pass": true,
      "detail": null,
      "fix": null
    },
    {
      "id": "image-alt",
      "pass": false,
      "detail": "3 images without alt text",
      "fix": "Add alt text that says what each image shows."
    },
    {
      "id": "structured-data",
      "pass": false,
      "detail": "No structured data",
      "fix": "Add FAQ structured data for the questions on the page."
    },
    {
      "id": "ai-crawlers",
      "pass": true,
      "detail": null,
      "fix": null
    }
  ],
  "timings": {
    "lcpMs": 2100,
    "cls": 0.04,
    "inpMs": 140
  },
  "observedAt": "2026-10-27T14:02:11Z",
  "method": "sampled",
  "cost": {
    "usd": 0,
    "maxUsd": 0.005,
    "units": 1,
    "misses": 0
  }
}
```

## Verbs
| Verb | The question it answers | Price | Success rate |
| --- | --- | --- | --- |
| [`Page.audit`](/code/data/pages-and-sites/audit-page) | Will search engines and AI crawlers read this page the way I meant? | 2¢ per 100 pages | 100% of 14,847 calls |
| [`Site.audit`](/code/data/pages-and-sites/audit-site) | What is wrong across my whole site, and which fix helps the most pages? | 1.5¢ per 100 pages | 100% of 90 calls |

## The order you call them in
1. [`Site.audit`](/code/data/pages-and-sites/audit-site): What is wrong across my whole site, and which fix helps the most pages?
2. [`Page.audit`](/code/data/pages-and-sites/audit-page): Will search engines and AI crawlers read this page the way I meant?

## Monitors on this Noun
| Verb | What it watches |
| --- | --- |
| [`Page.audit`](/code/data/pages-and-sites/audit-page) | A rival’s pricing or comparison page changes, daily. |
| [`Site.audit`](/code/data/pages-and-sites/audit-site) | A new issue appears across your site, weekly. |

## Works with
- **Workflows:** [AI answer audit](/capabilities/check-ai-answers/ai-answer-audit) · [Directory submissions](/capabilities/earn-first-links/directory-submissions) · [Launch kit](/capabilities/make-content/launch-kit) · [Listing check](/capabilities/earn-first-links/listing-check)
- **Agent tasks:** [Answer page per question](/capabilities/make-content/answer-pages) · [Link pitches](/capabilities/earn-first-links/link-pitches) · [Monthly search content](/capabilities/make-content/monthly-search-content) · [Account brief](/capabilities/reach-out/account-brief) · [Personal first touch](/capabilities/reach-out/personal-first-touch)