Skip to content

Scan a public page for 25 kinds of leaked secrets

Apps made by vibe coding often ship keys to the browser. Enter the address of one page you run, and the scanner reads that page’s HTML and the script files it links for API keys, tokens and database URLs that a visitor could copy. Values are shown masked.

Page to scan

One page, not the whole site.The scan reads this address and the scripts it links. To check another page, scan its address too.

Confirm you are human

This keeps automated requests off the service.

This fetches only the public files of the address you enter, from Cloudflare’s network. Nothing is stored.

Result

What this scan cannot see

The scanner reads only the files a visitor’s browser downloads from the page. It cannot see secrets that stay on the server, pages behind a login, files loaded later by import(), or source maps. A clean result is not proof that the app is safe.

All 25 key types

20 of them are secrets that must never reach a browser. 5 are public by design.

Keys marked public, such as a Supabase anon key, a Firebase apiKey or a Stripe publishable key, are meant to be in the browser. They are safe only while your database rules protect the data behind them.

Key typeIdSeverityKind
OpenAI API keyopenai-keyCriticalSecret
Anthropic API keyanthropic-keyCriticalSecret
Stripe live secret keystripe-secretCriticalSecret
Stripe test secret keystripe-test-secretMediumSecret
Stripe publishable keystripe-publishableInfoPublic by design
AWS access key idaws-access-keyHighSecret
AWS secret access keyaws-secretCriticalSecret
GitHub tokengithub-tokenCriticalSecret
Google API keygoogle-api-keyInfoPublic by design
Firebase web config apiKeyfirebase-web-configInfoPublic by design
Supabase service_role keysupabase-service-role-jwtCriticalSecret
Supabase anon keysupabase-anon-jwtInfoPublic by design
JSON Web Tokenjwt-otherLowSecret
Supabase secret keysupabase-secret-keyCriticalSecret
Supabase publishable keysupabase-publishable-keyInfoPublic by design
Slack tokenslack-tokenCriticalSecret
Slack webhook URLslack-webhookHighSecret
SendGrid API keysendgrid-keyCriticalSecret
Twilio API key sidtwilio-keyHighSecret
Mailgun API keymailgun-keyHighSecret
Private key blockprivate-key-blockCriticalSecret
Database URL with passworddatabase-urlCriticalSecret
npm tokennpm-tokenCriticalSecret
Hugging Face tokenhuggingface-tokenHighSecret
Resend API keyresend-keyHighSecret

Questions

What does the secret scanner read?

It reads the page’s HTML and up to 14 script files it links, 3 MB in total, the first 512 KB of the page and the first 1 MB of each file. It looks for known key formats, such as API keys, access tokens, private key blocks and database URLs with a password.

Where does the scan run, and how long does it take?

The scan runs in your browser; our server only fetches the files for it, one request per file. Nothing is stored. A scan can take up to about a minute and a half on a slow site.

What can the scanner not see?

Secrets that exist only on the server, pages behind a login, chunks that the page loads later by import(), and source maps. It also cannot tell whether a found key is still active. A clean result is not proof that the app is safe.

Why are some keys marked public by design?

A Supabase anon or publishable key, a Firebase apiKey, a Google API key and a Stripe publishable key are made to be sent to the browser. They identify your project and grant only what your database rules, API restrictions and server checks allow. They are reported so you can confirm those rules exist, not because the key itself is a leak.

What should I do if a real secret leaks?

Rotate it first: create a new key at the provider and revoke the old one. Then move the new key to server-side code or environment variables and redeploy. Deleting the key from the code is not enough, because the old value stays in earlier builds, caches and git history.

Why do apps built by vibe coding leak keys so often?

Code written quickly with AI tools often calls a paid or privileged API straight from the browser, and the key ends up in the script that every visitor downloads. Vibe coding security starts with keeping such calls on the server.