Website Uptime Checker avatar

Website Uptime Checker

Pricing

Pay per usage

Go to Apify Store
Website Uptime Checker

Website Uptime Checker

Monitors websites and APIs for availability, response time, SSL certificate expiry, and expected content, sending email or webhook alerts when something goes wrong.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Parsedom Inc

Parsedom Inc

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Website Uptime Checker monitors any list of websites or APIs for availability, response time, SSL certificate expiry, and expected page content, and stores a structured result for every check. Give it a list of URLs and get back status codes, response times, and downtime alerts — no server or cron job to maintain.

How the Website Uptime Checker Apify Actor works: provide input, the actor scrapes the site, get structured output

✨ Features

  • Check a single site or a large batch — monitor one URL or hundreds in the same run
  • Bulk import from a file — paste URLs, upload a .txt/.csv file of websites, or link to a remote hosted list (e.g. a raw GitHub file or a published Google Sheet CSV export)
  • Availability checks — sends a request to each URL and classifies the response (online, redirect, client error, or server error/offline)
  • Response time tracking — measures how long each check took, in milliseconds
  • SSL certificate monitoring — warns before an HTTPS certificate expires
  • Keyword/content check — verify a page contains expected text, catching "soft down" pages (e.g. maintenance screens) that still return HTTP 200
  • Email, Slack, Discord, and webhook alerts — get notified through whichever platform your team already uses when a site goes down, recovers, responds slowly, or its SSL certificate is expiring
  • Downloadable CSV summary — a plain url,status report (e.g. https://example.com,OK) saved alongside the detailed dataset, so you can skim results at a glance
  • Proxy support — optionally route checks through a proxy, e.g. to monitor geo-restricted content

🔧 Input Configuration

What to put in the input

At minimum, add the website(s) you want to monitor under Start URLs — that's the only required field, and the defaults for everything else work well for most use cases. From there:

  • Checking one homepage? Just add that single URL and run it.
  • Checking a large batch? Paste multiple URLs, upload a .txt/.csv file of website addresses, or link to a remote hosted file (e.g. a raw GitHub file or a published Google Sheet CSV export) — one URL or domain per line.
  • Want to be notified when something breaks? All notification fields are optional — pick whichever your team actually checks, none of them are required: Alert email address (plus Postmark server token and Sender email), Slack webhook URL, Discord webhook URL, and/or a generic Alert webhook URL for other tools (Zapier, Make, n8n). Leave all of them blank and the actor still checks every URL and stores full results — you just won't get pinged.
  • Want a "the run is done" ping even when nothing is wrong? Turn on Notify when the run completes (also optional, off by default) to get a one-time summary like "8/10 sites online" through whichever channel(s) above you configured.
  • Running this on a schedule? Raise Consecutive failures before alert so a single slow blip doesn't trigger a false alarm.
  • Everything else (timeout, retries, concurrency, SSL warning window, keyword check) is an optional tuning knob — leave the defaults unless you have a specific reason to change them.

How to get a Slack, Discord, or email webhook/credential

None of this is required — skip this section entirely and the actor still checks every URL and stores full results. Set up only the channel(s) you actually want to be notified through.

Slack webhook URL

  1. Go to api.slack.com/apps and create a new app ("From scratch"), picking the workspace you want alerts posted to.
  2. Open Incoming Webhooks under Features, switch it on, then click Add New Webhook to Workspace and choose a channel.
  3. Copy the generated URL (starts with https://hooks.slack.com/services/...) into Slack webhook URL in this actor's input.

Discord webhook URL

  1. In your Discord server, open the target channel's Edit Channel → Integrations → Webhooks.
  2. Click New Webhook, give it a name, then click Copy Webhook URL.
  3. Paste that URL into Discord webhook URL in this actor's input.

Email alerts (Postmark server token + sender email)

  1. Sign up at postmarkapp.com and create a server in your account.
  2. Open that server's API Tokens tab and copy the Server API Token into Postmark server token.
  3. Under Sender Signatures, add and verify the address you want alerts to come from, then use that same address as Sender email.

Generic webhook URL (Zapier, Make, n8n, or your own endpoint)

Any URL that accepts a JSON POST request works here. In Zapier, Make, or n8n, create a scenario/zap that starts with a "Webhook" trigger step — each of those tools gives you a unique URL for that step, which you then paste into Alert webhook URL.

FieldTypeRequiredDefaultDescription
startUrlsarray[{ "url": "https://apify.com" }]Websites to check. A single URL is fine, or check many at once by pasting a list, uploading a .txt/.csv file, or linking to a remote hosted file
httpMethodstringHEADHEAD (faster) or GET (loads full response body)
requestTimeoutSecsinteger30How long to wait for a response before considering that attempt failed
maxRequestRetriesinteger2Retries after a connection failure (DNS error, timeout, refused) before reporting a URL offline. A received status code like 404 or 500 is never retried
minConcurrencyinteger1How many URLs to check in parallel at the start of the run
maxConcurrencyinteger10The run ramps up parallel checks after a streak of successes, but never above this many at once
keywordstringOptional text that must be present on the page, or the check is reported as offline. Forces a GET request
maxResponseTimeMsinteger0If greater than 0, alert when an online site responds slower than this threshold
checkSslbooleantrueFor https:// URLs, warn when the SSL certificate is about to expire
sslExpiryWarningDaysinteger14Alert when the SSL certificate expires within this many days
failureThresholdinteger1Consecutive failed checks (tracked across runs) required before a DOWN alert fires
emailstringNot required. Email address to notify. Requires postmarkToken and senderEmail to actually send
postmarkTokenstringNot required. Postmark server token, used to send alert emails
senderEmailstringNot required. The "From" address for alert emails (must be a Postmark-verified sender)
webhookUrlstringNot required. A generic webhook (Zapier, Make, n8n, custom endpoint) that receives a raw JSON POST for every alert
slackWebhookUrlstringNot required. A Slack incoming webhook URL to post alerts to a channel
discordWebhookUrlstringNot required. A Discord channel webhook URL to post alerts to a channel
notifyOnCompletionbooleanfalseNot required. Sends a one-time run summary through the configured channel(s) above when the run finishes
proxyConfigurationobject{ "useApifyProxy": false }Optional proxy to route checks through

Supported URL types: Any absolute http:// or https:// URL — a homepage, a specific page, or an API endpoint you want to monitor.

📦 Output

The dataset schema defines two views: Overview, a compact table of URL, online status, status code, category, response time, and check timestamp; and Full details, which adds the HTTP method used, keyword check results, SSL certificate info, alerts sent, and any connection error.

Every run also saves a plain CSV report to the key-value store under the key OUTPUT_REPORT — a simple two-column url,status file, e.g.:

url,status
https://example.com,OK
https://example.com/missing-page,Not Found
https://example.com/checkout,Internal Server Error
https://unreachable-example.com,Offline

Find it on the Output tab, or download it directly from the run's key-value store.

Sample dataset output:

[
{
"url": "https://apify.com/",
"checkedAt": "2026-07-23T09:45:27.768Z",
"isOnline": true,
"statusCode": 200,
"statusCategory": "OK",
"statusMessage": "OK - website is online.",
"responseTimeMs": 576,
"httpMethod": "HEAD",
"keyword": null,
"keywordFound": null,
"ssl": {
"checked": true,
"valid": true,
"expiresAt": "2027-01-16T23:59:59.000Z",
"daysRemaining": 177,
"error": null
},
"error": null,
"alertsSent": []
},
{
"url": "https://apify.com/this-page-does-not-exist-xyz",
"checkedAt": "2026-07-23T09:45:27.791Z",
"isOnline": true,
"statusCode": 404,
"statusCategory": "CLIENT_ERROR",
"statusMessage": "Not Found - website is online, but that page doesn't exist.",
"responseTimeMs": 606,
"httpMethod": "HEAD",
"keyword": null,
"keywordFound": null,
"ssl": {
"checked": true,
"valid": true,
"expiresAt": "2027-01-16T23:59:59.000Z",
"daysRemaining": 177,
"error": null
},
"error": null,
"alertsSent": []
}
]

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

💡 Uses of This Data

  • Getting paged the moment a production site or API goes down
  • Tracking response time trends to catch performance regressions before they become outages
  • Getting ahead of SSL certificate expiry instead of finding out from an angry user
  • Verifying a status page or maintenance banner isn't stuck live on a "recovered" site
  • Feeding uptime history into an internal dashboard or incident report

🚀 How to Use

  1. Sign up for a free Apify account — includes $5 monthly credit.
  2. Open the actor page and click Try for free.
  3. Fill in the Input fields — at minimum, add the URLs you want to monitor under Start URLs.
  4. Click Start and wait for the run to complete.
  5. Download results from the Output tab in JSON, CSV, or Excel format.

You can also run this actor via the Apify API or integrate it directly into your workflows using Zapier, Make, or n8n. Schedule it on Apify to run every few minutes for continuous monitoring, and raise failureThreshold so a single slow response doesn't trigger a false alarm.

⚠️ Limitations & Known Issues

  • JavaScript-rendered content — the actor checks the raw HTTP response, not a rendered page, so a keyword that only appears after client-side JavaScript runs won't be found.
  • Rate limiting — checking the same site very frequently may trigger rate limits on the target server; space out scheduled runs accordingly.

📝 Notes

  • No notification field is mandatoryemail/postmarkToken/senderEmail, webhookUrl, slackWebhookUrl, discordWebhookUrl, and notifyOnCompletion are all optional. Leave every one of them blank and the actor still checks every URL and stores full results in the dataset and CSV report; you simply won't be notified anywhere.
  • Email alerts need all three email fieldsemail, postmarkToken, and senderEmail must all be set together for emails to actually send.
  • Mix and match channels freely — e.g. Slack for your team plus email for yourself; every configured channel gets every alert.

🤝 Support

Need help or have questions?

Ready to keep your sites online? Add your URLs and start monitoring! 🚀