Security

How we protect your data

Your ad creative gives away your whole strategy. Here's exactly what we do with it, who can see it, and how we make sure only you can.

The short version

What you need to know first

Your uploaded creative is kept so you can replay it inside its report. Stored encrypted, access-controlled to your account, and visible only to you. Prefer we don't keep it? Turn retention off in Account → Uploaded creatives and we delete it (and every future upload) the moment analysis finishes. Either way, the analysis result (scores, transcripts, acoustic data) stays in your account until you delete it; no one at AdZhi can see your creatives through the app, and any infrastructure access is restricted, logged and used only for operational support; and only aggregated numeric features (never your raw creative or transcript) improve our models, which you can opt out of in Account → Benchmark data.

Data handling

What happens to your video files

When you upload a video or submit a YouTube URL, this is the exact sequence:

  • File is uploaded to our analysis server over HTTPS (encrypted in transit)
  • Processed on an ephemeral working filesystem during analysis; the working copy is never persisted
  • Transcription runs on our own infrastructure by default (a local Whisper model). When a hosted transcription provider (Groq or OpenAI) is enabled for speed, the audio is sent there for transcription under that provider’s API terms — processed transiently and not used to train their models; a low-confidence clip may additionally use the optional AssemblyAI fallback (see Subprocessors)
  • Acoustic analysis (pitch, energy, voice-clarity proxy) runs locally: no audio sent to any third party
  • The transcript text, acoustic signal summaries (numbers, not audio), and up to four still frames sampled from the video are sent to Anthropic (Claude) — the transcript and summaries for linguistic analysis, the frames for on-screen/frame-semantics analysis; where a hosted summariser (OpenAI) is enabled it also receives the transcript to draft the report summary. The full audio or video file is never sent.
  • Your original creative is kept for in-report playback by default - stored encrypted, access-controlled to your account; switch retention off in Account and it is deleted the moment analysis finishes
  • Raw video is never written to our database
Retention

What we store

After analysis, we store the following in your account:

  • Transcript: the spoken words from your ad
  • Acoustic metrics: numerical scores (pitch, energy, WPM, etc.)
  • Analysis results: scores, misalignments, recommendations
  • Filename: so you can identify which ad the result belongs to
  • Your creative: the uploaded video or audio, kept for in-report playback unless you turn retention off

We don't store any metadata from your ad account. Your uploaded video or audio is kept only for your own in-report playback, and only while retention is on. Turn it off in Account → Uploaded creatives and it's deleted.

Controls

Access, identity and encryption

Who can see your data

  • Only you (and team members you invite) can see your analyses
  • AdZhi staff have no application-level access to your analysis results; any infrastructure access is restricted, logged, and used only for operational support
  • Share links you create expose only that specific report, to anyone with the link. You control this
  • Your data is never shared with other AdZhi customers; it only ever feeds shared benchmarks in aggregate across many accounts, never as a single identifiable account (see ML model training below)

Authentication and access control

  • Passwords are hashed with bcrypt: we never store plaintext passwords and cannot recover them
  • Sessions use signed JWT tokens that expire after 60 minutes
  • All API requests require authentication: no unauthenticated data access
  • Every database query is scoped to your user ID: no cross-account data access is possible by design
  • Password reset uses single-use time-limited tokens sent to your verified email

How your data is encrypted

  • In transit: all connections use TLS 1.2+ (HTTPS). HTTP is not served.
  • Secrets at the application level: connected ad-account OAuth tokens are encrypted with Fernet (AES-128-CBC with an HMAC authenticity tag) before they are written to the database; passwords are bcrypt-hashed and API keys are stored only as SHA-256 hashes. None of these are reversible or readable in the database.
  • At rest: the database runs on Railway's managed Postgres, with any retained media on Railway-hosted storage. Disk-level encryption at rest is handled by the managed platform; see Railway's own security documentation for the current guarantee.
TLS 1.2+
Every connection encrypted in transit. HTTP is never served.
bcrypt
Passwords hashed, never stored in plaintext.
30 days
Everything deleted after you close your account.
Third parties

What goes to Anthropic (Claude)

Our analysis uses Claude (Anthropic) for linguistic intelligence (hook scoring, act structure, persuasion analysis) and on-screen frame semantics. When we call the Claude API, we send:

  • The transcript text from your ad
  • Acoustic signal summaries (numbers, not audio)
  • Up to four still frames sampled from the video, for on-screen/frame-semantics analysis (never the full audio or video file)
  • No filenames, no user IDs, no account information

Anthropic's API does not use submitted prompts to train their models. See Anthropic's privacy policy.

Anthropic isn't always the only external recipient of your ad's words. When a hosted transcription provider is enabled for speed, the audio is processed by Groq or OpenAI; and if a hosted summariser is enabled, the transcript is also processed by OpenAI to draft the report summary. In every case the data is processed transiently under that provider's API terms and is not used to train their models. All of these are listed as conditional entries in the subprocessor table below.

