Boring, deliberate, audit-ready.
We connect to your Amazon Ads account, we read your KDP royalty reports, we hold your manuscripts. None of that is a casual relationship. Here is exactly how we treat your data — and the architectural choices we made before any of it became your problem.
Amazon · Agents
Amazon Agent Policy
Amazon’s Business Solutions Agreement (effective March 4, 2026) introduced Section 19, which formalizes obligations on software agents — automated tools, AI assistants, and API connectors — acting on a seller’s behalf. SelfPub Go is an agent under that definition.
Per ADR-0008, the compliance layer is not a feature we are planning to add. It is a foundation we built before exposing the platform:
- Stable identification. Every Amazon Ads API call carries a versioned
User-Agenttaggedagent=true, the tenant UUID, and the calling tool. Centralized in one HTTP client wrapper used by all outbound calls. - Three-scope kill-switch. Global, per-tenant, and per-rule kill-switches stop all automated actions on request from Amazon, you, or our operators. State is DB-backed, not cached beyond 60 seconds.
- 12-month audit log.Every AI-inspired action — bid changes, negative keyword additions, budget changes — is logged with actor, parameters, and approval state. We retain 12 months minimum per Amazon’s requirement.
- Human approval on bid mutations. AI never pushes bid changes silently. Suggestions surface with rationale; you approve in bulk or one-by-one.
- Data isolation.Section 4.2 prohibits using Amazon data to train third-party AI/ML models. Your ads and royalty data is never used to train any model — ours or anyone else’s.
EU · AI Act
EU AI Act compliance
EU AI Act Article 50 (effective August 2, 2026) requires machine-readable labeling on AI-generated advertising creative for EU audiences. SelfPub Go’s AI Tools module emits the required disclosure metadata at generation time, and our integration with KDP’s upload API includes the March-2026 generative-AI Content Type field automatically when you publish AI-assisted descriptions.
For EU tenants, all AI inference runs through Anthropic’s EU endpoints by default — no data leaves the region for prompts or completions.
Data residency
Multi-region by default
ADR-0009 made global multi-market a day-one architectural commitment. Practical consequences:
- Storage region per tenant. Every workspace carries a
data_regionflag (us, eu, ap). The Supabase database, file storage, and LLM endpoint routing follow that flag. Set at signup; changeable on Studio tier with a 7-day migration window. - Currency and locale. Royalties stored in marketplace-native currency with conversion metadata; ad spend stored in Amazon Ads currency. We never store converted-only values.
- EU customers get default-EU residency, EU LLM endpoints, EU CDN, and EU error-monitoring tooling. GDPR Article 28 processor agreements are linked from the workspace settings.
Data architecture
Multi-tenant isolation
The platform is multi-tenant on a single Postgres cluster. Isolation is enforced at three layers, top to bottom:
- Application. Every read and write goes through a tenant-scoped client. Cross-tenant joins are impossible at the query layer.
- Row-Level Security (RLS). Every Supabase table carries an RLS policy keying on
tenant_id = auth.tenant(). Service role bypass is restricted to specific server-side mutations and logged. - Storage. Files in Supabase Storage and Cloudflare R2 use signed URLs with tenant-scoped paths; expired URLs are non-recoverable.
We run automated cross-tenant probes nightly: a synthetic workspace tries to read its neighbor’s data. A failure of the probe alerts on-call before any human is impacted.
Encryption & secrets
Encryption posture
- In transit. TLS 1.3 everywhere. HSTS with preload on production domains. Strict CSP, no inline scripts in production.
- At rest. Supabase Postgres encrypts volumes with AES-256-GCM. Refresh tokens for Amazon Ads are encrypted at the application layer with envelope encryption (per-tenant data-encryption keys wrapped by a rotating master key).
- Secrets. Production secrets live in Vercel and Supabase Vault. No service-role key has ever been bundled into a client artifact. Our build pipeline fails CI if the bundle contains
SUPABASE_SERVICE_ROLE. - Backups. Daily encrypted backups for 30 days; weekly for 90; monthly for 1 year. Restore drills quarterly.
Incident response
When something breaks
Production incidents are tracked in a public-facing status page (link below). Severity 1 incidents (data exposure, cross-tenant leak, prolonged auth outage) trigger a same-day post-mortem published within 5 business days; we email affected users within 72 hours of confirmation. We follow GDPR Article 33 notification timelines and the Amazon Selling Partner API security incident reporting protocol where applicable.
Responsible disclosure: send security findings to security@selfpubgo.com with optional PGP key on the keyserver. We respond within one business day. We do not yet operate a paid bug bounty; we will name and credit researchers in our security acknowledgments.
Questions about a specific compliance requirement?