Serveo: SSH tunnels to localhost, current status, pricing and alternatives

Serveo exposes localhost with plain SSH: run ssh -R 80:localhost:3000 serveo.net to get a public HTTPS URL, no install, no signup. It worked on October 29, 2026; the free plan allows 3 active tunnels and Pro costs $6 a month (5 euros). To only see webhooks, a free webhooks.sh bin needs no tunnel.

Serveo is a free SSH tunnel where a single ssh -R command gives your localhost a public HTTPS URL with nothing to install, and it was working when we tested it on October 29, 2026.

How Serveo works

Serveo is a public SSH server that forwards a public URL straight to a port on your machine using ssh -R and the OpenSSH client already installed on your computer. You don't need an account to start an anonymous tunnel.

  • Serveo picks your subdomain based on your IP address, your SSH username, and what's currently available, so you'll often get the same hostname across restarts.
  • You can ask for a specific subdomain with ssh -R myname:80:localhost:3000 serveo.net.
  • Reserved hostnames and paid features require adding your SSH public key in the Serveo Console so the server recognizes your account.
  • When your network blocks outbound port 22, pass -p 443 (ssh -p 443 -R 80:localhost:3000 serveo.net) to connect over port 443 instead.
  • If a long-running tunnel drops, Serveo's docs recommend wrapping the command in autossh -M 0 so it reconnects on its own.
  • On machines with Node.js 18 or newer, npx serveo-cli 3000 builds and runs the SSH command for you.
# Anonymous HTTPS tunnel to port 3000
ssh -R 80:localhost:3000 serveo.net

# Ask for a subdomain
ssh -R myname:80:localhost:3000 serveo.net

# Port 22 blocked? Connect on 443
ssh -p 443 -R 80:localhost:3000 serveo.net

# Reconnect automatically
autossh -M 0 -R 80:localhost:3000 serveo.net

Is Serveo working today?

When we tested serveo.net on October 29, 2026, the site returned HTTP 200, an anonymous tunnel came up in about 1 second, and a POST request sent through the tunnel returned 200 in 0.23 seconds. One check is a snapshot, not an uptime record; status.serveo.net shows current status.

Two details matter before you share a link. First, the anonymous URL was issued on serveousercontent.com rather than serveo.net, and the generated hostname contained our public IP address, so anyone with the link can read your IP. Second, sending a request with a browser User-Agent returned Serveo's interstitial warning page, while sending the serveo-skip-browser-warning: true header bypassed the warning and went right to the local server.

# Skip the browser warning from a script
curl -H "serveo-skip-browser-warning: true" \
  https://<your-tunnel-host>/webhook

Serveo free vs Pro

Serveo has a free tier alongside paid Pro options that lift the tunnel limit and drop the interstitial warning.

Webhook senders aren't browsers, so the warning page mostly affects people opening your link in a browser; Pro removes it.

LimitFreePro
Price$05 euros for 10 days, 5 euros a month or 50 euros a year
Active tunnels3Unlimited
Browser warning pageYesNo
Public TCP portRandom, 10 minutes anonymous or 30 with an SSH keyYour pick from 1024 up, for the SSH session
TCP bandwidth256 KiB/s anonymous, 1 MiB/s with an SSH keyRaised limits

Serveo alternatives

