Skip to main content

Schedule WhatsApp Messages (Save 2 Hours/Week)

Coreintermediate8 minutes14 min read

Stop manually sending weekly check-ins. Automate WhatsApp reminders, daily messages, and recurring updates. Set once, save 2+ hours weekly.

Stop manually sending Monday check-ins to 50 customers. Automate it once, save 2 hours/week forever. Scheduled WhatsApp messages run on autopilot — one-time reminders, daily check-ins, weekly reports, monthly follow-ups. This guide shows you how to schedule WhatsApp messages and set up recurring WhatsApp automation that eliminates repetitive messaging work.

What You'll Need

Before starting, make sure you have:

  • A connected WhatsApp session — Your account must be connected and showing "WORKING" status. See our connection guide if needed.
  • Growth or Business plan — Scheduled messages (Growth+) are a premium feature. The Free plan doesn't include recurring WhatsApp automation. Upgrade here if needed.
  • Recipient phone numbers — The contacts who will receive your scheduled messages. Make sure these people have opted in to receive automated messages from you.

Important: All scheduled times are in UTC (Coordinated Universal Time). You'll need to convert from your local timezone to UTC when setting schedules. We'll cover timezone conversion examples in this guide.

Step 1: Navigate to Scheduled Messages

Log in to your MoltFlow dashboard and click Dashboard > Outreach > Scheduled Messages in the left sidebar.

You'll see the Scheduled Messages page, which shows all your active, paused, and completed scheduled messages. Each row displays:

  • Name — Descriptive label for this scheduled message
  • Recipient — Phone number of the person who will receive the message
  • Schedule — When the message will send (one-time date or recurrence pattern)
  • Next run — The exact timestamp when the next message will send
  • Status — Active, paused, or completed

If this is your first time here, the page will be empty. Let's create your first scheduled message.

Step 2: Create a One-Time Scheduled Message

One-time scheduled messages send exactly once at a specific date and time. Perfect for appointment reminders, follow-up messages, or delayed responses. Schedule WhatsApp messages days or weeks in advance without manual intervention.

Click "Create Scheduled Message" in the top-right corner.

A creation form appears. Fill in these fields:

Basic Information

Name (required) — Enter a descriptive label so you can easily identify this message later. Good examples:

  • "Meeting Reminder for John - Feb 15"
  • "Follow-up with Sarah after demo"
  • "Payment reminder for Invoice #1234"

Be specific. You might create dozens of scheduled messages, and clear names make management easier.

Session (required) — Select your connected WhatsApp session from the dropdown. If you have multiple sessions connected, choose the one you want to send from.

Recipient phone (required) — Enter the phone number of the person who will receive this message.

Format: country code + number with no plus sign, spaces, or special characters.

Examples:

  • US number: 14155551234
  • UK number: 447911123456
  • Brazil number: 5511987654321

MoltFlow validates the format as you type. Invalid numbers show an error message.

Message Content

Message body (required) — Type the text you want to send. This supports all WhatsApp formatting:

  • *bold* for bold text
  • _italic_ for italic text
  • ~strikethrough~ for strikethrough
  • ```code``` for monospace code

Keep messages under 1,000 characters for best deliverability. Longer messages work, but shorter messages are more likely to be read.

Scheduling

Scheduled time (required) — Choose the date and time when you want this message to send.

The date/time picker shows times in UTC. If you're in a different timezone, you'll need to convert:

  • US Eastern (EST/EDT): Add 5 hours in winter, 4 hours in summer
    • Example: 9:00 AM EST = 14:00 UTC (2:00 PM UTC)
  • US Pacific (PST/PDT): Add 8 hours in winter, 7 hours in summer
    • Example: 9:00 AM PST = 17:00 UTC (5:00 PM UTC)
  • UK (GMT/BST): Add 0 hours in winter, -1 hour in summer
    • Example: 9:00 AM GMT = 09:00 UTC
  • Central Europe (CET/CEST): Subtract 1 hour in winter, 2 hours in summer
    • Example: 9:00 AM CET = 08:00 UTC

Pro tip: Use a timezone converter like WorldTimeBuddy to avoid mistakes.

Recurrence — Leave this set to "None" for a one-time message. We'll cover recurring schedules in the next step.

