Opening Problem Statement
Meet Sarah, the IT manager for a growing e-commerce business. She’s juggling multiple responsibilities, but one of her biggest headaches is manually checking whether her company’s websites and services are up and running. Every few hours, she’s pulling up a list of URLs, sending test requests, and then manually logging statuses in a spreadsheet. When a site goes down, she scrambles to send alert emails and Slack messages to her team. Not only is this process time-consuming, but it’s also prone to errors and delays, which can cause costly downtime and lost sales.
Sarah estimates she wastes around 4 hours per week just monitoring uptime manually. Even worse, sometimes alerts come late, meaning the team reacts slowly to outages, increasing downtime duration and frustrating customers.
What This Automation Does
This unique n8n workflow automates Sarah’s website uptime monitoring with the help of Google Sheets, HTTP requests, Gmail, and Slack notifications. Here’s exactly what it does when it runs every 6 hours:
- Reads a list of websites (URLs) to monitor from a centralized Google Sheet.
- Performs HTTP GET requests to each website to check their current HTTP status code.
- Calculates whether the site’s status has changed (UP or DOWN) based on the response code compared to the last known state.
- Sends alert notifications through Gmail email and Slack messages automatically if any site status changes from UP to DOWN or vice versa.
- Logs every uptime event with details and timestamps into individual Google Sheets tabs for historic record-keeping.
- Updates the main Google Sheet dashboard with the current status of each site so Sarah can quickly glance at real-time uptime data.
This automation saves Sarah roughly 4 hours and eliminates the risk of missing critical downtime alerts, improving her team’s incident response time dramatically.
Prerequisites ⚙️
- n8n account (cloud or self-hosted). If you prefer self-hosting, Hostinger offers great options to host n8n reliably: Host n8n yourself.
- Google Sheets account with:
- A spreadsheet to store website URLs and statuses.
- Sheet tabs for each website to log uptime events.
- Gmail account configured with OAuth2 credentials for sending email notifications 📧
- Slack workspace and bot token for sending alert messages 💬
Step-by-Step Guide to Build This Workflow
Step 1: Set up the Schedule Trigger Node
Go to Triggers → Schedule Trigger. Set it to run every 6 hours by selecting the “hours” interval and putting 6 in the hours field. This step ensures that your workflow only runs every six hours to reduce unnecessary checks and resource use.
Expected result: Your workflow will start executing every 6 hours automatically.
Common mistake: Forgetting to save or activate the workflow after editing the schedule.
Step 2: Connect the Google Sheets ‘Get Sites’ Node
Navigate to Nodes → Google Sheets and configure to Read the spreadsheet containing your list of websites.
Enter the following details:
- Document ID: Your Google Sheets document ID (extracted from the URL)
- Sheet Name: Usually the ‘dashboard’ sheet with all sites listed.
Make sure your Google Sheets credentials are connected via OAuth2.
Expected outcome: This node pulls all the website URLs to monitor.
Common mistake: Not granting the correct permissions to n8n app in your Google account.
Step 3: Iterate Over Each Website with SplitInBatches Node
Add a SplitInBatches node from the core nodes and connect it to the Google Sheets node’s output. This node allows processing each website URL one at a time.
Expected result: The workflow will handle each site independently, preventing overload.
Common mistake: Not properly linking the output to the next node; ensure connections are correct.
Step 4: Perform HTTP Request to Check Website Status
Add an HTTP Request node connected to the SplitInBatches output.
Configure it as a GET request to the URL:
= $json.Property Enable “Full Response” in the response options to retrieve status codes.
Expected output: HTTP response containing status code for the site.
Common mistake: Leaving “Never Error” unchecked, which might stop workflow on errors.
Step 5: Calculate Status Changes Using Set Node
Use a Set node to analyze the previous status and current response. Configure expressions to set the following Boolean values:
- UP_FROM_UP: true if currently UP and was previously UP
- DOWN_FROM_DOWN: true if currently DOWN and was previously DOWN
- UP_FROM_DOWN: true if currently UP but was DOWN
- DOWN_FROM_UP: true if currently DOWN but was UP
This logic detects state changes, crucial for sending alerts only when needed.
Example code snippet inside the node’s parameters section:
{
date: {{$json.headers.date}},
Property: {{$json.Property}},
UP_FROM_UP: {{$json.statusCode < 400 && $json.Status === 'UP'}},
DOWN_FROM_DOWN: {{$json.statusCode >= 400 && $json.Status === 'DOWN'}},
UP_FROM_DOWN: {{$json.statusCode < 400 && $json.Status === 'DOWN'}},
DOWN_FROM_UP: {{$json.statusCode >= 400 && $json.Status === 'UP'}}
}Common mistake: Misconfiguring the expressions or forgetting to map current and previous statuses properly.
Step 6: Route Based on Status Changes Using Switch Node
Add a Switch node configured with conditions matching the above Boolean assignments. Create four distinct routes to handle:
- UP_FROM_UP (continues up)
- UP_FROM_DOWN (recovered)
- DOWN_FROM_DOWN (continues down)
- DOWN_FROM_UP (failure)
This lets the workflow react differently depending on the situation, such as sending alerts only on changes.
Common mistake: Incorrectly naming or missing one of the output keys.
Step 7: Log Uptime Events in Google Sheets
Connect each output of the Switch node to a Google Sheets Append node. Map relevant data such as:
- date
- period (year-month format)
- property (website URL)
- status flags (UP_FROM_UP, DOWN_FROM_DOWN, etc.)
>
Each event is appended to a specific sheet named after the website to keep historical data organized.
Common mistake: Not specifying the correct sheet name dynamically.
Step 8: Update Site Status in Master Dashboard
Add another Google Sheets node configured to append or update the “dashboard” sheet with the current status of each site.
Mapping example:
- Property (site URL)
- Status (“UP” or “DOWN”) based on status booleans
Expected outcome: Your main dashboard sheet now reflects real-time statuses for quick overview.
Common mistake: Failing to use “append or update” operation, leading to duplicated rows.
Step 9: Send Alerts via Gmail and Slack
Use Gmail and Slack nodes connected to appropriate Switch outputs where status has changed (DOWN_FROM_UP or UP_FROM_DOWN). Configure message templates dynamically as:
From: n8n uptime
Date: {{date}}
{{Property}} is {{DOWN_FROM_UP ? 'DOWN' : 'UP'}}
Ensure proper credentials and channels are set.
Common mistakes: Incorrect email addresses, Slack channel IDs, or lack of permissions.
Customizations ✏️
- Change Check Frequency: In the Schedule Trigger node, modify the interval to every hour or daily depending on your needs.
- Add More Notifications: Add extra Slack channels, SMS via Twilio, or webhook triggers by duplicating and configuring alert nodes.
- Enhance Status Logic: Use additional HTTP request checks like response time or content checks by expanding the HTTP node parameters.
- Filter Sites Dynamically: Add a Filter node before the SplitInBatches to only test sites marked “active” in your sheet.
Troubleshooting 🔧
Problem: Workflow stops with HTTP request errors or timeouts
Cause: The “Never Error” option may be disabled in the HTTP Request node, causing workflow to halt on errors.
Solution: Enable “Never Error” to let the workflow continue even if a site is down or unreachable.
Problem: Google Sheets nodes fail to authenticate or read data
Cause: Incorrect or revoked OAuth credentials for Google Sheets.
Solution: Reauthenticate by editing the Google Sheets node credentials and ensure the n8n app has proper access to your sheets.
Problem: Alerts not sent to Slack or Email
Cause: Missing or invalid credentials or incorrect channel/email configuration.
Solution: Double-check Slack API tokens, Gmail OAuth credentials, and recipient/channel IDs. Test connections individually from n8n node settings.
Pre-Production Checklist ✅
- Verify Google Sheets document contains correct columns: “Property” (URL) and “Status” (UP/DOWN).
- Test HTTP requests manually on sample URLs to verify response codes.
- Run the workflow manually once and watch logs for errors or unexpected behavior.
- Confirm alert messages are received in your email and Slack channel.
- Backup your Google Sheets data before deployment in case of any data loss.
Deployment Guide
Activate your workflow by toggling the “Active” switch in n8n after completing your setup and tests.
Regularly monitor your workflow execution logs inside n8n to catch any failures.
If you want to scale, consider self-hosting n8n for more control and higher execution quotas.
FAQs
Can I use another email provider instead of Gmail?
Yes, you can replace the Gmail node with other email nodes supported by n8n, but you’ll need to adjust credentials and message settings accordingly.
Does this workflow consume many API credits?
Because it uses Google Sheets and Slack APIs, usage depends on your volume. For moderate site lists and checking every 6 hours, the API limits are generally well within free tier limits.
Is my monitored data secure?
Yes, sensitive information like credentials are managed securely in n8n. Data flows are confined inside your setup, and OAuth tokens encrypt your sessions.
Conclusion
By building this workflow, you’ve transformed a tedious manual website uptime check into a reliable, automated monitoring solution using n8n, Google Sheets, Gmail, and Slack.
You now save several hours weekly while avoiding missed outages thanks to timely alerts and detailed logging.
Next, consider adding SMS notifications, integrating uptime reports into dashboards like Grafana, or expanding monitoring to API endpoints.
Happy automating, and feel confident knowing your websites are watched around the clock!