Skip to content

Documentation

Airdate Upcoming Dates: setup guide

Airdate Upcoming Dates is a free HubSpot module. You type the dates of one course, workshop or event in it; visitors see the next ones, sorted, in their own time zone, each with what they can do right now: register, hurry ("3 seats left", "Registration closes in 2 days"), join the waitlist, or nothing because the date is full. Past and cancelled dates hide themselves.

It works on every HubSpot plan. No app to install, no database table, no outside script.

1. Install and add the module

  1. Install Airdate Upcoming Dates from the HubSpot Template Marketplace.
  2. Open a website page, landing page or blog post in the editor.
  3. In the Add panel, search for Airdate Upcoming Dates and drag it where you want the list.
  4. Type the name of the course or event, set the Registration button link, fill in one row of Dates per date, then publish.

A new module comes with three sample rows and no start dates. The editor gives them sample dates a few weeks ahead so the list never looks empty; on the live page, a row without a start is skipped. See "What shows in the editor" below.

2. Heading and name

  • Heading and Heading level (H2, H3 or H4): the title above the list. Leave the heading empty to show none.
  • Introduction: one line under the heading.
  • Course or event name: the name of the entry in the visitor's calendar and of the .ics file. When the list has no heading, screen readers also use it to name the list.

3. Dates

One row per date, up to 40. Type them in any order: the list sorts them by start.

  • Start: the first day and the start time. It is an exact moment; see "How time zones work" below.
  • Show the start time: on by default. Turn it off when only the day matters; the row then shows the day alone.
  • Last day (optional): for a date that runs over several days, such as a 3-day course. See "Dates over several days".
  • Place: a city, a campus or an address.
  • Online: adds the word set in Texts > Online next to the place.
  • Note: a short detail shown next to the place, such as "Evenings, 6 to 9 pm".
  • Seats left: optional. Leave it empty if you do not count seats. At or below the threshold set in Rules, the row shows "4 seats left". 0 means full.
  • Status: Automatic (the default: the status comes from the dates and seats), or forced: Full, Waitlist open, Registration closed, Cancelled (hidden).
  • Offer a waitlist when full: when the date is full, it shows "Waitlist open" and a "Join the waitlist" button instead of "Full".
  • Registration deadline (optional): when registration closes for this date. Without it, the deadline is the start, or the number of days set in Rules before it.
  • Registration link for this date (optional): a page, URL or email address for this date only. Without it, the link of the Registration button group is used.

4. Registration button

  • Button text: "Register" by default. The same text shows on every date. On a waitlist date, the button reads "Join the waitlist" (a field of the Texts group).
  • Link: your registration page or form. Each date can have its own link.

A date with no link at all (none of its own, none here) shows no button. The button shows on open dates, dates with an alert and waitlist dates; it hides on full and closed dates.

5. Calendar, duration and list settings

  • Add to calendar link on each date: on by default. Each date gets a link that downloads an .ics file. See "Calendar files" below.
  • Duration in calendars (minutes): from 15 to 1440, 60 by default. Used for dates with a start time and no last day.
  • Maximum dates shown: from 1 to 40, 6 by default. The count applies after past, cancelled and (if asked) full and closed dates are removed, so the list always shows the next ones.
  • Hide full and closed dates: off by default. Turn it on to show only dates people can still register for. Waitlist dates stay.
  • Show "Open" on dates with no alert: off by default, so only the dates that need attention carry a label. Turn it on to label every open date "Open".
  • Event time zone (optional): a time zone name such as Europe/London or America/New_York. Leave it empty to show every date in the visitor's own zone. See "How time zones work".
  • Search engines: off by default. Adds event data for Google and other search engines. See "Data for search engines".
  • Layout: Rows (a date tile with the day and month on the left of each row) or Compact rows (no tile, tighter spacing). Below 560 px wide, the button and the calendar link move under the text.

