Guest Automations
Automate guest communications and key management based on schedules or events. Guest automations ensure timely, consistent outreach without manual intervention.
Overview
HelloShift supports two types of guest automations:
Type | When | Example |
Scheduled Jobs | Time-based (daily at specific hour) | Pre-arrival message at noon day before |
Event Triggers | Guest lifecycle event | Welcome SMS on check-in |
Accessing Automations
Scheduled Jobs
Go to Automation > Scheduled Jobs
Select the tab for automation type:
Message - SMS/Email/WhatsApp automations
Key - Smart lock access code automations
Room - Cleaning task automations
Click New Job to create an automation
Event Triggers
Go to Automation > Triggers
View existing triggers
Click New Trigger to create one

Automation Types
HelloShift has three automation categories:
Category | Purpose | Trigger Type |
Message | Send SMS/Email/WhatsApp to guests | Scheduled |
Key | Issue or revoke smart lock access | Scheduled or Event |
Room | Update room status or create cleaning tasks | Scheduled or Event |
See Room & Cleaning Automations for room-specific automations.
Part 1: Scheduled Message Automations
Scheduled automations run daily at a specific time and send messages to guests matching certain conditions.
Creating a Message Automation
Step 1: Click New Job
Go to Automation > Scheduled Jobs > Message
Click New Job
Step 2: Configure the Automation
Field | Description |
Name | Descriptive name (e.g., "Pre-Arrival Welcome") |
Audience | Which guests to target |
Snippet | Message template to send |
Send Time | Time of day to send (in property timezone) |
Schedule | Recurrence pattern (daily, specific days) |
Check | Additional condition (optional) |
Channel | SMS, Email, or WhatsApp |
Status | Active or Inactive |
Step 3: Select Audience
Choose which guests receive the message:
Audience | Description |
Arriving Today | Guests with arrival date = today |
Arrived Yesterday | Guests who arrived yesterday (day 2 of stay) |
Arriving Tomorrow | Guests arriving the next day |
Arriving in X Days | Guests arriving in specified days |
In-House (Mid-Stay) | Guests currently staying (not arriving/departing) |
Departing Today | Guests with departure date = today |
Departing Tomorrow | Guests departing the next day |
Departing within X Days | Guests departing within specified days |
Departed Yesterday | Guests who checked out yesterday |
Departed X Days Ago | Guests who left specified days ago |
Step 4: Select Snippet
Choose which message template to send:
Click Select Snippet
Browse or search available snippets
Select the snippet to use
The snippet's variables are replaced with guest data when sent.
Step 5: Set Send Time
Enter the time of day to send messages (e.g., 12:00 PM, 09:00 AM).
Tips:
Pre-arrival: Send between 12-4 PM day before
Morning check-in reminder: Send at 9-10 AM
Post-checkout: Send 10 AM-12 PM day after
Step 6: Configure Schedule
Set when the automation runs:
Schedule | When It Runs |
Daily | Every day |
Weekly on [Day] | Specific day(s) of week |
Custom | Advanced recurrence patterns |
Step 7: Add Check (Optional)
Add a condition that must be true for the message to send:
Check | Description |
Always | No additional condition |
Gap Night | Only if there's a gap before arrival |
Guest Score > Cutoff | Only high-scoring guests |
Guest Score > Cutoff OR No Score | High-scoring or unscored guests |
Custom Condition (Liquid) | Write your own logic |
Step 8: Enable and Save
Set Status to Active
Click Save