If Serveo is down or its warning page gets in the way, these are the closest options.

  • localhost.run uses the same clientless SSH command (ssh -R 80:localhost:3000 nokey@localhost.run), showed no browser warning page in our test, and offers a $9 a month plan (billed annually) if you need a stable custom domain.
  • Pinggy runs over SSH too and includes TCP and UDP tunnels plus request inspection on its free plan, though free tunnels cut off after 60 minutes.
  • A Cloudflare quick tunnel (cloudflared tunnel --url http://localhost:3000) runs fast without an account, but gives you a brand new trycloudflare.com hostname every time you start it.
  • ngrok requires an account and authtoken up front, but its free plan includes 1 static dev domain that doesn't change between runs.

If you're comparing non-SSH tools too, see our guides to localtunnel alternatives and ngrok alternatives.

ToolSignupFree planPaid from
ServeoNo3 active tunnels, browser warning5 euros a month
localhost.runNoDomain changes regularly, speed limit$9 a month, billed annually
PinggyNo60-minute tunnels, unlimited data transfer$3 per seat a month
Cloudflare quick tunnelNo200 in-flight requests, new URL each runNo paid tier
ngrokYes20,000 requests and 1 GB a month$10 a month
webhooks.sh binNo48 hours, 100 requests a day, capture onlySolo, $12 a month

Testing webhooks without a tunnel

An SSH tunnel only works while your laptop is awake, your local server is running, and the SSH connection stays alive. If you just want to see the headers and JSON payload a webhook provider sends, point the provider at a webhooks.sh bin URL instead.

  1. Create a free bin in your browser at view.webhooks.page or from your terminal with curl -X POST https://webhooks.sh/v1/bins.
  2. Paste the bin's ingest_url (https://<bin>.webhooks.page/) into your webhook sender's settings.
  3. Watch each delivery arrive live in the browser viewer with its HTTP method, path, query string, headers, and body.

A free bin always replies with HTTP 200 and a small JSON body like {"ok":true,"delivery_id":"..."}, and it doesn't run your application code. To keep a free bin past 48 hours, claim it with a free Google sign-in: same URL, 30 days of rolling history, still 100 requests a day and 100KB bodies. To hit your local handler, Solo ($12 a month) includes the wsh CLI, which relays live requests to localhost (wsh listen <endpoint> --to localhost:3000) and replays captured webhooks against your local server.

# Free bin: no signup, 48 hours, 100 requests a day
curl -X POST https://webhooks.sh/v1/bins

# Solo: relay a named endpoint to localhost
wsh listen <endpoint> --to localhost:3000

FAQ

Is Serveo still working?

Yes, Serveo worked in our test on October 29, 2026: an anonymous tunnel connected in about 1 second and a POST through it returned HTTP 200 in 0.23 seconds. You can check status.serveo.net for current uptime.

Is Serveo free?

Yes, Serveo has a $0 free plan that allows up to 3 active tunnels and shows a warning page to browsers. The Pro plan removes the browser warning and allows unlimited active tunnels for $6 a month, $60 a year, or $6 for a 10-day pass (5, 50 and 5 euros if you pay in euros).

How do I skip the Serveo warning page?

Only browsers see the interstitial warning page, so webhook senders and API clients usually don't trigger it. From scripts or custom clients, send the serveo-skip-browser-warning: true request header to bypass it, or upgrade to Serveo Pro to remove the warning completely.

How do I keep the same Serveo subdomain?

Serveo picks your subdomain from your public IP and your SSH username, so you'll often get the same one automatically between sessions. You can request a specific name with ssh -R myname:80:localhost:3000 serveo.net, and if you want to reserve a hostname so nobody else can take it, add your SSH public key in the Serveo Console.

Can I self-host Serveo?

Yes, Serveo distributes a single binary for Linux and macOS that is free for up to 3 concurrent tunnels, with perpetual licenses for more tunnels starting at $49. To run it, you'll need to configure DNS for your domain and its wildcard along with a wildcard TLS certificate.

What is a good alternative to Serveo?

localhost.run is the closest drop-in replacement since it also uses plain SSH and didn't show a browser warning in our test. Pinggy also works over SSH and adds free TCP tunnels, UDP tunnels, and request inspection, though free sessions expire after 60 minutes. If you only need to inspect incoming webhook payloads, a free webhooks.sh bin needs no signup, keeps your URL active for 48 hours, and accepts up to 100 requests a day.

Last updated

Try it in 10 seconds.

Create a free bin at view.webhooks.page — no signup, no install. Point your sender at the URL and watch requests land live. Bins expire after 48 hours.