Skip to main content

Device and browser information

Snowplow trackers track information about the device or browser that is sending the events to Snowplow in two ways: setting atomic event properties, or in browser or application entities. You can also choose to configure additional entities through enrichment.

Browser atomic event properties

Some trackers can populate the browser atomic event properties.

Depending on the tracker, you may have to provide the values, as not all trackers capture these fields themselves. The tracker will add the values automatically to all sent events.

Cookies field

Only the JavaScript tracker can populate the br_cookies field.

TrackerSupportedSince versionAuto-trackingNotes
Web0.1.0All values set automatically
iOS0.5.0
Android0.1.0
React Native0.1.0
Flutter0.1.0
Roku0.2.0Set automatically; language and viewport only
Node.js0.8.0
Golang1.0.0
.NET0.1.0
Java0.10.0
Python0.13.0
Scala0.6.0
Ruby0.3.0
Rust0.1.0Set language only
PHP0.1.0Set language and color depth only
C++0.1.0
Unity0.1.0
Lua0.1.0Set color depth and viewport only
Google Tag Manager

Browser entity

You can configure the web trackers to automatically include a browser entity with all tracked events.

TrackerSupportedSince versionAuto-tracking
Web3.9.0
iOS
Android
React Native
Flutter
Google Tag Manager

The browser entity is only available on web trackers since it captures browser-specific information from the DOM and browser APIs. These APIs aren't available to React Native or Flutter.

browser_context

Entity
Schema for browser contexts
Schema URIiglu:com.snowplowanalytics.snowplow/browser_context/jsonschema/1-0-0
Example
json
{
"viewport": null,
"documentSize": null,
"resolution": null,
"colorDepth": 1,
"devicePixelRatio": 1,
"cookiesEnabled": true,
"online": true,
"browserLanguage": null,
"documentLanguage": null,
"webdriver": true,
"deviceMemory": 1,
"hardwareConcurrency": 1,
"tabId": null
}
Properties and schema
PropertyDescription
viewport
string
Required. Viewport dimensions of the browser. Arrives in the form of WidthxHeight e.g. 1200x900.
documentSize
string
Required. Document dimensions. Arrives in the form of WidthxHeight e.g. 1200x900
resolution
string
Required. Device native resolution. Arrives in the form of WidthxHeight e.g. 1200x900
colorDepth
integer
Required. The number of bits allocated to colors for a pixel in the output device, excluding the alpha channel.
devicePixelRatio
number
Optional. Ratio of the resolution in physical pixels to the resolution in CSS pixels for the current display device.
cookiesEnabled
boolean
Required. Indicates whether cookies are enabled or not. More info and caveats at https://developer.mozilla.org/en-US/docs/Web/API/Navigator/cookieEnabled.
online
boolean
Required. Returns the online status of the browser. Important caveats are described in https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine.
browserLanguage
string
Optional. The preferred language of the user, usually the language of the browser UI. RFC 5646 https://datatracker.ietf.org/doc/html/rfc5646.
documentLanguage
string
Optional. The language of the HTML document. RFC 5646 https://datatracker.ietf.org/doc/html/rfc5646.
webdriver
boolean
Optional. Indicates whether the user agent is controlled by automation.
deviceMemory
integer
Optional. Approximate amount of device memory in gigabytes.
hardwareConcurrency
integer
Optional. Number of logical processors available to run threads on the user's computer.
tabId
string
Optional. An identifier for the client browser tab the event is sent from.

Mobile entity

The mobile entity gives information about the mobile device platform, including identifiers such as IDFA and IDFV. It's sometimes referred to as the platform entity.

It's enabled by default in all supported trackers. You can configure which of the optional properties to track.

This table shows the support for the mobile entity across the main client-side Snowplow tracker SDKs.

TrackerSupportedSince versionAuto-trackingNotes
Web
iOS1.0.0
Android1.0.0
React Native1.0.0Only relevant for mobile tracking
Flutter0.1.0Only relevant for mobile tracking
Roku
Google Tag Manager

mobile_context

