Tracking lifecycle stages

Complete the shared setup first
This flow assumes you've done the one-time setup on the HubSpot overview: connect HubSpot for your webhook URL, deploy the FunnelTrack pixel, and create the ft_sid and ft_uid contact properties.

Lifecycle changes are offline events: they happen inside HubSpot with no browser attached. The seven default HubSpot lifecycle stages (Subscriber, Lead, MQL, SQL, Opportunity, Customer, Evangelist) each ship as their own card, and custom stages are supported. The receiver reads the lifecyclestage value and routes it to the matching card.

HubSpot lifecycle stages reference
HubSpot's default lifecycle stages.
1

Choose the trigger

In Automation → Workflows, create a workflow with a trigger of Property value changed on the Contact object, and set the property to Lifecycle stage.

Choosing the Property value changed trigger
Trigger: Property value changed.
Choosing the Contact object
Object: Contact.
2

Select the lifecycle stages to enroll

Set the new value to all standard lifecycle stages, plus any custom stages specific to your business that you want to track.

Selecting all lifecycle stages to enroll
Enroll on all standard stages, plus your custom stages.
3

Add the Send a webhook action

Add an action, choose Send a webhook, set the method to POST, and paste your FunnelTrack HubSpot webhook URL from the integration page.

Choosing the Send a webhook action in the HubSpot workflow
Action: Send a webhook (POST) to your FunnelTrack webhook URL.
4

Customize the request body

Choose Customize request body and map the fields below. Each row is either a dynamic contact property or a static value you type in.

Use HubSpot's property names as the field keys
The body field key (left column) must be the internal property name HubSpot assigns, not a custom label. For example lifecyclestage, email, firstname. FunnelTrack matches on these exact keys.
FieldRequired?TypeWhy it matters
eventRequiredStaticRoutes the receiver branch. Set the value to lifecycle_update
lifecyclestageRequiredDynamicThe stage that changed (internal value, e.g. marketingqualifiedlead).
emailRequiredDynamicIdentifies the contact. Hashed for advanced matching at every destination.
ft_uidStrongly recommendedDynamicThe offline attribution bridge to the visitor's most recent session.
phoneRecommendedDynamicHashed for advanced matching and as a fallback identifier.
firstnameRecommendedDynamicHashed user data — raises Event Match Quality.
lastnameRecommendedDynamicHashed user data — raises Event Match Quality.
ft_uid and offline attribution
ft_uid is strongly recommended for the most reliable offline conversion attribution. If ft_uidisn't present, FunnelTrack falls back to the contact's info to attribute the conversion, as long as a prior action (such as a form submission) was already captured for that contact.
Customizing the lifecycle webhook body with event = lifecycle_update
Map the properties and add the static value event = lifecycle_update.
Resulting payload
{
  "email": "person@example.com",
  "event": "lifecycle_update",
  "phone": "+15551234567",
  "ft_uid": "d8d1d541-1794-44b5-95d3-dbf0a39a20f1",
  "firstname": "Alex",
  "lastname": "Nguyen",
  "lifecyclestage": "marketingqualifiedlead"
}
5

Enable lifecycle tracking in FunnelTrack

Open a destination and enable the lifecycle events you want to send. FunnelTrack ships pre-built cards for all standard stages; for custom stages, add an event with the Add More Events builder.

Enabling lifecycle event tracking in FunnelTrack
Enable the standard stage cards, or add a custom-stage event.
6

Verify

Trigger a stage change, then open the Event Delivery Logand confirm the inbound lifecycle event. If you're sending ft_uid, expand the payload and check that the ft_uid value is present.

Verifying a lifecycle event in the FunnelTrack Event Delivery Log
Verify the inbound lifecycle event, and that ft_uid is present.
Contacts created before you added tracking
A lifecycle event for a contact that existed before your FunnelTrack setup will not have an ft_uid retroactively assigned. Those older contacts fall back to email / phone matching, so keep that in mind when reviewing early results.