6. Rules

  • "Closes soon" alert, days before the deadline: from 0 to 60, 7 by default. Within that many days of the deadline, the date shows "Registration closes in 4 days", then "tomorrow", then "today". 0 turns the alert off.
  • "Seats left" alert from this number of seats: from 0 to 100, 5 by default. At or below it, the date shows "3 seats left" or "1 seat left". 0 turns the alert off (0 seats still means full).
  • Registration closes this many days before the start: from 0 to 90, 0 by default. Used for dates that have no deadline of their own. With 0, registration stays open until the start.

7. Texts

Every word the list shows is a field: Online, Open, the three "closes" messages ({n} stands for the number of days), "{n} seats left" and "1 seat left", Full, Waitlist open, Registration closed, the waitlist button, the calendar link, the message when no date is left ("New dates will be announced soon.") and the two time zone notes. Write them in your page's language. Dates and times follow the language of the page.

8. Appearance

In the Style tab: date tile and links, button and button text, text, secondary text, row background, borders, alert text and alert background (for "closes soon" and "seats left"), and corner radius (0 to 24 px). The module uses your theme's font.

How statuses are worked out

Each date gets one status, in the visitor's browser, when the page loads. The rules are checked in this order; the first one that applies wins:

  1. Cancelled: the date is hidden.
  2. Started or over: the date is hidden. A date leaves the list at its start time, including a date over several days.
  3. Full (status Full, or Seats left at 0): "Waitlist open" with a "Join the waitlist" button if Offer a waitlist when full is on; otherwise "Full", with no button and no calendar link.
  4. Waitlist (status Waitlist open): "Waitlist open" with a "Join the waitlist" button.
  5. Closed (status Registration closed, or the deadline has passed): "Registration closed", with no button and no calendar link.
  6. Few seats (Seats left at or below the threshold in Rules): "3 seats left" or "1 seat left".
  7. Closing soon (the deadline is within the number of days set in Rules): "Registration closes in 4 days", "Registration closes tomorrow" or "Registration closes today", counted in calendar days.
  8. Otherwise, open: no label, or "Open" if you asked for it.

Because "full" comes before "closed", a full date keeps its "Full" or "Waitlist open" label after its deadline, until it starts. The alerts use the colors set in Alert text and Alert background; full and closed rows lose their background and their date tile turns grey.

Seats are not counted for you: update Seats left as people register, or set the status to Full.

How time zones work

  • The Start field stores an exact moment, not a clock time. The list shows it in the visitor's own zone by default: a date at 3:30 AM in London reads "Mon, Jun 2, 2031 · 10:30 PM EDT" in New York, on the day before. The short zone name follows the time, and a note under the list says "Times are shown in your time zone."
  • Set the Event time zone for in-person dates, so every visitor sees the time and the day at the venue: "Tue, Jun 3, 2031 · 3:30 AM GMT+1". The note then reads "Times are local to the venue." If the zone name is not recognised, the visitor's zone is used and the note says so; in the editor, a yellow note also names the unknown zone.
  • For online dates, leave it empty: each visitor sees their own hour.
  • The zone note shows only when at least one date shows its time.
  • Check the spelling of the zone name: an unknown name is ignored and the visitor's zone is used.

Dates over several days

Pick the first day and time in Start and the last day in Last day. The row shows a range such as "Nov 5 – 7, 2031" (followed by the start time if Show the start time is on), and the date tile shows the first day. A last day earlier than the first is ignored. The date leaves the list when it starts, like any other.

Calendar files

The Add to calendar link downloads an .ics file named after the course and the day, such as data-analysis-with-sql-2031-03-14.ics. It opens in Apple Calendar, Outlook for desktop and most calendar apps, and can be imported into Google Calendar. The entry carries:

  • the Course or event name (the page title if it is empty);
  • the place, or the word "Online" for an online date with no place;
  • the registration link of the date, if there is one;
  • for a date with a start time and no last day, the start and the Duration in calendars, as an exact moment, so each guest's calendar shows their own hour;
  • for a date over several days, or with Show the start time off, whole days from the first to the last day.

The link hides on full and closed dates. The file includes the date's note as its description, and no reminder. For links that open Google Calendar, Outlook.com, Office 365 or Yahoo directly, with a reminder, use our free Airdate Add to Calendar module on the page of an event.

