Custify is a next-generation Customer Success software for B2B SaaS companies. It helps you meet your customers' needs by reducing user churn and increasing their lifetime value. With Custify, you can get insights on product usage and all the data from your CRM, support, billing, and other systems in one place.
RudderStack supports Custify as a destination where you can seamlessly send your customer data.
Getting started
Before configuring Custify as a destination in RudderStack, verify if the source platform is supported by Custify by referring to the table below:
| Connection Mode | Web | Mobile | Server | 
|---|---|---|---|
| Device mode | - | - | - | 
| Cloud mode | Supported | Supported | Supported | 
Once you have confirmed that the source platform supports sending events to Custify, follow these steps:
- From your RudderStack dashboard, add the source. Then, from the list of destinations, select Custify.
 - Assign a name to the destination and click Continue.
 
Connection settings
To successfully configure Custify as a destination, you need to configure the following settings:
    - API Key: This is a mandatory field. Enter the Custify API key used to authenticate the request.
 
- Fall back to anonymousId if userId is not present: If this setting is enabled, RudderStack will use 
anonymousIdto identify the user ifuserIdis not present in the event. 
Identify
You can use the identify call to create or update a user in Custify.  RudderStack uses the userId or email field in the event's traits to do so. Hence, it is highly recommended to include the userId or at least the user's email in the identify call.
You can also identify your users with anonymousId in case userId is not present in the event via the Fall back to anonymousId if userId is not present dashboard setting.
A sample identify call is shown below:
rudderanalytics.identify("1hKOmRA4GRlm", {  name: "Alex Keener",  email: "alex@example.com",  country: "USA"});Supported mapping
RudderStack maps the following event properties to a subset of the standard Custify user attributes. It also creates a new custom field for the unmapped attributes.
| RudderStack property | Custify property | Presence | 
|---|---|---|
userId (or anonymousId if userId is absent) | user_id | Required | 
traits.email / context.traits.email | email | Required, if userId or anonymousId is absent. | 
traits.phone / context.traits.phone | phone | Optional | 
traits.sessionCount / context.traits.sessionCount | session_count | Optional | 
traits.unsubscribedFromEmails / context.traits.unsubscribedFromEmails | unsubscribed_from_emails | Optional | 
traits.unsubscribedFromCalls / context.traits.unsubscribedFromCalls | unsubscribed_from_calls | Optional | 
traits.name / context.traits.name | name | Optional | 
traits.signedUpAt / context.traits.signedUpAt / timestamp / originalTimestamp | signed_up_at | Optional | 
traits / context.traits | custom_attributes | Optional | 
Removing users from an organization
To remove a given user from an organization, the following fields must be present in the event's context.traits:
company.idcompany.remove(set totrue)
RudderStack assumes a valid Custify company_id in the company.id field. Then, it finds the organization corresponding to that ID and dissociates the user from the organization.
A sample identify call is shown below:
rudderanalytics.identify("1hKOmRA4GRlm", {  name: "Alex Keener",  email: "alex@example.com",  country: "USA",  company: {    id: "company_123",    remove: true  }});The above identify call updates the user as well as removes them from the company having the id as company_123.
Track
RudderStack uses the Custify Events API to send the track events generated by the users' actions.
userId for every track call. You can set the userId by making an identify call before sending any track events.A sample track call is shown below:
rudderanalytics.track("Order Completed", {  category: "category",  label: "label",  value: 120});Supported mapping
The following table lists the supported property mappings between RudderStack and Custify for the track events:
| RudderStack property | Custify property | 
|---|---|
userId / anonymousId | user_id | 
email | email | 
event | name | 
timestamp / originalTimestamp | created_at | 
Group
You can use the group  call to create or update a company in Custify and associate a user to it.
RudderStack assumes that an identify call (containing the userId) is made before any group call. It uses the groupId to uniquely identify a group.
A sample group call is shown below:
rudderanalytics.group("group01", {  traits: {    "name": "Tech Group",    "size": 150,    "plan": "Pro"  },  context: {    "traits": {      "name": "Alex Keener",      "email": "alex@example.com"    }  },});Supported mapping
RudderStack maps the following optional group traits to a subset of the standard Custify company attributes. It also creates a new custom field for any unmapped attributes.
| RudderStack property | Custify property | 
|---|---|
groupId | company_id | 
traits.name | name | 
traits.industry | industry | 
traits.size | size | 
traits.website / traits.url | website | 
traits.plan | plan | 
traits.monthlyRevenue / traits.mrr | monthly_revenue | 
traits.churned | churned | 
traits | custom_attributes | 
How RudderStack does the user-organization association
To do the user-company association, RudderStack first finds the Custify user by looking for the userId present in the context.traits object.
- If 
userIdandgroupIdare present in the event, RudderStack associates the Custify user with the organization and sends all the user-specific information. - If 
userIdandgroupIdare not present, RudderStack first creates the user and the organization in Custify and then does the association. 
The above discussion can be summarized as follows:
userId present? | groupId present? | Description | Expected behavior | 
|---|---|---|---|
| No | No | User and the organization do not exist in Custify. | RudderStack creates a new user and organization in Custify and associates both. | 
| No | Yes | Organization exists in Custify but not the user. | RudderStack creates a new user and associates them with the organization. | 
| Yes | No | User exists in Custify but not the organization. | RudderStack creates a new organization and associates the user with it. | 
| Yes | Yes | Both the user and the organization exist in Custify | RudderStack does the user-organization association. | 
Contact us
For more information on the topics covered on this page, email us or start a conversation in our Slack community.