Annot8

Privacy & data handling

What Annot8 stores, what it deliberately never collects, your consent obligations, and how to get data out or delete it.

This page describes how the product behaves. It is not legal advice, and it does not replace the privacy policy, the DPA, or the subprocessor list.

Two independent systems

Feedback and Analytics are separate, and it matters:

FeedbackAnalytics
On by defaultYes, once installedNo
Consent and noticesDeliberate submission; applicable notices and permissions still requiredPrior permission through the host consent signal
CollectsWhat the reviewer submits, plus page and device contextPageviews, sessions, sources, devices, events
IdentifierThe reviewer's name, or their accountA random per-browser id

Core feedback collection does not require Analytics, and turning Analytics off takes nothing away from feedback.

A deliberate submission is not blanket consent for everything visible in a screenshot or recording. Site operators must determine the lawful basis and provide applicable notices and permissions, including for other people's data, workplace monitoring, children, and confidential communications. Do not submit PHI to Annot8's current service. Browser permission to use a microphone or share a screen does not establish that everyone recorded agreed to it.

Analytics only runs when both are true:

  1. An admin enabled Analytics in Project → Settings → Features.
  2. The page passed data-analytics-consent="true" (or called init with analyticsConsent: true).

Don't hard-code that attribute for visitors in the EEA or the UK. Wire it to your consent-management platform. If your site is directed at children, take legal advice about the additional consent requirements before installing the widget at all.

Describing Annot8 in your own privacy and cookie notices is your responsibility as the site operator — you're the controller for the data your visitors submit.

Even with consent passed, the widget never starts Analytics in a browser that sends a Global Privacy Control signal or Do Not Track (DNT=1), or in headless and automated browsers. Blocked Analytics does not create measurement identifiers and removes the optional identifiers for that project.

To withdraw consent, re-initialise with analyticsConsent: false. Once the project configuration loads, the widget removes the host-page Analytics keys. Your consent handler should also clear them if the widget cannot load. These keys are each suffixed with the project id: ca_visitor_id:<projectId> (localStorage), and ca_session_id:<projectId>, ca_session_start:<projectId>, and ca_session_activity:<projectId> (sessionStorage). Withdrawal stops future collection; deleting previously delivered server records requires the project deletion controls or a rights request.

Browser storage

Annot8 sets no cookies on your site. It uses localStorage and sessionStorage:

WhereKeysWhy
Your siteca_visitor_id:<projectId>, ca_session_*:<projectId>Analytics, only once enabled and consented
Your siteannot8-widget-positionWhere the visitor dragged the launcher
The widget frame (served from Annot8)a8_visitor_id:<projectId>, a8_visitor_contact:<projectId>Reconnect a visitor to their live chat; their name and email, if given
The widget frameannot8-theme-override, annot8-pins-hidden:<projectId>, annot8-emoji-recentDisplay preferences
The portalannot8:voter, annot8:portal-identity, annot8:portal-followingOne vote per post, the name and email they entered, and what they follow

Everything visitor-specific in the widget is scoped per project, so a name or email typed on one site is never offered to another. The full list, with durations, is in the Cookie & Storage Notice.

Emails to your visitors

Two features email visitors on your behalf, and only when the visitor gave an email address:

  • Portal followers get status changes, official replies, and changelog updates for posts they follow.
  • Live chat email follow-ups send a team reply the visitor hasn't read yet. They're on by default; switch them off in Live chat → Settings.

Every one of these emails has an unsubscribe link and one-click unsubscribe headers. Describe them in your privacy notice like any other email you send.

What's minimised or excluded by default

  • URLs are stripped of query strings, hash fragments, and any embedded credentials before storage — those routinely carry tokens and personal data. Analytics also redacts email addresses and token-shaped path segments.
  • No IP addresses in Analytics. Country is a two-letter code from the hosting edge; the IP address itself isn't stored for Analytics.
  • Form fields are masked in screenshots: every input, textarea, select, content-editable region, iframe, video, and anything marked [data-private].
  • Your app's storage is not read. The storage snapshot is filtered to Annot8's own keys and records key names only.
  • No keystroke capture and no session replay.
  • No microphone during a screen recording. A voice note is always a separate, deliberate action.

Add your own redactions with data-annot8-redact, data-annot8-ignore, or window.annot8RedactSelectors — see Widget configuration.

Screen recording is a browser-level capture and cannot be redacted automatically. Test your exclusions on every browser and page state you support.

Visitor-facing AI is off unless you opt in

AI that talks to your visitors — live chat auto-replies and transcription of visitor-submitted media — is fail-closed. It requires the project's audience to be Business users aged 18+ and visitor AI to be enabled on the deployment. Team-facing AI is unaffected. See AI features.

Retention

DataRetained
Feedback threadsVisible for your plan's window — 14 days on Free, 90 on Pro, unlimited on Business and Enterprise
Analytics events and sessionsDeleted automatically after 13 months
Integration credentialsUntil you disconnect the integration

Plan history limits control visibility, not deletion — threads outside the window stop appearing and reappear if you upgrade. Deletion controls are separate. Analytics cleanup runs in bounded batches for records older than 13 months; 13 months is the cleanup threshold, not a guaranteed maximum deletion time. Backups, provider records, legal holds, and independent billing records require their own retention and deletion handling.

Getting your data out

WantDo
A project's threadsExport CSV from the project inbox
A continuous feedAn outbound webhook
Your personal dataAccount & privacy → Download your data — a JSON export including temporary download links for your files

Deleting data

DeleteWhereEffect
A threadThe inboxRemoves that thread
All Analytics dataAnalytics → Privacy & dataErases every event, session, and aggregate for the project; funnel definitions stay
A projectSettings → Danger zoneRemoves the project and its feedback, permanently
Your accountAccount & privacyCloses your account
A workspaceAccount & privacyOwner only

Project and account deletion are not reversible.

Subprocessors

Annot8 relies on Clerk (authentication), Convex (database, functions, file storage), Vercel (hosting and AI Gateway), OpenAI (AI through Gateway), Resend (email), Sentry (error monitoring when configured), and Polar (merchant of record). Optional site analytics providers are disclosed separately from customer widget analytics. The current list, with locations and vendor terms, is at www.annot8.app/subprocessors.

Integrations you connect — Slack, Jira, a webhook endpoint — receive data under your instructions. Depending on the arrangement, they may be your processor or an independent controller. Document the destination contracts, permissions, notices and deletion handling. Choosing a destination does not remove Annot8's duties for its own subprocessors.

Requests and contacts

ForEmail
Privacy and data subject requestsprivacy@annot8.app
Security reportssecurity@annot8.app
Contracts, DPAs, security reviewsales@annot8.app

On this page