Send Time Optimization (STO)
Send Time Optimization (STO), also known as Intelligent Delivery, automatically delivers campaign messages at each user's predicted best engagement time based on their historical open and click behavior.
How It Works
-
Engagement Learning - Joryio continuously tracks when each user opens and clicks messages (email opens, email clicks, push clicks). These events are aggregated into hourly engagement scores stored in a pre-computed materialized view.
-
Optimal Hour Selection - When you send a campaign with Intelligent Delivery, the system queries each user's best-performing hour (UTC) based on weighted engagement scores: opens count as 1 point, clicks count as 3 points.
-
Timezone Conversion - The optimal UTC hour is converted to the user's local timezone (from their profile or the organization default) to schedule delivery at the right local time.
-
Delivery Window - All messages are guaranteed to be sent within the configured delivery window (default: 24 hours). If a user's optimal hour falls outside the window, the system uses the closest available time.
-
Quiet Time Respect - Quiet time rules always take precedence. If STO schedules a message during quiet hours, the message is delayed until quiet time ends.
Setting Up Intelligent Delivery
- Navigate to Campaigns and create or edit a campaign.
- Go to the Delivery tab.
- Select Intelligent Delivery as the send type.
- Configure the STO options:
- Delivery Window - How many hours the system has to deliver all messages (1–168 hours, default 24).
- Window Start - Optional. When the delivery window opens. If not set, the window starts when the campaign is sent.
- Fallback Strategy - What to do for users with no engagement history:
- Organization default time (10:00 AM) - Sends at 10 AM in the organization's timezone.
- Distribute evenly - Spreads messages evenly across the delivery window for better server load distribution.
- Also optimize by day of week - Optional. When enabled, the system picks the best (day, hour) combination per user instead of just the best hour. For example, if a user engages most on Tuesdays at 2 PM, the message will be scheduled for that specific day and time. Requires a delivery window of at least 24 hours. If the best day+hour doesn't fit within the window, it falls back to hour-only optimization.
Fallback Strategies
Organization Default Time
Users without engagement data receive their message at 10:00 AM in the organization's timezone. This is the recommended default - 10 AM is a generally high-engagement time for most industries.
Even Distribution
Messages for users without data are spread deterministically across the delivery window. This is useful for very large campaigns where you want to avoid delivery spikes.
Best Practices
- Allow enough data - STO works best when users have at least 2–4 weeks of engagement history. For new users, the fallback strategy is used.
- Use 24-hour windows - A full 24-hour window gives the system the most flexibility to find each user's optimal time. Use 168-hour (7-day) windows with day-of-week optimization enabled for maximum precision.
- Combine with A/B testing - You can use Intelligent Delivery with A/B test variants. Each variant is delivered at the user's optimal time.
- Monitor delivery patterns - After sending, check the campaign analytics to see how messages were distributed across the delivery window.
Technical Details
- Engagement scores are stored per user, per hour-of-day (24 buckets) and day-of-week (7 buckets) in UTC.
- The materialized view automatically processes new engagement events in real time.
- Timezone conversion uses the same
Intl.DateTimeFormatapproach as quiet time, supporting all IANA timezone identifiers. - Each 10,000-user batch is processed with a single analytical query for performance.
- Sends are scheduled as delayed jobs - the same mechanism as quiet-time delays.