Client Date Trigger¶
Overview¶
The Client Date Trigger automatically runs workflows based on dates stored in your contacts' custom fields. This is perfect for birthday emails, renewal reminders, anniversary messages, subscription expirations, and any date-based automation tied to individual contacts.
When to use this trigger:
- Send birthday wishes automatically
- Remind customers of upcoming renewals
- Send anniversary/milestone emails
- Alert before contract expirations
- Follow up X days after a purchase
- Trigger actions on custom date fields
Quick Start¶
- Ensure you have a date custom field in your CRM
- Create a new workflow
- Add a Client Date Trigger as the first task
- Select the date field to monitor
- Configure when to trigger (on date, before, after)
- Set the time to run
- Save and enable the workflow
[SCREENSHOT NEEDED: Client Date Trigger task panel showing date field selection]
Date Field Configuration¶
Setting Up Date Custom Fields¶
Before using Client Date Triggers, you need date custom fields in your CRM:
- Go to CRM Settings → Custom Fields
- Create a new custom field
- Set type to "Date"
- Name it clearly (e.g.,
renewal_date,birthday,contract_end)
Common Date Fields: - birthday - Contact's birth date - renewal_date - Subscription/contract renewal date - anniversary_date - Customer anniversary - contract_end_date - When contract expires - last_purchase_date - Last transaction date - trial_end_date - When trial period ends
Trigger Timing Options¶
On the Date¶
Workflow runs on the exact date in the date field.
Configuration: - Date Field: Select which date field to monitor - Time: What time to run (e.g., 9:00 AM) - Timezone: Your timezone
Example: Send birthday email on the customer's birthday at 9:00 AM
Before the Date¶
Workflow runs X days/weeks before the date.
Configuration: - Date Field: Select which date field - Offset: How many days/weeks before - Time: What time to run - Timezone: Your timezone
Example: Send renewal reminder 30 days before contract expiration
After the Date¶
Workflow runs X days/weeks after the date.
Configuration: - Date Field: Select which date field - Offset: How many days/weeks after - Time: What time to run - Timezone: Your timezone
Example: Send follow-up survey 7 days after purchase
Output Fields¶
The Client Date Trigger outputs contact information and date context:
Contact Information¶
| Field | Description | Example Value |
|---|---|---|
task_[ID]_contact_id | Contact's unique ID | 12345 |
task_[ID]_first_name | Contact's first name | Sarah |
task_[ID]_last_name | Contact's last name | Johnson |
task_[ID]_email | Contact's email | sarah@example.com |
task_[ID]_phone | Contact's phone | +27123456789 |
task_[ID]_company | Company name | TechCorp |
Date Information¶
| Field | Description | Example Value |
|---|---|---|
task_[ID]_date_field | Which date field triggered | renewal_date |
task_[ID]_trigger_date | The actual date from contact | 2024-02-08 |
task_[ID]_current_date | Today's date | 2024-01-09 |
task_[ID]_days_until | Days until trigger date (negative if past) | 30 |
task_[ID]_trigger_type | When workflow ran (on/before/after) | before |
Custom Fields¶
All contact custom fields are accessible:
{{task_49123_custom_subscription_type}}
{{task_49123_custom_renewal_amount}}
{{task_49123_custom_account_manager}}
Accessing the Date Field Value:
If monitoring renewal_date:
Real-World Examples¶
Example 1: Birthday Email Campaign¶
Trigger: On the date of birthday field at 8:00 AM
Workflow: 1. Client Date Trigger - On birthday 2. Email - Send personalized birthday email with discount code
Email Template:
Happy Birthday, {{task_49123_first_name}}! 🎉
To celebrate, here's a special 15% discount code: BDAY2024
Valid for 7 days. Enjoy your special day!
[SCREENSHOT NEEDED: Workflow canvas showing birthday automation]
Example 2: Subscription Renewal Reminder¶
Trigger: 30 days before renewal_date at 10:00 AM
Workflow: 1. Client Date Trigger - 30 days before renewal_date 2. Email - Send renewal reminder 3. Delay - Wait 14 days 4. If Task - Check if renewed (check custom field or tag) - Not renewed: Send second reminder - Renewed: Stop workflow
Example 3: Contract Expiration Alert¶
Trigger: 60 days before contract_end_date at 9:00 AM
Workflow: 1. Client Date Trigger - 60 days before contract end 2. Email - Notify account manager 3. Edit Client - Add "Renewal Due" tag 4. Delay - Wait 30 days 5. If Task - Check if contract renewed - Not renewed: Send escalation email to senior management - Renewed: Remove "Renewal Due" tag
Example 4: Customer Anniversary¶
Trigger: On the date of customer_anniversary at 9:00 AM
Workflow: 1. Client Date Trigger - On anniversary 2. Code Task - Calculate years as customer 3. Email - Send personalized anniversary email 4. If Task - Check if special milestone (5, 10, 20 years) - Special milestone: Send gift card or special offer - Regular anniversary: Send thank you message
Code Task Example:
const anniversaryDate = results['task_49123_custom_customer_anniversary'];
const today = new Date();
const firstDate = new Date(anniversaryDate);
const years = today.getFullYear() - firstDate.getFullYear();
return {
years_as_customer: years,
is_milestone: [5, 10, 15, 20, 25].includes(years)
};
Example 5: Trial Expiration Follow-up¶
Trigger: 1 day after trial_end_date at 10:00 AM
Workflow: 1. Client Date Trigger - 1 day after trial_end_date 2. If Task - Check if converted to paid (check status field) - Not converted: - Email - Send conversion offer - Edit Client - Add "Trial Expired" tag - Converted: - Email - Send welcome as paid customer - Edit Client - Add "Paid Customer" tag
Multiple Reminders¶
For complex date-based automations, you may want multiple reminders. Create separate workflows:
Renewal Example:
Workflow 1: 60 days before renewal - Client Date Trigger - 60 days before - Email - First reminder with early bird discount
Workflow 2: 30 days before renewal - Client Date Trigger - 30 days before - Email - Second reminder
Workflow 3: 7 days before renewal - Client Date Trigger - 7 days before - Email - Urgent reminder
Workflow 4: On renewal date - Client Date Trigger - On date - If Task - Check if renewed - Not renewed: Send "last chance" email and alert team
Handling Missing Dates¶
Not all contacts will have values for every date field. Add validation:
Check if Date Exists¶
At workflow start, add an If task:
Set Default Behavior¶
If date is missing, decide what to do: - Stop workflow (do nothing) - Send different email - Alert team to update data
[SCREENSHOT NEEDED: If task checking for empty date field]
Timezone Considerations¶
Client Date Triggers use your configured timezone. Important notes:
- All contacts trigger at the same time (e.g., 9:00 AM in YOUR timezone)
- If you have global customers, everyone gets emails at 9:00 AM your time (which might be 3:00 AM their time)
- For better UX, consider:
- Sending at universally acceptable times (e.g., 10:00 AM)
- Creating separate workflows for different timezone regions
- Storing customer timezone in custom field and checking before sending
Best Practices¶
✅ Do's¶
- Use clear date field names: Name fields descriptively (e.g.,
subscription_renewal_datenotdate1) - Handle missing dates: Add If tasks to check date fields exist
- Consider timezones: Send at reasonable times for your audience
- Test with real dates: Create test contacts with upcoming dates
- Add multiple touchpoints: Create series of reminders (60, 30, 7 days before)
- Update dates after actions: If customer renews, update renewal_date
- Track which emails sent: Add tags like "Birthday Email Sent 2024"
❌ Don'ts¶
- Don't forget to update dates: Keep date fields current
- Don't send too many reminders: Space them reasonably
- Don't ignore timezones: Consider your global audience
- Don't hardcode years: Use current year dynamically
- Don't assume dates are always set: Always validate
Troubleshooting¶
Workflow Not Triggering¶
Possible Causes: - Date field is empty for contacts - Workflow is disabled - Date field configuration incorrect - Date has already passed
Solutions: 1. Check contacts have values in the date field 2. Verify workflow toggle is ON 3. Confirm date field selection is correct 4. For testing, set date field to future dates
Triggering for All Contacts at Once¶
Cause: Many contacts have the same date
This is normal for: - Imported contacts with placeholder dates - Mass contract renewals
Solution: Stagger dates or add conditions to limit volume
Emails Sent at Wrong Time¶
Cause: Timezone misconfiguration
Solution: Check timezone setting in trigger configuration matches your desired timezone
Trigger Ran Yesterday/Tomorrow Instead of Today¶
Possible Causes: - Date format issue (US vs. international format) - Timezone offset
Solutions: 1. Verify date format in custom field (YYYY-MM-DD recommended) 2. Check timezone setting 3. Test with a known date
Advanced Patterns¶
Dynamic Date Calculation¶
Calculate dates based on other dates:
// If you have purchase_date and want to trigger 30 days later
const purchaseDate = new Date(results['task_49123_custom_purchase_date']);
const followUpDate = new Date(purchaseDate);
followUpDate.setDate(followUpDate.getDate() + 30);
return {
follow_up_date: followUpDate.toISOString().split('T')[0]
};
Recurring Annual Triggers¶
For dates like birthdays that recur annually, the system automatically checks the current year. No special configuration needed.
Conditional Date-Based Actions¶
Different actions based on how far in the future the date is:
- Client Date Trigger - 30 days before renewal
- Code Task - Calculate contract value
- If Task - Check contract value
- High value (>$10,000): Assign to senior account manager
- Medium value (\(1,000-\)10,000): Standard renewal email
- Low value (<$1,000): Automated renewal offer
Multi-Date Coordination¶
If you need to check multiple dates:
- Client Date Trigger - Before renewal_date
- Code Task - Check other date fields
- If Task - Determine which action based on multiple dates
const renewalDate = new Date(results['task_49123_custom_renewal_date']);
const contractDate = new Date(results['task_49123_custom_contract_start_date']);
const daysSinceStart = Math.floor((renewalDate - contractDate) / (1000 * 60 * 60 * 24));
return {
contract_length_days: daysSinceStart,
is_first_renewal: daysSinceStart <= 370 // ~1 year
};
Frequently Asked Questions¶
Can I trigger on multiple date fields in one workflow?¶
No, each Client Date Trigger monitors one date field. Create separate workflows for different date fields.
What happens if I update a contact's date after the trigger already ran?¶
The workflow won't run again for that date. Client Date Triggers run once per contact per matching date.
Can I trigger multiple times for the same date (e.g., 30 days before AND 7 days before)?¶
No, create separate workflows for each timing. Each workflow can have its own Client Date Trigger with different offsets.
What date format should I use?¶
Use YYYY-MM-DD format (e.g., 2024-02-08) for consistency and reliability.
How do I test without waiting for the actual date?¶
Set a contact's date field to tomorrow or a few days in the future, then check execution history when that date arrives.
Can I trigger on relative dates (e.g., "30 days after contact was created")?¶
Not directly. Instead: 1. When creating contact, calculate the date and store in custom field 2. Use Client Date Trigger on that field
Or use a CRM Trigger (contact created) with delays.
What happens for leap years and February 29 birthdays?¶
The system handles leap years correctly. For Feb 29 birthdays, the workflow triggers on Feb 28 in non-leap years.
Can I trigger only for specific contacts (e.g., only paying customers)?¶
Yes, add an If task at the workflow start:
How do I prevent duplicate triggers if I run multiple tests?¶
Client Date Triggers run once per date per contact. If you need to test multiple times, change the date field value between tests.
Next Steps: - Timer Trigger - Time-based automation - CRM Trigger - Event-based automation - Edit Client Task - Update contact data