Skip to content
AlertPing

Guides

Uptime SLA report: what to include, with a worked example

| Guides | 9 min read

An uptime SLA report is a dated document stating measured availability against the committed target for one defined period, and a complete one contains nine things: the service covered, the period, the committed target, the measured availability, total counted downtime, every incident with start and end times, excluded maintenance, the measurement method, and any service credit owed. Leave out the measurement method and the report is not auditable, because the reader has no way to know whether your 99.94% and their 99.81% describe the same month.

Most teams produce their first one under pressure, usually because an enterprise customer asked for it during a renewal or a security review. Assembled in a hurry from dashboard screenshots, it tends to raise more questions than it settles. Below is what belongs in one, a worked example with real arithmetic, and the measurement decisions that quietly change the number.

Who actually asks for an uptime SLA report

Three groups, and they want different things from the same document. Enterprise customers with an availability clause want proof you met it and a credit if you did not. Auditors working through SOC 2 or ISO 27001 want evidence that availability is monitored continuously and that incidents are recorded, and they care more about the process being consistent than about the number being high. Your own leadership wants the trend.

A single report can serve all three if it is honest and dated. It cannot if it is a screenshot, because a screenshot has no defined period and no stated method.

What to include in an uptime SLA report

Nine elements. The first five are the ones every template has. The last four are the ones that survive a dispute.

  1. Service and scope. Which endpoints or components this figure covers. "The application" is not scope; the login endpoint, the public API and the customer dashboard are.
  2. Reporting period. Exact start and end, with the timezone. Calendar months and rolling 30-day windows produce different numbers and contracts disagree on which applies.
  3. Committed target. The percentage from the contract, stated as written.
  4. Measured availability. The result, to two decimal places. More precision than that is false confidence given the check interval.
  5. Total counted downtime. In minutes and seconds, not just as a percentage. This is the number people check your arithmetic against.
  6. Incident log. Every incident with start time, end time, duration and a one line cause. Omitting a short incident to improve the number is the fastest way to lose the argument when the customer's own monitoring saw it.
  7. Excluded time. Scheduled maintenance and any contractual exclusions, listed individually with the notice you gave. Exclusions applied without being shown look like accounting.
  8. Measurement method. Check interval, the locations you checked from, what counted as a failure, and how many consecutive failures were required before downtime started.
  9. Credit position. Whether the target was met, and if not, the credit tier that applies and how to claim it.

A worked monthly example

Take June, a real 30-day month of 43,200 minutes, and a 99.9% commitment. That target allows 43 minutes 12 seconds of downtime in that specific month. (Generic reference tables usually quote 43 minutes 50 seconds for 99.9%, because they assume an average month of 30.44 days. Report against the month you actually measured, and say which you used.) Three incidents happened.

Incident Start (UTC) End (UTC) Duration Counted?
Database failover Jun 4, 02:14 Jun 4, 02:31 17 min Yes
Upstream DNS provider outage Jun 12, 15:02 Jun 12, 15:11 9 min Yes
Scheduled database upgrade (14 days notice) Jun 22, 03:00 Jun 22, 03:40 40 min No, excluded maintenance
Deploy rollback Jun 27, 11:48 Jun 27, 11:54 6 min Yes

Counted downtime is 17 + 9 + 6 = 32 minutes. Availability is (43,200 minus 32) divided by 43,200, times 100, which is 99.93%. The target was 99.9%, so the month passed with 11 minutes 12 seconds of budget left. The report says exactly that, including the excluded 40 minutes, because hiding the maintenance window is what makes a customer stop trusting the rest of the document.

Notice what nearly went wrong. Had the maintenance not been excludable under the contract, counted downtime would have been 72 minutes, availability 99.83%, and the month a breach. Whether your contract permits that exclusion, and whether you gave the required notice, is worth more than any monitoring feature.

Why two tools report different uptime for the same service

This is the most common reason an SLA report gets challenged, and it is rarely anyone lying. Three measurement choices move the number.

