this window is simply too tiny

:'(

table of contents

How to use conditional content in ConvertKit to personalize event RSVP confirmation emails for late registrants

General Info

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.

Requirements
  • an automation for your event
  • a form for your event
  • a thank you page for RSVPs
  • copy for your sequence emails

Steps

1. Create a custom field to store the date of the event that the subscriber signed up for

Here’s a quick guide from ConvertKit that explains how to add custom fields to your subscribers.

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

  1. 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.

  2. 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:

  • Someone RSVPs after the event has started
  • Someone RSVPs after the event has ended

If you'd like to explore other use cases, or if you'd like some examples of how you can use conditional content, check out the Additional Notes section of this guide.

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.

Assign a variable for the time the event starts:

{% assign event_starts = subscriber.your_custom_field | in_time_zone: "America/New York" | date: "%s" | plus: 0.0 %}

Set the time zone for event_starts to the time zone you're in.

Get the time the event ends:

{% assign event_over = event_starts | plus: 5400.0 %}

The value of the number you'll add to the event date should be the duration of the event in seconds (e.g. 5400 seconds is 1.5 hours).

Capture the time the email is sent to the subscriber:

{% capture email_sent %}{{ "now" | in_time_zone: "America/New York" | date: "%s" }}{% endcapture %}

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
{% 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 %}
{% assign hours_until = time_until | floor %}
{% assign minutes_until = time_until | minus: hours_until | times: 60 | floor %}
{% if hours_until <= 24 and hours_until > 0 %}
The event will start in {{ hours_until }} hours and {{ minutes_until }} minutes.
{% endif %}
On time zones:

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").