Freshsales is a CRM tool that lets you discover the best leads, drive them to closure, and nurture them to boost contextual engagement.

RudderStack supports Freshsales as a destination where you can seamlessly send your event data.

Getting started

Before configuring Freshsales as a destination in RudderStack, verify if the source platform is supported by Freshsales by referring to the table below:

Connection ModeWebMobileServer
Device mode---
Cloud modeSupportedSupportedSupported
To know more about the difference between cloud mode and device mode in RudderStack, refer to the RudderStack Connection Modes guide.

Once you have confirmed that the source platform supports sending events to Freshsales, follow these steps:

  1. From your RudderStack dashboard, add a source. Then, from the list of destinations, select Freshsales.
  2. Assign a name to the destination and click Continue.

Connection settings

To successfully configure Freshsales as a destination, you will need to configure the following settings:

Freshsales connection settings
  • API Key: Enter your Freshsales API key.
For more information on obtaining your Freshsales API key, refer to the FAQ section below.
  • Domain: Enter the subdomain of your Freshsales account. For example, if your organization URL is testcompany.myfreshworks.com, then the subdomain is testcompany.
For more information on your organization URL and how to change it, refer to this Freshsales support guide.

Identify

You can use the identify call to create or update your Freshsales contact.

RudderStack uses the Freshsales Upsert a Contact API to pass the relevant user information via the following parameters:

AttributeTypeDescription
unique_identifierStringRudderStack passes the user's email.
contactHashed ObjectRudderStack passes the other relevant user details required to create or update the user in Freshsales.
If email already exists, the contact details are updated. Otherwise, RudderStack creates a new user in Freshsales.

A sample identify call is shown below:

rudderanalytics.identify("1hKOmRA4GRlm", {
email: "alex@example.com",
firstName: "Alex",
lastName: "Keener",
state: "Louisiana",
country: "USA",
postalCode: "90009",
});

Supported mappings

The following table lists the mappings between the RudderStack and Freshsales properties:

RudderStack propertyFreshsales propertyPresence
traits.email, context.traits.emailemailsRequired
userIdidOptional
traits.firstname, traits.first_name, traits.firstName,
context.traits.firstname, context.traits.first_name, context.traits.firstName
first_nameOptional
traits.lastname, traits.last_name, traits.lastName,
context.traits.lastname, context.traits.last_name, context.traits.lastName
last_nameOptional
traits.subscriptionStatus, context.traits.subscriptionStatussubscription_statusOptional
traits.job_title, traits.jobTitle, context.traits.job_title, context.traits.jobTitlejob_titleOptional
traits.phone, context.traits.phonework_numberOptional
externalIdexternal_idOptional
traits.mobileNumber, context.traits.mobileNumbermobile_numberOptional
traits.address, context.traits.addressaddressOptional
traits.address.city, traits.city, context.traits.address.city, context.traits.citycityOptional
traits.address.state, traits.state, context.traits.address.state, context.traits.statestateOptional
traits.address.postalcode, traits.zip, traits.zipcode, context.traits.zip, context.traits.zipcode, context.traits.address.postalcodezipcodeOptional
traits.address.country, traits.country, context.traits.address.country, context.traits.countrycountryOptional
traits.salesAccounts, context.traits.salesAccountssales_accountsOptional
traits.territoryId, context.traits.territoryIdterritory_idOptional
traits.LeadSourceId, context.traits.LeadSourceIdlead_source_idOptional
traits.ownerId, context.traits.ownerIdowner_idOptional
traits.subscriptionTypes, context.traits.subscriptionTypessubscription_typesOptional
traits.medium, context.traits.mediummediumOptional
traits.campaignId, traits.campaign_id, context.traits.campaignId, context.traits.campaign_id, context.campaign.namecampaign_idOptional
traits.keyword, context.traits.keyword, context.campaign.termkeywordOptional
traits.timeZone, context.traits.timeZonetime_zoneOptional
traits.facebookUserName, context.traits.facebookUserNamefacebookOptional
traits.twitterUserName, context.traits.twitterUserNametwitterOptional
traits.linkedinUserName, context.traits.linkedinUserNamelinkedinOptional
createdAtcreated_atOptional
timestampupdated_atOptional
traits.contactStatusId, context.traits.contactStatusIdcontact_status_idOptional
traits.salesAccountId, context.traits.salesAccountIdsales_account_idOptional
traits.lifecycleStageId, context.traits.lifecycleStageIdlifecycle_stage_idOptional

Group

The group call lets you link an identified Freshsales contact with a company, organization, or an account. You can also record any custom group traits like the company name, number of employees, etc.

RudderStack uses the Upsert an Account API to create or update a sales account via the following parameters:

AttributeTypeDescription
unique_identifierStringRudderStack passes the account name.
sales_accountHashed ObjectRudderStack passes the other relevant details associated with the Freshsales account.
  • If name already exists, the Freshsales account details are updated. Otherwise, a new account is created.
  • RudderStack also checks if the contact's email is present in the context.traits object. If yes, RudderStack links the contact to the Freshsales account.

A sample group call is shown below:

rudderanalytics.group(
"group01", {
name: "Alex Keener",
phone: "1234567890",
numberOfEmployees: 51,
annualRevenue: 10000,
zipcode: 90009,
street: "6649 N Blue Gum Street",
city: "New Orleans",
state: "Louisiana",
country: "USA"
}, {
context: {
traits: {
email: "alex@example.com"
}
}
}
);

Supported mappings

The following table lists the mappings between the RudderStack and Freshsales properties:

RudderStack propertyFreshsales propertyPresence
namenameRequired
traits.industryTypeId, context.traits.industryTypeIdindustry_type_idOptional
traits.businessTypeId, context.traits.businessTypeId, traits.business_type_id, context.traits.business_type_idbusiness_type_idOptional
phonephoneOptional
traits.numberOfEmployees, context.traits.numberOfEmployeesnumber_of_employeesOptional
traits.annualRevenue, context.traits.annualRevenueannual_revenueOptional
traits.address, context.traits.addressaddressOptional
traits.city, traits.address.city, context.traits.city, context.traits.address.citycityOptional
traits.state, traits.address.state, context.traits.state, context.traits.address.statestateOptional
traits.country, traits.address.country, context.traits.country, context.traits.address.countrycountryOptional
zipcodezipcodeOptional
traits.website, `context.traits.websitewebsiteOptional
traits.territoryId, `context.traits.territoryIdterritory_idOptional
traits.parentSalesAccountid, `context.traits.parentSalesAccountidparent_sales_account_idOptional
traits.ownerId, `context.traits.ownerIdownerIdOptional
traits.facebookUserName, context.traits.facebookUserNamefacebookOptional
traits.twitterUserName, context.traits.twitterUserNametwitterOptional
traits.linkedinUserName, context.traits.linkedinUserNamelinkedinOptional
createdAtcreated_atOptional
timestampupdated_atOptional

FAQ

Where can I find the Freshsales API key?

To obtain your Freshsales API key, follow these steps:

  1. Log into your Freshsales dashboard.
  2. Go to Personal Settings > API Settings.
  3. Enable the captcha to complete the authentication process.
  4. You will find your Freshsales API key listed under the API Authentication section, as shown:
Freshsales API key
For more information, refer to this Freshsales support guide.

Contact us

For more information on the topics covered on this page, email us or start a conversation in our Slack community.

On this page