Skip to content

Appointment reminder by SMS 24 hours before a booked meeting, opted-in contacts only

One of 565 written HubSpot workflow specs, by a collective of independent HubSpot consultants.

Free
Professional

Seat pricing: Professional edition. To build it, a GTM Seat or an Ops Seat (an Ops Seat cannot create marketing emails or sequences). Per-hub plans: Marketing Hub Professional.

Updated for HubSpot seat pricing
OutcomeA contact with a booked meeting gets one SMS reminder the day before, only if they opted in to SMS, and everyone else gets the same reminder by email.
Workflow mapmessaging-001
Next meeting start is known leads to Delay until 1 day before the meeting. Delay until 1 day before the meeting leads to Meeting still on and within 26 hours. Meeting still on and within 26 hours leads to No: Set channel to none and end; Yes: Opted in to SMS and marketing contact and US number. Opted in to SMS and marketing contact and US number leads to Yes: Send SMS reminder; No: Send email reminder and set channel email. Send SMS reminder leads to Stamp last SMS sent and channel sms. No Yes Yes No Next meeting start is known Delay until 1 day before the meeting Meeting still on and within 26 hours Set channel to none and end Opted in to SMS and marketing contact and US number Send SMS reminder Send email reminder and set channel email Stamp last SMS sent and channel sms
Next meeting start is known leads to Delay until 1 day before the meeting. Delay until 1 day before the meeting leads to Meeting still on and within 26 hours. Meeting still on and within 26 hours leads to No: Set channel to none and end; Yes: Opted in to SMS and marketing contact and US number. Opted in to SMS and marketing contact and US number leads to Yes: Send SMS reminder; No: Send email reminder and set channel email. Send SMS reminder leads to Stamp last SMS sent and channel sms. No Yes Yes No Next meeting start is known Delay until 1 day before the meeting Meeting still on and within 26 hours Set channel to none and end Opted in to SMS and marketing contact and US number Send SMS reminder Send email reminder and set channel email Stamp last SMS sent and channel sms

When to use it, when not to

Use it

  • Use it when no-shows cost time and the meeting start time is stored on the contact record.
  • Use it for contacts with a US mobile number who opted in to your SMS subscription type.

Skip it

  • Do not use it for contacts outside the US. Native Marketing SMS only reaches US numbers that start with +1 and contain 11 digits. For other countries, use the app action described in messaging-018.
  • Do not use it for meetings booked less than 24 hours ahead. The reminder would land right after the booking confirmation. The first branch filters those out.

Prerequisites

  • Marketing Hub Professional or Enterprise with the Marketing SMS Long Code Add-On or the Marketing SMS Short Code Add-On.
  • The business is registered to send SMS in the SMS settings.
  • An SMS subscription type in Settings > Communication preferences (see marketing-ops-006). Consent is captured upstream, see messaging-003.
  • A published SMS message named "Appointment reminder 24h". The body must include opt-out text. Text used here, 111 characters: [Brand]: reminder, your appointment is tomorrow. Details are in your confirmation email. Reply STOP to opt out.
  • A published automated email "Appointment reminder 24h (email)" for contacts who cannot receive the SMS.
  • Property: Next meeting start (internal name msg_next_meeting_start), object contact, field type date and time picker. Why: the Delay until date step counts back from it. (check in your portal: whether a default contact property holds the start time of the next booked meeting, or whether the scheduling tool or an integration must write msg_next_meeting_start)
  • Property: Last SMS sent at (internal name msg_last_sms_sent_at), object contact, field type date and time picker. Why: one stamp shared by every SMS fiche, read by the frequency cap in messaging-020.
  • Property: Last reminder channel (internal name msg_last_reminder_channel), object contact, field type dropdown select, options sms / email / none. Why: lets you report no-show rate per reminder channel.

Enrollment

Trigger typefilter-based, contact-based workflow.
CriteriaNext meeting start is known AND Next meeting start is after today.
Re-enrollmenton, when Next meeting start is known. A new booking starts a new reminder.
Suppressiona static list "Messaging - do not contact" if you keep one. Consent itself is checked in step 3, right before the send, not at enrollment.

Steps

  1. Delay until date: date property Next meeting start, 1 day before, same time of day.
  2. If/then branch: Next meeting start is still known AND is less than 26 hours from now.
    • If false: the meeting was cancelled, moved or booked too late. Set property value Last reminder channel = none. End.
  3. If true, If/then branch: SMS subscription type is opted in AND Marketing contact status is Marketing contact AND Mobile Phone Number starts with +1.
    • If true:
      • Send SMS message: published message "Appointment reminder 24h", recipient = enrolled contact.
      • Set property value: Last SMS sent at = date of step.
      • Set property value: Last reminder channel = sms.
    • If false:
      • Send email: "Appointment reminder 24h (email)".
      • Set property value: Last reminder channel = email.

