> ## Documentation Index
> Fetch the complete documentation index at: https://docs.use.observer/llms.txt
> Use this file to discover all available pages before exploring further.

# 12-month uptime and incident reports

> Download a status page's uptime by month and by check, and every published incident, for the last 12 closed months, as PDF or CSV. Computed with the same rules as the status page history.

A 12-month report covers one status page. It gives the page's uptime by
month and by check, and every incident published on the page, for the
last 12 closed months. The PDF prints the counting rules, so a reader
can check every figure.

<Info>
  12-month reports are available on the Pro plan and above.
</Info>

## Download a report

Open **Executive** in the console and scroll to **12-month reports**. Each
status page has a row with its time zone and three downloads:

| Download | What it is |
| - | - |
| **PDF** | The full report, ready to share. |
| **Uptime CSV** | Uptime per month, for the page and for each check. |
| **Incidents CSV** | One row per incident published in the period. |

Every download is recorded in the
[audit log](/docs/reference/audit-log-events) as `report.downloaded`.

## Private checks

A report leaves out private checks (checks hidden from the public status
page) by default, so a downloaded report is safe to send to customers.

For internal use, tick **Include private checks** above the list before
you download. Those downloads include private checks and are stamped
**Internal: includes private checks** in the PDF header and footer and
on every CSV row. Do not send them to customers.

## The period

A report covers the **12 closed calendar months** before the current
month, in the page's time zone. The current month is never included.
Download a report on 3 May and it covers May of the previous year
through April.

Status history is kept as hourly counts of samples per status for 400
days, so a report for the same 12 months gives the same figures whenever
you download it.

## What the PDF contains

* **Summary**: uptime over the 12 months, days measured, the number of
  incidents and the mean time to resolve.
* **By month**: for each month, uptime, days measured, degraded days,
  down days, incidents and mean time to resolve.
* **By check**: for each check on the page, uptime over the 12 months,
  days measured and its lowest month.
* **Incidents**: publication time (UTC), severity, title, duration, and
  whether a postmortem is linked. An unresolved incident shows
  **Ongoing**.
* **How these numbers are computed**: the rules below, as printed.

Uptime is shown with three decimals. A month or check with no measured
days shows **No data**.

## CSV columns

The uptime CSV has one row per month for the page, then one row per check
per month:

```text theme={null}
report_scope,scope,month,uptime_pct,known_days,up_days,degraded_days,unhealthy_days
```

`report_scope` is on every row of both CSVs: `public` for a default
report, `Internal: includes private checks` when private checks are
included. `scope` is `page: <page title>` for the page rows and the check's label
for check rows. `uptime_pct` has three decimals and is empty when the
month has no measured days.

The incidents CSV has one row per incident, in order of publication:

```text theme={null}
report_scope,published_at,resolved_at,duration_minutes,severity,title,services,postmortem_url
```

Times are ISO 8601 in UTC. `services` lists the affected services,
separated by `; `.

## How the numbers are counted

These are the rules the report prints. They are the same rules the
status page uses for its history bars (see
[How status is calculated](/docs/concepts/how-status-is-calculated)).

<Steps>
  <Step title="Samples">
    Each check reports a status with every sample: healthy, degraded or
    unhealthy. Thresholds use strict comparison: a value equal to a
    threshold does not match it.
  </Step>

  <Step title="Hours">
    Each hour, in the page's time zone, is judged from its samples:

    * **unhealthy** when at least 2 samples are unhealthy, or its only
      sample is;
    * otherwise **degraded** when at least 2 samples (or the only one) are
      degraded or unhealthy;
    * otherwise **healthy** when it has samples.

    One isolated bad sample does not mark an hour. An hour with a single
    sample takes that sample's status.
  </Step>

  <Step title="Days">
    A day takes the status of its worst hour. A day with no samples has no
    status and is left out of the figures.
  </Step>

  <Step title="Uptime">
    Uptime is the share of days with a status that were up. **Degraded days
    count as up**: the service was served, slower or in part. Only unhealthy
    days count against uptime. Days with no samples are not counted either
    way.
  </Step>

  <Step title="Page figures">
    For the page, each day takes the worst status across all of the page's
    checks. The page's uptime is computed from those days.
  </Step>

  <Step title="Incidents">
    Incidents are those published on the page and visible to everyone,
    counted in the month they were published. Duration runs from
    publication to resolution. Maintenance windows are not incidents and
    are not listed.
  </Step>
</Steps>

Notes on scope:

* The report covers the checks added to the page. Private checks are
  left out unless you include them (see [Private checks](#private-checks)).
* Incidents visible only to selected customers are not included.
* Maintenance windows do not change the uptime figures. A day during a
  maintenance window counts like any other day.
* Live status, incidents, alerts, SLOs and SLA statements do not use the
  hourly rule above. It applies to history only.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.