Skip to content
Back to skills

Marketing Automation Workflows

ASecurity

Use when building marketing automation systems and flows.

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 10, 2026
content-marketingpythongoreacttestingperformance

Works with

  • cli

Security analysis

A100/100

Scanned September 10, 2026

npx -y skills add LoopyLuci/Skills --skill marketing-automation-workflows --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Marketing Automation Workflows?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Marketing Automation Workflows
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/loopyluci-marketing-automation-workflows/badge)](https://www.skillsdirectory.com/skills/loopyluci-marketing-automation-workflows)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: marketing-automation-workflows
description: "Use when building marketing automation systems and flows."
version: 1.0.0
author: Hermes Agent
license: MIT
metadata:
  hermes:
    tags: [marketing-automation, workflows, triggers, email-automation, CRM-automation]
    related_skills: [email-marketing-campaigns, crm-sales-pipeline, marketing-funnel-design, list-building-email-growth]
---

# Marketing Automation Workflows

Building automated marketing workflows that nurture leads, engage customers, and drive conversions — from trigger-based email sequences through multi-step automation and lead scoring.

## When to Use

- Automating repetitive marketing tasks (follow-ups, assignments, notifications)
- Building multi-step email automation sequences
- Implementing lead scoring and routing
- Creating behavior-triggered marketing campaigns
- Integrating marketing automation with CRM

## Workflow Engine

```python
from typing import Dict, List, Optional, Callable
from datetime import datetime, timedelta
import json
import uuid

class WorkflowTrigger:
    """Define what starts a workflow."""
    
    TYPES = {
        'form_submission': 'User submits a form',
        'page_visit': 'User visits a specific page',
        'email_click': 'User clicks a link in an email',
        'email_open': 'User opens an email',
        'purchase': 'User makes a purchase',
        'lead_created': 'New lead enters the system',
        'lead_stage_change': 'Lead moves to a new stage',
        'date_based': 'Specific date or anniversary',
        'tag_added': 'Tag is applied to a contact',
        'score_threshold': 'Lead score reaches a threshold',
    }

class AutomationWorkflow:
    """Design multi-step automation workflows."""
    
    def __init__(self, name: str, trigger_type: str, trigger_config: Dict):
        self.name = name
        self.trigger = {'type': trigger_type, 'config': trigger_config}
        self.steps = []
        self.goals = []
    
    def add_step(self, action_type: str, config: Dict,
                 delay_hours: int = 0, condition: Dict = None) -> 'AutomationWorkflow':
        """Add a step to the workflow."""
        step_id = str(uuid.uuid4())[:8]
        self.steps.append({
            'id': step_id,
            'action': action_type,
            'config': config,
            'delay': delay_hours,
            'condition': condition,
        })
        return self
    
    def add_goal(self, description: str, metric: str, target: float):
        """Add a measurable goal for this workflow."""
        self.goals.append({
            'description': description,
            'metric': metric,
            'target': target,
        })
```

## Common Workflow Templates

```python
WORKFLOW_TEMPLATES = {
    'welcome_series': {
        'name': 'Welcome Series',
        'trigger': 'form_submission',
        'steps': [
            {'action': 'send_email', 'delay': 0, 'template': 'welcome_email'},
            {'action': 'add_tag', 'delay': 0, 'tag': 'new_subscriber'},
            {'action': 'wait', 'delay': 24, 'description': 'Wait 24 hours'},
            {'action': 'send_email', 'delay': 0, 'template': 'day_1_nurture'},
            {'action': 'update_score', 'delay': 0, 'points': 5},
            {'action': 'wait', 'delay': 72, 'description': 'Wait 3 days'},
            {'action': 'send_email', 'delay': 0, 'template': 'day_4_offer'},
            {'action': 'condition', 'delay': 0, 
             'if': 'clicked_last_email', 'then': 'move_to_hot_lead'},
        ],
    },
    'abandoned_cart': {
        'name': 'Abandoned Cart Recovery',
        'trigger': 'cart_abandoned',
        'steps': [
            {'action': 'wait', 'delay': 1, 'description': 'Wait 1 hour'},
            {'action': 'send_email', 'delay': 0, 'template': 'cart_reminder_1'},
            {'action': 'wait', 'delay': 24, 'description': 'Wait 24 hours'},
            {'action': 'send_email', 'delay': 0, 'template': 'cart_reminder_2'},
            {'action': 'wait', 'delay': 48, 'description': 'Wait 48 hours'},
            {'action': 'send_email', 'delay': 0, 'template': 'cart_reminder_3'},
        ],
    },
    'lead_reattempt': {
        'name': 'Lead Re-engagement',
        'trigger': 'lead_stage_change',
        'trigger_config': {'stage': 'lost'},
        'steps': [
            {'action': 'wait', 'delay': 720, 'description': 'Wait 30 days'},
            {'action': 'send_email', 'delay': 0, 'template': 'we_miss_you'},
            {'action': 'condition', 'delay': 0,
             'if': 'opened_last_email', 'then': 'move_to_reactivated'},
            {'action': 'wait', 'delay': 720, 'description': 'Wait 30 days'},
            {'action': 'send_email', 'delay': 0, 'template': 'final_offer'},
            {'action': 'condition', 'delay': 0,
             'if': 'no_engagement', 'then': 'mark_as_inactive'},
        ],
    },
    'post_purchase': {
        'name': 'Post-Purchase Follow-up',
        'trigger': 'purchase',
        'steps': [
            {'action': 'send_email', 'delay': 0, 'template': 'order_confirmation'},
            {'action': 'wait', 'delay': 24, 'description': 'Wait 1 day'},
            {'action': 'send_email', 'delay': 0, 'template': 'shipping_update'},
            {'action': 'wait', 'delay': 168, 'description': 'Wait 7 days'},
            {'action': 'send_email', 'delay': 0, 'template': 'feedback_request'},
            {'action': 'add_tag', 'delay': 0, 'tag': 'customer'},
        ],
    },
}

def get_workflow_template(name: str) -> Dict:
    return WORKFLOW_TEMPLATES.get(name, WORKFLOW_TEMPLATES['welcome_series'])
```

## Lead Scoring

```python
class LeadScoringModel:
    """Define and calculate lead scores based on behavior."""
    
    POSITIVE_SIGNALS = {
        'email_open': 5,
        'email_click': 10,
        'page_visit': 3,
        'form_submit': 15,
        'demo_request': 30,
        'pricing_page': 20,
        'case_study_view': 10,
        'trial_start': 25,
        'webinar_attend': 20,
        'content_download': 8,
    }
    
    NEGATIVE_SIGNALS = {
        'email_unsubscribe': -50,
        'bounce': -20,
        'spam_complaint': -100,
        'job_change': -10,
    }
    
    @staticmethod
    def calculate_score(contact_events: List[Dict]) -> Dict:
        score = 0
        breakdown = []
        
        for event in contact_events:
            event_type = event.get('type', '')
            if event_type in LeadScoringModel.POSITIVE_SIGNALS:
                points = LeadScoringModel.POSITIVE_SIGNALS[event_type]
                score += points
                breakdown.append(f"+{points}: {event_type}")
            elif event_type in LeadScoringModel.NEGATIVE_SIGNALS:
                points = LeadScoringModel.NEGATIVE_SIGNALS[event_type]
                score += points
                breakdown.append(f"{points}: {event_type}")
        
        return {
            'total_score': score,
            'breakdown': breakdown,
            'rating': 'hot' if score >= 80 else 'warm' if score >= 40 else 'cold',
        }
```

## Common Pitfalls

1. **Over-automating** — not every touchpoint needs automation; personalize where it matters
2. **No testing** — automated workflows with broken links or typos go out to thousands
3. **Trigger stacking** — multiple automations triggered simultaneously confuse the contact
4. **Ignoring unengaged contacts** — sending to unengaged contacts hurts deliverability
5. **Too aggressive timing** — 5 emails in 2 days feels spammy; space them out appropriately
6. **No exit conditions** — workflows should remove contacts who convert or opt out

## Verification Checklist

- [ ] Workflow triggers clearly defined
- [ ] Steps include appropriate delays between actions
- [ ] Conditional branching configured (if/else paths)
- [ ] Lead scoring model defined (positive and negative signals)
- [ ] Exit conditions set (unsubscribe, conversion)
- [ ] Workflow tested with test contacts before going live
- [ ] Performance monitored (completion rate, conversion rate)
- [ ] Integration with CRM verified

## See Also

- email-marketing-campaigns — email sequences within workflows
- crm-sales-pipeline — lead routing and CRM integration
- marketing-funnel-design — workflow stages aligned with funnel
- list-building-email-growth — feeding leads into workflows

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.