Skip to content

Every 5 minutes

Monitor a list of websites from a sheet

Add a site to your sheet and you'll hear in Slack whenever it goes down or comes back, with a log of every outage.

Runs
Every 5 minutes
Apps
Google Sheets, Slack
AI
Not needed
Access
Sheets read+write; Slack chat:write

Send this to your assistant

Create a ClickRuntime automation: every 5 minutes, check each URL in my Sites sheet. Post to #ops when one goes down or comes back, and add a row to the Outages tab.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A freelance developer looks after a dozen small sites for clients: brochure sites, a booking page and two web shops. Hosting providers go down, a plugin update takes a site offline, a domain expires. She finds out when a client phones her, sometimes hours after the site stopped responding, and has no idea when it came back. Paid monitoring tools charge per site, which is hard to justify for small accounts.

Every 5 minutes, ClickRuntime reads the list of URLs from your Google Sheet and sends an HTTP request to each one. If a site stops responding or returns an error, a message is posted in Slack. When it comes back, a recovery message follows, and every status change is added as a row in a log tab.

Freelancers, small agencies and in-house teams with a few sites use it as a simple uptime watchdog.

What you get out of it

  • You hear before your client does

    A Slack message within minutes of an outage lets you start fixing it before the client notices. Calling first, with the cause in hand, is better for the relationship than being called.

  • Recovery messages close the loop

    Knowing a site is back saves anyone from refreshing a page to find out. The paired down and up messages also give you the length of every outage. That paired signal is more useful than a bare error message.

  • A log of every outage

    Each status change is recorded with its time, so you can show a client how often a site was unavailable. This data supports hosting complaints and service level conversations. Credits and refunds can be requested with real figures.

  • No per-site fees

    Adding a site to the monitoring costs one row in the sheet. For small clients with tight budgets, that makes it possible to watch every site, not only the few that pay for a monitor.

  • Alerts only on a change of state

    A message is sent when a site goes down and once more when it recovers, not on every failed check. That keeps the channel readable during a long outage. Fewer notifications means each one is taken seriously.

How it works

What happens, step by step

  1. Every 5 minutes, ClickRuntime reads the list of websites from the Sites tab of your Google Sheet.

  2. It visits each site and checks whether it responds.

  3. When a site goes down or comes back up, a message appears in your #ops Slack channel, such as "shop.example.com is DOWN".

  4. Each change is also added as a row in the sheet, so you keep a log of every outage.

Before it runs live

  • Connect your Google Sheets account and pick the spreadsheets it may use
  • Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)

What you get

RunsEvery 5 minutes
Monitor a list of websites from a sheettoday, 9:00Succeeded
Slack · #ops🔴 https://shop.example.com is DOWN

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Run it at a different time, more or less often, or only on weekdays
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Gmail
  • Combine it with other Google Sheets and Slack steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
uptime_monitor_with_slack_alerts.pyexample
from datetime import datetime, timezone
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, state, notify

SHEET_ID = "your-spreadsheet-id"

@on_trigger
def run(event):
    sheets = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    urls = [r[0] for r in sheets.spreadsheets().values().get(spreadsheetId=SHEET_ID, range="Sites!A2:A")
            .execute().get("values", []) if r]
    status = state.get("status") or {}
    rows = []
    for url in urls:
        try:
            up = http.get(url, timeout=10).status_code < 500
        except Exception:
            up = False
        if url in status and status[url] != up:
            notify.slack(f"{'✅' if up else '🔴'} {url} is {'back up' if up else 'DOWN'}", channel="#ops")
            rows.append([datetime.now(timezone.utc).isoformat(timespec="minutes"), url, "up" if up else "down"])
        status[url] = up
    if rows:
        sheets.spreadsheets().values().append(spreadsheetId=SHEET_ID, range="Outages!A:C",
                                              valueInputOption="USER_ENTERED", body={"values": rows}).execute()
    state.set("status", status)
    return {"checked": len(urls), "changes": len(rows)}

FAQ

Common questions

What counts as a site being down?
A request that times out, fails to connect, or returns an error status such as 500 or 503. You can also require a certain word to appear on the page, which catches sites that respond with a blank page or a maintenance message.
Can I check more often than every 5 minutes?
A shorter interval is possible, but 5 minutes is a good balance for most small sites. Very frequent checks add little, and brief blips that fix themselves can cause alerts that are not worth acting on.
Does it avoid false alarms from one failed request?
It can require two failed checks in a row before alerting, which filters out one-off network hiccups. The trade-off is a delay of a few more minutes, so choose based on how critical each site is.
What permissions does it need?
Sheets read+write; Slack chat:write. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it runs (every 5 minutes). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Monitor a list of websites from a sheet” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.