Custom event trigger fails to update dynamic segment in marketing campaigns

We’re running into a frustrating issue with our marketing automation setup. We have a custom event called “product_demo_completed” that fires when prospects finish our interactive demo. The event includes properties like demo_duration, feature_interest, and completion_score.

The problem: Our dynamic segment that should include contacts with completion_score > 75 isn’t updating when the event fires. The workflow trigger based on this event executes fine and we can see the event in the contact timeline, but the segment membership doesn’t refresh. We’ve verified the property mapping is correct in the event definition, and the segment filter criteria specifically looks for the custom event property.

event: 'product_demo_completed',
properties: {
  completion_score: 85,
  demo_duration: 420
}

This is blocking our nurture campaigns since contacts aren’t entering the high-intent segment. Has anyone dealt with segment refresh timing issues with custom events? The workflow execution timing seems instant but segments lag by hours.

Let me provide the complete solution based on our implementation:

Step 1: Create Mirror Contact Properties Navigate to Settings > Properties and create contact properties for each event property you need in segments:

  • demo_completion_score (Number)
  • demo_duration_seconds (Number)
  • last_demo_completed_date (Date)

Step 2: Configure Workflow Property Sync In your event-triggered workflow, add these actions immediately after the trigger:

// Workflow actions:
Set property: demo_completion_score = {{event.completion_score}}
Set property: demo_duration_seconds = {{event.demo_duration}}
Set property: last_demo_completed_date = {{event.occurredAt}}

Step 3: Update Segment Filter Criteria Modify your dynamic segment to filter on contact properties instead of event properties:

  • Filter: `demo_completion_score is greater than 75
  • AND `last_demo_completed_date is known This addresses all three critical areas:

Custom Event Property Mapping: The workflow copies event properties to contact properties, ensuring data persistence beyond the event stream.

Segment Filter Criteria: By filtering on contact properties rather than event properties, segments can evaluate membership during their regular recalculation cycles (typically every 15-30 minutes).

Workflow Execution Timing: The property updates happen synchronously within the workflow, so by the time the next segment recalculation runs, the contact data is ready. You’ll see contacts entering segments within 30-45 minutes instead of the multi-hour delays you’re experiencing now.

Additional Recommendations:

  • Add a “demo_events_count” property incremented by the workflow to track engagement frequency
  • Create a backup workflow that runs daily to audit contacts with recent events but missing segment membership
  • Monitor your workflow history to ensure the property copy actions are executing successfully
  • Consider using enrollment triggers based on contact property changes rather than events for time-sensitive campaigns

The key insight is that HubSpot’s event stream and segmentation engine operate independently. Events are perfect for real-time workflow automation triggers, but segments need stable contact property values for their batch evaluation process. This hybrid approach gives you both immediate workflow responses and reliable segment membership updates.


This draft is based on general HubSpot knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

I’ve seen similar behavior with custom event properties and segment filters. The issue usually stems from how HubSpot processes event properties versus contact properties. Dynamic segments evaluate contact property values, but custom event properties aren’t automatically synced to contact records. When your event fires, the workflow sees it immediately because it’s listening for the event itself. However, your segment filter is likely checking for a contact property that doesn’t exist or isn’t being updated by the event.

Check your segment filter configuration carefully. Are you filtering by “has completed event product_demo_completed” or by a contact property? If you’re filtering by event completion with property conditions, there’s sometimes a processing delay of 2-4 hours in HubSpot’s segmentation engine. The workflow execution timing is real-time because it uses the event stream directly, but segment recalculation runs on a different schedule. Try creating a test segment with just the event completion (no property filters) to isolate whether it’s a timing issue or a property mapping problem.

Tested this on HubSpot Enterprise with custom behavioral events, and mapping demo_completion_score via workflow property sync updated our dynamic segments within 15 minutes.

We had this exact scenario last quarter. The solution involved a two-step approach. First, we modified our workflow to explicitly copy the custom event properties to contact properties immediately after the event trigger. This ensures the data is available for segment evaluation. Second, we adjusted our segment filter criteria to reference these contact properties instead of the event properties directly. The workflow automation triggers instantly, but you need that intermediate step to bridge the gap between event data and segment membership updates.

That makes sense about the contact property sync. So the segment is trying to evaluate event properties that aren’t stored at the contact level? I assumed the event property mapping would handle that automatically. Are you saying we need to create custom contact properties like “last_demo_completion_score” and have the workflow copy values there?

Exactly right. Create contact properties that mirror your critical event properties. In your workflow, add “Copy property value” actions immediately after the event trigger. This ensures segment filter criteria can evaluate the data. Also consider adding a timestamp property to track when the last event occurred, which helps with troubleshooting segment membership issues.

Another thing to watch with custom event property mapping and segment filter criteria - make sure your property types match exactly. If your event sends completion_score as a string but your contact property is defined as a number, the comparison in segment filters will fail silently. We’ve been caught by that before. The workflow execution timing won’t show errors, but segments just won’t update correctly.