Encryption at rest
AES-256-GCM for provider credentials
Every provider API key you upload is encrypted with AES-256-GCM before it touches our database. The encryption key is held server-side and rotated quarterly. Plaintext credentials never land in logs, audit trails, or backups.
Encryption in transit
TLS 1.3 across every hop
All API traffic is HTTPS. Internal service-to-service calls inside our VPC use mutual TLS. Webhooks are signed with HMAC-SHA256.
Authentication
JWT + bcrypt (12 rounds)
Passwords are hashed with bcrypt at cost factor 12. Sessions use signed JWTs in localStorage (no cookies, no CSRF surface). API keys are prefixed sr_ and scoped per organization with revocation.
Tenancy
org_id on every row, every query
Every database row carries an org_id, every repository query checks it, and every queue message uses org-sharded MessageGroupIds. A misrouted job fails closed (silent no-op), it never crosses tenants.
Backups
Daily snapshots, 30-day retention
Postgres + analytics TimescaleDB run nightly snapshots to S3 with 30-day retention. Restore drills run quarterly.
Audit
Every config change is logged
Login, role change, API key creation, provider credential update, workflow edit — all recorded with actor + timestamp + IP. 90-day retention by default; longer retention available on request.
Vendor ToS
BYO credentials means BYO terms
justcrawl orchestrates requests through providers you bring. Your relationship with Bright Data, Oxylabs, Nimble Way, Zyte, and Decodo is governed by their terms — we never act as a reseller.
Data residency
us-east-1 (Virginia)
All production data is stored in AWS us-east-1. EU residency is on the roadmap; contact us if it is a procurement blocker.