Skip to main content

Workflow Triggers

Triggers are the events that start your workflows. Choose the right trigger to ensure your automations fire at exactly the right moment in your user’s journey.

How to Choose the Right Trigger

GoalBest TriggerWhy
Welcome new usersContact.IdentifiedFires when contact is first created
Reward completionsCard.Completed or Gameplay.EndedFires when user finishes experience
Qualify leadsGameplay.DataCapturedQualifiedOnly fires for qualified entries
Celebrate winnersPrize.AwardedFires immediately when prize is won
Manage listsContact.ListAddedFires when contact joins specific list
Receive external dataWebhook.ReceivedFires when an external system sends data to your webhook URL

Contact Triggers

Events related to contact creation, updates, and list management.
TriggerWhen It FiresData AvailablePerfect For
Contact.IdentifiedNew contact is created or identifiedContact profile, sourceWelcome sequences, onboarding
Contact.PropertyUpdatedAny contact field is modifiedOld/new values, updated fieldsRe-segmentation, personalization
Contact.Verified.SsoContact verifies via SSO loginVerification details, providerAccount activation, access grants
Contact.ListAddedContact joins a specific listList name, contact detailsList-specific communications

Example: Welcome New Users

Trigger: Contact.Identified
├── Contact Filter: First time visitor
│   ├── Success: Send welcome email
│   └── Add to "New Users" list
└── Award: 50 welcome points

Gameplay Triggers

Events that fire during user interactions with your experiences.
TriggerWhen It FiresData AvailablePerfect For
Gameplay.ActionAny action taken in experienceAction type, timestamp, contextEngagement scoring, behavior tracking
Gameplay.EndedUser completes or exits experienceCompletion status, duration, scoreCompletion rewards, follow-ups
Gameplay.DataCapturedForm submitted (all entries)Form fields, qualification statusLead generation, data collection
Gameplay.DataCapturedQualifiedForm submitted (qualified only)Validated form dataSales notifications, CRM sync
Gameplay.ReceiptValidationSuccessReceipt upload approvedReceipt details, validation scorePurchase rewards, loyalty points
Gameplay.ReceiptValidationRejectedReceipt upload rejectedRejection reason, uploaded fileFraud prevention, user guidance
Gameplay.TreasureHuntCheckpointCompletedCheckpoint reached in treasure huntCheckpoint details, progressProgressive rewards, engagement
Gameplay.UploadApprovedUser-generated content approvedUpload details, approval notesUGC workflows, social sharing
Gameplay.UploadRejectedUser-generated content rejectedRejection reason, moderation notesContent guidelines, re-submission
Gameplay.LiveSurveyQuestionAskedQuestion submitted in live Q&AQuestion text, user detailsReal-time moderation, engagement
Gameplay.LiveSurveyQuestionApprovedQ&A question approved for displayApproved question, moderatorLive event management, curation
Gameplay.LiveSurveyQuestionRejectedQ&A question rejectedRejection reason, question textContent moderation, user feedback

Example: Lead Qualification Flow

Trigger: Gameplay.DataCapturedQualified
├── Contact Filter: Company size > 100 employees
│   ├── Success: 
│   │   ├── Webhook to Salesforce CRM
│   │   └── Tag: "Enterprise Lead"
│   └── Fallback:
│       ├── Add to "SMB Nurture" email sequence
│       └── Tag: "SMB Lead"

Prize Triggers

Events related to prize awards and winner management.
TriggerWhen It FiresData AvailablePerfect For
Prize.AwardedUser wins a prizePrize details, winner infoWinner notifications, fulfillment
Prize.ExtraDataCapturedAdditional winner data collectedExtra form fields, prize contextPrize claim verification, shipping

Example: Winner Notification System

Trigger: Prize.Awarded
├── Contact Filter: Prize value > $50
│   ├── Success: Send premium winner email + SMS
│   └── Fallback: Send standard winner email
├── Add to List: "Prize Winners"
└── Webhook: Notify fulfillment system

Card Triggers

Events related to card interactions and engagement.
TriggerWhen It FiresData AvailablePerfect For
Card.CoverClickedUser clicks on card cover/previewCard details, click contextEngagement tracking, interest scoring

Example: Interest Tracking

Trigger: Card.CoverClicked
├── Contact Update: Increment "card_clicks" counter
├── Tag: "Engaged User"
└── Decision: If clicks > 5 this week
    └── Success: Add to "Highly Engaged" list

Loyalty Triggers

