- contact@insightclickiq.com
- Every click, every session, explained by AI
Who can see what, what the snippet never collects, what the AI is allowed to see and do, and where the data lives.
Every query is scoped to the caller’s organisation in code; a guessed id from another organisation answers 404.
Postgres row-level security enforces the same boundary. Each request’s session is pinned to the caller’s organisation, and the API connects as an ordinary role so the policy binds.
ClickHouse has no row-level security, so the engine refuses any statement without the organisation predicate, and tests assert it on every generated statement. The console uses a read-only user.
| Control | Detail |
|---|---|
| Sign-in | The Insight platform identity: OIDC with your identity provider, or local accounts |
| Roles | admin (projects, keys, users), analyst (dashboards, reports, segments, alerts, agents), viewer (read), auditor (audit trail) |
| API keys | Personal API keys for scripts and MCP clients; they carry the person’s role |
| Write tools | Agent and MCP tools that create dashboards, segments, annotations or alerts, or start investigations, need an editor |
| Write keys | The snippet’s key can only send events. Allowed origins per project reject other sites (403); keys can be rotated |
| Never | How |
|---|---|
| Form values | Inputs, textareas and selects are never read; form analytics sends timings, counts and a length bucket only |
| Passwords and card data | Password fields and autocomplete="cc-*" or card-like fields are skipped entirely |
| Masked text | [data-private] text is sent as **** and masked in replay |
| Blocked regions | [data-clickiq-block] sends no events and is not recorded |
| Replay inputs | Every input is masked in recordings by default |
| Native replay | Text inputs, password fields, web views and private views are painted black on the device before a frame is encoded (React Native: by the server before storage); the server refuses an unmasked frame |
| Prompts of your own AI agents | Agent analytics drops prompt and response text unless both the SDK and the project opt in |
| IP addresses | Used for the geo lookup and never stored |
| Without consent | clickiq("consent", false) stops everything and clears the queue, ids, cookie and recording; Do Not Track and Global Privacy Control can be honoured per project |
The model plans typed QuerySpecs against your catalog; the engine validates and runs them under the caller’s tenancy. It cannot query what the caller could not.
Insights and narratives see computed numbers, not raw events. Session summaries read the event timeline, not the recording, so masked content never reaches the model.
Finding kinds, console links, selectors and replay evidence are checked against the data; anything that does not match is dropped or the rules answer is used.
Bedrock, Azure OpenAI, Vertex, OCI or an OpenAI-compatible endpoint in your own account.
With the model switched off, every AI surface answers by rules, labelled as such.
Agents have a step and time budget, call only registry tools, and record every call for review.
Before open-text survey answers reach the model, emails and phone numbers are removed and each answer is cut to 500 characters. Agent tools get counts and themes, never the raw answers.
An experiment readout sees only computed numbers; a verdict that would ship on a sample-ratio mismatch is replaced by the rules.
A shared replay shows the cached AI summary; no public request reaches the model.
| Control | Detail |
|---|---|
| Share links | One resource per link (a replay, report, dashboard or investigation) with the scopes you choose: replay, comments, AI summary. Expiry 1–90 days; revocable; views counted. Only editors create them |
| Link tokens | 32 random bytes, shown once; only a SHA-256 hash is stored. Revoked or expired links answer 410; unknown ones 404 |
| Public reads | Rate-limited per token and per client; each read runs on a database session pinned to the link’s organisation, so row-level security stops even a forged link row. A shared session includes no person record |
| Webhooks and export endpoints | http(s) only; loopback, private, link-local, CGNAT, cloud metadata and IPv4-mapped addresses are refused. DNS is resolved when the hook is saved and again when it is sent, every answer is checked, the request connects to the checked address, and redirects are not followed |
| Tokens in logs | The live stream, agent-run stream and PDF routes accept the token in the URL because browsers cannot set headers there; the API’s logs redact token=. Strip it in any proxy log in front of it too |
| Comments | Only people in the organisation can read or write them; mentions resolve only to active members of the organisation |
| Deployment | Your cloud account or data centre: AWS, Azure, GCP, OCI or on-premises |
| Residency | One database and bucket per region; a Postgres is never shared across regions |
| Encryption | TLS required to the database; encryption at rest from the managed services; secrets resolved from your secret manager |
| Retention | Per project, enforced daily: whole monthly partitions dropped, the rest deleted in batches, replays and their objects removed |
| Erasure | One call removes a person: every id they used, their sessions, events and replay objects (in ClickHouse too); another removes a single session |
| Sampling | Optional per project: whole sessions are kept or dropped on the device by a hash of the session id, so a dropped session sends nothing at all, replay included |
| Warehouse export | Only to a destination an editor configures in your own cloud; the destination is probed before use, and file:// destinations can be turned off |