Docs·Visitors and people

GET/api/v1/event/analytics/web-analytics/visitors/:visitorId

Get 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

PropInTypeNotes
visitorIdpathstringA visitor id (id on a visitor row) or a person id (contactId). A person id covers every device that person used.
contactListIdquerystringThe 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

PropTypeNotes
idstringThe id you asked for.
countrystringTwo-letter country code of the most recently active session, '' when unknown.
citystringCity of that session, '' when unknown.
namestringFirst email address when the profile is an identified person, null otherwise.
isCustomerbooleantrue when spent is above 0.
osstringOperating system of that session, such as Windows.
devicestringDesktop, Mobile or Tablet, for that session.
browserstringBrowser of that session, such as Chrome.
referrerstringSource of that session, such as Google, or Direct.
currentUrlstringPath of the last page viewed in that session.
sessionSecondsnumberLength of that session in whole seconds, 0 until it has ended once.
totalVisitsnumberSessions over all time, across every device of the profile.
latitudenumberApproximate latitude of that session, null when unknown.
longitudenumberApproximate longitude of that session, null when unknown.
contactIdstringThe person id, '' for an anonymous visitor.
channelstringChannel of that session, such as Organic Search, or Direct.
spentnumberNet revenue over all time, in the reporting currency. For a person this includes payments recorded against the person directly.
firstSeenstringStart of the first session, in UTC.
lastSeenstringLatest activity, in UTC, such as 2026-09-30T14:03:12Z.
pageviewsnumberPage views in that session. totalPageViews is the all-time count.
totalPageViewsnumberPage views over all time.
totalEventsnumberEverything recorded over all time, page views included.
activityByDaynumber[]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
  ]
}

See your own numbers today.

Free up to 100k events a month · no credit card

Contact

Tell us what you need.

A real person reads these. We usually reply within one working day.

Or email us directly at contact@spreelytics.com.