Ready-to-use workflow examples for typical practice management scenarios. Copy these patterns and customize them for your specific needs.

🚀 Quick Start Examples

Patient Welcome Automation

Scenario: Automatically welcome new patients with confirmation email, practice information, and onboarding sequence.

Workflow Overview

Trigger: New Patient Registration
↓
Send Welcome Email
↓
Create CRM Contact
↓
Schedule Follow-up Call
↓
Add to Newsletter List

Step-by-Step Configuration

1. Semble Trigger Node
Node: "Semble Trigger"
Resource: "Patient"
Event: "New Only"
Poll Interval: "Every 30 minutes"
Date Period: "Last 4 hours"
Limit: 10
2. Email Node (Welcome)
Node: "Send Email"
To: "{{$node['Semble Trigger'].json['email']}}"
Subject: "Welcome to {{ practice_name }} - Important Information"
Type: "HTML"

Template:
Dear {{$node['Semble Trigger'].json['firstName']}},

Welcome to our practice! We're delighted to have you as a new patient.

Next Steps:
1. Complete your medical history form (attached)
2. Bring photo ID to your first appointment
3. Arrive 15 minutes early for registration

Practice Information:
- Address: 123 Health Street, Medical City
- Phone: +44 20 7946 0958
- Emergency: Call 999 or visit A&E

We look forward to caring for your health.

Best regards,
The {{ practice_name }} Team
3. CRM Integration (HubSpot)
Node: "HubSpot"
Operation: "Create Contact"
Email: "{{$node['Semble Trigger'].json['email']}}"
Properties:
  firstname: "{{$node['Semble Trigger'].json['firstName']}}"
  lastname: "{{$node['Semble Trigger'].json['lastName']}}"
  phone: "{{$node['Semble Trigger'].json['phone']}}"
  lifecyclestage: "customer"
  hs_lead_status: "NEW"
  source: "semble_registration"
  registration_date: "{{$node['Semble Trigger'].json['dateCreated']}}"
4. Task Creation (Asana/Trello)
Node: "Asana"
Operation: "Create Task"
Name: "Welcome call - {{$node['Semble Trigger'].json['firstName']}} {{$node['Semble Trigger'].json['lastName']}}"
Assignee: "practice.manager@clinic.com"
Due Date: "{{DateTime.now().plus({days: 2}).toISO()}}"
Notes: |
  New patient registered on {{$node['Semble Trigger'].json['dateCreated']}}

  Patient Details:
  - Name: {{$node['Semble Trigger'].json['firstName']}} {{$node['Semble Trigger'].json['lastName']}}
  - Email: {{$node['Semble Trigger'].json['email']}}
  - Phone: {{$node['Semble Trigger'].json['phone']}}

  Welcome call checklist:
  - Confirm contact details
  - Explain practice procedures
  - Answer any questions
  - Schedule first appointment if needed
5. Newsletter Subscription
Node: "Mailchimp"
Operation: "Add Member to List"
List: "new_patients_onboarding"
Email: "{{$node['Semble Trigger'].json['email']}}"
Status: "subscribed"
Merge Fields:
  FNAME: "{{$node['Semble Trigger'].json['firstName']}}"
  LNAME: "{{$node['Semble Trigger'].json['lastName']}}  
  PHONE: "{{$node['Semble Trigger'].json['phone']}}"
  REG_DATE: "{{$node['Semble Trigger'].json['dateCreated']}}"
Tags: ["new_patient", "welcome_sequence"]

Appointment Reminder System

Scenario: Automated appointment reminders with escalating notifications and confirmation tracking.

Workflow Overview

Trigger: New Appointment Booking
↓
Schedule 24h Reminder Email
↓
Schedule 2h Reminder SMS
↓
Track Confirmation Status
↓
Final Reminder if Unconfirmed

Implementation

1. Booking Trigger
Node: "Semble Trigger"
Resource: "Booking"
Event: "New Only"
Poll Interval: "Every 15 minutes"
Date Period: "Next 7 days"
Filters:
  status: ["Pending", "Confirmed"]
  exclude_cancelled: true