Subprocessors

Who processes your data

The following third parties process data as part of the AdZhi service:

ProcessorPurposeData processedLocation
RailwayInfrastructure hosting (app, worker, managed Postgres and Redis)All application data, video files (temporary), databaseUS / EU
AnthropicLinguistic + frame-semantics analysis (Claude API)Ad transcript, acoustic summaries, and up to 4 still frames sampled from the video (for on-screen analysis): no full audio or video file, no account or billing identifiers. A transcript is the words spoken in the ad and can contain incidental personal detail; per Anthropic’s API policy, it is not used to train their models.US
StripePayment processingBilling information, card details (Stripe-direct, never touches AdZhi servers)US / EU
ResendTransactional and marketing email deliveryEmail address, email contentUS
Plausible AnalyticsWebsite analyticsCookieless page view counts, no personal dataEU
Groq (conditional)Hosted transcription (fast path), when enabledAudio file, transient — processed for transcription, not retained or used to train their modelsUS
OpenAI (conditional)Hosted transcription and/or summary generation, when enabledAudio file and/or transcript text, transient — not used to train their modelsUS
AssemblyAI (conditional)Fallback transcription for complex audioAudio file, transient — only used when local Whisper confidence is lowUS

Last updated: 13 July 2026. We notify account owners by email at least 30 days before a new subprocessor starts handling personal data, so you can object before it takes effect.

Your rights

What you can ask us to do

  • Export your data at any time: email privacy@adzhi.co.uk
  • Delete your account and all associated data: request via account settings or email
  • Correct any inaccurate personal information
  • Opt out of marketing emails: one-click unsubscribe in every marketing email
  • Request a Data Processing Agreement (DPA) for GDPR compliance: email us
ML model training (on by default)

How model improvement works

AdZhi improves its models and shared benchmarks using acoustic feature data from analyses. This is on by default. You can opt out anytime in Account → Benchmark data.

The lawful basis for this is our legitimate interest in improving the product for every account, balanced by a standing right to opt out at any time (UK GDPR Article 6(1)(f) and the right to object). It is set out in full in our Privacy Policy, Section 5.

While it's on, the following is logged after each analysis:

  • Numeric acoustic features: pitch range, energy values, WPM, disfluency count, silence ratio (numbers only, not audio)
  • Scores: AdZhi Score, hook score, CTA energy, voice quality, structure score
  • Context signals: inferred industry, platform, objective (not your ad account data)
  • A pseudonymous internal job and account reference, so a vector can be traced back for opt-out and deletion (an internal ID, never your name, email or company)

What is never included in training data:

  • Your video or audio file
  • Your transcript or any spoken words
  • Your ad account data, spend, or performance metrics
  • Any personally identifying information
  • Your company name or brand name

Each contributed vector is keyed to a pseudonymous internal account reference. Under UK GDPR that makes it pseudonymised personal data, not anonymous: we could re-associate it with you, which is exactly what lets you withdraw it. It is never labelled with your name, email or company, is only ever used inside multi-account aggregates — never as a single identifiable account, and never exposed to another customer. Every cross-account surface applies a k-anonymity floor before an aggregate is formed (a minimum number of distinct accounts must contribute); the pooled driver model additionally adds differential-privacy noise. Opting out in Account → Benchmark data stops all future contribution immediately. To have previously contributed vectors deleted, email privacy@adzhi.co.uk; deleting your account erases them along with the rest of your data.

Why opt in? Your data helps AdZhi predict performance more accurately for everyone. The Phase 2 XGBoost models that convert heuristic predictions into validated ones require labelled training data from real ads. Users who opt in are directly improving the product for themselves and other performance marketers.

Disclosure

Reporting a vulnerability

If you discover a security vulnerability in AdZhi, please report it responsibly to security@adzhi.co.uk. We aim to acknowledge within two business days and to resolve critical issues promptly. Please do not publicly disclose vulnerabilities before we have had a chance to address them.

Honest status

What we don't have yet (and why)

Here's where we actually stand:

  • SOC 2 Type II: This requires a year-long audit process and ~£15k in fees. We're working toward it as we grow. Enterprise customers who require it can contact us to discuss timelines.
  • ISO 27001: Similarly, an enterprise compliance requirement we're working toward.
  • Penetration test: Targeted for Q4 2026 with a third-party firm.

For SMB and agency customers, the security controls above are appropriate for the data involved (ad creative and acoustic analysis). We don't process payment card data, health data, or sensitive personal information.

Get in touch

Security contact: security@adzhi.co.uk

Privacy contact: privacy@adzhi.co.uk

Formal requests

DPA requests: Email privacy@adzhi.co.uk with subject "DPA Request"

Data deletion: Email privacy@adzhi.co.uk with subject "Delete My Data"