Check interval sets the resolution. A monitor only sees the service when it looks, so the shortest outage it can record is one missed check. At five-minute checks, a 90-second outage is either invisible or recorded as five minutes, depending on timing. At 30-second checks the same outage records as roughly 90 seconds. Neither is wrong; they have different resolution. This is also why a 99.99% target cannot be evidenced with five-minute checks at all: the whole monthly allowance is 4 minutes 19 seconds, which is less than one check interval.

Confirmation policy decides what counts. A tool that records downtime on the first failed request from one location will count transient network blips as outages. A tool that requires two or three regions to agree before recording downtime will not. The second approach reports higher availability, and it is the more defensible one, because a route flapping between one datacenter and your load balancer is not your service being down.

Check depth decides what "up" means. A check that accepts any HTTP 200 will report a healthy month for an application that spent a week returning an empty product list. If your customer's definition of available is "the feature worked", assert on something in the response body that only exists when the request genuinely succeeded. We go into this in synthetic monitoring vs uptime monitoring.

State all three in the method section. A report that says "checked every 30 seconds from Frankfurt, Virginia and Singapore, downtime recorded only when at least two regions failed consecutively" is one a customer can reconcile against their own data. A report that says "99.93%" is one they have to take on faith.

What the report should say when you missed the target

Send it anyway, on the same schedule, in the same format. A missed month reported on time reads as a functioning process; the same miss reported after the customer chases it reads as concealment.

Include the credit position explicitly, even though in almost every contract the credit is something the customer must claim rather than something you pay automatically. Naming the tier that applies costs you nothing you did not already owe and it removes the suspicion that you were hoping the deadline would pass. The tiers, the caps and the claim windows are covered in SLA service credits.

Then add one paragraph on what changed. Not a postmortem, just the concrete remediation and its date. A customer deciding whether to renew is really asking whether next quarter looks like last quarter.

How often to send it, and how to stop doing it by hand

Monthly is the norm and matches how most availability clauses are written. Quarterly is enough for internal targets with no contractual teeth. Weekly reporting tends to produce noise, because a single 20-minute incident in a 7-day window reads as 99.80% and triggers a conversation that a monthly view would have absorbed.

Doing it by hand is fine for one customer and untenable at ten. Two ways out. The first is a monitoring tool that generates the report itself, which several do: Uptime.com, Site24x7, Dotcom-Monitor and AlertSite all document a named SLA report, and AlertPing produces them on the Business plan. The trade-offs are laid out in our comparison of SLA monitoring software.

The second is to export the raw check results and build the report where the rest of your reporting already lives. That is more work up front and much more flexible, particularly when the contract defines downtime in a way no vendor's default calculation matches. If the check history is already sitting in your warehouse, you can ask for the month's availability in plain English rather than maintaining another SQL view, and keep the contractual exclusions as data rather than as a manual adjustment somebody remembers to apply.

A shortcut that removes most of the requests

Publish rolling uptime on a public status page. A page showing the last 90 days of availability per component answers the routine version of the question before anyone asks it, and it turns the monthly report into a formality rather than a negotiation. It also means the number your customer quotes is the number you published, continuously, rather than one you assembled after the fact.

You still need the formal report for the contract and the auditor. But the volume of "can you send us last month's uptime" emails drops close to zero, and the SLA conversation starts from shared data. If you do not have one yet, how to create a status page walks through it, and the underlying number is the same one covered in how to calculate uptime percentage.

keep reading

More from the blog

· Comparisons

Checkly pricing 2026: how much does Checkly cost per check run, module by module

9 min read

· Comparisons

Grafana Cloud pricing 2026: how much does Grafana Cloud cost, meter by meter

10 min read

· Comparisons

Atlassian Statuspage pricing 2026: how much does Statuspage cost per subscriber, public and private

9 min read

· Comparisons

Opsgenie pricing 2026: how much does Opsgenie cost, and what you pay to replace it

8 min read

· Comparisons

PagerDuty pricing 2026: how much does PagerDuty cost per user, per plan and per year

8 min read

· Comparisons

