Workflow Actions
Actions are the building blocks of your workflows - they define what happens after your trigger fires. Chain actions together to create powerful automations that save time and deliver personalized experiences.
How Actions Work
Actions are executed in sequence, with each action receiving data from previous steps. Use connection paths to handle success and failure scenarios.
Trigger: Data Captured
├── Action 1: Contact Filter (validates data)
│ ├── Success Path → Action 2: Send Email
│ └── Failure Path → Action 3: Add to "Incomplete Data" list
Quick Action Finder
| I Want To… | Use This Action | Category |
|---|
| Send an email | ContactEmailSend | Contact |
| Update user profile | ContactUpdate | Contact |
| Add to email list | ContactAddToList | Contact |
| Award loyalty points | LoyaltyAwardPoints | Loyalty |
| Send to CRM | SalesforceCreateObject | Integration |
| Add conditions | ContactFilter or Decision | Utility |
| Send a gift card | LocalCardSendCardFromTemplate | Cards and Coupons |
| Issue a campaign gift | LocalCardGenerateCampaignGift | Cards and Coupons |
| Send webhook | HttpRequest | Utility |
Manage contact data, communications, and list memberships.
Data Management
| Action | Purpose | Required Data | Example Use |
|---|
| ContactUpdate | Modify contact properties | Field names and values | Update preferences, scores, tags |
| ContactFilter | Apply conditional logic | Filter conditions | Route users based on properties |
| ContactAddToList | Add contact to list | List name | Segment users for campaigns |
| ContactRemoveFromList | Remove from list | List name | Unsubscribe or re-segment |
Communications
| Action | Purpose | Required Data | Example Use |
|---|
| ContactEmailSend | Send personalized email | Email template, recipient | Welcome emails, notifications |
| ContactSmsSend | Send SMS message | Phone number, message | Urgent alerts, mobile campaigns |
Rewards & Recognition
| Action | Purpose | Required Data | Example Use |
|---|
| ContactCouponIssue | Issue one or more coupons | Coupon offer, quantity (optional) | Reward completions, bulk incentives |
| AssignContactAchievement | Award achievement badge | Achievement type | Recognize milestones, gamify |
| ContactVaultCardIssue | Issue digital wallet card | Card template | Membership cards, tickets |
The ContactCouponIssue action supports issuing multiple coupons in a single workflow step.
| Setting | Description | Default |
|---|
| Coupon Offer | The coupon offer to issue from | Required |
| Quantity | Number of coupons to issue (supports variables) | 1 |
| Contact Limit | Maximum coupons per contact from this offer | No limit |
| Allow Partial Award | If enabled, issues available coupons when quantity exceeds remaining limit | Disabled |
Output Variables:
When issuing a single coupon:
coupon_id - The issued coupon ID
coupon_link - Direct link to the coupon
coupon_code - The coupon barcode/code
When issuing multiple coupons:
coupon_id - JSON array of coupon IDs
coupon_link - JSON array of coupon links
coupon_code - JSON array of coupon codes
coupon_count - Total number of coupons issued
Output Paths:
- Success - Coupons issued successfully
- OfferLimitsExceeded - Contact or offer limits prevent issuing
- OfferExpired - Coupon offer is no longer active
Example: Issue Multiple Coupons
Trigger: Competition.EntrySubmitted
├── ContactCouponIssue:
│ ├── Offer: "10% Discount"
│ ├── Quantity: 3
│ ├── Contact Limit: 5
│ ├── Allow Partial Award: true
│ ├── Success Path → ContactEmailSend (include coupon_count in message)
│ └── OfferLimitsExceeded Path → ContactEmailSend (limit notification)
Specialized Integrations
| Action | Purpose | Required Data | Example Use |
|---|
| ContactThuziCheckIn | Thuzi platform check-in | Event details | Event attendance tracking |
LocalCard Gift Cards
Send digital gift cards to contacts through the LocalCard integration. Requires a LocalCard connected app to be configured in your workspace settings.
| Action | Purpose | Required Data | Example Use |
|---|
| LocalCardSendCardFromTemplate | Send a gift card from a template | Card template ID, card value | Reward winners, incentivize participation |
| LocalCardGenerateCampaignGift | Issue a gift from an existing campaign | Campaign ID, gift value | Bulk gift distribution, promotional campaigns |
LocalCardSendCardFromTemplate configuration:
| Field | Description | Required |
|---|
| Card template ID | The LocalCard card template to use | Yes |
| Card value | Dollar value of the gift card (supports dynamic values) | Yes |
| Delivery method | How the card is delivered: Email, Sms, or Link (default: Email) | No |
| Recipient message | Personalized message for the recipient (supports dynamic values) | No |
| Communication message | Notification message sent with the card | No |
| Deliver at | Schedule delivery for a future date/time | No |
LocalCardGenerateCampaignGift configuration:
| Field | Description | Required |
|---|
| Campaign ID | The LocalCard campaign to issue from | Yes |
| Gift value | Dollar value of the gift (supports dynamic values) | Yes |
| Delivery method | How the gift is delivered: Email, Sms, or Link (default: Link) | No |
| Recipient message | Personalized message for the recipient (supports dynamic values) | No |
Example: Gift card reward workflow
Trigger: Prize.Awarded
├── ContactFilter: Prize type = "Gift Card"
│ ├── Success: LocalCardSendCardFromTemplate
│ │ ├── Card template: "Reward Gift Card"
│ │ ├── Card value: $25
│ │ └── Delivery: Email
│ └── Failure: ContactEmailSend → "Standard prize notification"
Both LocalCard actions require a LocalCard connected app. Navigate to Settings → Connected Apps and connect your LocalCard account with your API key before using these actions.
Integration Actions
Connect with external platforms and services.
Salesforce CRM
| Action | Purpose | Required Data | Example Use |
|---|
| SalesforceCreateObject | Create new CRM record | Object type, field mappings | Add leads, opportunities, contacts |
| SalesforceUpdateObject | Update existing record | Object ID, field updates | Update lead status, add notes |
| SalesforceGetObject | Retrieve CRM data | Object ID or search criteria | Validate existing records, get context |
Example: Lead to CRM Flow
Trigger: Gameplay.DataCapturedQualified
├── SalesforceCreateObject: Create Lead
│ ├── Success: ContactUpdate → Tag "CRM Synced"
│ └── Failure: Add to "CRM Sync Failed" list
└── ContactEmailSend: Confirmation to sales team
Mailchimp Email Marketing
| Action | Purpose | Required Data | Example Use |
|---|
| MailchimpUpsert | Add/update subscriber | Email, list ID | Sync contacts to email campaigns |
| MailchimpAddTags | Apply subscriber tags | Tag names | Segment for targeted campaigns |
| MailchimpRemoveTags | Remove subscriber tags | Tag names | Update segmentation |
| MailchimpUnsubscribe | Unsubscribe contact | Email address | Honor unsubscribe requests |
| MailchimpArchive | Archive subscriber | Email address | Clean inactive subscribers |
| MailchimpDelete | Permanently delete | Email address | GDPR compliance, data removal |
Example: Email List Sync
Trigger: Contact.ListAdded ("Newsletter Subscribers")
├── MailchimpUpsert: Add to Mailchimp list
├── MailchimpAddTags: ["Komo User", "Newsletter"]
└── ContactUpdate: Mark "mailchimp_synced" = true
Braze Customer Engagement
| Action | Purpose | Required Data | Example Use |
|---|
| BrazeTrackUser | Send user event to Braze | Event name, properties | Trigger Braze campaigns, analytics |
Competition & Gameplay Actions
Actions specific to competitions, games, and user-generated content.
| Action | Purpose | Required Data | Example Use |
|---|
| AssignBonusCompetitionEntries | Grant extra entries | Entry count | Reward engagement, boost participation |
| CompetitionEntryAddTags | Tag competition entries | Tag names | Categorize entries, track sources |
| CompetitionEntryRemoveTags | Remove entry tags | Tag names | Clean up categorization |
| GameplayFilter | Filter gameplay events | Filter conditions | Route based on scores, completion |
| AssignGameplayScore | Set custom scores | Score value, context | Custom scoring beyond default |
Example: Engagement Bonus System
Trigger: Gameplay.Action (social share)
├── AssignBonusCompetitionEntries: +3 entries
├── CompetitionEntryAddTags: ["Social Sharer"]
└── LoyaltyAwardPoints: 50 points
Loyalty Actions
Manage loyalty programs, points, and tier memberships.
| Action | Purpose | Required Data | Example Use |
|---|
| LoyaltyAwardPoints | Credit points to account | Points amount, reason | Reward actions, milestone bonuses |
| LoyaltyRedeemPoints | Deduct points for redemption | Points amount, redemption | Process point spending |
| LoyaltyAddToTier | Promote to higher tier | Tier name | Recognize high-value users |
| LoyaltyRemoveFromTier | Demote from tier | Tier name | Handle tier downgrades |
Example: Tier Progression System
Trigger: Loyalty.PointsAwarded
├── ContactFilter: Total points >= 1000
│ ├── Success: LoyaltyAddToTier ("Gold")
│ └── ContactUpdate: Next tier progress
└── ContactEmailSend: Points confirmation
Utility & Flow Actions
Control workflow logic, timing, and external communication.
Flow Control
| Action | Purpose | Required Data | Example Use |
|---|
| Decision | Branch workflow logic | Decision conditions | If/then logic, A/B routing |
| Split | Create parallel branches | Branch conditions | Run multiple actions simultaneously |
External Communication
| Action | Purpose | Required Data | Example Use |
|---|
| HttpRequest | Send HTTP request | URL, method, payload | Custom webhooks, API calls |
Example: Custom Webhook Integration
Trigger: Prize.Awarded
├── HttpRequest: POST to fulfillment API
│ ├── Success: ContactUpdate → "fulfillment_requested"
│ └── Failure: Add to "Fulfillment Failed" list
└── ContactEmailSend: Winner notification
Action Best Practices
✅ Design for Success and Failure
Always handle both success and failure paths:
Action: SalesforceCreateObject
├── Success Path:
│ ├── ContactUpdate: Tag "CRM Synced"
│ └── ContactEmailSend: Confirmation
└── Failure Path:
├── Add to "CRM Failed" list
└── HttpRequest: Alert IT team
✅ Use Descriptive Names
Name your actions clearly for easy maintenance:
❌ ContactEmailSend: "Email Template 1"
✅ ContactEmailSend: "Welcome Email - New User Onboarding"
✅ Validate Data Before Actions
Use filters to ensure data quality:
Trigger: Data Captured
├── ContactFilter: Email format is valid
│ ├── Success: ContactEmailSend
│ └── Failure: Add to "Invalid Email" list
Chain related actions for efficiency:
New Member Workflow:
├── ContactUpdate: Set member_status = "active"
├── ContactAddToList: "Active Members"
├── LoyaltyAwardPoints: 100 welcome points
└── ContactEmailSend: Welcome package
Advanced Action Patterns
1. Progressive Data Collection
Build profiles over multiple interactions:
Trigger: Data Captured
├── ContactFilter: Profile completeness < 50%
│ ├── Success: ContactEmailSend ("Complete Your Profile")
│ └── ContactUpdate: profile_complete_date = now()
2. Smart List Management
Automatically manage list memberships:
Trigger: Loyalty.PointsAwarded
├── ContactFilter: Total points >= 500
│ ├── Success:
│ │ ├── ContactAddToList: "VIP Members"
│ │ └── ContactRemoveFromList: "Standard Members"
3. Multi-Channel Notifications
Send notifications across multiple channels:
High-Value Prize Workflow:
├── Split: Create parallel branches
│ ├── Branch 1: ContactEmailSend (detailed email)
│ ├── Branch 2: ContactSmsSend (urgent SMS)
│ └── Branch 3: HttpRequest (Slack notification to team)
Troubleshooting Actions
Common Issues
| Problem | Likely Cause | Solution |
|---|
| Action fails silently | Missing required data | Add data validation before action |
| Integration timeouts | External API is slow | Add error handling, increase timeout |
| Duplicate actions | Action runs multiple times | Check for duplicate triggers or loops |
| Wrong data passed | Previous action failed | Verify success/failure paths |
Testing Actions
- Test with real data - Use actual contact records and scenarios
- Verify external integrations - Confirm data arrives in target systems
- Check error handling - Intentionally break integrations to test failure paths
- Monitor execution time - Ensure actions complete within reasonable timeframes
Optimize Action Chains
- Parallel processing - Use Split actions for independent operations
- Early filtering - Place filters early to avoid unnecessary actions
- Batch operations - Group similar actions when possible
External Integration Efficiency
- Cache responses - Store API responses to avoid duplicate calls
- Use webhooks - Let external systems push data instead of polling
- Implement retries - Handle temporary failures with retry logic
What’s Next?
Need help implementing a specific action? Contact support at [email protected]