Save and Activate

Click Create to save your scheduled message.

MoltFlow immediately activates the schedule. The message will send automatically at the specified time, as long as:

  1. Your WhatsApp session stays connected (status = "WORKING")
  2. The scheduled time is in the future
  3. The message isn't paused or cancelled

Using the API to create a one-time scheduled message:

bash
curl -X POST https://apiv2.waiflow.app/api/v2/scheduled-messages \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Meeting Reminder for John - Feb 15",
    "session_id": "YOUR_SESSION_ID",
    "phone": "14155551234",
    "message": "Hi John! Quick reminder about our meeting tomorrow at 2 PM. See you then!",
    "scheduled_time": "2026-02-15T13:00:00Z"
  }'

Note: The API field is scheduled_time (not next_run_at). MoltFlow converts this internally.

Step 3: Set Up a Recurring Schedule

Recurring scheduled messages send automatically on a repeating schedule — daily, weekly, monthly, or custom intervals. Perfect for regular check-ins, weekly reports, monthly reminders, or daily standup messages. This is the core of recurring WhatsApp automation — set once, run forever.

To create a recurring message, follow the same steps as a one-time message, but change the Recurrence field from "None" to one of these options:

Daily Recurrence

Select "Daily" from the recurrence dropdown.

The message will send every day at the time you specified in Scheduled time.

Example use cases:

  • Daily standup reminder at 8:55 AM
  • Daily motivational message to a contact
  • Daily inventory check reminder

Weekly Recurrence

Select "Weekly" from the recurrence dropdown.

A new field appears: Day of week. Choose which day you want the message to send.

The message will send every week on that day at the specified time.

Example use cases:

  • Weekly status report every Friday at 5 PM
  • Monday morning check-in at 9 AM
  • Saturday appointment reminder at 10 AM

Monthly Recurrence

Select "Monthly" from the recurrence dropdown.

A new field appears: Day of month. Enter a number from 1-28.

The message will send on that day of every month at the specified time.

Why only 1-28? February has 28 days, so MoltFlow limits monthly recurrence to avoid skipped months. If you need end-of-month messages, use custom cron (next section).

Example use cases:

  • Monthly invoice reminder on the 1st at 10 AM
  • Mid-month progress check on the 15th
  • Monthly subscription renewal reminder on the 28th

Custom Cron Schedule

Select "Custom (cron)" from the recurrence dropdown.

A new text field appears: Cron expression.

Cron is a powerful scheduling syntax that lets you define complex recurrence patterns. If you're familiar with cron from Linux systems, it's the same format (5 fields: minute, hour, day, month, weekday).

Common cron patterns:

Every weekday (Monday-Friday) at 9 AM UTC:

text
0 9 * * 1-5

Every hour on the hour:

text
0 * * * *

Every 15 minutes:

text
*/15 * * * *

First and 15th of every month at 10 AM UTC:

text
0 10 1,15 * *

Last day of every month at 5 PM UTC (using cron doesn't natively support this, but you can set day 28):

text
0 17 28 * *

Cron syntax reference:

text
┌─── minute (0-59)
│ ┌─── hour (0-23)
│ │ ┌─── day of month (1-31)
│ │ │ ┌─── month (1-12)
│ │ │ │ ┌─── day of week (0-6, Sunday=0)
│ │ │ │ │
* * * * *

Use crontab.guru to validate your cron expressions and see human-readable descriptions.

Example use cases for custom cron:

  • Every weekday morning: customer service team availability message
  • Twice daily (9 AM and 5 PM): shift start/end reminders
  • Every Monday and Thursday: bi-weekly check-in
  • First of every quarter: quarterly review reminder

API Example for Recurring Messages

bash
curl -X POST https://apiv2.waiflow.app/api/v2/scheduled-messages \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekly Friday Report",
    "session_id": "YOUR_SESSION_ID",
    "phone": "14155551234",
    "message": "Weekly report ready! Check the dashboard for details.",
    "scheduled_time": "2026-02-14T17:00:00Z",
    "recurrence": "weekly"
  }'

For custom cron schedules, add a cron_expression field:

