What this lets you do
Delete all event data Traceten holds for a specific visitor or session, or look up and delete what’s stored for a visitor identified by email. Deletion is permanent and cannot be undone.This page covers data about visitors to your site. To delete your own Traceten account and the
personal data we hold about you as our customer, see Deleting your Traceten
account.
Before you start
- An API key for your account. Erasing data needs the Delete visitor data permission (
privacy:delete); the read-only access endpoint needs Read visitor data (privacy:read) instead. New keys carry neither by default, so tick the one you need when you create the key. They are separate permissions because erasure is irreversible and answering an access request is not. - The visitor ID (
_traceten_vidcookie value) or session ID (_traceten_sidcookie value) from the visitor’s browser, if you have it. If not, use the email-based lookup below. - Your site’s UUID, not its
ttid_snippet key. See below.
Which site identifier these endpoints take
EveryYOUR_SITE_ID on this page is the site’s UUID, the value in your dashboard URL
(app.traceten.com/dashboard/sites/018f0000-…). Two write endpoints outside this page take the UUID
as well: POST /v1/ingest/conversions and POST /v1/consortium/fingerprints. Everywhere else, an
API key sends and receives the public ttid_ snippet key.
That has a consequence worth stating plainly, because it will bite an integration that only ever
holds a key: no API endpoint hands you the UUID. You have to copy it out of a dashboard URL
once, then keep it wherever your deletion job lives.
All three endpoints on this page work this way: DELETE /v1/privacy/data,
DELETE /v1/privacy/sites/{siteId}/visitors/{email} and
GET /v1/privacy/sites/{siteId}/visitors/{email}. We have not widened any of them to accept both
shapes, and we will not do it quietly. Erasure is irreversible, so changing what identifier it
accepts is a decision to make deliberately rather than a convenience to slip in. A ttid_ key sent
here is rejected with 422, not interpreted.
Deleting by visitor or session ID
sid instead of vid to delete a single session’s data:
vid or sid. The call returns 204 No Content once deletion is issued; the underlying purge runs asynchronously and typically completes within minutes.
Deleting by vid removes the visitor’s full history. Deleting by sid removes only that session. Use vid for a complete erasure.
What a per-visitor deletion cannot reach. Every record that carries the visitor identifier is removed. The aggregated daily rollups behind your trend charts do not carry one: they hold counts, and their distinct-visit figures are approximate sketches with no identifier column to match a deletion against. The structure has no remove operation either, so this is a property of the storage, not a gap in the API.
Deleting the site or the account clears these sketches completely. For the rollups we keep for the life of the account, that is the only thing that clears them. The three time-limited rollups, the daily visitor count, top pages by country and the daily count of sessions and visitors per outbound link domain, also expire on their own after 730 days.
We state this rather than calling the rollups anonymous because below a certain size a sketch retains a hash of each distinct identifier it counted, so someone who already holds a particular visitor identifier can test whether it is present. We do not do that, and no feature depends on it.
Looking up or deleting by email
When you only know the customer’s email (for example, a support request), Traceten can resolve it to the visitor(s) it corresponds to and act on all of them:Linked anonymous activity is included
Deleting by email also removes the visitor’s activity from before they were ever identified. This matters because a visitor is a random anonymous ID until they log in or place an order, at which point they get a new identity-derived ID. Those are two different values. If you have calledidentify(), or you use the Shopify integration, Traceten holds a record linking them, and an email-based deletion follows that link, so the earlier anonymous records go too.
Concretely, deleting by email removes:
- events, sessions, conversions and revenue records under the identity-derived ID
- the same records under every anonymous ID linked to it
- the link records themselves
identity_links array showing which IDs were linked, when, and by what route.
Note what the response contains: the linked visitor IDs, a count of matching raw events, the session records themselves (sessions, with session_count and a sessions_truncated flag), the revenue attributions, and the identity links.
Each session record holds that session’s entry page, its exit page (the last page measured in the visit), attributed source, the utm_campaign and ref parameters from the entry URL where the link carried them, city and country, device type, operating system and browser, pageview count, foreground time, and the cart token where one applies. The exit page is blank for sessions that started before we began recording it, which means “not recorded” rather than “no exit page”. Raw event rows are still summarised as a count rather than returned, so referrers and raw user-agent strings are not included. If a data subject asks for those under Article 15(3), contact us and we will extract them.
Deleting by a single
_traceten_vid value does not follow these links. It removes only the
records under that exact ID. When you have the customer’s email, prefer the email-based deletion
above; it is the one that reaches everything.AI crawler records
If you have installed AI crawler tracking, the access and deletion endpoints above do not reach your crawl records, and that is a deliberate decision rather than a gap. Why. A crawl record describes a request made by automated software. It carries no visitor ID, no session ID, no cookie and no email, so it holds nothing the endpoints above accept as a lookup key, and nothing joining it to a person’s browsing on your site. That is a statement about the API, not a claim that these records can never be matched to anyone. A crawl record does carry a keyed hash of the requesting address, and that hash is deterministic for a given site, so if a person supplies the address itself, we can recompute the hash and find their rows. What we cannot do is start from an email or a visitor ID, which is what a self-service endpoint would have to do. This is the situation GDPR Article 11(2) describes: we are not required to acquire extra data purely to identify someone, but where the data subject provides information that makes identification possible, their rights apply in full. We handle those by hand rather than pretending an endpoint covers them. The three daily rollups behind your long-term crawl trends are daily counts grouped by crawler, provider, category and verification state, by page path, and by page path and crawler. They carry no address, no hash of one, and no personal identifier, so there is genuinely nothing in them to erase for an individual. What we still do.- Every individual crawl record, including any retained address, is deleted after 90 days on every plan. That limit is enforced by the database.
- Closing your account erases every crawl record and all three rollups, for every site on the account. See Account deletion.
- An address that we could not verify as crawler infrastructure is never stored raw in the first place. Only the hash exists, from the moment the report reaches us.
AI visibility records
If AI visibility is running for your account, the access and deletion endpoints above do not reach your visibility records either, for a simpler reason than the crawl case. A visibility record describes what an answer engine said when Traceten asked it one of your prompts. It carries no visitor ID, no session ID, no cookie, no email and no IP hash (not even a deterministic one), so there is no key of any kind that could be used to look one up for a person. Nothing in it joins to anybody’s browsing on your site. The records are not free of personal data, and it is worth being precise about whose. A stored answer is unredacted prose written by a third party, and it can name people: a competitor’s founder, an author of a cited article, anyone the model chose to mention. So can a citation title. Those people are not your visitors and have no relationship with you or with us, and no lookup key exists for them. What we still do.- Every stored answer and citation list is deleted after 90 days, and every mention and resolved citation after 365 days. Both limits are enforced by the database.
- Deleting a site, or closing your account, erases all of it for the affected sites, including the daily rollups. The rollups have no expiry of their own, so that is the only thing that clears them. See Account deletion.
- Erasure is confirmed complete before we record it, rather than merely started.
Handling user deletion requests
When a visitor requests deletion of their data under GDPR or CCPA:- Identify their records. If the visitor is still on your site, read their
_traceten_vidcookie value. Otherwise, use the email-based lookup above if they previously calledidentify(). - Submit the deletion request. Use one of the API calls above.
- Document the request. Keep a record of deletion requests for compliance purposes. Traceten does not store deletion request logs.
Opt-out vs. deletion
Deletion removes historical data. Opt-out reduces, but does not stop, future collection. They are separate operations, and only one of them is complete. Opt-out does not stop collection. Setting the opt-out cookie (or sendingDNT: 1) stops the persistent visitor cookie, the higher-entropy device signals, the cart token, and exit, click, and in-app navigation tracking. The initial page view is still sent, and country and city are still derived from it. See Opt-out and Do Not Track.
If you need to honor an Article 21 objection, do both of these:
- Stop future collection by setting the visitor’s consent state to
deniedthrough your consent tool. We enforce this server-side: no event is stored. The opt-out cookie alone will not achieve this. - Remove data already held using the deletion API described on this page.

