Product guides
Reminders
Reminders send the same WhatsApp message to a number or group on a repeating schedule, such as every weekday at 9:00 AM or on the 1st of each month. Use them for payment reminders, team check-ins or regular updates.
Open them from Tools → Recurrent Reminders in the sidebar, or go to /reminders/.
Before you start#
- A plan that includes reminders. Otherwise saving shows "Upgrade your plan to use reminders feature".
- A WhatsApp number showing Connected on WhatsApp settings.
- Credits on your plan. Each time a reminder runs, it uses one message.
Create a reminder#
The Create New Reminder card is at the top of the page. If it's collapsed, click the arrow button on the card to expand it.
Name it
Enter a Reminder Name, such as
Daily Follow-up.Choose the message type
Choose Message Type: Text Message, Image + Text Message or File + Text Message, and fill in Image URL or File URL. Recipients see the last part of the file link as the file name.
Choose the sending number (optional)
Under WhatsApp Account, pick a connected number, or leave Select WhatsApp Account (Optional) to use your first connected number each time the reminder runs.
Enter the recipient
In Phone Number / Group Name, enter a number with country code and digits only, such as
919876543210, or the exact name of a WhatsApp group.Set the schedule
Under Schedule (Cron Expression), pick a preset or Custom Cron Expression. See Schedule options.
Pick the timezone
Choose the Timezone your schedule is in. Your last choice is remembered for next time.
Write the message and save
Write the Message Template, optionally with variables, and click Create Reminder. You see "Reminder created successfully".
Schedule options#
The schedule is a cron expression: five values for minute, hour, day of month, month and weekday, separated by spaces. Weekdays run from 0 (Sunday) to 6 (Saturday). Cron Helper on the page lists examples, and Cron Generator opens crontab.guru to build one.
| Preset | Expression |
|---|---|
| Daily at 9:00 AM | 0 9 * * * |
| Weekly on Monday at 9:00 AM | 0 9 * * 1 |
| Monthly on 1st at 9:00 AM | 0 9 1 * * |
| Every 6 hours | 0 */6 * * * |
| Weekdays at 9:00 AM | 0 9 * * 1-5 |
More examples:
| Expression | Runs |
|---|---|
0 0 * * * | Every midnight |
30 8 * * 1-5 | 8:30 AM on weekdays |
0 */3 * * * | Every 3 hours |
0 12 1,15 * * | 12 PM on the 1st and 15th |
In an expression, * means any value, / sets a step, - a range and , a list.
Timezones#
The schedule runs in the timezone you pick, and daylight saving time is followed automatically. The Next Run column shows the next time in that timezone. The list includes UTC, US and Canadian zones, Europe/London, Paris and Berlin, Asia/Kolkata, Dubai, Shanghai and Tokyo, Australia/Sydney and America/Sao_Paulo.
Reminders are checked every minute, and a message is queued when its scheduled minute arrives. If a check runs late, the run is still queued up to 10 minutes after its scheduled time (1 minute for a reminder's first run), and never twice. It's then sent as soon as the sending number is free.
Message variables#
These placeholders are replaced each time the reminder runs. Write them with single braces, exactly as shown:
| Variable | Replaced with | Example |
|---|---|---|
{reminder_name} | The reminder's name | Daily Follow-up |
{to_number} | The recipient as entered | 919876543210 |
{organisation_name} | Your workspace name | Acme Store |
{client_name} | The name of the workspace owner | Aman |
{current_date} | Date in the reminder's timezone | 2026-09-16 |
{current_date_formatted} | Long date, with a zero-padded day | September 06, 2026 |
{current_time} | 24-hour time | 09:00:00 |
{current_time_12h} | 12-hour time | 09:00 AM |
{current_datetime} | Date and time | 2026-09-16 09:00:00 |
{timezone} | The timezone name | Asia/Kolkata |
{timezone_short} | Timezone abbreviation | IST |
For example, Good morning team, here's the plan for {current_date_formatted}.
Manage reminders#
Your Reminders lists every reminder with its Name, To, Type, Schedule, Next Run, Status (Active or Inactive) and Created time (UTC). The Actions buttons are icons; hover over one to see its name:
| Button | What it does |
|---|---|
| Edit (pencil) | Opens Edit Reminder to change the name, type, recipient, image or file URL, schedule, timezone or message, and to pause or resume it with the Active checkbox. The schedule there is a plain text box for the cron expression, with no presets. Click Update Reminder to save. |
| Clone (two squares) | Shows the reminder's details. Yes, clone it! copies them into the create form with "(Copy)" added to the name, ready to adjust and save. |
| Toggle Status (power icon) | Pauses an active reminder or resumes an inactive one. |
| Delete (trash) | Asks "Are you sure you want to delete this reminder?". Click Yes, delete it!. |
Deleting or pausing a reminder doesn't cancel a message it has already queued. Cancel that on the Reports page.
Import reminders from a file#
Prepare the file
Click CSV Upload, then Sample Format to see the columns, and download the sample file. Fill in one reminder per row. Don't upload the sample as it is: its image and file links (
example.com) are placeholders that won't download, so replace them with your own links or delete those rows. The file also has notimezonecolumn, and itswhatsapp_client_idvalues (1,2) aren't yours, so those rows use your first connected number.Upload
In Upload Reminders CSV, choose your
.csv,.xlsor.xlsxfile and click Upload Reminders.Check the result
You see "Successfully created N reminders." with the number of rows skipped. Imported reminders start as Active.
| Column | Required | Value |
|---|---|---|
reminder_name | Yes | A name for the reminder. |
phone | Yes | Number with country code, or a group name. +, spaces, dashes, brackets and a leading 0 are removed. |
message | Yes | The message text. Variables work here too. |
cron_expression | Yes | The schedule, such as 0 9 * * *. |
timezone | No | A timezone name such as Asia/Kolkata. Empty means UTC. Abbreviations like IST aren't accepted. See the Timezone reference. |
msg_type | No | 0 text (default), 1 image or 2 file. |
img_url | No | Image link, required when msg_type is 1. |
file_url | No | File link of up to 100 characters, required when msg_type is 2. |
whatsapp_client_id | No | The Whatsapp Client ID of a connected number. Empty, unknown or not currently connected means your first connected number each time the reminder runs. |
A row is skipped when its schedule or timezone is invalid, when msg_type is 1 without img_url, when msg_type is 2 without file_url, or when file_url is longer than 100 characters. Any other msg_type value is treated as text.
Troubleshooting#
| Message or problem | What to do |
|---|---|
| "name is required", "to_whatsapp_number is required", "message_template is required" or "cron_expression is required" | Fill in the missing field. |
| "Invalid cron expression" | Use five values separated by spaces. Try Cron Generator. |
| "Image URL is required for image messages" | Add an Image URL, or switch to Text Message. |
| "Invalid WhatsApp client" | The chosen number disconnected. Reload the page and pick a connected number. |
| "Invalid timezone" | Pick a timezone from the list. |
| "File URL is required for file messages" | Add a File URL, or switch to Text Message. |
| "Error creating reminder: value too long…" or "Error updating reminder: value too long…" | The File URL is over 100 characters. Use a shorter link, or create the reminder through the API. |
| A file reminder created through the API stopped attaching its file | It was edited or cloned in the dashboard, which removes the file link. Cancel it and create it again with the Create reminder API. |
| "Please select a CSV file to upload." | Choose a file in Upload Reminders CSV first. |
| "Invalid file format. Only CSV, XLS, and XLSX files are supported." | Save the file as .csv, .xls or .xlsx. |
| "An error occurred while uploading the CSV file" | Check your connection, reload the page and upload again. |
| "Missing required columns: …" | Add the listed column headers to your file, spelled exactly. |
| "No valid reminders found in the CSV file. Please check the format and data." | Check the schedules, timezones, image URLs and file URLs in every row. |
| Reminder didn't send | Check the status is Active, Next Run is what you expect, a number is Connected, and you have credits left. A run is skipped when you have no credits. If the reminder has no sending number chosen, a run is also skipped when no number is connected. If you picked a specific number and it's disconnected, the message is still queued and waits as pending. If an older reminder shows Active but never sends, click Toggle Status twice (pause, then resume). |
| Sent at the wrong time | Check the Timezone and the hour in the cron expression. |
| Message to a group fails | Use the exact group name, and make sure the sending number is a member. |