bash
curl -X POST https://apiv2.waiflow.app/api/v2/scheduled-messages \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekday Morning Standup",
    "session_id": "YOUR_SESSION_ID",
    "phone": "14155551234",
    "message": "Good morning! Ready for standup at 9:00 AM?",
    "scheduled_time": "2026-02-14T08:55:00Z",
    "recurrence": "custom",
    "cron_expression": "55 8 * * 1-5"
  }'

Step 4: Manage and Edit Scheduled Messages

Once you've created scheduled messages, you can manage them from the Scheduled Messages page.

View All Scheduled Messages

The main Scheduled Messages page shows all your schedules with these columns:

  • Name — The label you gave this message
  • Recipient — Phone number
  • Schedule — "One-time" or recurrence pattern description
  • Next run — When the next message will send (e.g., "2026-02-15 14:00:00 UTC")
  • Status — Active (green), Paused (orange), or Completed (gray)

Click any row to open the detail view.

Edit Message Content and Schedule

On the message detail page, click "Edit" to change:

  • Message name
  • Message body
  • Scheduled time
  • Recurrence pattern
  • Recipient phone number

Click Save to apply changes. If the message is currently active, changes take effect immediately. The next scheduled send will use the new settings.

Important: Editing a recurring message doesn't affect already-sent messages. It only changes future sends.

Pause a Scheduled Message

Click "Pause" on the message detail page to temporarily stop sends without deleting the schedule.

The status changes to "Paused" (orange), and the "Next run" field shows "—" (no upcoming send).

This is useful when:

  • You're on vacation and don't want automated messages going out
  • You need to update message content before the next send
  • A contact asked for a temporary break from regular updates

Using the API:

bash
curl -X POST https://apiv2.waiflow.app/api/v2/scheduled-messages/{message_id}/pause \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Resume a Paused Message

Click "Resume" on a paused message to reactivate it.

MoltFlow calculates the next send time based on the current date/time and the recurrence pattern. The message will send at the next scheduled interval.

Example: You pause a daily 9 AM message at 11 AM on Monday. When you resume at 3 PM on Tuesday, the next send will be 9 AM Wednesday (not Tuesday, since that already passed).

Using the API:

bash
curl -X POST https://apiv2.waiflow.app/api/v2/scheduled-messages/{message_id}/resume \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Update Scheduled Time or Content

To change when a message sends or what it says, click "Edit" on the message detail page.

Using the API:

bash
curl -X PUT https://apiv2.waiflow.app/api/v2/scheduled-messages/{message_id} \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Updated message content",
    "scheduled_time": "2026-02-20T14:00:00Z"
  }'

Cancel a Scheduled Message

Click "Cancel" to permanently delete the schedule.

This action cannot be undone. The message will not send again, and you'll need to recreate it if you change your mind.

Cancelled messages move to a "Completed" or "Cancelled" state (depending on whether any sends happened) and are archived. You can still view the history, but you can't resume or edit.

Step 5: Monitor Execution History

Every scheduled message has an execution history that shows when it ran, whether it succeeded, and any errors that occurred.

On the message detail page, click the "History" tab.

You'll see a table with these columns:

  • Sent at — Exact timestamp when MoltFlow attempted to send the message
  • Status — Success (green check) or Failed (red X)
  • Error (if failed) — Why the send failed

Successful Sends

A successful send means MoltFlow delivered the message to WhatsApp's servers and received confirmation. The message appears in the recipient's WhatsApp chat.

Failed Sends

Sends can fail for several reasons:

  1. Session disconnected — Your WhatsApp session went offline before the scheduled time. Error message: "Session not connected" or "Session status: STOPPED".

  2. Invalid phone number — The recipient's phone number isn't a valid WhatsApp account. Error message: "Phone number not registered on WhatsApp".

  3. Rate limit exceeded — You hit WhatsApp's sending limits (rare for scheduled messages, more common with bulk sends). Error message: "Rate limit exceeded, try again later".

  4. Network timeout — MoltFlow couldn't reach WhatsApp's servers. Error message: "Request timeout" or "Network error".

MoltFlow automatically retries failed sends for transient errors (timeouts, temporary disconnections). If a send fails due to an invalid phone number, it's marked as permanently failed and won't retry.

