Skip to content

Workflow Automation

Automate your marketplace operations with powerful workflow rules.


Overview

Workflow Automation in Automatum allows you to create automated actions triggered by marketplace events. Reduce manual work, ensure consistency, and respond to events in real-time.

Use Cases:

  • Auto-notify team when high-value deals close
  • Create tasks when contracts are expiring
  • Send welcome emails to new customers
  • Update CRM records automatically
  • Escalate failed metering events
  • Generate renewal offers automatically

How Workflows Work

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   Trigger       │     │   Conditions    │     │   Actions       │
│   (Event)       │────▶│   (Filters)     │────▶│   (What to do)  │
└─────────────────┘     └─────────────────┘     └─────────────────┘
        │                       │                       │
        │   Contract            │   Value >             │   Send Slack
        │   Accepted            │   $100K               │   + Create Task
        └───────────────────────┴───────────────────────┘
  1. Trigger: Event that starts the workflow
  2. Conditions: Optional filters to narrow scope
  3. Actions: What happens when triggered

Creating Workflows

Step 1: Navigate to Workflows

  1. Go to Settings > Workflows
  2. Click Create Workflow

Step 2: Configure Trigger

Select what event triggers the workflow:

Private Offer Events:

  • private_offer.created - New offer created
  • private_offer.sent - Offer email sent
  • private_offer.viewed - Customer viewed offer
  • private_offer.accepted - Customer accepted offer
  • private_offer.expired - Offer expired
  • private_offer.cancelled - Offer cancelled

Contract Events:

  • contract.created - New contract activated
  • contract.expiring - Contract expiring soon
  • contract.expired - Contract has expired
  • contract.renewed - Contract renewed
  • contract.cancelled - Contract cancelled

Customer Events:

  • customer.created - New customer registered
  • customer.updated - Customer info changed
  • customer.churned - Customer cancelled all contracts

Metering Events:

  • metering.submitted - Usage reported
  • metering.confirmed - Usage confirmed
  • metering.failed - Usage report failed

Revenue Events:

  • revenue.milestone - Revenue milestone reached
  • revenue.daily_summary - Daily revenue summary

Step 3: Add Conditions (Optional)

Filter when the workflow should run:

Condition Builder:

json
{
  "conditions": [
    {
      "field": "value",
      "operator": "greater_than",
      "value": 100000
    },
    {
      "field": "vendor",
      "operator": "equals",
      "value": "aws"
    }
  ],
  "logic": "AND"
}

Available Operators:

  • equals - Exact match
  • not_equals - Not matching
  • greater_than - Numeric comparison
  • less_than - Numeric comparison
  • contains - String contains
  • not_contains - String doesn't contain
  • in - Value in list
  • not_in - Value not in list
  • is_empty - Field is empty
  • is_not_empty - Field has value

Step 4: Configure Actions

Add one or more actions to execute:

Notification Actions:

  • Send email
  • Send Slack message
  • Send Microsoft Teams message
  • Send webhook
  • Send in-app notification

CRM Actions:

  • Create/update Salesforce record
  • Create/update HubSpot record
  • Log activity

Task Actions:

  • Create task
  • Assign to user
  • Set due date
  • Add to project

Data Actions:

  • Update record
  • Create record
  • Tag/label item

Custom Actions:

  • Call external API
  • Execute custom script
  • Trigger another workflow

Step 5: Save and Activate

  1. Name your workflow
  2. Add description
  3. Click Save
  4. Toggle Active to enable

Example Workflows

High-Value Deal Alert

Trigger: private_offer.accepted

Conditions:

  • Value > $100,000
  • Vendor = AWS

Actions:

  1. Send Slack to #sales-wins:
    🎉 Big Win Alert!
    {{customerName}} accepted ${{value}} deal
    Product: {{productName}}
  2. Send email to sales-leadership@company.com
  3. Create Salesforce opportunity
  4. Create celebration task

Configuration:

