Website Health Report
Pricing
Pay per event
Website Health Report
Comprehensive website health audit in a single run. Checks HTTP status, SSL certificate, DNS resolution, security headers, meta tags, response time, and robots.txt. Returns a unified health score (0-100) with per-category grades.
Pricing
Pay per event
Rating
0.0
(0)
Developer

Stas Persiianenko
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Comprehensive website health audit in a single run. Checks HTTP status, SSL certificates, DNS resolution, security headers, meta tags, and response time. Returns a unified health score (0-100) with per-category grades.
What does Website Health Report do?
Website Health Report takes a list of URLs and runs 6 independent checks on each one: HTTP connectivity, SSL certificate validity, DNS resolution, security headers compliance, meta tag completeness, and page performance. Each check produces its own score and grade (A-F), and a weighted overall health score combines them into a single number.
Every issue found is categorized by severity (critical/warning/info) with a specific message explaining the problem.
Use cases
- Agencies — Run a quick health check on all client websites in one batch
- DevOps — Monitor SSL expiry, DNS resolution, and security headers across infrastructure
- SEO professionals — Audit meta tags, canonical links, and Open Graph tags
- Web developers — Validate new deployments with a single comprehensive check
- Security teams — Identify missing security headers across domains
Why use Website Health Report?
- 6 checks in one run — HTTP, SSL, DNS, security headers, meta tags, performance
- Unified score — Single 0-100 health score with A-F grade
- Per-category breakdown — Individual scores and grades for each check category
- Issue tracking — Every problem listed with severity and specific message
- Batch processing — Audit up to 200 URLs in a single run
- Fast — Parallel checks per URL, typically 2-5 seconds each
What does it check?
| Category | Weight | What it checks |
|---|---|---|
| HTTP | 20% | Status code, HTTPS, redirect chains, connectivity |
| SSL | 20% | Certificate validity, expiry date, issuer |
| DNS | 10% | A records, MX records, NS records, redundancy |
| Headers | 20% | HSTS, CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy |
| Meta | 15% | Title, description, viewport, charset, Open Graph, canonical, lang |
| Performance | 15% | Response time, HTML size, inline script/style count |
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
urls | string[] | Yes | — | Website URLs to audit |
maxUrls | integer | No | 50 | Maximum URLs to audit per run |
timeoutPerUrlSecs | integer | No | 30 | Timeout per URL in seconds |
Output example
{"url": "https://example.com","domain": "example.com","healthScore": 76,"healthGrade": "B","httpGrade": "A","sslGrade": "A","dnsGrade": "A","headersGrade": "F","metaGrade": "C","performanceGrade": "A","httpScore": 100,"sslScore": 95,"dnsScore": 85,"headersScore": 20,"metaScore": 55,"performanceScore": 100,"issues": [{ "category": "headers", "severity": "critical", "message": "Missing security header: strict-transport-security" },{ "category": "headers", "severity": "warning", "message": "Missing security header: content-security-policy" },{ "category": "meta", "severity": "warning", "message": "Missing meta description" }],"issueCount": 11,"criticalCount": 1,"warningCount": 8,"auditedAt": "2026-03-01T20:00:00.000Z"}
Grading scale
| Grade | Score range |
|---|---|
| A | 90-100 |
| B | 75-89 |
| C | 55-74 |
| D | 35-54 |
| F | 0-34 |
How much does it cost?
This actor uses pay-per-event pricing:
| Event | Price | Description |
|---|---|---|
| Actor start | $0.035 | Charged once per run |
| URL audited | $0.003 | Charged per URL audited |
Example costs:
- 1 URL: $0.035 + $0.003 = $0.038
- 10 URLs: $0.035 + (10 x $0.003) = $0.065
- 100 URLs: $0.035 + (100 x $0.003) = $0.335
Using the Apify API
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('YOUR_ACTOR_ID').call({urls: ['https://example.com', 'https://mysite.com'],maxUrls: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((item) => {console.log(`${item.url}: ${item.healthScore}/100 (${item.healthGrade}) — ${item.issueCount} issues`);item.issues.filter(i => i.severity === 'critical').forEach(i => {console.log(` CRITICAL: ${i.message}`);});});
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("YOUR_ACTOR_ID").call(run_input={"urls": ["https://example.com", "https://mysite.com"],})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['url']}: {item['healthScore']}/100 ({item['healthGrade']})")for issue in item["issues"]:if issue["severity"] == "critical":print(f" CRITICAL: {issue['message']}")
Integrations
- Google Sheets — Export health reports to spreadsheets for client reporting
- Slack — Get alerts when websites score below a threshold
- Webhooks — Trigger automated remediation workflows
- n8n / Make — Schedule weekly health audits with notification pipelines
Tips and best practices
- Audit all your domains regularly — SSL expiry and header changes can happen without warning
- Focus on critical issues first: missing HSTS and expired SSL are the highest-risk findings
- Use
maxUrlsto batch large domain lists efficiently - The
issuesarray is sorted by check order — filter by severity for prioritized action lists - Pair with Website Change Monitor for ongoing surveillance after initial audit
Compliance
This actor makes standard HTTP requests to audit publicly accessible websites. It checks SSL certificates via TLS handshake and DNS records via standard resolution. No authentication is used. No private data is accessed.