- Fix Guides
- How to Fix HubSpot Workflows That Aren't Triggering
How to Fix HubSpot Workflows That Aren't Triggering
Step-by-step fix guide with AI-powered diagnosis from BuildForce.
HubSpot workflows fail to trigger for four primary reasons: the enrollment criteria use 'is known' for a property that hasn't actually been set (HubSpot evaluates 'known' as 'non-empty AND not the default'), re-enrollment is disabled and the contact previously matched then unmatched then re-matched, the workflow has a suppression list or goal criteria that auto-completes the enrollment before any action runs, or the trigger property is calculated and didn't actually change at the right moment. The fix is to use the Test Contact feature, check the workflow history for enrollment attempts, and re-enable re-enrollment with the correct trigger property.
Symptoms
Workflow status is 'On' but no contacts have enrolled in days
A specific contact meets the criteria visually but isn't enrolled
Workflow history shows 'criteria not met' for contacts that clearly should match
Contact enrolled once, criteria reset, then never re-enrolled despite matching again
Workflow shows enrolled contacts but the first action never fires
Test contact succeeds but production contacts don't enroll
Root Causes
Re-enrollment toggle disabled
By default, HubSpot enrolls a contact in a workflow once — even if they later leave and re-match the criteria. The Re-enrollment toggle in the workflow settings must be ON, and you must select which triggers re-enroll (re-enrollment uses a separate trigger list from initial enrollment).
'Is known' check on a calculated property
HubSpot treats calculated properties differently than user-set properties for the 'is known' operator. A calculated property that returns 0 or an empty string is 'unknown' even if the calculation ran. Use 'is greater than 0' or 'is not equal to empty' instead.
Suppression list catching the contact
If the workflow has a suppression list (unsubscribe list, internal employees, etc.) and the contact is on any one of them, enrollment is silently blocked. The workflow history shows no enrollment attempt at all.
Goal criteria already satisfied at enrollment time
When goal criteria match at the moment of enrollment, HubSpot completes the workflow immediately without running any actions. This is by design — the contact already 'achieved the goal' before enrollment — but it looks like the workflow isn't firing.
Trigger property updated outside the watched action
Enrollment triggers fire when a property changes. If the property is updated via an API call that doesn't increment the change-tracking timestamp (e.g., bulk imports with skip_property_tracking=true), the workflow doesn't see the change and doesn't enroll.
How to Fix It — Step by Step
Use Test Contact to validate enrollment evaluation
In the workflow editor, click 'Test' → enter a contact ID. HubSpot evaluates every enrollment criterion against that contact and shows you exactly which criteria pass and fail. This is the fastest single tool for diagnosing 'this contact should enroll but doesn't'.
Check the workflow history for the contact
Open the contact record → Workflows tab. It shows enrollment attempts, suppressions, and completed runs. If the contact has no history entry for this workflow at all, the enrollment criteria never matched. If there's a 'completed without actions' entry, goal criteria fired immediately.
Enable re-enrollment with the right triggers
In workflow settings → Re-enrollment → toggle ON. Then explicitly select which enrollment triggers should re-enroll a contact. HubSpot defaults to no triggers selected even when re-enrollment is on — so the toggle alone doesn't do anything until you pick triggers.
Replace 'is known' with explicit checks for calculated properties
For calculated properties (hubspotscore, lead_score__c, custom calc properties), change 'is known' to 'is greater than 0' or 'is not equal to' a specific default value. This is the single most common workflow-not-firing root cause for marketing automation orgs.
Audit suppression lists
Open the workflow → Settings → Suppression. Review every suppression list and confirm the test contact is not on any of them. If you're using a global suppression list (e.g., 'Internal employees'), confirm it's actually meant to apply to this workflow.
Check goal criteria evaluation
If the workflow has a goal, switch the workflow off briefly and modify the goal criteria to be impossible to satisfy at enrollment (e.g., 'lifecyclestage = customer' when test contacts are leads). Re-test enrollment. If the contact now enrolls and runs actions, the goal was firing immediately on enroll.
Verify trigger property change is observable
For property-change triggers, manually update the property via the HubSpot UI on the test contact. If the workflow enrolls, the change-tracking pipeline works. If it doesn't, the property update path (often a Zapier or Operations Hub flow) is bypassing change tracking.
Let BuildForce diagnose and fix this automatically
Instead of following manual steps, connect your org and let our AI identify exactly what's broken and how to fix it — in minutes.
Book a DemoCommon Questions
More answers about this issue and how to resolve it.
Stop debugging manually. Let AI do it.
BuildForce runs 200+ automated checks across your Salesforce org and tells you exactly what's broken and how to fix it.