Default Message Automations
HelloShift creates these automations when your site is set up:
Pre-Stay
Audience: Arriving Today
Send Time: 12:00 PM
Snippet: Pre-Stay welcome message
Purpose: Welcome guests before arrival
In-Stay
Audience: Arrived Yesterday
Send Time: 9:00 AM
Snippet: In-Stay satisfaction check
Purpose: "How's your stay?" on day 2
Post-Stay
Audience: Departing Today
Send Time: 12:00 PM
Snippet: Post-Stay thank you
Purpose: Thank guests and request reviews
Note: Default automations are created as Inactive. Enable them to start sending.
Common Message Automation Examples
Pre-Arrival Welcome (Day Before)
Setting | Value |
Name | Pre-Arrival Welcome |
Audience | Arriving Tomorrow |
Send Time | 2:00 PM |
Snippet | Pre-Stay |
Schedule | Daily |
Check-in Reminder (Morning of Arrival)
Setting | Value |
Name | Check-in Reminder |
Audience | Arriving Today |
Send Time | 10:00 AM |
Snippet | Pre-Checkin |
Schedule | Daily |
Mid-Stay Satisfaction Check
Setting | Value |
Name | Day 2 Check |
Audience | Arrived Yesterday |
Send Time | 10:00 AM |
Snippet | In-Stay |
Schedule | Daily |
Pre-Checkout Reminder
Setting | Value |
Name | Checkout Reminder |
Audience | Departing Tomorrow |
Send Time | 4:00 PM |
Snippet | Pre-Checkout |
Schedule | Daily |
Post-Stay Review Request
Setting | Value |
Name | Review Request |
Audience | Departed Yesterday |
Send Time | 10:00 AM |
Snippet | Post-Stay |
Schedule | Daily |
Gap Night Upsell
Setting | Value |
Name | Gap Night Offer |
Audience | Arriving in 2 Days |
Send Time | 2:00 PM |
Check | Gap Night |
Snippet | Gap Night Offer |
Custom Conditions with Liquid
For advanced filtering, use custom Liquid conditions.
Available Variables
Variable | Type | Description |
| Boolean | Arriving today? |
| Boolean | Departing today? |
| Boolean | Currently in-house? |
| Integer | Day of stay (0 = arrival) |
| Boolean | Payment collected? |
| Boolean | Terms signed? |
| Boolean | ID verified? |
| Boolean | Room cleaned? |
| Boolean | Gap before arrival? |
| Boolean | Score above cutoff? |
| String | Guest type/tier |
| Integer | Number of nights |
VIP Guests Only
{% if guest_stay.guest_type contains 'VIP' %}true{% else %}false{% endif %}
Long Stays (7+ nights)
{% assign nights = guest_stay.nights | plus: 0 %}
{% if nights >= 7 %}true{% else %}false{% endif %}
Direct Bookings Only
{% if guest_stay.booking_source == 'Direct' %}true{% else %}false{% endif %}
Excluding OTA Guests
{% unless guest_stay.booking_source contains 'Expedia' or guest_stay.booking_source contains 'Booking.com' %}true{% else %}false{% endunless %}
Day 3 of Stay (for mid-stay check)
{% if guest_stay.stay_day_number == 3 %}true{% else %}false{% endif %}
Part 2: Key Automations
Key automations manage smart lock access codes for guests.
Accessing Key Automations
Go to Automation > Scheduled Jobs > Key
View and manage key automations
Default Key Automations
Issue Key
Audience: Arriving Today
Send Time: 3:00 PM (check-in time)
Action: Issue access code and send to guest
Snippet: Send-Key (with room and code)
Revoke Key
Audience: Departing Today
Send Time: 11:00 AM (checkout time)
Action: Revoke guest access code
Key Automation Checks
Check | Description |
Always | Issue/revoke without conditions |
Payment Received | Only if payment collected |
Custom | Custom Liquid condition |
Key Automation Flow
Guest books room
At scheduled time on arrival day, Issue Key runs:
Generates unique access code via smart lock integration
Sends code to guest via SMS/Email
Guest uses code during stay
At scheduled time on departure day, Revoke Key runs:
Deactivates the access code
Part 3: Event-Based Triggers
Triggers respond to guest lifecycle events immediately (or after a delay).
Creating a Trigger
Go to Automation > Triggers
Click New Trigger
Configure the Trigger
Field | Description |
Name | Descriptive name |
Event | What triggers the action |
Condition | Additional filter (optional) |
Action | What happens when triggered |
Delay | Seconds to wait before executing |
Status | Active or Inactive |
Available Events
Event | When It Fires |
Guest Booking Confirmed | New reservation synced from PMS |
Booking Cancelled | Reservation cancelled |
Guest Checked In | Guest checks in at front desk |
Guest Checked Out | Guest checks out |
Guest Room Changed | Room number updated on reservation |
Guest Document Uploaded | ID/document uploaded during pre-checkin |
Guest ID Verified | Stripe identity verification passed |
Guest Payment Received | Payment collected during pre-checkin |
Guest Agreement Signed | Terms signed during pre-checkin |
Guest Pre-Checkin Completed | All pre-checkin steps completed |
Available Conditions
Condition | Description |
Always | No condition, always execute |
Guests Arriving Today | Only same-day arrivals |
Booking: Past Check-in Time | Booked after check-in time |
In-Stay Guests | Currently in-house |
Guests Departing Today | Same-day departures |
PreCheckin: Document Uploaded | Document on file |
PreCheckin: ID Verified | Stripe verification passed |
PreCheckin: Payment Received | Payment collected |
PreCheckin: Agreement Signed | Terms signed |
PreCheckin: ID, Payment & Agreement Verified | All steps complete |
Custom Condition (Liquid) | Custom logic |
Available Actions
Message Actions
Action | Description |
Send Post-Booking Snippet | Send Post-Booking template |
Send Post-Checkin Snippet | Send Post-Checkin template |
Send Post-Checkout Snippet | Send Post-Checkout template |
Key Actions
Action | Description |
Just Issue Key | Generate access code (no message) |
Issue & Send Key | Generate code and send to guest |
Revoke Key | Deactivate access code |
Room Actions
Action | Description |
Set Room Occupied/Clean | Mark room as occupied and clean |
Set Room Vacant/Dirty | Mark room as vacant and dirty |
Set Cleaning Task: Clean | Assign "Clean" task |
Set Default Cleaning Task | Assign room's default task |
Remove Cleaning Task | Clear task assignment |
Assign Default Cleaner | Assign room's default cleaner |
Notify Cleaner on Checkout | Send notification to cleaner |
Delay Setting
Add a delay before the action executes:
Delay | Use Case |
0 seconds | Immediate execution |
300 seconds (5 min) | Allow for processing |
1800 seconds (30 min) | Post-checkin follow-up |
3600 seconds (1 hour) | Delayed follow-up |
Default delays:
Post-Booking: 300 seconds (5 minutes)
Post-Checkin: 1800 seconds (30 minutes)
Post-Checkout: 3600 seconds (1 hour)
Default Triggers
HelloShift creates these system triggers:
Post-Booking Message
Event: Guest Booking Confirmed
Action: Send Post-Booking Snippet
Delay: 300 seconds
Post-Checkin Message
Event: Guest Checked In
Action: Send Post-Checkin Snippet
Delay: 1800 seconds
Post-Checkout Message
Event: Guest Checked Out
Action: Send Post-Checkout Snippet
Delay: 3600 seconds
Post-Booking Key
Event: Guest Booking Confirmed
Condition: Booking Past Check-in Time
Action: Issue & Send Key
Post-Cancel Key
Event: Booking Cancelled
Condition: In-Stay Guests
Action: Revoke Key
Post-Checkout Room
Event: Guest Checked Out
Action: Set Room Vacant/Dirty
Post-Cancel Room
Event: Booking Cancelled
Action: Remove Cleaning Task
Common Trigger Examples
Welcome SMS After Check-in
Setting | Value |
Event | Guest Checked In |
Condition | Always |
Action | Send Post-Checkin Snippet |
Delay | 1800 (30 minutes) |
Auto-Dirty on Checkout
Setting | Value |
Event | Guest Checked Out |
Condition | Always |
Action | Set Room Vacant/Dirty |
Delay | 0 (immediate) |
Issue Key on Booking (Walk-ins)
Setting | Value |
Event | Guest Booking Confirmed |
Condition | Booking Past Check-in Time |
Action | Issue & Send Key |
Delay | 0 (immediate) |
Revoke Key on Cancel
Setting | Value |
Event | Booking Cancelled |
Condition | Always |
Action | Revoke Key |
Delay | 0 (immediate) |
Assign Cleaner on Checkout
Setting | Value |
Event | Guest Checked Out |
Condition | Guests Departing Today |
Action | Assign Default Cleaner |
Delay | 300 (5 minutes) |
Managing Automations
Enabling/Disabling
Find the automation in the list
Click Edit
Change Status to Active or Inactive
Click Save
Testing Before Enabling
Keep automation Inactive
Use Preview feature to see which guests would receive messages
Review the matches
Enable when satisfied
Editing an Automation
Click Edit on the automation
Modify settings as needed
Click Save
Note: For triggers, Event and Action cannot be changed after creation.
Deleting an Automation
Click Delete on the automation
Confirm deletion
System automations cannot be deleted, only deactivated.
Per-Stay vs Per-Guest Messaging
By default, automations send one message per guest. For guests with multiple stays:
Mode | Behavior |
Per Guest (default) | One message for the first matching stay |
Per Stay | Separate message for each matching stay |
Enable "Per Stay" in automation settings if guests may have multiple reservations.
Best Practices
Timing
Pre-arrival: 24-48 hours before check-in
Morning of: 9-10 AM on arrival day
Post-checkin: 30 minutes to 1 hour after
Pre-checkout: Evening before departure
Post-stay: 10 AM-12 PM day after
Messaging Strategy
Pre-arrival - Welcome, check-in instructions
Arrival day - Check-in reminder, key code
Day 2 - "How's your stay?"
Pre-checkout - Reminder, late checkout offer
Post-stay - Thank you, review request
Avoid Over-Messaging
Maximum 3-4 automated messages per stay
Space messages at least 12 hours apart
Don't send during quiet hours (10 PM - 8 AM)
Segment by Guest Type
VIP guests: More personalized, earlier access
OTA guests: Basic communications
Direct bookers: Loyalty offers
Troubleshooting
Automation not firing
Verify automation is Active
Check audience filter matches guests
Verify send time has passed today
Review any conditions that might block
Guest not receiving message
Check guest has valid phone/email
Verify guest isn't marked "Do Not Send"
Check message channel matches guest's preferred channel
Review carrier/spam filtering
Check if WhatsApp failed and message was sent via email/SMS instead
Key not issued
Verify smart lock integration is configured
Check condition requirements (payment, etc.)
Verify room has lock assigned
Review integration logs
Wrong message content
Verify correct snippet is selected
Check variables have data (room number assigned, etc.)
Preview the message before sending
Message delivery failed
After a message is sent, check the delivery status indicator on each message:
Status | Meaning |
Processing | Message accepted, sending in progress |
Success | Message delivered to recipient |
Error | Message failed, canceled, or undelivered |
Note: Failed messages are logged but do not automatically retry.
WhatsApp message not delivered
HelloShift automatically falls back to SMS if WhatsApp delivery fails
Check if guest's WhatsApp status shows as invalid
Verify the guest has a valid phone number on file
Key automation condition failed
If a key automation's condition check fails (e.g., "Payment Received" not met):
An internal error message is added to the guest's conversation thread
Look for system message: "[Automation Name]: [Check Name] checks failed"
The key is not issued until the condition is satisfied
Related Articles
All About Guest Messaging - Complete messaging overview
Snippets & Templates - Message template configuration
Room & Cleaning Automations - Housekeeping automations
Smart Lock Integration - Key automation setup