URL Health Check
Pricing
from $1.60 / 1,000 url checkeds
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
Maintained by CommunityActor 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 :
| Field | Meaning / Sens |
|---|---|
url, finalUrl | normalized input and final URL after redirects / entrée normalisée et URL finale |
category | OK, REDIRECT, CLIENT_ERROR, SERVER_ERROR, TLS_ERROR, DNS_ERROR, CONNECTION_ERROR, TIMEOUT, REDIRECT_LOOP, TOO_MANY_REDIRECTS, REDIRECT_ERROR… |
ok | final status 2xx and valid certificate if HTTPS / statut 2xx et certificat valide si HTTPS |
passed | verdict against your expectations (expectedStatus, expectedText, minTlsDays) / verdict selon vos attentes |
statusCode, responseTimeMs, attempts | final status (null on network failure), total time, requests made / statut final, durée totale, requêtes |
redirects, redirectCount | each hop: URL, status, Location / chaque saut |
tls | validity and error, protocol, issuer, subject, dates, daysRemaining (final HTTPS URL only / URL HTTPS finale seulement) |
contentMatch | expected text found, or null if not requested / texte attendu trouvé ou null |
headers | server, contentType, contentLength, hsts only; no cookies / uniquement ces champs, aucun cookie |
previousCategory, changed | with 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_ERRORandpassed: false. / Un certificat invalide n’empêche pas la mesure : statut conservé,TLS_ERRORetpassed: false. - Public addresses of third parties are requested with a plain GET/HEAD and a fixed
UrlHealthCheck/1.0user 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érifieexample.com. - Changes from the previous 0.0.4 build: new columns and categories;
oknow also requires a valid certificate;erroris a short message. / Changements depuis 0.0.4 : nouvelles colonnes et catégories ;okexige 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.