ngrok vs HookRay (2026): Localhost Tunnel or Cloud Webhook Tester?
If you're choosing between ngrok and HookRay for webhook work, here's the 30-second answer:
ngrok is a localhost tunnel. You run ngrok http 3000, ngrok gives you a public URL, traffic to that URL gets forwarded to your localhost:3000. Your dev server receives real Stripe / GitHub / Shopify webhooks as if it were on the public internet.
HookRay is a cloud webhook tester. You go to hookray.com, click "Get URL," and you have a public webhook endpoint that captures incoming requests into a UI you can inspect, search, and replay — without a server running anywhere.
Different jobs:
- ngrok solves "I have a server. Expose it."
- HookRay solves "I want to inspect what arrives, server or no server."
Many developers use both, and the rest of this article explains when each one wins and how they fit together.
Disclosure: HookRay (this site) competes with ngrok on debugging-focused queries but not on the localhost-tunneling job. We're being honest about where ngrok wins because pretending otherwise wastes your time.
At a glance
| ngrok | HookRay | |
|---|---|---|
| Primary use case | Tunnel localhost to a public URL | Capture incoming webhooks in a UI |
| Need a running server? | Yes — ngrok forwards to localhost:N | No — HookRay terminates the request itself |
| Free tier | $5 one-time credit, 3 endpoints, 1 GB, 20k HTTP/mo | 100 req/mo, 1 URL, 7-day history |
| Paid from | $8/mo Hobbyist (annual) | $9/mo Pro |
| Pricing model | Usage-based (bandwidth + requests + endpoint-hours) | Flat (requests/mo only) |
| Capture & inspect UI | Traffic Inspector (24h Free, 72h paid) | Yes (7-day Free, 30-day Pro) |
| Smart payload parsing | No (raw request view) | Yes (50+ services with field highlighting) |
| Replay | Replay button in inspector | Yes (one-click, send to any URL) |
| Custom domain | 1 free, 4h/mo included on Hobbyist | Not supported (subdomain only) |
| TCP/TLS protocols | Yes (Pay-as-you-go) | HTTP/HTTPS only |
| Multiple endpoints | 3 online (Free / Hobbyist), unlimited PAYG | 1 URL Free, unlimited Pro |
| SSO / SOC 2 / HIPAA | Available (paid add-ons) | Not on the dev tier |
| Best for | "Forward Stripe webhooks to localhost while I work on my handler" | "Capture, inspect, replay — figure out what to even build" |
ngrok pricing verified on ngrok.com/pricing 2026-04-28. HookRay pricing on hookray.com/pricing.
Use case fit
ngrok wins when…
- You already have a webhook handler running on
localhostand just need it reachable from the internet. - You're iterating on handler code and want real Stripe / GitHub / Shopify events hitting your local debugger.
- You need TCP / TLS protocols (not just HTTP) — e.g., exposing a local SSH server, game server, or non-HTTP service.
- You need a persistent custom domain mapped to your localhost (Hobbyist+).
- You're working on a non-webhook localhost-exposure problem (demo to a client, mobile device testing, IoT device callback, etc.). ngrok is general-purpose tunneling; HookRay is webhook-specific.
- You want mTLS, traffic policy, OAuth/SAML on a tunnel for production-adjacent use cases.
HookRay wins when…
- You don't have a handler yet — you want to see what events look like before writing the code.
- You want a persistent inspection log of every webhook your account has captured (HookRay history) without keeping localhost up.
- You need smart parsing: HookRay highlights Stripe / GitHub / Shopify / Slack / Twilio / Square / Discord / SendGrid / Plaid / Clerk and ~40 other services' key fields. ngrok's Traffic Inspector shows raw bodies.
- You want to share captured events with teammates without exposing localhost.
- You're testing on flaky internet or a machine that can't run a long-lived process (Chromebook, restricted laptop, CI runner).
- You're a solo developer wanting flat pricing — HookRay Pro is $9/mo with no usage variability. ngrok's Pay-as-you-go can spike if traffic does.
Pricing reality
ngrok is usage-based (verified 2026-04-28):
- Free: $5 one-time credit. After that's spent, no more usage. 3 endpoints, 1 GB transfer, 20k HTTP/mo.
- Hobbyist ($8/mo annual, $10 monthly): $10 of monthly included usage, 5 GB, 100k HTTP. Custom domain support.
- Pay-as-you-go ($20/mo + metered): unlimited endpoints, $0.10/GB, $1 per 100k extra requests, $0.02/hour per active endpoint.
- Add-ons: SSO/RBAC ($10/user/mo), Dedicated IP ($900/mo per region), HIPAA / BAA (contact us).
The thing to watch: ngrok's pricing scales with traffic. If you accidentally point a high-volume webhook source at your tunnel, your bandwidth and request bills can grow faster than expected. For low-volume dev use this is rarely a problem; for "tunnel staging traffic to a dev box" it can be.
HookRay is $9/mo flat. The free tier (100 requests, 1 URL, 7-day history) covers casual debugging. Pro adds 10K requests/month and 30-day history. There are no per-GB or per-request charges above the included quota — you can hit the cap and the URL stops accepting new captures, no surprise invoice.
Feature gaps that matter
Things ngrok has that HookRay doesn't
- Localhost tunneling: the entire reason ngrok exists. HookRay does not forward traffic to
localhost(Pro can forward to a configured URL, but you still need that URL to be reachable from the internet). - TCP / TLS / non-HTTP protocols: ngrok tunnels arbitrary protocols. HookRay is HTTP/S only.
- Custom domains: bring your own domain in front of a tunnel. HookRay uses
h.hookray.com/{slug}. - Production-grade tunneling features: mTLS, traffic policy, OAuth/SAML through the tunnel, region pinning, dedicated agent IPs.
- General-purpose use beyond webhooks: SSH-over-tunnel, game servers, IoT device callbacks, mobile-to-laptop testing.
- Compliance tier: SOC 2 + HIPAA / BAA available (paid). HookRay's dev tier doesn't carry these.
Things HookRay has that ngrok doesn't (or does less)
- Capture-without-a-server: HookRay terminates the request and stores it. You don't need anything running anywhere to start capturing webhooks.
- Smart payload parsing for 50+ services: HookRay auto-highlights the meaningful fields per provider. ngrok's Traffic Inspector shows raw HTTP.
- Service-specific guides: HookRay maintains 105+ webhook service pages, each with the vendor's algorithm, signing details, and retry policy. ngrok's docs are tunnel-focused.
- One-click replay to any URL: capture once, replay N times against your handler in different states. ngrok supports replay within a tunnel session, but it's tied to the tunnel being active.
- Anonymous URLs: HookRay generates a webhook URL without signup. ngrok requires an account to start a tunnel.
- Flat pricing: $9/mo with no per-GB or per-hour line items.
Which one do you need?
Quick decision tree:
Do you have a working webhook handler running locally that you want to receive real events?
- Yes → ngrok (forward to
localhost:3000).- No, I want to see what arrives first → HookRay (capture without writing code yet).
Do you need TCP / TLS / a custom domain on a tunnel?
- Yes → ngrok (HookRay doesn't tunnel non-HTTP protocols).
- No, only HTTP webhooks → HookRay or ngrok both work.
Is "no surprise bandwidth bill" important to your budget?
- Yes → HookRay's flat $9/mo is predictable. ngrok's Pay-as-you-go can spike with traffic.
- No, usage is low and predictable → either works.
Do you want capture history persisting after you close your laptop?
- Yes → HookRay (cloud storage, 7-day Free / 30-day Pro).
- No, one-shot debugging is fine → ngrok's 24-72 hour Inspector retention is enough.
Can you use both?
Yes, and many developers do — in two distinct phases of a webhook integration:
- Discovery / inspection phase: HookRay captures everything Stripe / GitHub / Shopify is willing to send. You read the payloads, look at the smart-parsing highlights, identify which fields you actually need. No code yet.
- Implementation phase: write your handler in your local stack (Express / FastAPI / Rails). Start ngrok forwarding to
localhost:3000. Point Stripe at the ngrok URL. Real events flow into your local debugger. - Replay-driven iteration: when you hit a bug, replay the captured event from HookRay against the same ngrok URL. You can re-trigger the exact same request as many times as you need without re-triggering at Stripe.
- Production: deploy your handler. Stripe sends to your production endpoint directly. ngrok and HookRay drop out of the path.
You're using two tools for two different jobs, and the total cost is still cheap ($9 + $8 = $17/mo, less than a single Webhook.site Pro subscription).
When to migrate (between products)
Move from ngrok to HookRay when:
- You spend more time inspecting what arrived than forwarding to a running handler.
- You want a persistent capture history without keeping localhost up.
- You're paying for ngrok mostly to use the Traffic Inspector and not the tunnel itself.
- You want smart parsing for the services you work with.
Move from HookRay to ngrok when:
- You need to forward to localhost for live debugging — HookRay Pro can forward to a configured URL but doesn't replace tunnel use cases.
- You need non-HTTP protocols (TCP, TLS, mTLS).
- You're using tunneling for non-webhook purposes (mobile testing, IoT callbacks, demos).
Closing
ngrok and HookRay solve different jobs. The mistake is treating them as competitors — they're complements that show up at different points in the same workflow. ngrok owns localhost-to-internet tunneling. HookRay owns the inspection and replay loop that lives next to (and sometimes ahead of) tunnel use.
If you're at the inspection stage, start with a free HookRay URL — no signup, captures 100 webhooks/month free.
If you need to expose your localhost handler to the public internet, ngrok is the canonical answer — see also Cloudflare Tunnel, Tailscale Funnel, Inlets, and localtunnel as alternatives.
Related guides:
- Pipedream vs HookRay — workflow automation vs testing
- Hookdeck vs HookRay — production webhook infrastructure
- Webhook.site vs HookRay — pure tester comparison
- The 7 best webhook testing tools (2026)
- Webhook Signature Verification (2026) and Retry Strategies (2026) — handler-side patterns regardless of which tunnel/tester you use
Ready to test your webhooks?
Get a free webhook URL in 5 seconds. No signup required.
Start Testing — Free