Netlify integration
Netlify uptime, deploy tracking and analytics
BugOtter imports every Netlify site with a token it uses once and never stores. Uptime checks start on each domain right away. Netlify's deploy webhook marks each production deploy, so errors and outages say which deploy they started after. Analytics and browser errors come from one script tag.
- Used onceimport token, never stored
- 1 webhookmarks every production deploy
- 3 regionscheck each domain

A token used once
It lists your sites while you pick, then it's forgotten. BugOtter never stores it.Deploys from Netlify's webhook
Each production deploy, with its commit, title and URL, as soon as it's live.Your domain serves the script
Three rewrite rules in netlify.toml get analytics past ad blockers.
Import every site with a token used once
Create a personal access token
In Netlify, open User settings → Applications, then Personal access tokens → New access token. Name it “BugOtter import”, with a short expiry.Paste it in BugOtter
Click Import from Netlify. You see every site across your teams, with its custom domain when it has one, or itsnetlify.appaddress.Pick the sites to watch
Checks start right away from US East, Europe and US West. SSL and domain expiry are watched too. The token is then forgotten: delete it in Netlify if you like.

- 30 days at a glance. Amber marks a day with some downtime.
- Response time, median and p95, with the slowest region named.
- Three regions. An outage only counts when two agree.
Mark every production deploy with Netlify's webhook
Copy your deploy webhook
Each app's page in BugOtter has a webhook URL likehttps://bugotter.com/api/123/deploys?key=…. The key is the app's upload key, so treat the URL as a secret.Add it as a deploy notification
In the site's Project configuration → Notifications → Deploy notifications, add an HTTP POST request on Deploy succeeded and paste the URL. Leave the signing secret empty.Deploy once to see it
Netlify sends the deploy when it's live on the CDN. BugOtter records the commit, its title and the deploy URL, only for the production context.
From then on, issues say “started 4 min after deploy c0ffee1”

- Deploy check. After each Netlify deploy: new errors, error rate, speed and sales against the day before.
- New errors name their release, so you know which change to look at.
- Who it hit: events and people, per issue.
Analytics past ad blockers, with Netlify redirects
Ad blockers drop 20–40% of visitors for most analytics. A Netlify rewrite with status 200 serves BugOtter from your own domain.
# netlify.toml
[[redirects]]
from = "/_bo/bo.js"
to = "https://bugotter.com/bo.js"
status = 200
force = true
[[redirects]]
from = "/_bo/api/collect"
to = "https://bugotter.com/api/collect?via=YOUR_PROXY_KEY"
status = 200
force = true
[[redirects]]
from = "/_bo/api/errors"
to = "https://bugotter.com/api/errors?via=YOUR_PROXY_KEY"
status = 200
force = truenetlify.toml sits at the root of your repository, so it works whatever your framework builds into. If you prefer _redirects, it has to end up in the publish folder:
# _redirects (in your publish folder, e.g. public/ for Vite and Astro)
/_bo/bo.js https://bugotter.com/bo.js 200!
/_bo/api/collect https://bugotter.com/api/collect?via=YOUR_PROXY_KEY 200!
/_bo/api/errors https://bugotter.com/api/errors?via=YOUR_PROXY_KEY 200!Then use src="/_bo/bo.js" on the script tag.
Netlify passes query strings through on rewrites, and the ?via= key in the target is what tells BugOtter the visit came through your proxy.
Check it once: curl -sI https://yourapp.com/_bo/bo.js should answer 200. Your proxy key is on the app's Traffic tab in BugOtter. Keep the ?via= part: it proves visits came through your proxy, and it only lives in server config, never in the page.