2. 24-Hour Email Reminder
Node: "Schedule Trigger"
Trigger Time: "{{DateTime.fromISO($node['Semble Trigger'].json['appointmentDate']).minus({days: 1}).set({hour: 18, minute: 0}).toISO()}}"

↓

Node: "Send Email"
To: "{{$node['Semble Trigger'].json['patient']['email']}}"
Subject: "Appointment Reminder - Tomorrow at {{$node['Semble Trigger'].json['appointmentTime']}}"
Template: |
  Dear {{$node['Semble Trigger'].json['patient']['firstName']}},

  This is a reminder of your appointment:

  📅 Date: {{DateTime.fromISO($node['Semble Trigger'].json['appointmentDate']).toFormat('EEEE, MMMM d, yyyy')}}
  🕐 Time: {{$node['Semble Trigger'].json['appointmentTime']}}
  👨‍⚕️ With: {{$node['Semble Trigger'].json['staff']['firstName']}} {{$node['Semble Trigger'].json['staff']['lastName']}}
  📍 Location: Main Practice, Room 1A

  Preparation:
  - Arrive 10 minutes early
  - Bring photo ID
  - List current medications

  Need to reschedule? Click here: {{reschedule_link}}

  Confirm your attendance: {{confirm_link}}
3. 2-Hour SMS Reminder
Node: "Schedule Trigger"  
Trigger Time: "{{DateTime.fromISO($node['Semble Trigger'].json['appointmentDate']).minus({hours: 2}).toISO()}}"

↓

Node: "Twilio SMS"
To: "{{$node['Semble Trigger'].json['patient']['phone']}}"
Message: |
  Appointment reminder: Today at {{$node['Semble Trigger'].json['appointmentTime']}} with {{$node['Semble Trigger'].json['staff']['firstName']}} {{$node['Semble Trigger'].json['staff']['lastName']}}. 

  Practice address: 123 Health St. Arrive 10 mins early.

  Reschedule: {{short_reschedule_link}}
4. Confirmation Check
Node: "Schedule Trigger"
Trigger Time: "{{DateTime.fromISO($node['Semble Trigger'].json['appointmentDate']).minus({hours: 4}).toISO()}}"

↓

Node: "Semble"
Resource: "Booking"
Action: "Get"
Booking ID: "{{$node['Semble Trigger'].json['id']}}"

↓

Node: "IF (Conditional)"
Condition: "{{$node['Semble'].json['confirmationStatus'] !== 'confirmed'}}"

↓ (If True)

Node: "Twilio SMS" (Final Reminder)
Message: |
  FINAL REMINDER: Appointment today at {{$node['Semble'].json['appointmentTime']}}. 

  Please confirm attendance or we may need to offer your slot to another patient.

  Confirm now: {{urgent_confirm_link}}
  Cancel: {{cancel_link}}

Cancelled Appointment Management

Scenario: Handle appointment cancellations with automatic waiting list processing and revenue recovery.

Workflow Process

Trigger: Appointment Cancelled
↓
Send Cancellation Confirmation
↓
Check Waiting List
↓
Offer Slot to Waiting Patients
↓
Process Refunds if Applicable
↓
Update Analytics

Implementation

1. Cancellation Trigger
Node: "Semble Trigger"
Resource: "Booking"
Event: "Updates Only"
Poll Interval: "Every 10 minutes"
Date Period: "Next 30 days"
Filters:
  status_changed_to: "Cancelled"
