Using the "Recurring Schedule" trigger

What is a recurring schedule trigger?

In Vero Connect, there are multiple ‘Triggers’ that you can use to decide when a campaign should start sending. The recurring schedule trigger is an automated trigger that you can use to initiate a campaign to send messages to a dynamically defined set of users on a cycle, for instance every hour, day, week or month.

Recurring schedule triggers work in tandem with SQL queries of external data sources, giving you the ability to send bulk messages to precise and current recipient lists. These lists are generated every time the schedule runs, ensuring accuracy and timeliness.

Why use a recurring schedule?

Recurring triggers can be used to automate a number of messaging use cases:

Scenario 1:

Imagine you want to send weekly customer satisfaction surveys to a targeted group of users who have recently interacted with your support team. With a recurring schedule trigger you can define a SQL query to identify these users based on their support ticket history or specific criteria. Set the frequency to 'weekly' and send a message pointing them to your survey. Once enabled, the system will automatically send the survey to the identified users every week, ensuring consistent feedback collection without manual effort.

Scenario 2:

Imagine you want to send a message to every user who signed up in the last 24 hours. Simply set your campaign to send on a recurring schedule every day at 12pm and then write a SQL query that finds users who signed up within the last 24 hours. With direct access to your data warehouse and the ability to run a query on a recurring schedule, you can simplify your onboarding campaigns and trust that the data powering them is always on point.

How does it work?

When a campaign with a recurring schedule trigger is running, the SQL query is re-run on the schedule you define (eg. once a day at 11am or every week on Tuesday at 9am). Every time the schedule runs, the query outputs a new list of users and a message is sent to every user in that list.

To create a recurring campaign, follow these steps:

  1. In your campaign, choose the ‘Recurring schedule’ trigger from the ‘triggers’ section and set your chosen schedule (e.g every day at 12:30pm)Recurring Trigger

  2. Choose a SQL based audience with a data source such as Postgres or MySQL and write some SQL to define the audience you want to send the message to each time the schedule runs.

    ⚠️ Only SQL based data sources are available when using Recurring schedule triggers.

    ⚠️ Make sure your query filters out users who could have received the message in the previous run. Every time the schedule is triggered, the query is re-run, meaning all users who are returned from the query will be sent a message.

    Here’s an example query:

SELECT email, first_name, last_name, company_name
FROM production_users.users
WHERE signup_at > date_trunc('day', (current_date - interval '1 day'))
  1. Add some email content. Personalise your content with data from the columns defined in the audience from step 2. Use Liquid to add user data like {{user.first_name}} into your template.

  2. Review and start your campaign. Review and start your campaign

  3. Watch as your campaign runs automatically every day at the selected interval. Review each send in the ‘Runs’ section, and get a more detailed view of your campaign in the full report.

Which data sources are supported?

Recurring schedule triggers currently support any SQL based data source:

  • ✅ Postgres
  • ✅ MySQL
  • ✅ MicrosoftSQL Server
  • ✅ Redshift
  • ✅ Snowflake

Static list based data sources are currently not supported:

  • ❌ CSV’s
  • ❌ Google Sheets

Can I use a custom schedule?

If the schedule you wish to run your campaign on is not supported using the hour, day, week or year options, you can add a custom schedule using the Custom (Crontab) option.

Crontab formatting is an advanced feature, it consists of 5 properties like this:

┌───────────── minute (0 - 59) - Should always be a specific number as recurrence less than 60 minutes is not supported.
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of the month (1 - 31).
│ │ │ ┌───────────── month (1 - 12, or JAN - DEC)
│ │ │ │ ┌───────────── day of the week (0 - 6, or SUN - SAT)
│ │ │ │ │
│ │ │ │ │
* * * * *

For hour, day of the month, month and day of the week, the following annotations are supported:

  • *: any value
  • */n: every n values, e.g. /15 (Note: specifying the minimum time is not supported, e.g. 1/5 is not supported, however, 1-15/5 is supported)
  • -: range of values, e.g. 1-5. Can be used together with ,
  • ,: list of values, e.g. 1,3,4. Can be used together with *

Any other formats are not guaranteed to be supported and may be subject to breaking changes in the future.

What happens in months with less days than the scheduled day of the month?

On months with less than the number of days set in the schedule, the last day of the month will be used. For example, a schedule set for the 31st will be triggered on the 30th if there is no 31st day.

How do I report on a recurring schedule triggered campaign?

Every time the recurring schedule trigger initiates a send to a new set of recipients, a ‘run’ is created and the top three runs are shown at the top of the page. There is also a ‘Full Report’ which shows a full overview of all runs and the aggregated stats for each messages sent in the campaign, it is also possible to view a report for each individual run by clicking on the timestamp.

Report on all campaign runs

Can I send the messages in batches when using a recurring schedule trigger?

Yes, batched sends are supported in conjunction with the recurring schedule trigger. However, you must ensure that the interval between sends is longer than the length of time it will take to to send the messages in batches.


  • Rory Colsell
    Head of Design