For recurring messages, if one send fails, the schedule continues. The next scheduled send will still happen at the regular interval.

Using the API to View History

bash
curl -X GET https://apiv2.waiflow.app/api/v2/scheduled-messages/{message_id}/history \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response:

json
{
  "message_id": "abc123",
  "history": [
    {
      "sent_at": "2026-02-13T14:00:00Z",
      "status": "success",
      "error": null
    },
    {
      "sent_at": "2026-02-12T14:00:00Z",
      "status": "failed",
      "error": "Session not connected"
    }
  ]
}

Use Case Examples

Here are four proven use cases for scheduled messages:

1. Daily Standup Reminder

Scenario: Your team has a daily standup call at 9:00 AM. Send a reminder at 8:55 AM every weekday. Save 5 minutes daily = 20+ hours/year.

Setup:

  • Name: "Daily Standup Reminder"
  • Recurrence: Custom cron
  • Cron expression: 55 8 * * 1-5 (8:55 AM UTC, Monday-Friday)
  • Message: "Daily standup in 5 minutes! Join the call."

2. Weekly Client Report

Scenario: You send a status update to a client every Friday at 5 PM. Automate this to save 10 minutes/week = 8+ hours/year.

Setup:

  • Name: "Weekly Client Report - Acme Corp"
  • Recurrence: Weekly
  • Day of week: Friday
  • Scheduled time: 17:00 UTC (5:00 PM UTC)
  • Message: "Weekly report ready! Check your email for the full summary. Reply here if you have questions."

3. Monthly Invoice Reminder

Scenario: Send payment reminders on the 1st of every month at 10 AM.

Setup:

  • Name: "Monthly Invoice Reminder"
  • Recurrence: Monthly
  • Day of month: 1
  • Scheduled time: 10:00 UTC
  • Message: "Hi! Your monthly invoice is ready. Payment is due by the 15th. Reply if you need any help."

4. Birthday Greetings (One-Time)

Scenario: You know a contact's birthday is February 20th. Schedule a greeting to send that morning.

Setup:

  • Name: "Birthday Greeting - Sarah"
  • Recurrence: None (one-time)
  • Scheduled time: 2026-02-20 08:00:00 UTC
  • Message: "Happy Birthday, Sarah! 🎉 Hope you have an amazing day!"

Troubleshooting

Message Didn't Send at Scheduled Time

Problem: The scheduled time passed, but the message wasn't sent. History shows no entry.

Solution: Check your WhatsApp session status. Go to Dashboard > Sessions and verify the session is "WORKING" (green). If it shows "STOPPED" or "FAILED", restart the session by scanning the QR code. Then manually trigger the send or wait for the next scheduled interval.

Wrong Timezone — Message Sent at Wrong Time

Problem: The message sent 5 hours earlier/later than expected.

Solution: All times in MoltFlow are UTC. If you set 9:00 AM thinking it's your local time, it sent at 9:00 AM UTC (which might be 4:00 AM EST). Edit the scheduled message and convert your desired local time to UTC. Example: 9:00 AM EST = 14:00 UTC (2:00 PM UTC).

Recurring Message Stopped After First Send

Problem: A recurring message sent once, then never sent again.

Solution: Check if the message status is "Paused" or "Completed". If completed, it might have been set as one-time instead of recurring. Edit the message and verify the recurrence field is set to daily, weekly, monthly, or custom (not "None").

Session Disconnected Mid-Schedule

Problem: Recurring message was working fine, then stopped. Session shows "FAILED" or "STOPPED".

Solution: WhatsApp sessions can disconnect if your phone loses internet for 48+ hours or if WhatsApp logged out. Restart the session by scanning the QR code. Your scheduled messages will automatically resume once the session is "WORKING" again.

What's Next?

Now that you can schedule WhatsApp messages and set up recurring WhatsApp automation, explore these related features:

All of these features work together to create fully automated WhatsApp workflows.

Ready to stop manually sending the same messages every week? Start your Growth trial and see how businesses save 10+ hours/week with recurring WhatsApp automation.


Need help? Contact support via the dashboard chat or email us at [email protected]. We typically respond within 2-4 hours.

Ready to automate your WhatsApp?

Start for free — set up in under 2 minutes.