Pingdom pricing 2026: how much does Pingdom cost per check, per plan and per year

8 min read

· Comparisons

Uptime monitoring software to pair with Datadog, New Relic or Dynatrace

8 min read

· Comparisons

How much does Splunk Observability Cloud cost? Hosts, editions and synthetic monitoring

8 min read

· Comparisons

How much does AppDynamics cost? Editions, cores and synthetic monitoring

8 min read

· Comparisons

How much does Dynatrace cost? Hosts, synthetic monitoring and log ingest

8 min read

· Comparisons

How much does New Relic cost? Users, data ingest and synthetic checks

9 min read

· Comparisons

Datadog synthetic monitoring pricing: what synthetics really cost per test run

9 min read

· Guides

Uptime guarantee vs uptime monitoring: why your host reports 99.9% when your site was down

9 min read

· Guides

Cloudflare uptime monitoring: health checks, origin monitoring, and the blind spots behind the proxy

11 min read

· Comparisons

Status page pricing: what a hosted status page actually costs in 2026

8 min read

· Guides

API monitoring best practices: what to check, how often, and how to keep alerts worth answering

10 min read

· Guides

SSL certificate 200 days: the new validity limit, and the 47-day lifetime coming next

9 min read

· Guides

SSL certificate expired: what happens and how to fix it

8 min read

· Guides

How often should you check website uptime?

7 min read

· SLAs

Error budget: the formula, burn rate alerts, and the policy that makes it work

11 min read

· Playbooks

Runbook template for incident response that gets used

8 min read

· Guides

What causes website downtime, and how to catch each cause

8 min read

· Playbooks

Incident postmortem template that teams actually use

8 min read

· Playbooks

On-call rotation best practices that keep engineers sane

8 min read

· SLAs

MTTR (mean time to recovery): what it is and how to cut it

7 min read

· Guides

Heartbeat monitoring: what it is and how it works

7 min read

· Guides

Status page examples and what the good ones get right

7 min read

· Guides

API uptime SLA: service credit tiers, downtime limits and what a good one costs

8 min read

· Guides

How to create a status page in 6 steps

7 min read

· Guides

SLA service credits: what you get back and how to claim it

8 min read

· Guides

Synthetic monitoring vs uptime monitoring: what each one costs and when you need it

8 min read

· Guides

What is a status page?

6 min read

· Guides

Status page vs uptime monitoring: what is the difference?

6 min read

· Guides

What does 99.9% uptime mean?

6 min read

· Guides

What is five nines (99.999%) uptime?

8 min read

· Guides

How to calculate uptime percentage

7 min read

· Guides

SLA vs SLO vs SLI: what is the difference?

7 min read

· Guides

Downtime alerts: how to get notified by email, SMS or phone when your website goes down

7 min read

· Guides

How to monitor an online store for downtime

9 min read

· Guides

Why is my Shopify store unavailable?

8 min read

· Comparisons

Better Stack pricing: how much does Better Stack cost?

8 min read

· Comparisons

UptimeRobot pricing: how much does UptimeRobot cost?

7 min read

· Comparisons

Site24x7 pricing: how much does Site24x7 cost?

8 min read

· Guides

What is a dead man's switch in monitoring?

9 min read

· Guides

Why is my WordPress site down?

9 min read

· Guides

How to monitor WooCommerce uptime and checkout

8 min read

· Guides

How to monitor an API for errors, not just uptime

8 min read

· Economics

How much does website downtime cost?

8 min read

· Guides

How to monitor a cron job

9 min read

· Comparisons

Synthetic monitoring vs real user monitoring

8 min read

· Benchmarks

What is a good uptime percentage?

7 min read

· SLAs

99.99 uptime meaning: SLAs and the real cost of each nine

8 min read

· Guides

How to monitor website uptime

8 min read

· Playbooks

Incident communication examples, templates and outage communication best practices

9 min read

Know the second your site goes down

Checks every 30 seconds, confirmed from 3 regions, alerts on every channel. Running in under a minute.

See pricing