ngrok Tunnel Not Found: Fix It or Skip the Tunnel
ngrok tunnel not found means the agent is down or nothing is listening. Check the process, or forward to 127.0.0.1 without a tunnel.
Tunnel not found (often ERR_NGROK_3200 in the browser, or a failed provider delivery to an ngrok-free.app / ngrok.io host) means the public hostname no longer maps to a running ngrok agent. The provider reached ngrok’s edge. The agent on your machine was not there. This page is that one failure, not a list of HTTP statuses.
The agent is not running
ngrok is a process. If it exited, the URL dies with it. Laptop sleep, a crashed terminal, Ctrl+C, and a reboot all produce “tunnel not found”.
Check the agent first:
pgrep -lf ngrok
ngrok status
curl -s http://127.0.0.1:4040/api/tunnels
If nothing listens on the ngrok inspect port (default 4040) and pgrep is empty, start the agent again and copy the new HTTPS URL into the provider. Free ngrok URLs change every start unless you pay for a reserved domain. Leaving an old URL in Stripe or GitHub is the same error with a healthier-looking dashboard.
Confirm the local upstream is up before you blame ngrok:
curl -i http://127.0.0.1:3000/health
An agent pointing at a dead port can look like a tunnel failure from the provider’s side, or a 502 from ngrok.
You never opened a tunnel
A second shape of this error: a CLI or script prints http://127.0.0.1:3001 and you paste that into a cloud provider. There is no public hostname. The provider cannot reach your loopback. That is not an ngrok bug.
Either:
- run an ngrok (or similar) agent and use the
https://…ngrok…URL it prints; or - skip the tunnel. The OpenWebhook CLI watches a public
hooks.openwebhook.coURL and replays each request only to127.0.0.1. The firstlisten --portrun does not need an account.
npm install --global openwebhook
openwebhook listen --port 3001
Paste the printed HTTPS URL into the provider. Your handler stays on localhost. Nothing exposes the rest of the machine.
Agent up, URL still 404
Then the hostname and the session do not match:
- you restarted ngrok and the provider still has the previous host;
- two agents are fighting over a reserved domain;
- a team member’s agent holds the domain and yours does not;
- DNS or a bookmark points at an old region or account.
Compare the URL in the provider dashboard with the URL in ngrok status character for character. Restart the agent, update the provider, send one test event.