If you offer replays for your events, or if you know you’re going to share some resources live in-chat once your event starts and you’d like latecomers to have easy access to them, a conditional pre-s in your event’s confirmation email is a nice way to reduce friction for registrants and attendees.
You could also use this guide to personalize emails in timed sales funnels, dripped course content delivery, and lead magnets.
To implement this strategy, you’ll use a custom field to store the date and time of the event (which you might already be doing if you have a recurring event or followed my guide on creating dynamic add-to-calendar links) and set up some conditional content based on the value of that custom field with Liquid.
This strategy requires that you update the onboarding automation for the event with the date and time of the upcoming event before:
your first broadcast email inviting subscribers to the event goes out,
you start sharing the link to the sign-up form,
and before you do any other promotional activity that would trigger your automation.
Alternatively, you could use the registration form to update the registrants’ custom field for the event and update the form each time before you promote the event. In this case, you’d want to add some custom CSS to the form to hide the custom field from subscribers.
Note: I don’t recommend using rules for this, because the actions for rules run asynchronously.
That means that even if the first action of a rule triggered by a form submission updates the subscriber’s custom field, and the second (or last!) action subscribes them to the event’s confirmation email sequence, there’s no guarantee that the custom field will be updated before the email hits their inbox.
Custom fields are not case-sensitive, and you’re welcome to use spaces, but do note that when you use your custom field for conditional formatting, or if you use Liquid to modify the value in an automation, you’ll have to replace spaces with underscores (i.e. First Name should be written as first_name).
2. Update the automation for the event
If your automation is currently live, pause the automation.
Note: While it is possible to update a subscriber's custom fields using rules, ConvertKit's visual automations are a much better option for automating email workflows.
Rules can be neither named, nor categorized, nor manually sorted in ConvertKit, and they are organized by creation date (descending). Things can get messy.
The trigger for the automation should be an event sign-up. This can be a form sign-up and/or a tag being added to the subscriber (if you're using one-click RSVP links in your invite emails, you can combine these triggers by updating the rule for the link trigger to also apply the tag when the requisite form is submitted).
Add a Set custom field Action as the first step of the automation, and select your newly created custom field as the field to update.
Set the value that the Action will update the field to with the date and time of your upcoming event. Remember that custom fields are stored as plain text, and ConvertKit doesn’t recognize them as dates, so you can’t perform any date-based logic using their values.
February 16 2025 12:00:00 EST
02/16/2025 12:00:00 EST
Feb 16 2025 12:00:00 EST
Important
Do not store event dates in the all-numeric day-month DD/MM/YYYY format, because they won’t be parsed properly.
You can, however, store dates in the written day-month format, if that’s what you prefer.
16 February 2025 will work.
16/02/2025 will not work.
The event time should use 24-hour notation (hh:mm:ss). Whether or not you include the seconds is up to you.
Definitely include the time zone your event is being held in.
12:00:00 EST for 12PM EST
16:30:00 EST for 4:30PM EST
04:30:00 EST for 4:30PM EST
4:30:00 EST for 4:30PM EST
4:30:00 for 4:30PM EST
Once you’ve selected the format for storing dates and times, you and your team should stick to it.
Now, after someone RSVPs to your event, they'll immediately have the date of the event added to their subscriber profile.
3. Format conditional content for the confirmation email with Liquid
There are plenty of instances where you might want to include conditional content for (e.g. providing bonuses or special offers to people who RSVP before a specific date), but we'll start by focusing on two key conditions:
You might already know that you can personalize emails by adding a subscriber's first name with Liquid by using {{ subscriber.first_name }}, or display specific content based on their tags using conditions like {% if subscriber.tags contains "Warm Lead" %} I've got a special offer just for you! {% endif %}, but you might not know that you can also create and assign variables in emails with Liquid, too.
By using the {% assign %} and {% capture %} tags, you can be more creative with how you modify custom field values and use the time an email is actually sent to a subscriber to your advantage.
3a. Set up your variables
Dates are stored as string values, but in order to compare them in a useful way, they need to be converted into number values by first using date: "%s" to format the date as the number of seconds elapsed since January 1, 1970 (still stored as a string value), and then converted into a number value by using plus: 0.0.
Set the time zone for event_starts to the time zone you're in.
Convert the captured value from a string to a number
{% assign time_now = email_sent | plus: 0.0 %}
You might be tempted to combine the previous step with this one and set it up so that the time is captured and converted into a number in one fell swoop, but it won't work.
3b. Set up your conditions
Check to see if the event is over:
{% if time_now >= event_over %}
Thanks for signing up! It looks like you've missed the live event, but no worries: you can watch the replay here.
Otherwise, check to see if the event is currently live:
{% elsif event_starts <= time_now and time_now < event_over %}
We're live! Click here to grab your copy of the worksheet, then join us at this link.
Close the control flow tags:
{% endif %}
4. Putting it all together
You're welcome to copy & paste the template below into your email sequence—just be sure to replace the time zone with your time zone (the time zone that the event is being held in), the duration with the duration of your event (in seconds!), and update the first {% assign %} tag with the name of the custom field you're storing the event date in.
{% assign event_starts = subscriber.your_custom_field | in_time_zone: "America/New York" | date: "%s" | plus: 0.0 %}
{% assign event_over = event_starts | plus: 5400.0 %}
{% capture email_sent %}{{ "now" | in_time_zone: "America/New York" | date: "%s" }}{% endcapture %}
{% assign time_now = email_sent | plus: 0.0 %}
{% if time_now >= event_over %}
Thanks for signing up! It looks like you've missed the live event, but no worries: you can watch the replay here.
{% elsif event_starts <= time_now and time_now < event_over %}
We're live! Click here to grab your copy of the worksheet, then join us at this link.
{% endif %}
5. Test your conditional content
If you don’t already have a dummy email address subscribed to your list for testing emails, either create one or subscribe to your own list.
Navigate to your subscriber profile and update the custom field for the event with the date of the upcoming event (formatted in the exact same way as you formatted it in the automation).
Then, either email yourself a preview of the confirmation email, or click the Preview as a subscriber button, and type your email address in the field that pops up below the button.
6. Publish your email sequence and activate the automation for the event
Remember to update whatever project or task template you have in place for your team to include a task to update the date in the automation before:
your first broadcast email inviting subscribers to the event goes out,
you start sharing the link to the sign-up form,
and before you do any other promotional activity that would trigger your automation.
Or otherwise, schedule reminders and/or tasks for yourself to do so.
Additional Notes
Here are some other ways you could utilize the custom field and variables that you set up to personalize your email(s):
Deliver an incentive or promotional offer as thanks for signing up for the event a certain amount of time in advance
{% assign event_starts = subscriber.your_custom_field | in_time_zone: "America/New York" | date: "%s" | plus: 0.0 %}
{% assign event_over = event_starts | plus: 5400.0 %}
{% capture email_sent %}{{ "now" | in_time_zone: "America/New York" | date: "%s" }}{% endcapture %}
{% assign time_now = email_sent | plus: 0.0 %}
{% assign time_until = event_starts | minus: time_now | divided_by: 3600 %}
{% if time_now >= event_over %}
Thanks for signing up! It looks like you've missed the live event, but no worries: you can watch the replay here.
{% elsif event_starts <= time_now and time_now < event_over %}
We're live! Click here to grab your copy of the worksheet, then join us at this link.
{% elsif time_until > 168 %}
Thanks for expressing your interest in working with me by registering for The Event Name a week in advance!
Please click here to schedule your free 30-minute strategy call with me.
{% endif %}
Display the amount of time remaining until the event starts as inline text on the day of the event
ConvertKit's implementation of Liquid can be a bit finnicky at times. For example, Liquid can generally be used to display the time zone of a date string by using either date: "%z" to display the UTC offset of a time (e.g. -0500 for Eastern Standard Time) or date: "%Z" to display the name of the time zone (sometimes abbreviated, sometimes not, depending on the platform). However, in all of the testing that I've done, even if you stick to a strict ISO 8601 format, ConvertKit won't display anything if you use date: "%Z", but it will, however, display the UTC offset if you use the lowercase counterpart of that filter.
If you'd like to include the time zone of the event in your emails, and you're sticking to a standard format for your dates with the time zone at the end preceded by a space, you can use this workaround:
{{ subscriber.your_custom_field | split: " " | last }}
This filter will take a date value such as February 16 2025 12:00:00 EST and split it up into an array: ["February","16","2025","12:00:00","EST"]. The spaces between the words have been discarded. The last filter returns the last item in the array ("EST").
Related Resources
If you have a recurring event that doesn't have a set date, or if you'd rather do a quick automation update than use an add-to-calendar link generator each time you host a recurring event (if you're not in the habit of sharing a calendar with your list), here's a guide for setting up add-to-calendar links for event registration confirmation emails that get updated based on a custom field for the event (which means you've already done half of the initial set-up!):