B2B SaaS
This guide explains how B2B SaaS companies should send core user and account lifecycle data to Intilery.
#
OverviewMost B2B SaaS companies have a few common, core lifecycle events for users and accounts. We understand that account hierarchies can be unique and complex, but by following this spec you can take advantage of account-based tools on the Intilery platform.
#
EventsThe B2B SaaS category has the following semantic events:
- Overview
- Events
#
Account CreatedThis event should be sent when a new account is created.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
account_name | String | The name of the account being created. |
context.groupId | String | The id of the account being created. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Account Created", "properties": { "account_name": "Initech" }, "context": { "groupId": "acct_123" }}
#
Account DeletedThis event should be sent when an account is deleted.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
account_name | String | The name of the account being deleted. |
context.groupId | String | The id of the account being deleted. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Account Deleted", "properties": { "account_name": "Initech" }, "context": { "groupId": "acct_123" }}
#
Signed UpThis event should be sent when a user signs up for your service.
Good to know: Intilery’s best practice is to use an “Object-Action” naming convention, which in this case would be “User Signed Up”. However, because in the B2B case this may not be a specific user, we omit that noun in our example. You may include or omit it as needed for your implementation.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
type | String | The type of signup, e.g. invited, organic. |
first_name | String | The first name of the user. |
last_name | String | The last name of the user. |
email | String | The email of the user. |
phone | String | The phone number of the user. |
username | String | The username of the user. |
title | String | The title of the user. |
context.groupId | String | The id of the account the user is joining. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Signed Up", "properties": { "type": "organic", "first_name": "Peter", "last_name": "Gibbons", "email": "pgibbons@example.com", "phone": "410-555-9412", "username": "pgibbons", "title": "Mr" }, "context": { "groupId": "acct_123" }}
#
Signed InThis event should be sent when a user signs in to your service.
Good to know: Intilery best practice is to use an “Object-Action” naming convention, which in this case would be “User Signed In”. However, because in the B2B case this may not be a specific user, we omit that noun in our example. You may include or omit it as needed for your implementation.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
username | String | The username of the user logging in. |
context.groupId | String | The id of the account being created. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Signed In", "properties": { "username": "pgibbons" }, "context": { "groupId": "acct_123" }}
#
Signed OutThis event should be sent when a user signs out for your service. You should also call analytics.reset()
to refresh the cookie when a Signed Out event occurs.
Good to know: Intilery's best practice is to use an “Object-Action” naming convention, which in this case would be “User Signed Out”. However, because in the B2B case this may not be a specific user, we omit that noun in our example. You may include or omit it as needed for your implementation.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
username | String | The username of the user logging in. |
context.groupId | String | The id of the account being created. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Signed Out", "properties": { "username": "pgibbons" }, "context": { "groupId": "acct_123" }}
#
Invite SentThis event should be sent when a user invites another user.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
invitee_email | String | The email address of the person receiving the invite. |
invitee_first_name | String | The first name of the person receiving the invite. |
invitee_last_name | String | The last name of the person receiving the invite. |
invitee_role | String | The permission group for the person receiving the invite. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Invite Sent", "properties": { "invitee_email": "pgibbons@example.com", "invitee_first_name": "Peter", "invitee_last_name": "Gibbons", "invitee_role": "Owner" }, "context": { "groupId": "acct_123" }}
#
Account Added UserThis event should be sent when a user is added to a group.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
role | String | The permission group for this user in this account. |
context.groupId | String | The id of the account being created. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Account Added User", "properties": { "role": "Owner" }, "context": { "groupId": "acct_123" }}
#
Account Removed UserThis event should be sent when a user is removed from a group or account.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
context.groupId | String | The id of the account being created. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Account Removed User", "properties": {}, "context": { "groupId": "acct_123" }}
#
Trial StartedThis event should be sent when a trial is started.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
trial_start_date | Date | The date when the trial starts. It is an ISO-8601 date string. |
trial_end_date | Date | The date when the trial ends. It is an ISO-8601 date string. |
trial_plan_name | String | The name of the plan being trialed. |
context.groupId | String | The id of the account being created. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Trial Started", "properties": { "trial_start_date": "2018-08-28T04:09:47Z", "trial_end_date": "2018-09-20T04:09:47Z", "trial_plan_name": "Business" }, "context": { "groupId": "acct_123" }}
#
Trial EndedThis event should be sent when a trial ends.
#
PropertiesThis event supports the following semantic properties:
PROPERTY | TYPE | DESCRIPTION |
---|---|---|
trial_start_date | Date | The date when the trial starts. It is an ISO-8601 date string. |
trial_end_date | Date | The date when the trial ends. It is an ISO-8601 date string. |
trial_plan_name | String | The name of the plan being trialed. |
context.groupId | String | The id of the account being created. |
#
Example{ "userId": "019mr8mf4r", "type": "track", "event": "Trial Ended", "properties": { "trial_start_date": "2018-08-28T04:09:47Z", "trial_end_date": "2018-09-20T04:09:47Z", "trial_plan_name": "Business" }, "context": { "groupId": "acct_123" }}