Entity
Schema for mobile contexts
Schema URIiglu:com.snowplowanalytics.snowplow/mobile_context/jsonschema/1-0-3
Example
json
{
"deviceManufacturer": "Samsung",
"deviceModel": "SM-N960N Galaxy Note9 TD-LTE KR 128GB",
"osType": "Google Android 8.1 (Oreo)",
"osVersion": 8.1,
"androidIdfa": "00000000-0000-0000-0000-000000000000",
"appleIdfa": null,
"appleIdfv": null,
"carrier": "Unknown",
"openIdfa": null,
"networkTechnology": "2G",
"networkType": "wifi",
"physicalMemory": 1,
"systemAvailableMemory": 1,
"appAvailableMemory": 1,
"batteryLevel": 42,
"batteryState": "charging",
"lowPowerMode": true,
"availableStorage": 1,
"totalStorage": 128000000000,
"isPortrait": true,
"resolution": "1440x2960",
"scale": 1,
"language": null,
"appSetId": null,
"appSetIdScope": null
}
Properties and schema
PropertyDescription
osType
string
Required. Operating system type (e.g., ios, tvos, watchos, osx, android)
osVersion
string
Required. The current version of the operating system
deviceManufacturer
string
Required. The manufacturer of the product/hardware
deviceModel
string
Required. The end-user-visible name for the end product
carrier
string
Optional. The carrier of the SIM inserted in the device
networkType
string
Optional. Type of network the device is connected to
Must be one of: mobile, wifi, offline,
networkTechnology
string
Optional. Radio access technology that the device is using
openIdfa
string
Optional. Deprecated tracking identifier for iOS
appleIdfa
string
Optional. Advertising identifier on iOS
appleIdfv
string
Optional. UUID identifier for vendors on iOS
androidIdfa
string
Optional. Advertising identifier on Android
physicalMemory
integer
Optional. Total physical system memory in bytes
systemAvailableMemory
integer
Optional. Available memory on the system in bytes (Android only)
appAvailableMemory
integer
Optional. Amount of memory in bytes available to the current app (iOS only)
batteryLevel
integer
Optional. Remaining battery level as an integer percentage of total battery capacity
batteryState
string
Optional. Battery state for the device
Must be one of: unplugged, charging, full,
lowPowerMode
boolean
Optional. A Boolean indicating whether Low Power Mode is enabled (iOS only)
availableStorage
integer
Optional. Bytes of storage remaining
totalStorage
integer
Optional. Total size of storage in bytes
isPortrait
boolean
Optional. A Boolean indicating whether the device orientation is portrait (either upright or upside down)
resolution
string
Optional. Screen resolution in pixels. Arrives in the form of WIDTHxHEIGHT (e.g., 1200x900). Doesn't change when device orientation changes
scale
number
Optional. Scale factor used to convert logical coordinates to device coordinates of the screen (uses UIScreen.scale on iOS and DisplayMetrics.density on Android)
language
string
Optional. System language currently used on the device (ISO 639)
appSetId
string
Optional. Android vendor ID scoped to the set of apps published under the same Google Play developer account (see https://developer.android.com/training/articles/app-set-id)
appSetIdScope
string
Optional. Scope of the `appSetId`. Can be scoped to the app or to a developer account on an app store (all apps from the same developer on the same device will have the same ID)
Must be one of: app, developer,

Client hints entity

Client hints are an alternative to user-agent strings for capturing browser and device information. You can configure the JavaScript tracker to automatically include a client hints entity with all tracked events.

TrackerSupportedSince versionAuto-tracking
Web3.0.0
iOS
Android
React Native
Flutter
Roku
Google Tag Manager

http_client_hints

Entity
Schema for HTTP Client Hints context
Schema URIiglu:org.ietf/http_client_hints/jsonschema/1-0-0
Example
json
{
"isMobile": false,
"brands": [
{
"brand": "Google Chrome",
"version": "89"
},
{
"brand": "Chromium",
"version": "89"
}
]
}
Properties and schema
PropertyDescription
isMobile
boolean
Optional. Whether the browser is on a mobile device
brands
array
Optional. List of browser brands and versions
architecture
string
Optional. CPU architecture (high entropy)
model
string
Optional. Device model (high entropy)
platform
string
Optional. Operating system name (high entropy)
platformVersion
string
Optional. Operating system version (high entropy)
uaFullVersion
string
Optional. Full browser version (high entropy)

Entities added during enrichment

You can configure your pipeline to add these entities to tracked web events.

User agent parsing

The YAUAA (Yet Another User Agent Analyzer) enrichment enables parsing the user agent string tracked in web events. It extract information about the user's device and browser.

yauaa_context

Entity
Schema for a context generated by the YAUAA enrichment after parsing the user agent
Schema URIiglu:nl.basjes/yauaa_context/jsonschema/1-0-4
Example
json
{
"schema_name": "yauaa",
"agent_class": "Browser",
"agent_information_email": "Unknown",
"agent_name": "Chrome",
"agent_name_version": "Chrome109",
"agent_name_version_major": "Chrome109",
"agent_version": "109",
"agent_version_major": "109.00",
"device_brand": "Apple",
"device_class": "Desktop",
"device_cpu": "Intel",
"device_cpu_bits": "64",
"device_name": "AppleMacintosh",
"device_version": "Demo",
"layout_engine_class": "Browser",
"layout_engine_name": "Blink",
"layout_engine_name_version": "Blink109",
"layout_engine_name_version_major": "Blink109",
"layout_engine_version": "109",
"layout_engine_version_major": "109",
"network_type": "Unknown",
"operating_system_class": "Desktop",
"operating_system_name": "MacOS",
"operating_system_name_version": "MacOS>=10.15.7",
"operating_system_name_version_major": "MacOS>=10.15",
"operating_system_version": ">=10.15.7",
"operating_system_version_build": "??",
"operating_system_version_major": ">=10.15",
"webview_app_name": "Unknown",
"webview_app_name_version_major": "Unknown??",
"webview_app_version": "??",
"webview_app_version_major": "??"
}
Properties and schema
PropertyDescription
deviceClass
Required. See https://yauaa.basjes.nl/README-Output.html
Must be one of: Desktop, Anonymized, Unknown, UNKNOWN, Mobile, Tablet, Phone, Watch, Virtual Reality, eReader, Set-top box, TV, Game Console, Home Appliance, Handheld Game Console, Voice, Car, Robot, Robot Mobile, Spy, Hacker, Augmented Reality, Robot Imitator
deviceName
string
Optional. Example: Google Nexus 6
deviceBrand
string
Optional. Example: Google
deviceCpu
string
Optional.
deviceCpuBits
string
Optional.
deviceFirmwareVersion
string
Optional.
deviceVersion
string
Optional.
operatingSystemClass
string
Optional. See https://yauaa.basjes.nl/README-Output.html
Must be one of: Desktop, Mobile, Cloud, Embedded, Game Console, Hacker, Anonymized, Unknown
operatingSystemName
string
Optional. Examples: Linux, Android.
operatingSystemVersion
string
Optional.
operatingSystemNameVersion
string
Optional.
operatingSystemVersionBuild
string
Optional.
layoutEngineClass
string
Optional. See https://yauaa.basjes.nl/README-Output.html
Must be one of: Browser, Mobile App, Hacker, Robot, Unknown, Special, Cloud, eReader
layoutEngineName
string
Optional.
layoutEngineVersion
string
Optional.
layoutEngineVersionMajor
string
Optional.
layoutEngineNameVersion
string
Optional.
layoutEngineNameVersionMajor
string
Optional.
layoutEngineBuild
string
Optional.
agentClass
string
Optional. See https://yauaa.basjes.nl/README-Output.html
Must be one of: Browser, Browser Webview, Mobile App, Robot, Robot Mobile, Cloud Application, Email Client, Voice, Special, Testclient, Hacker, Unknown, Desktop App, eReader
agentName
string
Optional. Example: Chrome.
agentVersion
string
Optional.
agentVersionMajor
string
Optional.
agentNameVersion
string
Optional.
agentNameVersionMajor
string
Optional.
agentBuild
string
Optional.
agentLanguage
string
Optional.
agentLanguageCode
string
Optional.
agentInformationEmail
string
Optional.
agentInformationUrl
string
Optional.
agentSecurity
string
Optional.
Must be one of: Weak security, Strong security, Unknown, Hacker, No security
agentUuid
string
Optional.
webviewAppName
string
Optional.
webviewAppVersion
string
Optional.
webviewAppVersionMajor
string
Optional.
webviewAppNameVersionMajor
string
Optional.
facebookCarrier
string
Optional.
facebookDeviceClass
string
Optional.
facebookDeviceName
string
Optional.
facebookDeviceVersion
string
Optional.
facebookFBOP
string
Optional.
facebookFBSS
string
Optional.
facebookOperatingSystemName
string
Optional.
facebookOperatingSystemVersion
string
Optional.
anonymized
string
Optional.
hackerAttackVector
string
Optional.
hackerToolkit
string
Optional.
koboAffiliate
string
Optional.
koboPlatformId
string
Optional.
iECompatibilityVersion
string
Optional.
iECompatibilityVersionMajor
string
Optional.
iECompatibilityNameVersion
string
Optional.
iECompatibilityNameVersionMajor
string
Optional.
carrier
string
Optional.
gSAInstallationID
string
Optional.
networkType
string
Optional.
operatingSystemNameVersionMajor
string
Optional.
operatingSystemVersionMajor
string
Optional.

Spiders and robots

The IAB Spiders and Robots enrichment uses the IAB/ABC International Spiders and Bots List to determine whether an event was produced by a user or a robot/spider based on its IP address and user agent.

spiders_and_robots

Entity
Schema for a context generated by the IAB Spiders & Robots enrichment
Schema URIiglu:com.iab.snowplow/spiders_and_robots/jsonschema/1-0-0
Example
json
{
"category": "BROWSER",
"primaryImpact": null,
"reason": "PASSED_ALL",
"spiderOrRobot": false
}
Properties and schema
PropertyDescription
spiderOrRobot
boolean
Required. true if the IP address or user agent checked against the list is a spider or robot, false otherwise
category
Required. Category based on activity if the IP/UA is a spider or robot, BROWSER otherwise
Must be one of: SPIDER_OR_ROBOT, ACTIVE_SPIDER_OR_ROBOT, INACTIVE_SPIDER_OR_ROBOT, BROWSER
reason
Required. Type of failed check if the IP/UA is a spider or robot, PASSED_ALL otherwise
Must be one of: FAILED_IP_EXCLUDE, FAILED_UA_INCLUDE, FAILED_UA_EXCLUDE, PASSED_ALL
primaryImpact
Required. Whether the spider or robot would affect page impression measurement, ad impression measurement, both or none
Must be one of: PAGE_IMPRESSIONS, AD_IMPRESSIONS, PAGE_AND_AD_IMPRESSIONS, UNKNOWN, NONE