Docs·Visitors and people
GET
/api/v1/event/analytics/web-analytics/visitors/:visitorIdGet a visitor or person
One profile over its whole history, whatever the date range: the header of a profile page. Pass a visitor id for one browser, or a person id to cover every device that person used. The fields are those of a /visitors row, taken across all time; activityByDay is empty here, so use /daily for activity per day. A profile with no sessions in this audience returns a 404.
Keys: an account key. Getting started explains both kinds.
Parameters
| Prop | In | Type | Notes |
|---|---|---|---|
visitorId | path | string | A visitor id (id on a visitor row) or a person id (contactId). A person id covers every device that person used. |
contactListId | query | string | The id of the audience (the tracked site) to read, a UUID: anything else returns a 400. You must be a member of the workspace the audience belongs to, or the call returns a 401. An id that matches no audience is not an error: the call returns no data. |
Response
| Prop | Type | Notes |
|---|---|---|
id | string | The id you asked for. |
country | string | Two-letter country code of the most recently active session, '' when unknown. |
city | string | City of that session, '' when unknown. |
name | string | First email address when the profile is an identified person, null otherwise. |
isCustomer | boolean | true when spent is above 0. |
os | string | Operating system of that session, such as Windows. |
device | string | Desktop, Mobile or Tablet, for that session. |
browser | string | Browser of that session, such as Chrome. |
referrer | string | Source of that session, such as Google, or Direct. |
currentUrl | string | Path of the last page viewed in that session. |
sessionSeconds | number | Length of that session in whole seconds, 0 until it has ended once. |
totalVisits | number | Sessions over all time, across every device of the profile. |
latitude | number | Approximate latitude of that session, null when unknown. |
longitude | number | Approximate longitude of that session, null when unknown. |
contactId | string | The person id, '' for an anonymous visitor. |
channel | string | Channel of that session, such as Organic Search, or Direct. |
spent | number | Net revenue over all time, in the reporting currency. For a person this includes payments recorded against the person directly. |
firstSeen | string | Start of the first session, in UTC. |
lastSeen | string | Latest activity, in UTC, such as 2026-09-30T14:03:12Z. |
pageviews | number | Page views in that session. totalPageViews is the all-time count. |
totalPageViews | number | Page views over all time. |
totalEvents | number | Everything recorded over all time, page views included. |
activityByDay | number[] | Always empty here. Use /daily for activity per day. |
Request
curl 'https://app.spreelytics.com/api/v1/event/analytics/web-analytics/visitors/:visitorId?contactListId=…' \
-H 'Authorization: Bearer YOUR_API_KEY'
const url = new URL('https://app.spreelytics.com/api/v1/event/analytics/web-analytics/visitors/:visitorId');
url.searchParams.set('contactListId', '…');
const res = await fetch(url, {
headers: { Authorization: 'Bearer YOUR_API_KEY' },
});
const data = await res.json();
import requests
res = requests.get(
"https://app.spreelytics.com/api/v1/event/analytics/web-analytics/visitors/:visitorId",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"contactListId": "…"},
)
data = res.json()
Response
{
"id": "string",
"country": "string",
"city": "string",
"name": "string",
"isCustomer": true,
"os": "string",
"device": "string",
"browser": "string",
"referrer": "string",
"currentUrl": "string",
"sessionSeconds": 0,
"totalVisits": 0,
"latitude": 0,
"longitude": 0,
"contactId": "string",
"channel": "string",
"spent": 0,
"firstSeen": "string",
"lastSeen": "string",
"pageviews": 0,
"totalPageViews": 0,
"totalEvents": 0,
"activityByDay": [
0
]
}