Limits for ngrok's free plan
Learn about the limits enforced in the ngrok free plan.
See the pricing page for more details on increasing or removing these limits.
Free plan limit table
Resource | Limit on Free | Limit on Development Plans | Limit on Production Plans |
---|---|---|---|
Data Transfer Out | 1 GB | See pricing | See pricing |
Endpoints1 | 1 | See pricing | See pricing |
Requests | 20,000 | No limit | 100,000 then usage-based |
TCP Connections | 5,000 | No limit | 10,000 then usage-based |
TLS Connections | 5,000 | No limit | 10,000 then usage-based |
You can check your current usage in the dashboard.
Free plan resources
Resource | Limit on Free |
---|---|
Users | 1 |
Active Endpoints[^1] | 1 |
ngrok static domain | 1 |
Tunnels per agent | up to 3 |
Bandwidth | 1 GB Outgoing/month |
TCP Connection Rate | 120/min |
Agents | 1 |
Edges | 1 |
Logs/Events | Up to 10,000 per month |
OAuth/OIDC MAU | Up to 5 per month |
HTTP Requests | Up to 20,000/month |
TCP Connections | Up to 5,000/month |
TLS Connections | Up to 5,000/month |
Webhook verifications | Up to 500/month |
Features included for free on all plans:
- HTTPS Tunnels
- HTTPS Edges
- Web Inspection Agent
- Replay Requests
- ngrok SDKs
- ngrok Kubernetes Operator
- Remote Agent Management
- Circuit Breaking
- Automatic Certificates and Encryption
- Email Support
Learn more about ngrok limits
See the Pricing and Limits page for more details on ngrok's pricing, limits, and licensing model.
Removing the interstitial page
To prevent bad actors from using ngrok to create phishing pages, ngrok injects an interstitial page in front of all HTML browser traffic on the free tier. Once the user acknowledges that the site is being served by ngrok, a cookie is set that is valid for 7 days for that domain.
This does not impact users serving APIs or accessing ngrok endpoints programmatically.
You can remove the interstitial by upgrading to any paid plan or using one of the following methods.
Using headers
From the client accessing the ngrok endpoint, add a header value of ngrok-skip-browser-warning
and set it to any value. These requests will bypass the interstitial.
- Axios
- Fetch
- Super Agent
- JQuery
axios.get(url, { 'headers': { 'ngrok-skip-browser-warning': '1' } })
.then((response => {
console.log(response.data);
})
.catch((error) => {
console.log(error);
});
const response = await fetch(URL, {
headers: {
"ngrok-skip-browser-warning": "1",
},
// ...
});
request
.get('/endpoint')
.set('ngrok-skip-browser-warning', '1')
.then(callback);
request
.get('/endpoint')
.set('ngrok-skip-browser-warning', '1')
.then(callback);
Using a custom user agent
Change your user agent by setting the User-Agent
header to something non-standard, such as MyApp/0.0.1
, to bypass the warning.
You can also use a browser extension to customize your browser's user agent value. Here is an example for Chrome.
Increasing your limits
If you run into a limit, you have two options:
- Wait for your limits to refresh.
- Upgrade to a plan with higher limits.
- If you're using ngrok for testing webhooks, the Pro plan is probably the best fit.
- If you're using ngrok for production, try the Pay-as-you-go plan.
See the Pricing and Limits page for more information.
Footnotes
-
Endpoints are the public URLs that ngrok creates for your tunnels. ↩