# Methodology

How Roost collects prices, what each number means, and how the rankings are calculated. This is a draft: it will change before launch, and every change will be dated here.

> **Draft.** Not yet signed off (BWB-436). Numbers on preview builds are real and sourced, but the method may still change.

## Where the numbers come from

Every price and every limit on Roost comes from the provider's **own** pricing page or documentation. Never from blogs, forum posts, screenshots, sales calls or our memory. Each value records two things:

- **Source:** the exact page it was read from. It appears as a numbered footnote next to the number.
- **Checked:** the day someone (or, later, the daily checker) last confirmed the value on that page.

The build refuses any price without both. Data older than 30 days is flagged for a re-check.

## Unknown means unknown

If a provider doesn't publish a fact (its billing increment, whether setup time is billed, whether vCPUs are shared), Roost shows **unknown** and gives the reason. It never fills the gap with an estimate. Missing data is not allowed: every field is either a value or an explicit unknown.

## Cost per finished job (CI runners)

A per-minute list price hides how a job is actually billed. Roost ranks CI runners by the cost of one finished job:

```
cost = price per minute × billed minutes
billed = max(minimum charge, round_up(run time + billed setup, billing increment))
```

- **Run time** is a fixed **5 minutes** for every provider. That is an assumption, not a measurement. Roost will replace it with measured run times once its own benchmarks exist.
- **Billed setup** is runner preparation and cleanup that a provider bills on top of the job.
- **Billing increment** is the rounding step: per second, per minute, or longer.
- When a term isn't published, it is left out and the result is marked **≥**, because the real cost can only be higher.

Things that change what a price is worth, but can't be folded into one number, are shown as **caveats**: shared vCPUs, a monthly plan you must pay first, prepaid credit, job-length caps and low concurrency limits.

## Agent sandboxes

Sandboxes are billed in different ways: per vCPU and GB of memory, per fixed size, or only for active CPU. Roost compares them on one stated scenario: **one busy 1-hour session at 2 vCPU and 4 GB**.

- Per-resource prices are multiplied out for that shape.
- Fixed sizes use the smallest size with at least that much CPU and memory, and the table says which size was used.
- Plan fees are shown as caveats instead of being spread over the session.

## What Roost does not rank

- **Discontinued** providers stay listed with the date they closed, but are not ranked.
- **Legacy** tiers are shown for reference, not ranked.
- Providers with an **unknown** price are listed under "Listed but not ranked".

## Corrections

See the [editorial policy](/policy/) for how to report a wrong number and how quickly we fix it.
