Scan a Website for Exposed LLM API Keys

Find out whether a site you own has exposed an LLM API key. The free result is a simple YES or NO. Premium reveals the exact public resource and line with only a redacted fingerprint, and can crawl every discoverable page up to your plan limit.

The free result is YES or NO only. Premium reveals the provider, redacted fingerprint and exact public resource and line, and can crawl every discoverable page up to the plan limit. Raw keys are never stored or sent to providers. How we scan · Acceptable use

How it works

  1. Confirm you are authorised

    Use this only on a site you own or have explicit permission to assess.

  2. Get a private YES or NO

    The page, same-origin scripts, named chunks, source maps, runtime configuration and a fixed content-verified list of .env, Git, config and backup locations are checked.

  3. Upgrade for the exact location

    Premium shows the provider, redacted fingerprint, public resource and line, can crawl all discoverable pages up to the plan limit, scan an authenticated URL and bulk-scan ten sites.

What this tool checks

1 checks across 1 areas. Each links to its reference page with the test, the risk and the fix.

Full reference

Exposed API keys and client-side secrets

1 check

The ones that most often decide the grade:

What an LLM API key scanner actually checks

It follows the places where a secret can accidentally travel from a private project into a public website deployment.

LLM API keys should remain on a server. They can still be copied into a browser bundle, runtime configuration file, source map or public backup when an application is built or deployed. Anyone who can download that resource can copy the same credential.

Scan.now reads those public resources, looks for provider-specific key formats and checks opaque values only when a provider-specific variable name supplies enough context. Matching happens locally in the scanner. A suspected key is not sent to its provider or used to make an API request.

How the exposure scan follows a deployed website

The scan expands only through explicit, same-origin public references and a bounded list of common leak paths.

  1. Start with the entered page

    Fetch its HTML and identify scripts and script preloads that the page exposes to every visitor.

  2. Follow client resources

    Read same-origin JavaScript, named JavaScript or JSON chunks and linked source maps, within a fixed resource budget.

  3. Check common leak paths

    Make read-only requests for runtime configuration, environment, Git, database dump and backup locations, then verify the returned content.

  4. Classify without using the key

    Remove placeholders, group duplicates, redact the value and record only safe evidence for the authorised owner.

LLM key scan coverage

Choose the scan that matches where a key could have escaped. A public page scan and a local project scan answer different questions.

SurfaceFree page scanPremium deep scanPremium local folder scan
Entered page HTMLIncludedIncludedNot applicable
Same-origin scripts and named chunksUp to 32 public client resourcesUnique assets found across crawled pagesBuilt JavaScript and configuration files in the selected folder
Linked source mapsIncluded within the resource budgetIncluded across the crawlIncluded when stored in the folder
Common exposure pathsFixed, content-verified list of runtime config, .env, Git and backup pathsThe same public checks plus every crawled pageHidden and ordinary files can be checked directly
Other pages and sitemap URLsEntered page onlyDiscoverable same-site pages up to the plan limit, while respecting robots.txtNot applicable
Page behind a loginNot includedOne exact URL using a temporary Authorization or Cookie headerPrivate project files do not require a website login

Content verification matters: a path returning HTTP 200 is not automatically called a leak. The scanner checks whether the response resembles the expected file and ignores generic soft-404 pages.

Which LLM provider keys can be recognised?

Detection combines distinctive prefixes with nearby variable names. This reduces the false positives caused by random strings and shared key formats.

Provider groupExamples recognisedHow the match is assessed
Distinctive key formatsAnthropic, OpenRouter, Groq, Hugging Face, Replicate, Together AI, Perplexity and xAIA provider-specific prefix plus length and character checks provides a high-confidence match.
OpenAI-compatible keysOpenAI and compatible sk- credentialsKnown payment-key prefixes are excluded so Stripe keys are not mislabelled as LLM keys.
Context-labelled valuesGemini, Mistral, Cohere, Fireworks AI and DeepSeekAn opaque value is reported only when it is assigned to a recognisable provider-specific key or token name.
Google AIza valuesGoogle GeminiThe format is shared by Google services, so nearby Gemini or Generative Language context is required.

How to interpret an LLM API key scan result

The answer always belongs to the exact scan scope shown in the report.

YES: exposure detected

A recognisable credential was found in a scanned public resource. Revoke or rotate it first. Premium shows the provider, redacted fingerprint, resource and line needed to remove the correct copy.

