What the Visitors page shows
One row per visitor, not per visit. A customer who came back nine times is one row here, with nine visits inside it.
Each row also carries a strip of seven squares showing when in the selected date range that person was active, so you can tell a visitor who came once from one who came all week without opening either. The squares split the range into seven equal parts, oldest first, and a darker green means a busier part for that person.
Filtering
The bar above the table filters on Country, City, Device, OS, Browser, Channel, Source, Campaign, Ref, Page, and AI assistant. The date range at the top of the page applies to all of them. Each picker lists every value seen in the date range, not only the most common ones, and has a search box. For Source, City, Page, Campaign and Ref the search runs on the server, so it finds any value however many your site has. The count beside each option already reflects your other filters. Tick several values in one picker to match any of them: Source set to github.com and linkedin.com shows visitors from either. Different pickers apply together, so also choosing Germany in Country keeps only those visitors with a visit from Germany. A picker takes up to 20 values. Filtering happens inside the pickers. A chosen value is ticked where it is listed, and clicking it again removes it. The picker’s button names the value you chose, or shows how many you chose. Clear at the top of an open picker removes every value from it. When no visitor matches, the empty table offers Clear filters. The list starts with the most recently seen visitor. Click the Last seen or Spent header to sort by that column, and click again to reverse it. Changing a filter puts the list back to most recently seen first.A filter selects the visitor, not their visits. Filtering to Germany gives you visitors who
have at least one visit from Germany, and the figures on their row still cover all their visits,
including the ones from elsewhere. That is deliberate: a per-visit total under a visitor’s name
would not add up to what they actually spent.
Opening a visitor
Click a row. The card opens in the middle of the screen on a laptop and rises from the bottom on a phone. From top to bottom it has a header, a summary strip, a rail of facts about the person, and their activity feed beside the rail (below it on a phone).The header
The generated name and avatar, a Customer badge when they bought something, and one line with their city and country, device, operating system, and browser. A detail Traceten could not resolve is left out rather than shown as “Unknown”. The header also holds the visit order switch and Copy.The summary strip
Pageviews, Events, Time on site, Spent, First seen, and Last seen, across every visit Traceten still holds for this person. First seen and Last seen are dates in your time zone, and a date Traceten does not have is left out. Spent comes from one of two sources, and the difference matters:- A payment provider (Stripe, Shopify, Paddle, Polar) told us about the charge. Spent shows this whenever it exists.
- Your own site called
traceten.track()with a revenue amount, and no provider reported it. Spent is then labelled (reported).
The rail
- Activity. A calendar grid of the last six months, one cell per day, from light to dark green for busier days, with a Less to More key. Click a day to jump the feed to it.
- Visits. Every visit, newest first, paged. Each shows the date, the source, how long it lasted, how many events, and what it was worth.
The activity feed
Everything recorded for this visitor, on a timeline grouped by day. Each day opens with a date label that stays pinned at the top while you scroll through that day: Today, Yesterday, then the weekday and date, with the year added for earlier years. Each visit is marked on the timeline where it started.
A “Triggered event” row that carried revenue is tinted and shows the amount. There is no separate payment row type, which is also why money in the feed is always site-reported.
The Found row names the host, such as
blog.example.com, and keeps every subdomain. blog. and shop. are different properties you run separately, so Traceten does not collapse them to the registrable domain. Only a leading www. is dropped, because it names no separate property. The landing page itself is the Viewed page row underneath.
Click a page path on a Viewed page, Clicked, or Exited from row to copy its full URL, including your site’s address. A short Copied message confirms it.
Custom events that carried properties show a parameters control. Expanding it shows the values your own code passed to track(), after the snippet’s sanitization. Traceten does not add anything to them.
Copy copies the whole card as plain text, including the zone its clocks are in, which is useful for pasting into a support ticket.
A visit with no exit row is a visit whose exit we never recorded. It does not mean the visitor
never left. Traceten started recording exit pages partway through, so older visits have none.
Time zones
Times are shown in your own time zone. Change it under Settings, where you can either follow your browser or pick a zone. The activity grid follows that zone too. Each cell is one calendar day in your zone, cut that way when the data is read, so a cell and the day header beside it in the activity feed always name the same day. Change your zone and the grid is grouped again, which is why it reloads. Chart day buckets elsewhere in the dashboard stay on UTC calendar days, and that is deliberate: a bar labelledSep 3 holds the rows from the UTC day Sep 3, and re-labelling it in your zone would name it Sep 2 while it still held Sep 3’s data.
Limits worth knowing
Pageviews and clicks are retained for 730 days. Custom events are kept for a year. That is why a visit older than a year can show pageviews with no custom events around them: the custom events have aged out and the pageviews have not. See Data retention. Two notices can appear inside a visit, and they mean different things:- Events were dropped. The visit had more events than one page returns, and the oldest were dropped. What you see is the most recent part of it.
- Its events aged out. The visit itself is still stored but its events are gone. This is not truncation, and Traceten says so rather than showing an empty visit as if nothing happened in it.
About visitor names
Each visitor is shown with a generated two-word name, such as “Quiet Thicket”, a face, and a short fingerprint. These are not real names. Traceten does not collect or store visitor names or email addresses, and the dashboard cannot tell you who a visitor is. The name is generated from the visitor’s pseudonymous ID purely so the same visitor is recognizable at a glance across their visits, instead of being labelled with a long random string. The same visitor always gets the same name and the same face. The generated name and fingerprint are one-way derivations. Neither can be turned back into the ID it came from, and the ID itself is never sent to your dashboard. Note that a pseudonymous ID is still personal data under GDPR, and we treat it that way. See GDPR. If you need to look up a specific person, for example to handle a GDPR access or deletion request, use the data deletion API, which works from an email address you supply. The dashboard does not offer that lookup, by design.Troubleshooting
A returning visitor shows up twice. Visitors are matched by a first-party cookie. If they cleared cookies, switched browsers, or switched devices, Traceten sees a new visitor. Traceten never fingerprints browsers to work around this. There is one exception, and it is one you switch on. If you calltraceten.identify(), or if you use the Shopify revenue integration, Traceten links that person’s activity from before they identified themselves to their activity afterwards, including activity on their other devices. That is what lets an AI referral on a phone be credited for a purchase made later on a laptop. See Identity linking for exactly what is stored.
A visitor’s counts are marked as an upper bound. Your site has more identify() links than one query can carry, so some people are still counted as two. The figures shown are the most they could be for one person.
Custom events are missing from the feed. Check that your traceten.track() calls are firing, using the Events feed. Events sent from a server SDK are recorded against the visit only if you pass the session ID.
Spent is an em dash but you know they bought something. No order has reached Traceten for this visitor. Check the provider connection on the Integrations page, and confirm the purchase carried something that ties it to the visitor. See Stripe or Shopify.
A visit older than 730 days shows almost nothing. Its raw events have been deleted. The stat strip can still show non-zero pageviews, since that is a lifetime figure rather than a count for one visit.
Next
- Events feed for a real-time stream across all visitors
- Sources for which assistants and sites send you visitors
- Visitors API to pull this same list programmatically
- What data we collect

