How it works

Follow these 2 simple steps to start syncing HubSpot contacts to Mixpanel profiles automatically

hubspot logo icon

Contact Created

App connector: HubSpot • Time to complete: 0 minutes (Auto-configured)
Why this matters: This trigger monitors HubSpot for new contacts, enabling automatic analytics profile creation that connects CRM data with product usage tracking for complete customer journey visibility.

This polling trigger checks HubSpot hourly for contacts created since the previous check. When new contacts are found, the trigger captures {{hubspot.properties.email}}, {{hubspot.properties.firstname}}, {{hubspot.properties.lastname}}, and {{hubspot.createdAt}} (the timestamp when the contact was created in HubSpot). The workflow runs for every new contact added to HubSpot during the polling interval, whether manually entered, imported, or created through forms/integrations.

Mixpanel logo icon

Set Profile Properties

App connector: Mixpanel • Time to complete: 3 minutes
Why this matters: Creates or updates the Mixpanel user profile with CRM contact data, enabling analytics that connects marketing touchpoints to product behavior and revenue outcomes without requiring duplicate data entry.

This step creates or updates a Mixpanel profile using the $set_once operation, which sets properties only if they don't already exist (preserving original values for properties like creation date).

Configuration: You must provide your Mixpanel Project Token during setup—find this in Mixpanel under Project Settings. The profile uses {{hubspot.properties.email}} as the $distinct_id (Mixpanel's unique user identifier). The $set_once array includes three properties: "Email" ({{hubspot.properties.email}}), "First Name, Last Name" (concatenated from {{hubspot.properties.firstname}} and {{hubspot.properties.lastname}}), and "Created At" ({{hubspot.createdAt}}). Using $set_once means if a profile already exists for this email, these initial properties won't be overwritten, preserving the user's original signup data while still ensuring the profile exists.

Note on $set_once: This operation creates the profile if it doesn't exist, or does nothing if it does (preserving existing values). If you want to update profiles with current HubSpot data instead, you'd change this to use a $set operation that overwrites values.

Make it your own

Customize this workflow even further:

Sync additional HubSpot properties
Expand the $set_once array to include additional contact properties like company, phone, lifecycle stage, or custom fields from HubSpot, creating richer Mixpanel profiles for more granular analytics segmentation.
Use $set instead of $set_once for updates
Change the Mixpanel operation from $set_once to $set if you want to continuously update profiles with current HubSpot data rather than preserving original values, enabling profiles that reflect current contact state.
Add company/account data
Include steps that retrieve HubSpot company data associated with the contact and add company properties to the Mixpanel profile, enabling account-level analytics for B2B product analytics.
Sync in both directions
Create a companion workflow triggered by Mixpanel events that updates HubSpot contact properties, enabling bidirectional sync where product usage data flows back to your CRM for sales context.

Frequently asked questions

What's the difference between $set and $set_once?
$set_once only sets properties if they don't already exist on the profile, preserving original values. $set overwrites existing values with new data. This workflow uses $set_once to preserve the original contact creation date and initial contact information, even if the workflow runs multiple times for the same contact.
Will this sync existing HubSpot contacts or only new ones?
This workflow only syncs contacts created after you activate it. To sync existing contacts, you'd need to create a separate one-time workflow that retrieves all HubSpot contacts and processes them in batch, or export contacts and trigger the workflow manually.
Can I filter which contacts sync to Mixpanel?
Yes, add a filter step between the trigger and Mixpanel action that checks contact properties like lifecycle stage, list membership, or custom fields, then only proceed for contacts meeting your criteria (like "lifecycle_stage equals 'customer'").
What is a template?
Templates are pre-made workflows by our team of experts. Instead of building a workflow from scratch, these have all the steps needed to complete the task.
Can I personalize a template?
Yes! Every step can be customized to meet your exact requirements. Additionally, you can even add more steps and make it more sophisticated.
Are templates free?
Yes! Our entire library containing hundreds of templates are free to use and customize to your exact needs.

Ready to start syncing HubSpot contacts to Mixpanel profiles automatically?

Join thousands who've automated their work and saved an average of 3.5 hours every week.

Start with this template — It's free
7-day free trial • 4 min setup • Cancel anytime