Customs declarations, suppliers and costs are commercially sensitive data. Here's how we handle them — in detail, because "we take security seriously" means nothing.
Every company is isolated with PostgreSQL Row-Level Security in FORCE mode: it's the database that prevents cross-company access, not just the application. The app runs under a role with no bypass privileges; without a company context, the answer is zero rows.
An automated suite attempts to read and write another company's data on every single code change — including a guard that fails if someone accidentally removes the protections. If it doesn't pass, the code doesn't ship.
Infrastructure and AI models in EU regions (Azure). Your documents never leave the European perimeter, even during automated analysis.
Payments are handled by Stripe (hosted checkout and portal): card numbers and bank details never pass through — and are never stored on — our systems.
The back office sees counts and metadata (how many declarations, how many logins), never the contents: no declaration numbers, supplier names or financial values. And it's a database constraint, verified — not a trust-based policy.
Every creation, change, deletion and export is tracked with user, date and IP. Passwords hashed with bcrypt, mandatory email verification, rate limiting, full security headers.
Optional MFA via TOTP app, passwordless login with an emailed code, password policy with a minimum length and character variety. Sessions can be revoked, lockout after failed attempts.
Technical questions or a DPA request? Get in touch. A technical deep dive on how the isolation is built is coming soon to our resources.