This guide outlines how NotifyVisitors structures and manages events and user profiles, the core building blocks of your analytics data model. You’ll learn about the different attribute types (system, default, and custom), how they’re captured, and best practices for designing a scalable schema that remains consistent as your product evolves.

In data warehouse parlance, events represent your fact tables — the actions users take — while user profiles serve as dimension tables, providing context about who those users are. Together, they form a reliable foundation for accurate tracking, analysis, and personalization across your product.

User attributes

user profile represents a collection of properties associated with an individual user. It functions as a key–value store that maintains the current state of that user. User profiles are connected to events through a distinct id (nv_uid): event.nv_uid = user.nv_uid.

In NotifyVisitors, user profiles bring together system-generated identifiers, demographic details, and custom-defined attributes. At a minimum, each profile includes a distinct identifier (such as user_idemail, or mobile).

How User Profiles Are Stored

Behind the scenes, NotifyVisitors organizes user data in a structured table. Each row represents a single user profile, while columns represent user attributes (e.g., Name, Email, Department). These attributes can be updated as new information becomes available.

nv_uid Name Email Department
101 David david@slack.com Engineering
202 Emma emma@asana.com Product
303 Liam liam@airtable.com Design

Concepts

Event attributes

Events represent actions that occur within your product. Each event includes details describing that action — such as time, device, browser, and location. At minimum, every event should include:

Events can also be joined with user profiles to provide additional context and enrichment.

Concepts

System attributes: