Freshmarketer is a Freshsales ecommerce CRM platform. It is a marketing automation tool that offers a unified marketing, sales, and CRM platform to engage your customer base and grow your business.

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

Getting started

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

Connection ModeWebMobileServer
Device mode---
Cloud modeSupportedSupportedSupported
To learn 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 Freshmarketer, follow these steps:

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

Connection settings

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

Freshmarketer connection settings
  • API Key: Enter your Freshmarketer API key.
For more information on obtaining your Freshmarketer API key, refer to the FAQ section below.
  • Domain: Enter the subdomain of your Freshmarketer 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 Freshmarketer support guide.
  • Map your events with Freshmarketer Standard Events: Use this setting to map the standard Freshmarketer events with the custom event names.

Identify

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

RudderStack uses the Freshmarketer 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 Freshmarketer.
If email already exists, the contact details are updated. Otherwise, RudderStack creates a new user in Freshmarketer.

A sample identify call is shown below:

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

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

RudderStack propertyFreshmarketer property
traits.email
context.traits.email
Required
emails
traits.firstname
traits.first_name
traits.firstName

context.traits.firstname
context.traits.first_name
context.traits.firstName
first_name
traits.lastname
traits.last_name
traits.lastName

context.traits.lastname
context.traits.last_name
context.traits.lastName
last_name
traits.subscriptionStatus
context.traits.subscriptionStatus
subscription_status
traits.job_title
traits.jobTitle
context.traits.job_title
context.traits.jobTitle
job_title
traits.phone
context.traits.phone
work_number
userIdexternal_id
traits.mobileNumber
context.traits.mobileNumber
mobile_number
traits.address
context.traits.address
address
traits.address.city
traits.city
context.traits.address.city
context.traits.city
city
traits.address.state
traits.state
context.traits.address.state
context.traits.state
state
traits.address.postalCode
traits.zip
traits.zipcode
context.traits.zip
context.traits.zipcode
context.traits.address.postalCode
zipcode
traits.address.country
traits.country
context.traits.address.country
context.traits.country
country
traits.salesAccounts
context.traits.salesAccounts
sales_accounts
traits.territoryId
context.traits.territoryId
territory_id
traits.leadSourceId
context.traits.leadSourceId
lead_source_id
traits.ownerId
context.traits.ownerId
owner_id
traits.subscriptionTypes
context.traits.subscriptionTypes
subscription_types
traits.medium
context.traits.medium
medium
traits.campaignId
traits.campaign_id
context.traits.campaignId
context.traits.campaign_id
context.campaign.name
campaign_id
traits.keyword
context.traits.keyword
context.campaign.term
keyword
traits.timeZone
context.traits.timeZone
time_zone
traits.facebookUserName
context.traits.facebookUserName
facebook
traits.twitterUserName
context.traits.twitterUserName
twitter
traits.linkedinUserName
context.traits.linkedinUserName
linkedin
createdAtcreated_at
timestampupdated_at
traits.contactStatusId
context.traits.contactStatusId
contact_status_id
traits.salesAccountId
context.traits.salesAccountId
sales_account_id
traits.lifecycleStageId
context.traits.lifecycleStageId
lifecycle_stage_id

Track

You can use the RudderStack track call to track the user activities in Freshmarketer.

To make a track call successfully, you must map the event to be sent in the track call in the Map your events with Freshmarketer Standard Events dashboard setting.

RudderStack supports the following track events:

Lifecycle stage

Lifecycle stage events capture the decision journey of a customer. Refer to the Freshsales documentation to create lifecycle stages in Freshmarketer.

RudderStack lets you update the status of a contact in their lifecycle stage by using either the lifecycleStageId or lifecycleStageName.

lifecycleStageName is a case-sensitive field and throws an error if not used in the intended manner.

A sample track call for a lifecycle stage event is shown below:

rudderanalytics.track("eventName", {
email: "alex@example.com",
lifecycleStageId: 71010794467,
phone: "+1-202-555-0146",
owner_id: "70000090119",
});

The following table lists the property mappings betweeen RudderStack and Freshmarketer for lifecycle stage events:

RudderStack propertyFreshmarketer property
email
Required
email
lifecycleStageName
Required, if lifecycleStageId is absent.
lifecycleStageName
lifecycleStageId
Required, if lifecycleStageName is absent.
lifecycle_stage_id

Sales activities

Sales activities events can be used to track any activity related to a contact/deal/account. Refer to the Freshsales documentation to create sales activities in Freshmarketer.

RudderStack lets you create the status of a contact by using either the salesActivityTypeId or salesActivityName.

A sample track call for a sales activity event is shown below:

