URL Health Check avatar

URL Health Check

Pricing

from $1.60 / 1,000 url checkeds

Go to Apify Store
URL Health Check

URL Health Check

Checks HTTP status, response time and TLS validity for a list of URLs. Returns one dataset item per URL.

Pricing

from $1.60 / 1,000 url checkeds

Rating

0.0

(0)

Developer

Lucas Rincent

Lucas Rincent

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

URL Health Check: status, redirects, TLS, content / Vérification d’URL

Check a list of URLs in one run and get, for each one: final HTTP status, an actionable category (OK, 404-type, 5xx-type, DNS, timeout, TLS…), the full redirect chain, the TLS certificate (validity, issuer, days left), an optional expected text check and, between runs, a change flag. Independent tool.

Vérifiez une liste d’URL en un run : statut HTTP final, catégorie exploitable (OK, erreur client/serveur, DNS, délai, TLS…), chaîne de redirections complète, certificat TLS (validité, émetteur, jours restants), contrôle optionnel d’un texte attendu et, entre deux runs, un indicateur de changement. Outil indépendant.

Try it / Essayer

{"urls": ["https://example.com", "http://example.com", "https://example.org/page-inconnue"]}

Monitoring with expectations and change tracking / Veille avec attentes et suivi des changements:

{"urls":["https://example.com","https://example.org"],"expectedText":"Example Domain","minTlsDays":14,"trackChanges":true,"stateKey":"mon-site"}

Files / Fichiers : examples/INPUT.basic.json, examples/INPUT.monitoring.json, examples/OUTPUT.sample.json (fictive shape, not a real run / forme fictive).

What you get / Ce que vous obtenez

One dataset row per checked URL / une ligne par URL vérifiée :

FieldMeaning / Sens
url, finalUrlnormalized input and final URL after redirects / entrée normalisée et URL finale
categoryOK, REDIRECT, CLIENT_ERROR, SERVER_ERROR, TLS_ERROR, DNS_ERROR, CONNECTION_ERROR, TIMEOUT, REDIRECT_LOOP, TOO_MANY_REDIRECTS, REDIRECT_ERROR…
okfinal status 2xx and valid certificate if HTTPS / statut 2xx et certificat valide si HTTPS
passedverdict against your expectations (expectedStatus, expectedText, minTlsDays) / verdict selon vos attentes
statusCode, responseTimeMs, attemptsfinal status (null on network failure), total time, requests made / statut final, durée totale, requêtes
redirects, redirectCounteach hop: URL, status, Location / chaque saut
tlsvalidity and error, protocol, issuer, subject, dates, daysRemaining (final HTTPS URL only / URL HTTPS finale seulement)
contentMatchexpected text found, or null if not requested / texte attendu trouvé ou null
headersserver, contentType, contentLength, hsts only; no cookies / uniquement ces champs, aucun cookie
previousCategory, changedwith trackChanges: previous category and whether it changed (null on first observation) / avec trackChanges

SUMMARY (key-value store) reports counts per category, passed/failed, rejected inputs, duplicates, budget limits, status and complete: false for failed or aborted runs. / SUMMARY fournit compteurs par catégorie, entrées refusées, doublons, limites de budget, statut et complete: false en cas d’échec ou d’arrêt.

Options

method GET (default) or HEAD · expectedStatus (2xx, 301…) · expectedText (first 256 KiB, case-insensitive, GET only) · minTlsDays (0–365) · timeoutSecs per URL 1–60 (default 10) · maxRedirects 0–10 (0 returns the first 3xx) · retries 0–2 for transient network errors only · concurrency 1–20 (results keep input order) · trackChanges + stateKey.

Safety and billing / Sécurité et facturation

  • Only http/https. Localhost, private, link-local, cloud-metadata and other non-public addresses are refused at connection time, for every redirect hop and every DNS answer, so a public name cannot reach internal services. URLs with embedded credentials are rejected and never echoed. / Adresses non publiques refusées à la connexion, à chaque saut et à chaque réponse DNS ; URL avec identifiants refusées et jamais recopiées.
  • Rejected inputs and duplicates produce no row and no charge; they are listed in SUMMARY.rejected. A private address discovered during a check also produces no row. / Entrées refusées et doublons : aucune ligne, aucune facturation.
  • Each real check writes one row and is billed as one dataset item, including "site is down" results: the answer is the product. See the Pricing tab for the current price. Your spending limit caps the number of URLs checked before any request is made (limitedByBudget, skippedByBudget). / Chaque vérification réelle écrit une ligne facturée, y compris un site en panne. Le plafond de dépense limite le nombre d’URL avant toute requête.
  • A certificate that fails validation (expired, self-signed, wrong host) does not stop the measurement: you still get the status, with category: TLS_ERROR and passed: false. / Un certificat invalide n’empêche pas la mesure : statut conservé, TLS_ERROR et passed: false.
  • Public addresses of third parties are requested with a plain GET/HEAD and a fixed UrlHealthCheck/1.0 user agent. Check only sites you may monitor; respect their terms and rate limits. / Ne vérifiez que des sites que vous avez le droit de surveiller.

Change tracking / Suivi des changements

With trackChanges, a named key-value store (url-health-state-<hash>) keeps, per URL, a SHA-256 prefix of the URL and its last category, never the URL itself or page content, up to 5,000 URLs per stateKey. Reaching the limit fails the run before any request; use another stateKey. An unreadable state also fails explicitly. Runs are not locked: do not run two at once on the same stateKey (last write wins). Deleting the store resets the history. Storage costs may apply. Use an Apify Schedule for recurring checks and filter changed: true or passed: false downstream (webhook, n8n, Slack). / Avec trackChanges, un stockage nommé conserve par URL une empreinte et la dernière catégorie, jamais l’URL ni le contenu. Pas de verrou : ne pas lancer deux runs simultanés sur la même clé.

Limits / Limites

  • A single request per hop with a hard time limit; it is a health check, not a crawler, uptime SLA service or load tester. Results describe one moment from one Apify location. / Une requête par saut ; ce n’est ni un crawler, ni un service d’uptime garanti, ni un test de charge. Résultat ponctuel depuis un seul emplacement.
  • The TLS certificate shown is the one served for the final URL; certificates of intermediate redirect hops are not reported. / Seul le certificat de l’URL finale est rapporté.
  • Content checks look at the first 256 KiB; JavaScript is not executed. / Pas d’exécution JavaScript.
  • No synthetic demo mode: the default input checks example.com. / Pas de mode démo : l’entrée par défaut vérifie example.com.
  • Changes from the previous 0.0.4 build: new columns and categories; ok now also requires a valid certificate; error is a short message. / Changements depuis 0.0.4 : nouvelles colonnes et catégories ; ok exige aussi un certificat valide.

Use with MCP and n8n / Avec MCP et n8n

Run the Actor with Apify's MCP server or API using the input above and read get-dataset-items. In n8n, use the Apify node "Run Actor and get dataset" then an IF on passed or changed. Keep your Apify token in the client's credentials, never in the input. / Gardez le jeton Apify dans les credentials du client, jamais dans l’entrée.