# TunnelHQ vs Healthchecks.io

Healthchecks.io and TunnelHQ use opposite monitoring models. Healthchecks.io is heartbeat-based. Your service pings their endpoint on schedule, and if the ping is late, you get alerted. TunnelHQ is probe-based. It actively reaches out to your VPN servers, performs the protocol handshake, and alerts on the result. Both are valid; they catch different failure modes.

## TL;DR

> **Pick Healthchecks.io if:** you want to monitor scheduled jobs, cron tasks, batch processes, or long-running services that can ping an endpoint when they're alive. Especially good for backups, ETL jobs, and dead-man's-switch patterns.
> 
> **Pick TunnelHQ if:** you want to monitor VPN server availability from outside. You don't control the VPN server's ability to self-report, you need to see what a real client sees, and you need protocol-aware handshake validation.

## The models side by side

### Healthchecks.io (pull / heartbeat)

```
your service ──HTTP GET──▶ healthchecks.io/ping/[uuid]
   (every N minutes)

if late ──▶ alert
```

The service is responsible for proving it's alive. Healthchecks.io sits passive, waiting for pings. Missed ping = alert. Excellent for confirming that a backup actually ran, a cron actually executed, a long-lived job is still running.

### TunnelHQ (push / probe)

```
TunnelHQ check node ──WireGuard handshake──▶ your VPN server
   (every 1 to 5 minutes by plan, from the general pool or the countries you choose)

if fail ──▶ alert
```

The monitoring service initiates. The target can be completely passive. In fact, it shouldn't know it's being checked. Good for external services, VPN servers, APIs your customers consume.

## Feature comparison

|  | TunnelHQ | Healthchecks.io |
| --- | --- | --- |
| **Model** | Active probe from check nodes | Passive heartbeat (service pings in) |
| **Good for** | External-facing services. VPN, API, web | Internal jobs. Cron, batch, background workers |
| **VPN protocol handshakes** | 11 protocols native | Not applicable (service would ping HC from inside the VPN server, which proves only that something is running) |
| **Sees what users see?** | **Yes**. Probes from outside | No. Only knows whether the service pinged |
| **Requires code changes?** | No. Just paste the config | Yes. Add a ping step to your service |
| **Detects "process running but not working"** | Yes. Handshake fails even if process is up | Partial. Depends on where ping is wired in the job |
| **Free tier** | 14 days free on every plan. Your card is charged on day 15, and you can cancel any time before. | 20 checks free forever (personal) |
| **Lowest paid tier** | $12 a month, 20 tunnels | $5/mo. 100 checks (Hobbyist) |
| **REST API** | 30–120 req/min by plan | Yes; documented |
| **Self-hostable** | No (commercial SaaS) | Yes. Open source (BSD-3-Clause) |

## When to use each

### Use Healthchecks.io for

-   Cron jobs. Confirm they actually ran
-   Nightly backups. Dead-man's-switch alert if they don't complete
-   Long-running ETL pipelines. Heartbeat at each stage
-   Message queue workers. Prove they're still consuming
-   Internal batch processes not exposed to the internet

### Use TunnelHQ for

-   VPN servers. Real protocol handshake, external vantage
-   V2Ray/Xray servers with subscription URLs
-   Verifying what your users actually experience
-   Catching "process is running but tunnel is broken" failures
-   Compliance audit trails showing external availability

## The obvious combination

Many teams run both. A typical setup:

-   **Healthchecks.io**: wraps the nightly cron that rotates VPN configs and re-seeds the subscription URL. If the cron doesn't ping within the window, alert.
-   **TunnelHQ**: continuously monitors the VPN servers themselves from outside. Catches when a server silently dies between rotations, or when the subscription URL returns stale configs.

The two tools cover different failure modes. They don't compete.

[Start Free Trial](https://app.tunnelhq.com/register) [Healthchecks.io website](https://healthchecks.io)

Source: https://tunnelhq.com/vs/healthchecks/