Events related to loyalty program activities.
TriggerWhen It FiresData AvailablePerfect For
Loyalty.PointsAwardedPoints credited to accountPoints amount, earning reasonAward confirmations, tier checks
Loyalty.PointsRedeemedPoints spent on redemptionPoints spent, redemption detailsRedemption confirmations, inventory
Loyalty.TierAddedUser promoted to new tierNew tier, previous tierTier upgrade celebrations, benefits
Loyalty.TierRemovedUser demoted from tierRemoved tier, current tierRe-engagement campaigns, retention

Example: Tier Upgrade Celebration

Trigger: Loyalty.TierAdded
├── Contact Filter: New tier = "Gold"
│   ├── Success: 
│   │   ├── Send gold tier welcome email
│   │   ├── Issue 500 bonus points
│   │   └── Send exclusive discount code
└── Add to List: "Gold Members"

Webhook Triggers

Events triggered by external systems sending data to your workflow’s webhook URL.
TriggerWhen It FiresData AvailablePerfect For
Webhook.ReceivedExternal HTTP request hits your webhook URLWebhook payload fields (defined by your schema)Third-party integrations, external system events, custom automations

How webhook triggers work

When you select Webhook.Received as your trigger, Komo generates a unique webhook URL for your workflow. External systems can send HTTP POST requests to this URL to trigger the workflow. You can define a JSON schema for your expected webhook payload. This schema tells the workflow editor what fields to expect, so you can reference them in your workflow steps using Liquid template variables.

Using webhook data in workflow steps

Once you define a schema for your webhook payload, the fields become available as Liquid template variables under the webhook namespace. For example, if your webhook payload includes user_id and amount fields, you can reference them as:
  • {{ webhook.user_id }}
  • {{ webhook.amount }}
Nested fields use dot notation. For example, a payload with a nested address.city field can be referenced as {{ webhook.address.city }}.

Example: External purchase sync

Trigger: Webhook.Received
  Schema: { user_id: string, amount: number, product: string }
├── Contact Filter: webhook.amount > 100
│   ├── Success:
│   │   ├── Award loyalty points (webhook.amount × 2)
│   │   └── Send "VIP Purchase" email
│   └── Fallback:
│       └── Award loyalty points (webhook.amount)
└── Contact Update: Set "last_purchase" = webhook.product

Setting up a webhook trigger

  1. Create a new workflow and select Webhook.Received as the trigger event
  2. A unique webhook slug is generated for your workflow — this forms your webhook URL
  3. Optionally define a request schema using JSON Schema format to describe the expected payload structure
  4. Use the schema fields as Liquid variables in your workflow actions (e.g., email templates, contact updates, filters)

Advanced Trigger Strategies

1. Trigger Stacking

Use multiple related triggers for comprehensive coverage:
# Welcome sequence with multiple entry points
Trigger 1: Contact.Identified (new users)
Trigger 2: Contact.Verified.Sso (returning users)
Both → Same welcome workflow with different paths

2. Qualification Layering

Combine broad triggers with specific filters:
Trigger: Gameplay.DataCaptured (all submissions)
├── Contact Filter: Email contains company domains
│   └── Success: Route to B2B workflow
└── Fallback: Route to B2C workflow

3. Time-Based Follow-ups

Chain triggers for timed sequences:
Initial: Prize.Awarded
├── Immediate: Send winner notification
├── After 24h: Send claim reminder (if not claimed)
└── After 7 days: Send final reminder

Troubleshooting Triggers

Common Issues

ProblemLikely CauseSolution
Trigger not firingIncorrect scope configurationVerify workflow scope matches trigger source
Too many executionsOverly broad trigger conditionsAdd specific filters to narrow scope
Missing dataTrigger fired before data availableAdd delay or data validation checks
Duplicate workflowsMultiple workflows with same triggerUse exclusion filters or combine workflows

Testing Tips

  1. Start with broad triggers - Use Gameplay.Action to see all events
  2. Add logging - Use webhook actions to log trigger data
  3. Test with real data - Use actual user interactions, not simulated events
  4. Monitor execution volume - Check Workflow Runs for unexpected patterns

Best Practices

✅ Do This

  • Be specific - Use qualified triggers when possible (DataCapturedQualified vs DataCaptured)
  • Add context filters - Narrow scope with contact properties or gameplay data
  • Plan for scale - Consider execution volume for broad triggers
  • Document trigger purpose - Name workflows clearly to indicate trigger intent

❌ Avoid This

  • Don’t use overly broad triggers without filters (Contact.PropertyUpdated without field specification)
  • Don’t stack identical triggers - Combine similar workflows instead
  • Don’t ignore data availability - Ensure required data exists when trigger fires
  • Don’t skip testing - Always verify triggers fire as expected

What’s Next?

Need help choosing the right trigger? Contact support at [email protected]