rudderanalytics.track("eventName", {
salesActivityTypeId: "70000663932",
title: "new contact",
startDate: "2021-05-04T17:00:00+05:30",
endDate: "2022-06-04T17:30:00+05:30",targetable_type
ownerId: "70054866612",
});

The following table lists the property mappings betweeen RudderStack and Freshmarketer for sales activity events:

RudderStack propertyFreshmarketer property
properties.title
Required
title
properties.salesActivityName
Required, if properties.salesActivityTypeId is absent.
sales_activity_name
properties.salesActivityTypeId
Required, if properties.salesActivityName is absent.
sales_activity_type_id
properties.startDate
Required
start_date
properties.endDate
Required
end_date
context.externalId.type
Required
targetable_type
properties.ownerId
Required
owner_id
salesActivityOutcomeIdsales_activity_outcome_id
properties.notesnotes
context.externalId.idtargetable_id
properties.createrIdcreater_id
originalTimestampcreated_at
timestampupdated_at
properties.locationlocation
latitude
context.address.latitude
context.location.latitude
latitude
longitude
context.address.longitude
context.location.longitude
longitude
properties.checkedinAtcheckedin_at
The targetable_type field denotes the entity for which the sales activity has been created and can take Contact/SalesAccount/Deal as its value. However, if its value is set to contact, then either the targetable_id or email is required.

Group

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

To make a group call successfully, you must pass the groupType field with value as accounts or marketing_lists.

Accounts

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 Freshmarketer account.
  • If name already exists, RudderStack updates the Freshmarketer account details. Otherwise, it creates a new account in Freshmarketer.
  • RudderStack also checks if the contact's email is present in the context.traits object. If yes, RudderStack links the contact to the Freshmarketer account.

A sample group call is shown below:

rudderanalytics.group(
"group01", {
groupType: "accounts",
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"
}
}
}
);

The following table lists the mappings between the RudderStack and Freshmarketer properties to create or update an account:

RudderStack propertyFreshmarketer property
name
Required
name
traits.industryTypeId
context.traits.industryTypeId
industry_type_id
traits.businessTypeId
context.traits.businessTypeId
traits.business_type_id
context.traits.business_type_id
business_type_id
phonephone
traits.numberOfEmployees
context.traits.numberOfEmployees
number_of_employees
traits.annualRevenue
context.traits.annualRevenue
annual_revenue
traits.address
context.traits.address
address
traits.city
traits.address.city
context.traits.city
context.traits.address.city
city
traits.state
traits.address.state
context.traits.state
context.traits.address.state
state
traits.country
traits.address.country
context.traits.country
context.traits.address.country
country
zipcodezipcode
traits.website
context.traits.website
website
traits.territoryId
context.traits.territoryId
territory_id
traits.parentSalesAccountid
context.traits.parentSalesAccountid
parent_sales_account_id
traits.ownerId
context.traits.ownerId
ownerId
traits.facebookUserName
context.traits.facebookUserName
facebook
traits.twitterUserName
context.traits.twitterUserName
twitter
traits.linkedinUserName
context.traits.linkedinUserName
linkedin
createdAtcreated_at
timestampupdated_at

Marketing lists

Marketing lists help you group contacts into lists which you can quickly invoke for marketing campaigns and bulk emailing.

RudderStack lets you add one or more contacts to a specified marketing list. To do so, you need to provide the contact's email and listId/listName. Also, RudderStack creates a new marketing list if the listName (case-sensitive) does not exist already.

A sample group call to add a contact to a marketing list is shown below:

rudderanalytics.group("group01", {
groupType: "marketing_lists",
email: "alex@example.com",
listName: "listIdX123",
});

The following table lists the property mappings between RudderStack and Freshmarketer to create marketing lists:

RudderStack propertyFreshmarketer property
email
Required
email
listId
Required, if listName is absent.
listId
listName
Required, if listId is absent.
listName

Type conversion and invalid format error

The following event properties accept only the number data type:

  • territoryId
  • leadSourceId
  • ownerId
  • campaignId
  • contactStatusId
  • lifecycleStageId
  • industryTypeId
  • businessTypeId
  • numberOfEmployees
  • parentSalesAccountid

If any of the above properties are present in any identify or group call in a different format, RudderStack will try to convert them into the number data type. If the type conversion is unsuccessful, RudderStack will give an "invalid format" error.

FAQ

Where can I find the Freshmarketer API key?

To obtain your Freshmarketer API key, follow these steps:

  1. Log into your Freshmarketer dashboard.
  2. Go to Personal Settings > API Settings.
  3. Enable the captcha to complete the authentication process.
  4. You will find your Freshmarketer API key listed under the API Authentication section, as shown:
Freshmarketer API key
For more information, refer to this Freshmarketer 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