Scan any website for exposed Supabase credentials and leaked database records.
<script> on the target page and searches for leaked Supabase URLs and JWT tokens./scanSend a JSON body with the target URL.
curl -X POST https://www.checkifsecure.com/scan \
-H "Content-Type: application/json" \
-d '{{"url": "https://example.com"}}'
/scan?url=Pass the URL as a query parameter.
curl "https://www.checkifsecure.com/scan?url=https://example.com"
{{
"site": "https://example.com",
"vulnerable": true | false,
"supabase_urls": ["https://xyz.supabase.co"],
"jwts": ["eyJ..."],
"tables": [
{{
"table": "users",
"rows": 142,
"dumped": true,
"vulnerable": true,
"vulnerability_level": "critical",
"sensitive_fields": ["email", "password"]
}}
],
"vulnerability_summary": {{
"total_tables_accessible": 5,
"vulnerable_tables_count": 2,
"critical_count": 1,
"high_count": 1,
"medium_count": 0,
"vulnerable_tables": [...]
}},
"error": null,
"report": "Scanning https://example.com\n VULNERABLE: Supabase JWT exposed\n [+] Found 2 table(s)\n RISK users: 142 row(s) - CRITICAL - Sensitive fields: email, password\n [+] posts: 87 row(s) - Public data (no sensitive fields detected)"
}}
| Field | Type | Description |
|---|---|---|
| vulnerable | bool | true if a Supabase JWT was found in the site's JS |
| supabase_urls | string[] | Discovered Supabase project URLs (cloud or custom domain) |
| jwts | string[] | Leaked JWT tokens extracted from JavaScript bundles |
| tables[].vulnerability_level | string | critical (passwords/tokens), high (emails/phones), medium, or none |
| tables[].sensitive_fields | string[] | Column names flagged as containing sensitive data |
| error | string? | Non-null if the scan encountered an error |
| report | string | Pre-formatted plain-text summary of the scan you can print directly to a user (see below) |
report FieldEvery response includes a report string — a ready-to-display, human-readable summary of the scan. LLMs and agents can print this directly to the user instead of parsing the JSON. Example output:
Scanning https://app.example.com/login
VULNERABLE: Supabase JWT exposed
[+] Found 12 table(s)
RISK users: 142 row(s) - CRITICAL - Sensitive fields: email, password
[+] organisations: 0 row(s) - Public data (no sensitive fields detected)
[+] campaigns: 0 row(s) - Public data (no sensitive fields detected)
[-] secrets: blocked (HTTP 401)
VULNERABILITY SUMMARY:
Critical: 1 table(s)
High: 0 table(s)
Medium: 0 table(s)
Total vulnerable: 1/12 accessible table(s)
- users [critical]: email, password
POST /scan request with a JSON body containing {{"url": "https://target.com"}}. The response is fully structured JSON. No authentication is required. The report field in every response contains a pre-formatted plain-text summary you can print directly to the user without any extra formatting. A machine-readable description is available at /llms.txt and interactive docs at /docs.