Data handling
What the snippet records about the people who use your app, where it's kept, for how long, and how to export or delete it. Use it for your data processing agreement and records of processing.
What the snippet collects
Every event carries the page URL as the browser reports it, including the query string, so keep personal data out of your URLs.
Every request from the snippet carries your publishable key (pk_), a random anonymous id made in the browser, a session id (new after 30 minutes without activity), and the user id you pass to Cueston.identify(), if you do. The user hash for identity verification is checked, never stored.
| What | Event | Fields stored |
|---|---|---|
| Guidance events | impression, step_view, cta_click, complete, dismiss, skip | Which tour, tooltip, banner, checklist or survey, the step, the page URL, when it happened. The ids above. |
| Checklist progress | checklist_item_complete | The checklist and the item id, page URL, time, the ids. For identified people Cueston also keeps which items are done, so progress follows them across devices. |
| Experiments and goals | holdout, goal | That the person was in a control group or reached a goal, for which item, page URL, time, the ids. |
| Broken guidance | target_missing | The CSS selector that wasn't found and the page URL, so you can fix the step. The same ids. |
| Custom events | Cueston.track(name, properties) | The event name, the properties you pass (up to 1 KB of JSON), page URL, time, the ids. Cueston also counts them per person per day for behaviour targeting. |
| Survey and NPS answers | A visitor answers a survey | Scores, chosen options and free text, the survey and its version, page URL, language, whether the user id was verified, time, the ids. |
| Identify traits | Cueston.identify(userId, traits) | Traits (role, plan, permissions…) are used in the browser to decide what to show. The snippet doesn't send them to Cueston. Traits received through a Segment connection are stored as the person's profile. |
| AI assistant questions | A visitor asks the assistant | The question, the page URL and the answer given, without a user id or anonymous id. |
The snippet sets no cookies and doesn't record keystrokes, form values, mouse movement or the screen. IP addresses are used only for short-lived rate-limit counters, never stored with events or answers.
What stays in the browser
The snippet keeps a little state in the visitor's browser so guidance works before and without a round trip.
| Key | Where | What for |
|---|---|---|
cst_aid | localStorage | The anonymous id. Cueston.reset() replaces it. |
cst_sid | sessionStorage | The session id and last activity (a new session starts after 30 idle minutes). |
cst_visits | localStorage | How many sessions this browser has started. |
cst_freq | localStorage | Which items were seen, completed or dismissed, for frequency rules ("show once"). |
cst_beh | localStorage | First and last visit and 90 days of custom-event counts, for behaviour targeting. |
cst_thr | localStorage | How many pop-ups were shown this visit and today, for the workspace's limits. |
cst_exp | localStorage | Experiment group and goal status per item. |
cst_ps | localStorage | Checklist and survey progress in this browser. |
cst_ss | sessionStorage | Whether this visit was already reported (once per visit). |
cst_preview | sessionStorage | Only for your team: an in-site preview link's token while previewing drafts. |
Call Cueston.reset() when someone signs out: it forgets the user, starts a new anonymous id and clears the local frequency state.
Where it's stored
The snippet sends data over HTTPS to the Cueston API (app.cueston.com). The application runs on Vercel and stores data in Cueston's PostgreSQL database at Supabase. Every row belongs to one workspace, and every query is scoped to it.
Inside your workspace, your team sees it according to their role: analytics need the "See analytics" permission, exports "Export analytics data", and deleting a person's data "Change workspace settings". Webhooks and the Segment connection send copies to destinations you configure; those copies are governed by them.
Ask privacy@cueston.com for the hosting region and the current list of sub-processors.
How long it's kept
Owners and admins set the workspace retention in Settings → Data & privacy. A cleanup runs every night from 02:00 UTC and deletes what's older.
| Data | Kept for |
|---|---|
| Guidance events (all types above) | Your workspace retention: 30 to 1,095 days, 400 by default |
| Raw custom events | 90 days, or your retention if it's shorter |
| Daily custom-event counts per person | 400 days, or your retention if it's shorter |
| Survey answers | Free text, user id, anonymous id, session and page URL: your retention. Scores and chosen options then stay, without the person, so NPS trends keep working. |
| AI assistant questions, friction signals, feature usage | Your retention (feature usage: since it was last used) |
| What each person has seen, completed or dismissed; checklist progress | Until you delete the person or the content: frequency rules need it |
| Profile traits and events received from Segment | Traits until you delete the person; raw Segment events 90 days, or your retention if shorter |
| Copies in your webhook and Segment delivery logs | 30 days |
| Your team's audit log (who exported or deleted what) | 400 days, with a reference instead of the person's user id |
Deleting a workspace deletes all of its end-user data. Shortening the retention can't be undone.
To export or delete one person's data, see End-user data requests.