Data for search engines

Turn on Search engines > Add event data for search engines (schema.org) to describe each date to Google and other search engines, in the schema.org Event format they read. Nothing changes on the page itself. Each upcoming date shown in the list becomes one event with:

  • the Course or event name, the start, and an end from the Duration in calendars (on the last day for a date over several days);
  • the place as the venue, the registration link for an online date, or both for a date with a place that is also online;
  • the registration link, and the Description and Organizer if you fill them in (the description defaults to the introduction);
  • a price, only if you type a Price and a three-letter Currency such as GBP, marked sold out on full and waitlist dates;
  • cancelled dates still to come, marked as cancelled, so search engines drop them rather than keep an old date.

Past dates and the sample dates of the editor are never included. Keep it off if another tool on the page already describes the same events.

Google alone decides whether to show dates in its results, and when: the data makes it possible, not certain. Once the page is published, paste its address into Google's Rich Results Test (search.google.com/test/rich-results) to check that the events are read without error.

What shows in the editor

  • A row with no Start gets a sample date in the editor and in previews, a few weeks ahead (2, 5, 9 weeks and further, by its place in the list), at 9:30. Its seats, status and waitlist settings apply, so you can see each label before you type real dates.
  • On the live page, a row with no start is skipped. If no date is left, the heading and introduction stay, with the message "New dates will be announced soon."
  • Rows with a start in the past are hidden in the editor too.
  • Until a link is set in Registration button, the rows have no button and a yellow note says so in the editor.
  • The button shows only once a link is set in Registration button or on the date.

Accessibility

  • The dates are a real list, in a region named by its heading (or by the course name when there is no heading).
  • The date tile is decorative and hidden from screen readers; the full date is written out in text, in a <time> element with a machine-readable date.
  • Statuses are written in words, never shown by color alone.
  • The registration button and the calendar link are at least 44 px high. Every link has a visible focus outline.
  • Every row's button and calendar link also carry the date for screen readers ("Register – Wed, Oct 14, 2026 · 9:30 AM"), so the links can be told apart. Links that open a new tab say so.
  • The heading level is yours to choose, to fit the outline of the page.

Limits

  • One list per module, up to 40 dates. For several courses, add one module per course.
  • The dates are typed in the module. They are not synced with your CRM, HubDB or a registration tool, and seats are typed by hand.
  • No catalogue, no filters, no search: the module shows the dates of one course or event.
  • Statuses are worked out when the page loads. A page left open does not change until it is reloaded.
  • The calendar link offers one .ics file per date, with no reminder.
  • The button text is the same for every date; only the link can change per date.
  • The list is sorted and filtered in the browser: visitors need JavaScript turned on. Without it, the rows stay hidden (so past or full dates never show by mistake) and only the heading and introduction remain.

FAQ

Does it need Content Hub Pro?
No. It works on every HubSpot plan, including free.

Does it work in emails?
No. It works in website pages, landing pages and blog pages (posts and listing).

Do I need to remove past dates?
No. A date leaves the list at its start time, on cached pages too. You can delete old rows whenever you like.

Does it know which date a visitor picked?
No. The button opens your registration page. To tell dates apart, give each date its own link, for example to a separate form or a page address with the date in it.

Can I translate the labels?
Yes. All texts are fields, in the Texts group. Dates and times follow the language of the page.

Can I use it more than once on a page?
Yes. Each module has its own dates and settings.

Texts in French, German and Spanish

Every word the module shows is a field. To use the module on a page in another language, open the module in the editor and paste these texts in the matching fields. Keep the words in braces, such as {n}, as they are: the module replaces them. Dates, times and numbers already follow the language of the page.

French (Français)