NO: none detected in scope

No recognisable key was found in the pages, assets and paths covered by this run. This is useful evidence, but it is not proof that every private, unlinked or runtime-generated location is clean.

Coverage explains confidence

A one-page result covers the entered page and bounded deployment surface. Use a deep crawl for a full site and the local folder scanner for source files that HTTP can never reach.

Why a public LLM API key matters

  • Unexpected charges: another person can consume paid tokens against the same project.
  • Quota exhaustion: abusive traffic can make the real application fail when it reaches a rate or spend limit.
  • Account reputation: prohibited prompts or automated abuse may be attributed to the exposed account.
  • Operational exposure: provider logs and billing records can be filled with requests that did not come from your application.

What this scanner deliberately does not do

  • It does not call a provider to test whether a suspected key still works.
  • It does not submit forms, attempt a login or bypass access controls.
  • It does not execute browser JavaScript to reveal client-generated requests.
  • It does not store a raw credential in the report, database or application logs.

What to do when an exposed key is found

Treat removal and credential rotation as separate jobs. Removing the file does not invalidate copies already downloaded.

  1. (01)

    Revoke or rotate the credential

    Assume the public value was copied. Disable it in the provider console and issue a replacement with the smallest permissions and spend limit possible.

  2. (02)

    Review usage and billing

    Check request history, models, source IP information, token volume and spend for activity that does not match the application.

  3. (03)

    Remove every deployed copy

    Inspect frontend source, compiled bundles, source maps, runtime configuration, caches, backups and repository history. Redeploy after removing the secret.

  4. (04)

    Move the provider call server-side

    Store the replacement in a server-only secret manager or environment variable, then expose only a narrow authenticated endpoint to the browser.

  5. (05)

    Scan again and monitor

    Run both the public deployment scan and local folder scan. A clean rescan confirms that the replaced build no longer exposes a recognisable copy in the tested scope.

Free result or detailed investigation?

The public result answers the urgent question without publishing a roadmap to the exposed resource.

CapabilityFreePremium
Private YES or NO resultIncludedIncluded
Provider and redacted fingerprintHiddenIncluded
Exact public resource and lineHiddenIncluded
Deep crawl of discoverable pagesNot includedUp to the current plan limit
Authenticated exact-page scanNot includedIncluded
Private local folder scanNot includedIncluded, in the browser without uploading files
Bulk website scanOne siteUp to ten authorised sites at once

Guides for this tool

Background reading written to go with these results.

Frequently asked questions

Which providers can it recognise?

It recognises distinctive formats used by OpenAI-compatible services, Anthropic, OpenRouter, Groq, Hugging Face, Replicate, Together AI, Perplexity and xAI, plus opaque values assigned to provider-specific names for Gemini, Mistral, Cohere, Fireworks and DeepSeek. Because Google's AIza format is shared by unrelated services such as Maps, it is reported only with nearby Gemini context.

Do you test whether a key works?

No. Validation could incur cost, disclose a credential to another system or change account state. The scanner uses offline format and context checks, redacts the value in memory and tells the owner where the copy appears.

Do you store keys in the report?

No. Raw values are never returned by the scanner, written to the database or included in logs. The free report says only YES or NO. A Premium report contains a short redacted fingerprint, provider family, public resource URL and line number so the owner can remove the right copy.

Does it check .env and backup files?

Yes. It requests a fixed list of common .env, Git, configuration, SQL dump and backup paths and verifies the returned content so a site's generic 200 error page is not mistaken for a leak.

Can it scan private pages?

Paid, signed-in owners can supply one Authorization or Cookie header for the exact URL. It is used only during that scan, stripped before any cross-origin redirect and never stored. The scanner does not submit login forms.

What does the Premium deep scan cover?

It follows discoverable same-site links and sitemap URLs, up to your plan limit, then checks every crawled HTML page and each unique same-origin client asset. It respects robots.txt. Premium's browser-based local folder audit covers files the server never exposes; its optional Python version also checks remote servers and Git history.

Does a NO prove my site has no leaked keys?

No. It means no recognisable key was found in the public pages and deployment surface examined. Client-side execution, forms and provider validation are not performed, and private files require the Premium local folder audit.

What should I do if it finds a key?

Revoke or rotate the key first, review usage and billing, then remove it from the frontend source, build output, source maps, caches and repository history. Move the provider call behind a server-side endpoint and keep the replacement in a server-only secret manager.