json
{
  "name": "High-Value Deal Alert",
  "trigger": "private_offer.accepted",
  "conditions": {
    "logic": "AND",
    "rules": [
      { "field": "value", "operator": "greater_than", "value": 100000 },
      { "field": "vendor", "operator": "equals", "value": "aws" }
    ]
  },
  "actions": [
    {
      "type": "slack",
      "channel": "#sales-wins",
      "message": "🎉 Big Win! {{customerName}} - ${{value}}"
    },
    {
      "type": "email",
      "to": ["sales-leadership@company.com"],
      "template": "high-value-deal"
    },
    {
      "type": "salesforce_create",
      "object": "Opportunity",
      "mapping": {
        "Name": "{{customerName}} - {{productName}}",
        "Amount": "{{value}}",
        "StageName": "Closed Won"
      }
    }
  ]
}

Contract Renewal Reminder

Trigger: contract.expiring

Conditions:

  • Days until expiry = 90

Actions:

  1. Create task for account owner
  2. Send email to customer success
  3. Create draft renewal offer
json
{
  "name": "90-Day Renewal Reminder",
  "trigger": "contract.expiring",
  "conditions": {
    "rules": [
      { "field": "daysUntilExpiry", "operator": "equals", "value": 90 }
    ]
  },
  "actions": [
    {
      "type": "create_task",
      "title": "Renewal conversation: {{customerName}}",
      "assignTo": "account_owner",
      "dueDate": "+7 days",
      "priority": "high"
    },
    {
      "type": "email",
      "to": ["{{accountOwnerEmail}}"],
      "template": "renewal-reminder-internal"
    },
    {
      "type": "create_draft_offer",
      "basedOn": "current_contract",
      "adjustments": {
        "duration": 12,
        "discount": 0
      }
    }
  ]
}

Metering Failure Escalation

Trigger: metering.failed

Conditions:

  • Retry count > 3

Actions:

  1. Send Slack to #engineering-alerts
  2. Create urgent task
  3. Send email to technical team
json
{
  "name": "Metering Failure Escalation",
  "trigger": "metering.failed",
  "conditions": {
    "rules": [
      { "field": "retryCount", "operator": "greater_than", "value": 3 }
    ]
  },
  "actions": [
    {
      "type": "slack",
      "channel": "#engineering-alerts",
      "message": "🚨 Metering failure: {{customerName}} - {{dimension}}\nError: {{errorMessage}}"
    },
    {
      "type": "create_task",
      "title": "URGENT: Fix metering for {{customerName}}",
      "assignTo": "engineering_lead",
      "dueDate": "today",
      "priority": "urgent"
    }
  ]
}

New Customer Onboarding

Trigger: customer.created

Actions:

  1. Send welcome email
  2. Create onboarding tasks
  3. Notify customer success
  4. Add to onboarding sequence
json
{
  "name": "New Customer Onboarding",
  "trigger": "customer.created",
  "actions": [
    {
      "type": "email",
      "to": ["{{customerEmail}}"],
      "template": "welcome-email"
    },
    {
      "type": "create_task_series",
      "tasks": [
        {
          "title": "Schedule kickoff call",
          "dueDate": "+1 day"
        },
        {
          "title": "Send onboarding resources",
          "dueDate": "+2 days"
        },
        {
          "title": "Check-in call",
          "dueDate": "+14 days"
        }
      ],
      "assignTo": "customer_success"
    },
    {
      "type": "slack",
      "channel": "#new-customers",
      "message": "👋 New customer: {{customerName}}"
    }
  ]
}

Variables & Templates

Available Variables

Use these variables in your actions:

Customer Variables:

  • - Customer company name
  • - Customer email
  • - Automatum customer ID
  • - AWS Account ID
  • - Azure Tenant ID

Offer Variables:

  • - Private offer name
  • - Offer ID
  • - Contract value
  • - Contract duration (months)
  • - Marketplace (aws/azure)
  • - Product name

Contract Variables:

  • - Contract ID
  • - Contract start date
  • - Contract end date
  • - Days until expiration

User Variables:

  • - Account owner name
  • - Account owner email
  • - Who created the record

Date Variables:

  • - Current timestamp
  • - Today's date
  • - Tomorrow's date

Date Math

Use relative dates:

  • +1 day - Tomorrow
  • +7 days - One week from now
  • +30 days - One month from now
  • -1 day - Yesterday
  • end_of_month - Last day of current month
  • end_of_quarter - Last day of current quarter

