A domain is the whole setup
No agent to deploy, no SDK to install, no OAuth app to authorize, no database password to hand over. Type your domain and the scan starts.
Features
Anyone can reach your domain. Rowly finds out what they can actually do - no credentials required.
Rowly is a Supabase configuration security scanner - not a general vulnerability scanner. Along the way, it also checks supporting web-security basics like headers, TLS, and DNS.
Run a free auditScore out of 100 based on total findings. Lower means more issues detected across tables, functions, roles, and database config.
Elevated risk detected. Review critical findings and apply hardening SQL.
24 CHECKS · 4 CRITICAL · 9 WARNING · 11 SECURE
18
11
of 18 with no issues
9
5 tables · includes functions & config
4
0 RLS off · check functions & roles below
13
warnings + critical across all layers
Coverage
Rowly starts from your public domain, discovers any Supabase project in client-side code, then probes that surface with only the public anon key - the same vantage point a real attacker has.
No integration required
Rowly checks your app the way an external attacker would, then tells you what it found - without a database password or an agent to deploy.
No agent to deploy, no SDK to install, no OAuth app to authorize, no database password to hand over. Type your domain and the scan starts.
Rowly reads your site's public homepage and JavaScript, then probes any discovered Supabase project using only its public anon key - the same surface a real attacker sees. Canary writes create a new object and delete that same object only; existing rows and files are never touched.
Saved projects store only a domain. Rowly never asks for a connection string, service_role key, or any credential that could reach inside your database.
Why Rowly
Supabase Security Advisor needs your project dashboard. Generic scanners never touch your live API. Rowly attacks the public surface an outsider already has.
No database password or service_role key. Rowly discovers your Supabase project from public HTML/JS the same way a browser would.
Live anon-key probes: table SELECT, OpenAPI write grants, canary INSERT/DELETE of scanner-owned rows, and GraphQL when REST is locked down.
Public buckets, canary uploads, signup/confirmation posture, Realtime listen, API CORS, and dangerous gateway paths - not just table RLS toggles.
Flags service_role / sb_secret keys, sourcemaps, .env, and .git when they are reachable from the outside.
RLS policy SQL, function bodies, triggers, and authenticated-only policies stay listed as gaps - never silently marked clean.
Every finding includes plain-English risk and remediation SQL or dashboard steps you can apply immediately.
High when the probe proves exposure (e.g. live row data or a successful canary write); medium when it needs a human look.
Canary writes only create a new scanner-owned row or file, then delete that same object. Existing customer data is never patched or removed.
External attack surface
Rowly discovers your Supabase project from public HTML and JS, then hits REST, Storage, Auth, GraphQL, and Realtime with only the anon key. Anonymous reads are checked on every scan; canary writes and account-creation probes run once you verify the domain, and never touch your existing rows.
Run free auditExternal attack surface
5 findings · sorted by risk
"invoices" returned live row data to an unauthenticated request using only the public anon key. This is exactly what an external attacker without credentials would see.
"profiles" accepted an anonymous INSERT and returned the new canary row. An external attacker can create rows without signing in.
A Supabase service_role/secret key was found in publicly served HTML/JavaScript. This key bypasses Row Level Security entirely.
Bucket "receipts" is marked public. Anyone can download its files without signing in.
The project's public auth settings report autoconfirm is on. Attackers can create accounts using email addresses they do not own.
Fixes included
Each finding comes in plain English, ranked by confidence and severity, with remediation SQL or dashboard steps - plus a combined fix-all script for every finding in a category.
Run free auditEvery finding ships with the fix
Findings are ranked by severity and confidence, and each one carries the remediation SQL or dashboard steps to run.
"invoices" returned live row data to an unauthenticated request using only the public anon key. This is exactly what an external attacker without credentials would see.
Fix SQL
-- Lock down anonymous SELECT on public."invoices"
-- Dashboard: Table Editor → invoices → Policies → remove anon SELECT / tighten USING
ALTER TABLE public."invoices" ENABLE ROW LEVEL SECURITY;
REVOKE SELECT ON public.invoices FROM anon;Fix row level security
5 findings · Combined remediation script
Domain verification
Anyone can point Rowly at a domain and get a read-only audit instantly. Full active testing - the checks that write data, create accounts, or call your functions - only runs once you prove you actually control that domain.
Every scan, no setup
Runs the moment you type a domain in. Nothing here writes data, creates accounts, or calls your functions - it's everything an outside visitor's browser can already see.
Unlocked by verification
Once your domain is verified, Rowly also proves exploitability directly: it writes canary data, creates a throwaway test account, and calls your RPCs and Edge Functions to see what an anonymous attacker could actually do.
Add a TXT record at _rowly-verify.yourdomain.com with the token Rowly gives you, then click "check now". Same model as Google Search Console or Vercel domain verification - we never ask for a database password or admin access, only proof you control DNS.
This split exists so Rowly only takes exploit-style actions - writes, test signups, function calls - against domains you've proven you own, never against a domain someone else submitted.
Features
Type a domain and Rowly discovers what's publicly exposed in seconds - no database password, no agent, no SDK to install.
Built for Supabase-backed apps on Next.js, Vite, Expo and more. If your frontend talks to Supabase, Rowly can see what an outsider can reach.
Rowly re-scans on a schedule and diffs against the last run, so you're pinged when a new vulnerability appears, not by the same noise every day.
Findings are ranked by what's actually at risk, from emails and tokens to cards and passwords, so you fix what matters first.
Export a full PDF report with every finding and its SQL fix, ready to hand to a client, a teammate, or a security reviewer.
Free
$0
Run a manual audit and see exactly where you leak.
Pro
…/mo
billed monthly
Continuous monitoring with alerts on new vulnerabilities.
Enterprise
Custom
For agencies and teams shipping many client apps.
Audit your Supabase project in under a minute. No signup, no credit card required.
Run a free audit