2. Cancellation Confirmation
Node: "Send Email"
To: "{{$node['Semble Trigger'].json['patient']['email']}}"
Subject: "Appointment Cancellation Confirmed"
Template: |
  Dear {{$node['Semble Trigger'].json['patient']['firstName']}},

  Your appointment has been successfully cancelled:

  📅 Original Date: {{$node['Semble Trigger'].json['appointmentDate']}}
  🕐 Original Time: {{$node['Semble Trigger'].json['appointmentTime']}}
  👨‍⚕️ Provider: {{$node['Semble Trigger'].json['staff']['firstName']}} {{$node['Semble Trigger'].json['staff']['lastName']}}

  Cancellation Details:
  - Cancelled: {{DateTime.now().toFormat('MMM d, yyyy HH:mm')}}
  - Reason: {{$node['Semble Trigger'].json['cancellationReason'] || 'Not specified'}}

  {{#if refund_applicable}}
  💰 Refund: A refund of £{{$node['Semble Trigger'].json['fee']}} will be processed within 3-5 business days.
  {{/if}}

  Need to reschedule? Book online: {{booking_link}}

  We hope to see you again soon!
3. Waiting List Processing
Node: "HTTP Request" (Get Waiting List)
Method: "GET"
URL: "{{practice_api}}/waiting-list"
Query:
  appointment_type: "{{$node['Semble Trigger'].json['appointmentTypeId']}}"
  staff_id: "{{$node['Semble Trigger'].json['staffId']}}"
  date_preference: "{{$node['Semble Trigger'].json['appointmentDate']}}"

↓

Node: "Function" (Process Waiting List)
Code: |
  // Sort waiting list by priority and date added
  const waitingList = $node['HTTP Request'].json;
  const sortedList = waitingList
    .filter(patient => patient.available_dates.includes('{{$node['Semble Trigger'].json['appointmentDate']}}'))
    .sort((a, b) => {
      if (a.priority !== b.priority) return b.priority - a.priority;
      return new Date(a.date_added) - new Date(b.date_added);
    });

  return sortedList.slice(0, 3); // Top 3 candidates

↓

Node: "Send Email" (Waiting List Offer)
To: "{{$item.email}}"
Subject: "Appointment Available - {{DateTime.fromISO($node['Semble Trigger'].json['appointmentDate']).toFormat('MMM d')}}"
Template: |
  Good news {{$item.first_name}}!

  An appointment slot has become available:

  📅 Date: {{DateTime.fromISO($node['Semble Trigger'].json['appointmentDate']).toFormat('EEEE, MMMM d, yyyy')}}
  🕐 Time: {{$node['Semble Trigger'].json['appointmentTime']}}
  👨‍⚕️ Provider: {{$node['Semble Trigger'].json['staff']['firstName']}} {{$node['Semble Trigger'].json['staff']['lastName']}}
  📍 Type: {{$node['Semble Trigger'].json['appointmentType']['name']}}

  This appointment is available on a first-come, first-served basis.

  🎯 Book immediately: {{priority_booking_link}}&token={{$item.priority_token}}

  ⏰ This offer expires in 2 hours or when the slot is filled.

  Want to remain on the waiting list? No action needed.

Inventory Management Automation

Scenario: Monitor product stock levels and automate reordering with supplier integration.

Workflow Logic

Trigger: Product Stock Update
↓
Check Stock Levels
↓
Generate Reorder Alerts
↓
Create Purchase Orders
↓
Notify Suppliers
↓
Track Delivery

Implementation

1. Stock Level Trigger
Node: "Semble Trigger"
Resource: "Product"
Event: "Updates Only"
Poll Interval: "Every 1 hour"
Date Period: "Last 2 hours"
Filters:
  stock_tracked: true
  status: "Active"
2. Stock Analysis
Node: "Function" (Analyze Stock)
Code: |
  const items = $input.all();
  const lowStockItems = [];

  items.forEach(item => {
    const product = item.json;

    // Check if stock is below minimum
    if (product.currentStock <= product.minimumStock) {
      const daysUntilEmpty = Math.floor(product.currentStock / (product.averageDailyUsage || 1));

      lowStockItems.push({
        ...product,
        reorderUrgency: daysUntilEmpty <= 3 ? 'urgent' : 'standard',
        daysUntilEmpty: daysUntilEmpty,
        suggestedOrderQuantity: product.maximumStock - product.currentStock,
        preferredSupplier: product.suppliers[0] // Primary supplier
      });
    }
  });

  return lowStockItems;
3. Urgent Stock Alerts
Node: "IF" (Check Urgency)
Condition: "{{$json.reorderUrgency === 'urgent'}}"

↓ (If True)

Node: "Slack/Teams Alert"
Channel: "#inventory-urgent"
Message: |
  🚨 **URGENT STOCK ALERT** 🚨

  **Product**: {{$json.name}} ({{$json.code}})
  **Current Stock**: {{$json.currentStock}} {{$json.unitOfMeasure}}
  **Days Until Empty**: {{$json.daysUntilEmpty}}
  **Suggested Order**: {{$json.suggestedOrderQuantity}} {{$json.unitOfMeasure}}

  **Supplier**: {{$json.preferredSupplier.name}}
  **Lead Time**: {{$json.preferredSupplier.leadTime}} days
  **Cost**: £{{$json.preferredSupplier.cost}} per {{$json.unitOfMeasure}}

  @channel Please action immediately! 📞
4. Purchase Order Generation
Node: "HTTP Request" (Create PO)
Method: "POST"  
URL: "{{inventory_system_api}}/purchase-orders"
Body:
  supplier_id: "{{$json.preferredSupplier.id}}"
  urgent: "{{$json.reorderUrgency === 'urgent'}}"
  items:
    - product_code: "{{$json.code}}"
      supplier_code: "{{$json.preferredSupplier.productCode}}"
      quantity: "{{$json.suggestedOrderQuantity}}"
      unit_cost: "{{$json.preferredSupplier.cost}}"
      total_cost: "{{$json.suggestedOrderQuantity * $json.preferredSupplier.cost}}"
  delivery_address: "{{practice_address}}"
  requested_delivery: "{{DateTime.now().plus({days: $json.preferredSupplier.leadTime}).toISO()}}"
  notes: "Auto-generated reorder - Stock level: {{$json.currentStock}}"
5. Supplier Notification
Node: "Send Email"
To: "{{$json.preferredSupplier.contactEmail}}"
Subject: "Purchase Order #{{$node['HTTP Request'].json.po_number}} - {{$json.reorderUrgency === 'urgent' ? 'URGENT' : 'Standard'}} Order"
Template: |
  Dear {{$json.preferredSupplier.contactName}},

  We have generated a new purchase order:

  **PO Number**: {{$node['HTTP Request'].json.po_number}}
  **Priority**: {{$json.reorderUrgency === 'urgent' ? '🚨 URGENT' : '📦 Standard'}}

  **Order Details**:
  - Product: {{$json.name}}
  - Your Code: {{$json.preferredSupplier.productCode}}
  - Quantity: {{$json.suggestedOrderQuantity}} {{$json.unitOfMeasure}}
  - Unit Price: £{{$json.preferredSupplier.cost}}
  - Total: £{{$json.suggestedOrderQuantity * $json.preferredSupplier.cost}}

  **Delivery**:
  - Address: {{practice_address}}
  - Requested: {{DateTime.now().plus({days: $json.preferredSupplier.leadTime}).toFormat('MMM d, yyyy')}}
  - {{$json.reorderUrgency === 'urgent' ? 'Please expedite - critical stock level!' : 'Standard delivery timeline acceptable'}}

  **Payment**: As per agreed terms ({{$json.preferredSupplier.paymentTerms || '30 days net'}})

  Please confirm receipt and estimated delivery date.

  Best regards,
  Practice Manager
  {{practice_name}}

Revenue Optimization Workflow

Scenario: Monitor appointment patterns and optimize scheduling for maximum revenue and efficiency.

Analytics Process

Daily Revenue Analysis
↓
Identify Underutilized Slots
↓
Dynamic Pricing Adjustments
↓
Promotional Campaign Triggers
↓
Performance Reporting

Implementation

1. Daily Analytics Trigger
Node: "Schedule Trigger"
Rule: "0 6 * * *" (Daily at 6 AM)

↓

Node: "Semble" (Get Yesterday's Bookings)
Resource: "Booking"
Action: "Get All"
Date Filter: "Yesterday"
Return All: true
2. Revenue Analysis
Node: "Function" (Calculate Metrics)
Code: |
  const bookings = $node['Semble'].json;
  const today = DateTime.now();
  const yesterday = today.minus({days: 1});

  // Calculate key metrics
  const totalRevenue = bookings
    .filter(b => b.status === 'Completed')
    .reduce((sum, b) => sum + (b.fee || 0), 0);

  const totalSlots = 48; // 8 hours * 6 slots per hour
  const bookedSlots = bookings.filter(b => b.status !== 'Cancelled').length;
  const utilizationRate = (bookedSlots / totalSlots) * 100;

  const noShowRate = (bookings.filter(b => b.status === 'No Show').length / bookedSlots) * 100;
  const cancellationRate = (bookings.filter(b => b.status === 'Cancelled').length / bookings.length) * 100;

  // Identify patterns
  const hourlyUtilization = {};
  bookings.forEach(booking => {
    const hour = DateTime.fromISO(booking.appointmentTime).hour;
    hourlyUtilization[hour] = (hourlyUtilization[hour] || 0) + 1;
  });

  const underutilizedHours = Object.entries(hourlyUtilization)
    .filter(([hour, count]) => count < 4) // Less than 67% utilization
    .map(([hour]) => parseInt(hour));

  return {
    date: yesterday.toISODate(),
    totalRevenue,
    utilizationRate,
    noShowRate,
    cancellationRate,
    bookedSlots,
    totalSlots,
    underutilizedHours,
    recommendedActions: {
      increasePricing: utilizationRate > 90,
      decreasePricing: utilizationRate < 60,
      targetOffPeakPromotion: underutilizedHours.length > 0,
      improveNoShowPrevention: noShowRate > 10
    }
  };
3. Dynamic Pricing Alerts
Node: "IF" (High Utilization)
Condition: "{{$json.utilizationRate > 90}}"

↓ (If True)

Node: "Send Email" (Revenue Team)
To: "revenue@practice.com"
Subject: "High Demand Alert - Consider Premium Pricing"
Template: |
  📈 **HIGH UTILIZATION DETECTED**

  **Date**: {{$json.date}}
  **Utilization**: {{Math.round($json.utilizationRate)}}%
  **Revenue**: £{{$json.totalRevenue}}

  **Recommendation**: Consider implementing premium pricing for peak hours

  **Actions to Consider**:
  - Increase prices by 10-15% for tomorrow
  - Offer earlier/later appointment slots
  - Promote package deals to spread demand

  **Next Steps**: Review pricing strategy for similar high-demand patterns.
4. Off-Peak Promotion Trigger
Node: "IF" (Low Utilization)
Condition: "{{$json.utilizationRate < 60}}"

↓ (If True)

Node: "Mailchimp" (Promotional Campaign)
Operation: "Create Campaign"
Type: "regular"
Subject: "Special Offer - 20% Off Off-Peak Appointments"
Template: |
  We have some great appointment availability!

  🎯 **20% OFF** appointments between {{$json.underutilizedHours.join(', ')}}:00

  **Available This Week**:
  {{#each available_slots}}
  - {{date}} at {{time}} - £{{discounted_price}} (was £{{original_price}})
  {{/each}}

  Perfect for:
  ✅ Regular check-ups
  ✅ Follow-up consultations  
  ✅ Health assessments

  Book online: {{booking_link}}?promo=OFFPEAK20

  *Offer valid for bookings made within 48 hours*

Recipients: "low_frequency_patients"
Send Immediately: true

🎯 Industry-Specific Workflows

NHS Integration Workflows

NHS Number Verification

Trigger: New Patient Registration
↓
Validate NHS Number Format
↓
Query NHS Demographics Service
↓
Update Patient Record
↓
Generate Compliance Report

GP Referral Processing

Trigger: New Booking (Referral Type)
↓
Validate Referral Letter
↓
Extract Clinical Information
↓
Schedule Priority Appointment
↓
Notify Referring GP
↓
Update NHS Systems

Private Practice Workflows

Insurance Verification

Trigger: New Private Patient
↓
Verify Insurance Coverage
↓
Check Pre-authorization
↓
Calculate Patient Liability
↓
Send Coverage Summary
↓
Update Billing System

Corporate Health Packages

Trigger: Employee Health Booking
↓
Validate Corporate Account
↓
Apply Package Pricing
↓
Schedule Comprehensive Screen
↓
Prepare Executive Summary
↓
Bill Corporate Account

Specialist Clinic Workflows

Procedure Scheduling

Trigger: Procedure Booking
↓
Check Pre-procedure Requirements
↓
Schedule Pre-op Assessment
↓
Send Preparation Instructions
↓
Coordinate Theatre Booking
↓
Arrange Follow-up Care

Multi-disciplinary Team Coordination

Trigger: Complex Case Booking
↓
Identify Required Specialists
↓
Coordinate Availability
↓
Schedule Team Meeting
↓
Prepare Case Summary
↓
Distribute Meeting Notes

🔧 Utility Workflows

Data Synchronization

Master Data Management

Schedule: Daily at 2 AM
↓
Export Semble Data
↓
Transform to Standard Format
↓
Update Master Database
↓
Sync to All Systems
↓
Generate Sync Report

Backup and Recovery

Schedule: Weekly
↓
Full Data Export
↓
Encrypt and Compress
↓
Upload to Cloud Storage
↓
Verify Backup Integrity
↓
Clean Old Backups

Compliance Workflows

GDPR Data Requests

Trigger: Data Subject Access Request
↓
Compile All Patient Data
↓
Anonymize Third-party References
↓
Generate Portable Format
↓
Secure Delivery to Patient
↓
Log Compliance Activity

Audit Trail Generation

Schedule: Monthly
↓
Extract Activity Logs
↓
Analyze Access Patterns
↓
Identify Anomalies
↓
Generate Audit Report
↓
Archive Historical Data

📊 Reporting Workflows

Performance Analytics

Daily Dashboard Update

Schedule: Every hour during business hours
↓
Collect Real-time Metrics
↓
Calculate KPIs
↓
Update Dashboard Display
↓
Send Alerts if Needed
↓
Log Performance Data

Monthly Business Review

Schedule: 1st of every month
↓
Compile Monthly Statistics
↓
Generate Revenue Analysis
↓
Create Utilization Reports
↓
Analyze Patient Trends
↓
Distribute to Management

Clinical Reporting

Quality Metrics

Schedule: Weekly
↓
Calculate Clinical Indicators
↓
Measure Patient Outcomes
↓
Track Adherence Rates
↓
Generate Quality Report
↓
Submit to Regulators

Safety Monitoring

Trigger: Incident Reported
↓
Classify Incident Type
↓
Assess Risk Level
↓
Notify Relevant Teams
↓
Track Resolution
↓
Update Safety Database

🚀 Advanced Automation

AI-Powered Workflows

Intelligent Scheduling

Trigger: Booking Request
↓
Analyze Patient History
↓
Predict Appointment Duration
↓
Optimize Staff Assignment
↓
Suggest Best Time Slots
↓
Auto-book if Confidence High

Predictive Analytics

Schedule: Daily
↓
Analyze Historical Patterns
↓
Predict No-show Probability
↓
Forecast Demand
↓
Optimize Resource Allocation
↓
Generate Predictions Report

Integration Orchestration

Multi-system Workflow

Trigger: Complex Business Event
↓
Coordinate Multiple Systems
↓
Handle Cross-system Dependencies
↓
Implement Rollback Logic
↓
Monitor All Components
↓
Report Success/Failure

Event-driven Architecture

Event Bus: Central coordination
↓
Route Events to Handlers
↓
Process in Parallel
↓
Aggregate Results
↓
Trigger Next Workflow Stage
↓
Update Event Log

📋 Implementation Checklist

Pre-deployment

  • Test with sample data
  • Verify API permissions
  • Configure error handling
  • Set up monitoring
  • Create documentation

Deployment

  • Deploy to staging
  • Run integration tests
  • Monitor initial execution
  • Deploy to production
  • Verify all connections

Post-deployment

  • Monitor performance
  • Collect user feedback
  • Optimize workflows
  • Update documentation
  • Plan enhancements

🆘 Troubleshooting Quick Reference

Common Issues

Workflow Not Triggering:
  - Check trigger configuration
  - Verify API credentials
  - Review date periods
  - Test manual execution

Data Synchronization Problems:
  - Validate data mappings
  - Check field compatibility
  - Review transformation logic
  - Monitor error logs

Performance Issues:
  - Optimize data queries
  - Reduce batch sizes
  - Implement caching
  - Scale infrastructure

Error Recovery

Failed Workflow Steps:
  1. Identify failure point
  2. Check error messages
  3. Verify input data
  4. Test individual nodes
  5. Implement retry logic

Data Corruption:
  1. Stop affected workflows
  2. Assess damage scope
  3. Restore from backup
  4. Re-process lost data
  5. Validate data integrity

Next Steps

Ready to implement these workflows? Check out:


Questions? Join our community discussions or contact support for workflow consultation.