Conditional Content

Include conditional content in templates:

{{#if value > 100000}}
This is a high-value deal requiring executive approval.
{{else}}
Standard deal processing applies.
{{/if}}

Testing Workflows

Test Mode

Test workflows before activating:

  1. Go to Workflows > Select workflow
  2. Click Test
  3. Provide sample data
  4. Review actions that would execute
  5. Check for errors

Dry Run

Run workflow without executing actions:

bash
POST /api/workflows/:id/test
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "dryRun": true,
  "testData": {
    "customerName": "Test Company",
    "value": 150000,
    "vendor": "aws"
  }
}

Execution Logs

View workflow execution history:

  1. Go to Workflows > Select workflow
  2. Click Execution History
  3. See:
    • Trigger event
    • Conditions evaluated
    • Actions executed
    • Errors/failures
    • Timestamps

Managing Workflows

Enable/Disable

Toggle workflows on/off:

  1. Go to Workflows
  2. Find workflow
  3. Toggle Active switch

Or via API:

bash
PUT /api/workflows/:id
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "active": false
}

Duplicate Workflow

Copy existing workflow:

  1. Go to Workflows > Select workflow
  2. Click Duplicate
  3. Modify as needed
  4. Save with new name

Delete Workflow

Remove workflow:

  1. Go to Workflows > Select workflow
  2. Click Delete
  3. Confirm deletion

WARNING

Deleting a workflow cannot be undone. Consider disabling instead.

Version History

Track workflow changes:

  1. Go to Workflows > Select workflow
  2. Click Version History
  3. View previous versions
  4. Restore if needed

Advanced Features

Chaining Workflows

Trigger one workflow from another:

json
{
  "actions": [
    {
      "type": "trigger_workflow",
      "workflowId": "workflow_456",
      "passData": true
    }
  ]
}

Delays

Add delays between actions:

json
{
  "actions": [
    {
      "type": "email",
      "template": "welcome"
    },
    {
      "type": "delay",
      "duration": "2 days"
    },
    {
      "type": "email",
      "template": "follow-up"
    }
  ]
}

Rate Limiting

Prevent workflow overload:

json
{
  "settings": {
    "maxExecutionsPerHour": 100,
    "throttleAction": "queue"
  }
}

Error Handling

Configure error behavior:

json
{
  "errorHandling": {
    "onError": "continue",
    "retryCount": 3,
    "notifyOnFailure": ["admin@company.com"]
  }
}

API Reference

List Workflows

bash
GET /api/workflows
Authorization: Bearer YOUR_API_KEY

Create Workflow

bash
POST /api/workflows
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "name": "My Workflow",
  "trigger": "private_offer.accepted",
  "conditions": {...},
  "actions": [...],
  "active": true
}

Get Workflow

bash
GET /api/workflows/:id
Authorization: Bearer YOUR_API_KEY

Update Workflow

bash
PUT /api/workflows/:id
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "name": "Updated Workflow",
  "active": true
}

Delete Workflow

bash
DELETE /api/workflows/:id
Authorization: Bearer YOUR_API_KEY

Get Execution History

bash
GET /api/workflows/:id/executions
Authorization: Bearer YOUR_API_KEY

Best Practices

  1. Start simple - Begin with basic workflows, add complexity later
  2. Test thoroughly - Use test mode before activating
  3. Monitor execution - Review logs regularly
  4. Document workflows - Add clear descriptions
  5. Use naming conventions - Consistent naming helps management
  6. Set up alerts - Get notified of failures
  7. Review periodically - Audit workflows quarterly

Troubleshooting

Workflow Not Triggering

  1. Verify workflow is active
  2. Check trigger event matches
  3. Review condition logic
  4. Check execution logs
  5. Verify event is occurring

Actions Not Executing

  1. Check action configuration
  2. Verify credentials (API keys, etc.)
  3. Review error messages in logs
  4. Test action manually
  5. Check rate limits

Wrong Recipients/Data

  1. Review variable syntax
  2. Check field mappings
  3. Verify data in trigger event
  4. Test with sample data

Next Steps


Need Help?

Contact support@automatum.io for workflow assistance.

Automatum GTM Platform