- Visitors, against the period before (the dashed line).
- Markers for big payments, error spikes and deploys.
- Bots kept out of the count.
Errors and source maps on Netlify
Browser errors arrive with the script. For server code, use the Sentry SDK for your framework (Next.js, Astro, SvelteKit, Nuxt, React Router) with your BugOtter DSN.
For plain Netlify Functions, @sentry/node is enough. Flush before returning, since a function can be paused as soon as it answers:
// netlify/functions/checkout.mts
import * as Sentry from "@sentry/node";
Sentry.init({
dsn: process.env.BUGOTTER_DSN,
dataCollection: { userInfo: false, cookies: false, httpBodies: [], databaseQueryData: false },
});
export default async (req: Request) => {
try {
return await handle(req);
} catch (e) {
Sentry.captureException(e);
await Sentry.flush(2000); // send before the function is frozen
return new Response("Something went wrong", { status: 500 });
}
};Add the keys under Project configuration → Environment variables, or from the CLI. Scope BUGOTTER_KEY to builds only.
netlify env:set BUGOTTER_DSN "https://…@bugotter.com/123"
netlify env:set BUGOTTER_PROJECT 123
netlify env:set BUGOTTER_KEY "…" # the upload key: builds only, never in browser codeThen add the upload to your build command, after the build: npm run build && npx bugotter sourcemaps dist --delete (use your framework's output folder).
The CLI tags the maps with Netlify's COMMIT_REF by itself, and --delete keeps .map files out of the deploy.
A status page for your Netlify site
Netlify's own status page tells you about Netlify. Yours should tell your users about your site: the home page, the signup form, and any function your app can't work without.
Add each as a check, with an expected status, word or JSON value, so an error page that answers 200 still fails.
- Turn on the status page and it lives at
bugotter.com/status/your-site, with uptime, incidents and your updates. Never errors or revenue. - Pro can serve it from your own domain, like
status.yoursite.com. - People can subscribe to updates, and a badge shows your uptime in the README.
- Netlify Scheduled Functions can call a heartbeat URL when they finish, so a run that's late or fails alerts you.

- One line for your users: all good, or what isn't.
- Uptime per check, day by day.
- Incidents and your updates. Never errors, logs or revenue.
Or ask your coding agent
Connect BugOtter to Claude Code, Cursor or Codex once over MCP. It signs in through your browser, read-only unless you allow changes. Then paste one line.
claude mcp add --transport http --scope user bugotter https://bugotter.com/api/mcpThen ask, in plain words:
Add the BugOtter ad-blocker redirects to netlify.toml and switch the script tag to /_bo/bo.js.
Add BugOtter source map upload to this site's Netlify build command, using the right output folder for our framework.
Using BugOtter, what changed in errors and traffic since our last Netlify deploy?
Cursor, VS Code, Codex and the rest have their own one-step setup at Docs: your agent (MCP). Every setup screen in BugOtter also has a Copy prompt for your agent button with your keys filled in.
Questions
Does BugOtter keep my Netlify token?
No. It's used once, to list your sites while you pick, and never stored. Netlify personal access tokens can't be limited to reading, so give it the shortest expiry Netlify offers, or delete it right after the import.
Are deploy previews and branch deploys tracked?
No. The webhook only records deploys whose context is production. If you do want a branch, add &branch=staging (or any name) to the webhook URL and that branch's deploys count too.
Why a webhook and not the API?
So BugOtter doesn't have to keep a token with full access to your Netlify account. Netlify sends the deploy to BugOtter when it's live, with its commit, title and URL, and the upload key in the webhook URL proves it's yours.
Do visitor countries work through the Netlify proxy?
Usually, but not always. Netlify doesn't promise to pass on the visitor's address when it proxies, so on some sites the country shows Netlify's region. Visits, pages, sources and revenue aren't affected.
Does it work for Next.js on Netlify?
Yes. Use the Next.js rewrites from the Next.js page for the proxy, or the netlify.toml rules here; either works. Deploy tracking with the webhook is the same for every framework.
Can I check a Netlify site that's password protected?
Add the check with a header. Each uptime check can send headers, like a basic auth or a bypass token, and expect a status, a word or a JSON value.
Sources
Checked Nov 4, 2026 against Netlify's docs on access tokens, deploy notifications, rewrites and proxies and build environment variables. BugOtter isn't affiliated with Netlify.
Watch every app you ship, from one calm list.
14 days of everything, no card needed. Plans from $10 a month, billed yearly.