FieldText to paste
HeadingProchaines dates
Button textS’inscrire
OnlineEn ligne
OpenOuvert
Closes soon ({n} = days)Clôture des inscriptions dans {n} jours
Closes tomorrowClôture des inscriptions demain
Closes todayClôture des inscriptions aujourd’hui
Seats left ({n} = seats)Plus que {n} places
One seat leftPlus qu’une place
FullComplet
WaitlistListe d’attente ouverte
Registration closedInscriptions closes
Waitlist buttonRejoindre la liste d’attente
Add to calendar linkAjouter à l’agenda
No upcoming dateDe nouvelles dates seront bientôt annoncées.
Time zone note (visitor zone)Les horaires sont affichés dans votre fuseau horaire.
Time zone note (event zone)Les horaires sont ceux du lieu de l’événement.
Screen reader hint for links that open a new tab(s’ouvre dans un nouvel onglet)
Editor note when no registration link is setIndiquez un lien dans « Registration button » (ou sur chaque date) pour afficher les boutons S’inscrire.
Editor note: unknown time zoneFuseau horaire inconnu : {zone}. Utilisez un nom IANA comme Europe/Paris ou America/New_York ; d’ici là, les dates s’affichent dans le fuseau de chaque visiteur.

German (Deutsch)

FieldText to paste
HeadingNächste Termine
Button textAnmelden
OnlineOnline
OpenOffen
Closes soon ({n} = days)Anmeldeschluss in {n} Tagen
Closes tomorrowAnmeldeschluss morgen
Closes todayAnmeldeschluss heute
Seats left ({n} = seats)Noch {n} Plätze frei
One seat leftNoch 1 Platz frei
FullAusgebucht
WaitlistWarteliste offen
Registration closedAnmeldung geschlossen
Waitlist buttonAuf die Warteliste
Add to calendar linkZum Kalender hinzufügen
No upcoming dateNeue Termine werden in Kürze bekannt gegeben.
Time zone note (visitor zone)Alle Zeiten in Ihrer Zeitzone.
Time zone note (event zone)Alle Zeiten in Ortszeit des Veranstaltungsorts.
Screen reader hint for links that open a new tab(öffnet in einem neuen Tab)
Editor note when no registration link is setLegen Sie unter „Registration button“ (oder bei jedem Termin) einen Link fest, damit die Anmelde-Buttons erscheinen.
Editor note: unknown time zoneUnbekannte Zeitzone: {zone}. Verwenden Sie einen IANA-Namen wie Europe/Paris oder America/New_York; bis dahin erscheinen die Termine in der Zeitzone des jeweiligen Besuchers.

Spanish (Español)

FieldText to paste
HeadingPróximas fechas
Button textInscribirse
OnlineEn línea
OpenAbierto
Closes soon ({n} = days)La inscripción cierra en {n} días
Closes tomorrowLa inscripción cierra mañana
Closes todayLa inscripción cierra hoy
Seats left ({n} = seats)Quedan {n} plazas
One seat leftQueda 1 plaza
FullCompleto
WaitlistLista de espera abierta
Registration closedInscripción cerrada
Waitlist buttonUnirse a la lista de espera
Add to calendar linkAñadir al calendario
No upcoming datePronto anunciaremos nuevas fechas.
Time zone note (visitor zone)Los horarios se muestran en su zona horaria.
Time zone note (event zone)Los horarios son los de la hora local del lugar.
Screen reader hint for links that open a new tab(se abre en una pestaña nueva)
Editor note when no registration link is setIndique un enlace en «Registration button» (o en cada fecha) para mostrar los botones Inscribirse.
Editor note: unknown time zoneZona horaria desconocida: {zone}. Use un nombre IANA como Europe/Paris o America/New_York; mientras tanto, las fechas se muestran en la zona de cada visitante.

Support

Questions or a bug? Email support@airdatethemes.com, in English or French. We answer within two business days.

Going further

This module lists the dates of one course. Almanac, the premium theme this module comes from (not on the marketplace yet), does the same for a whole catalogue: programmes with their cohorts, a catalogue with filters, an enrolment form that records the date each person chose, early-bird prices that end on time, and a calendar. Coming soon to the marketplace.

For recurring webinars, Airdate Webinar (199 $) shows the next session with a countdown, the agenda and the replays. See it on the marketplace.