supacrawl
Use this skill when the user wants to inspect, mirror, search, export, or back up a Supabase project into a local SQLite archive.
Safety
- Never print secrets. Redact Postgres URLs, passwords, service role keys, JWTs, and anon keys.
- Do not write to the remote Supabase project.
- Prefer temporary archives under
/private/tmpfor trials unless the user asks for a durable archive. - Start with
doctorbefore a live sync. - Use
syncbeforesync --fullon unfamiliar projects. - Use
storage pull --limitbefore downloading a large bucket. - Use
status --sync neverwhen the user wants an archive-only read. - Use encrypted backups only with age recipients or identities supplied through config, files, or environment variables.
Quick Workflow
supacrawl init --project-id <label>
supacrawl doctor --json
supacrawl sync --json
supacrawl status --json
supacrawl diff /path/to/older-archive.db --json
supacrawl size --json
Use diff against a copy of the archive made before the sync you want to compare against.
Read commands auto-refresh stale metadata by default. Override the policy when needed:
supacrawl status --sync never --json
supacrawl report --sync always --json
supacrawl search --stale-after 1h "auth.uid"
For a full local database copy:
supacrawl sync --full --batch-size 2000
For a smaller archive:
supacrawl sync --full --no-row-fts --batch-size 2000
Export one table:
supacrawl export --type jsonl --out companies.jsonl public.companies
Download Storage blobs after a full sync:
supacrawl storage pull --dir ./supabase-storage --limit 10
Create and inspect an encrypted local backup:
supacrawl backup keygen --out ~/.supacrawl/age.key
supacrawl backup init --recipient age1...
supacrawl backup push --json
supacrawl backup status --json
supacrawl backup pull --out ./supacrawl-restore --json
Local Analysis
Use read-only SQL against the archive:
supacrawl sql "select schema_name, name, rls_enabled from tables order by schema_name, name"
supacrawl sql "select json_extract(row_json, '$.name') from table_rows where schema_name='public' and table_name='companies' limit 20"
Expected Archive Tables
schemastablescolumnsindexesconstraintspoliciesfunctionstriggersstorage_bucketsstorage_object_statscrawl_runsdata_copy_runssearch_docstable_rows
Validation
Before declaring the tool healthy, run:
./scripts/validate-local.sh
If SUPABASE_DB_URL is set, the validator also runs live doctor and metadata
sync checks. Set SUPACRAWL_VALIDATE_FULL=1 only when a full data copy is safe.
Source: davemorin/supacrawl — distributed by TomeVault.