Known pitfalls

  • Quiet hours are on by default for every SMS, workflows included. A meeting at 08:00 puts the reminder at 08:00 the day before, which can fall inside the quiet window. Check the window in the SMS settings and test with a meeting near its edge.
  • A contact must be opted in to the SMS subscription type AND be a marketing contact. Missing either one means no SMS. The branch in step 3 sends those contacts to email.
  • The action uses Mobile Phone Number and falls back to Phone Number when it is empty. A landline in Phone Number gets the send attempt. Run messaging-009 first so only clean mobile numbers pass.
  • A reschedule changes Next meeting start while the contact waits in step 1. (check in your portal: whether a Delay until date step recalculates when the date property changes while the contact is waiting in the delay) Step 2 exists so a moved meeting never gets a wrong reminder.
  • No reply handling exists natively. A contact who answers "I can't make it" gets no automated response and no trigger fires. Say so in the confirmation email, or use an app for two-way SMS.
  • The SMS body in this fiche has no personalization token on purpose. The meeting time lives in the confirmation email.

Test plan

  1. Create a test contact with a US mobile number in +1XXXXXXXXXX format, opted in to the SMS subscription type, set as a marketing contact.
  2. Set Next meeting start to tomorrow plus one hour. Confirm enrollment in the workflow history.
  3. When the delay ends, confirm the SMS arrives, Last SMS sent at is stamped and Last reminder channel = sms.
  4. Repeat with a contact who is not opted in. Confirm the email goes out and the channel reads email.
  5. Repeat with an opted-in contact, then clear Next meeting start during the delay. Confirm nothing is sent and the channel reads none.

The UAT script of this spec holds 5 cases: a negative case, one case per branch, the expected result of each and a sign-off sheet. It comes as Markdown and as a CSV for your spreadsheet.

Variants

  • Wait until: replace the fixed 24-hour offset with "Delay until event happens" on a confirmation form submission, with an expiration 24 hours before the meeting, and send the SMS only to contacts who did not confirm.
  • Second reminder 2 hours before the meeting for high-value meeting types. Check the frequency cap in messaging-020 first.
  • Outside the US: same structure with the app action from messaging-018 in place of Send SMS message.

Build spec

Build specYAML, swipe
trigger:
  type: filter-based
  object: contact
  criteria:
    - msg_next_meeting_start: is_known
    - msg_next_meeting_start: is_after today
  reenrollment: true
  reenrollment_property: msg_next_meeting_start
actions:
  - type: delay_until_date
    date_property: msg_next_meeting_start
    offset: -1_day
  - type: if_then_branch
    condition: msg_next_meeting_start_is_known and msg_next_meeting_start_less_than_26_hours_from_now
    if_false:
      - type: set_property_value
        property: msg_last_reminder_channel
        value: none
    if_true:
      - type: if_then_branch
        condition: sms_subscription_opted_in and marketing_contact_status_is_marketing and mobilephone_starts_with_plus_1
        if_true:
          - type: send_sms_message
            message: "Appointment reminder 24h"
            recipient: enrolled_contact
            installable: false
            manual_step: "Open the Send SMS message action and select the published SMS message 'Appointment reminder 24h'."
          - type: set_property_value
            property: msg_last_sms_sent_at
            value: current_datetime
          - type: set_property_value
            property: msg_last_reminder_channel
            value: sms
        if_false:
          - type: send_email
            email: "Appointment reminder 24h (email)"
          - type: set_property_value
            property: msg_last_reminder_channel
            value: email

Files and install

FileWhat it holds
PDF and MarkdownThe spec as you read it here, with the YAML build spec at the end.
Properties JSONCreates the fields in one API call.
Workflow JSONDocuments the build: the workflow in Automation API v4 format, switched off.
UAT scriptThe test cases, the expected results and a sign-off sheet, as Markdown and CSV.

Take the PDF and build it by hand. One-click install comes with a category pack or the full library.

Get the 12 free specs as a pack

Nothing deleted, enabled or enrolled.

messaging-001Spec version 2026-10

Read 12 complete specs before you pay.

One per category, same format as the paid ones. Email only, no card.

We email the link, then a short note when specs change. Nothing else.

All 12 free specs by email, no card.