# Statuspage maintenance alerts in Slack, logged to Sheets

> Every weekday morning your team gets a Slack heads-up about planned maintenance starting in the next 24 hours, plus a running log in Google Sheets.

- Workflow type: code
- Services: Statuspage, Slack Bot, Google Sheets
- Categories: Operations, Engineering
- Published: 2026-08-10

## What it does

- Checks your status page every weekday morning for planned maintenance windows.
- Keeps only the windows starting within the next 24 hours, then posts them to your engineering Slack channel with the name, start and end time in your local timezone, and the services each one affects.
- Adds one row per maintenance window to a Google Sheets log, so you keep a running record of planned downtime for audit and reporting.
- Skips the Slack post entirely when nothing is starting, so nobody gets an empty message to scroll past.

## What you'll need

- A Statuspage account and the status page you want to keep an eye on.
- A Slack workspace, and the engineering channel where the heads-up should land.
- A Google account with a spreadsheet to use as your planned downtime log.
- The timezone your team works in, so start and end times read correctly.

## Prompt

Every weekday at 8am, check Statuspage for maintenance windows that are about to start, so nobody on the team gets surprised by planned downtime. Run this on a cron trigger, weekdays only, at 8am in our local timezone.

First, pull the planned maintenance from Statuspage using both the "Get a list of scheduled incidents" and the "Get a list of upcoming incidents" operations for our page id. These list endpoints are offset paginated with page and limit, where limit maxes out at 100, and they return bare JSON arrays with no cursor, so advance page until an empty array comes back. Statuspage allows only 1 request per second and returns HTTP 420 when that is exceeded, so space the calls out and retry after a pause if a 420 comes back. Merge the results from both operations and dedupe by incident id, since the same maintenance can appear in both lists.

Scheduled maintenances share the incident resource with realtime incidents, and they use the statuses scheduled, in_progress, verifying and completed. Filter to the ones whose scheduled_for timestamp falls between now and 24 hours from now, and keep only those still in the scheduled status, so completed or already running windows do not get announced as upcoming. Sort what remains by start time, earliest first.

Format each remaining window as one entry showing its name, its start and end time converted from UTC into our local timezone in a readable format such as "Tue 12 Aug, 2:00pm to 4:00pm", and the names of the components it affects. Post that formatted list into our engineering channel using the Slack Bot "Send a Message" action, with a short header line saying how many maintenance windows are starting in the next 24 hours. If the filtered list is empty, skip the Slack post entirely rather than sending an empty message.

Then append one row per maintenance window to a Google Sheets log using the "Append Values" action, so we keep a running record of planned downtime for audit and reporting. Use these columns in order: date the alert ran, maintenance name, start time in local timezone, end time in local timezone, affected components as a comma separated list, status, and the incident id. When no windows match the filter there is nothing to record, so skip the append on those days too and let the workflow finish without writing anything.

Make the Statuspage page id, the Slack channel, the Google Sheets spreadsheet id and tab name, the local timezone, and the 24 hour lead time all easy to change at the top of the workflow, since teams often want a longer lead time for customer facing changes or a shorter one for a last call reminder.

## How to customize

- Change the lead time. Twenty four hours is a sensible default, but widen it to a week for changes that affect customers, or narrow it to an hour so the message lands as a last call before work begins.
- Change when and where it runs. Send it every day instead of weekdays only, run it twice a day for morning and evening coverage, or point it at a different channel for each team.
- Add a section for maintenance that is already underway, so the message covers both what is starting soon and what is happening right now.

## FAQ

### What happens if no maintenance is scheduled?

Nothing is posted. The workflow only sends a Slack message when there is at least one maintenance window starting in the next 24 hours, so your channel stays quiet on normal days and people keep paying attention when a message does show up.

### Are the times shown in my team's timezone?

Yes. Status pages record maintenance times in a standard format, and the workflow converts each start and end time into the local timezone you choose, so nobody has to do the math during a morning standup.

### Will it tell us which services are affected?

Yes. Each maintenance window lists the components it touches, and those come through in the Slack message so the team can tell at a glance whether it hits something they depend on.

### Why log everything to a spreadsheet as well as Slack?

Slack messages get buried within a day or two. The spreadsheet gives you a durable record of every planned downtime window, which is what you actually need when someone asks for a maintenance history during an audit or a quarterly review.

### Can we send it somewhere other than an engineering channel?

Yes. Any channel the bot can post to works, and many teams route it to a customer support or operations channel too, since those are the people who field questions when something goes offline.

Use this prompt in General Input: https://www.generalinput.com/prompts/statuspage-maintenance-alerts-in-slack-logged-to-sheets