Tracking deals

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.
1

Choose the trigger

In Automation → Workflows, create a deal-based workflow with a trigger of Property value changed on the Deal object, and set the property to Deal stage.

Choosing the Deal record type to enroll in the workflow
Record type: Deal. Then set the trigger to Property value changed → Deal stage.
2

Select the deal stages to enroll

Set the new value to all pipeline stages you want to track, including any custom stages.

Selecting all deal stages to enroll
Enroll on the deal stages you track.
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 under Data ops in the HubSpot workflow
Action: Send a webhook (under Data ops).
4

Customize the request body

Choose Customize request body and map the fields below. Each row is either a dynamic deal / associated-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 dealstage, amount, dealname, email. FunnelTrack matches on these exact keys.
FieldRequired?TypeWhy it matters
eventRequiredStaticRoutes the receiver branch. Set the value to deal_update
dealstageRequiredDynamicThe stage the deal moved to (internal id, e.g. contractsent).
emailRequiredDynamicThe associated contact's email. Hashed for advanced matching.
ft_uidStrongly recommendedDynamicThe offline attribution bridge to the contact's most recent session.
amountRecommendedDynamicDeal revenue. Sent as the conversion value to your ad platforms.
phoneRecommendedDynamicHashed for advanced matching and as a fallback identifier.
firstnameRecommendedDynamicHashed user data — raises Event Match Quality.
lastnameRecommendedDynamicHashed user data — raises Event Match Quality.
dealnameOptionalDynamicContext for reporting and debugging.
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 associated contact's info to attribute the conversion, as long as a prior action (such as a form submission) was already captured for that contact.
Mapping deal and associated-contact info into the webhook body
Map the deal + associated contact properties, and add the static value event = deal_update.
Resulting payload
{
  "email": "person@example.com",
  "event": "deal_update",
  "ft_uid": "d8d1d541-1794-44b5-95d3-dbf0a39a20f1",
  "dealname": "Acme — Annual",
  "dealstage": "contractsent",
  "amount": "4200"
}
Use the internal stage id, not the label
HubSpot sends contractsent, not "Contract Sent". Custom pipelines use a numeric stage id: find it under Settings → Objects → Deals → Pipelines, then add a custom card with that value.
5

Enable deal tracking in FunnelTrack

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

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

Verify

Move a deal to a tracked stage, then open the Event Delivery Logand confirm the inbound deal event. If you're sending ft_uid, expand the payload and check that the ft_uid value is present.

Verifying a deal event in the FunnelTrack Event Delivery Log
Verify the inbound deal event, and that ft_uid is present.
Contacts created before you added tracking
A deal 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.