Skip to main content
When a campaign triggers, Trackly’s message execution system queues and delivers messages efficiently. This guide explains what happens behind the scenes.

Execution Flow

1

Campaign Triggers

At the scheduled time, the campaign begins processing
2

Audience Evaluation

The system queries matching contacts from your audiences
3

Message Queuing

Individual messages are created and queued
4

Delivery

The executor sends messages via your SMS provider
5

Status Tracking

Delivery status is tracked and updated

1. Campaign Trigger

When the scheduled time arrives:
  1. The scheduler picks up the campaign
  2. Validates configuration (sending list, audiences, creatives)
  3. Begins audience evaluation
For recurring campaigns, a new execution starts each scheduled occurrence.

2. Audience Evaluation

The system queries all selected audiences:
Filters applied:
  • Exclude unsubscribed contacts
  • Apply frequency capping (skip if sent recently)
  • Verify phone numbers are valid
  • Filter contacts based on timezone for TCPA compliance (contacts outside permissible sending hours are excluded)
  • Exclude contacts currently enrolled in an active Welcome Journey (always applied)

3. Message Queuing

For each contact:
  1. Select the message variant (based on percentage split or ML selection)
  2. Resolve any placeholders (, personalization)
  3. Queue the message for delivery
  4. Set the sendtime
Messages are bulk-inserted for efficiency.

Queue Priority

Messages are processed in order:
  • FIFO (first-in, first-out)
  • All messages from a campaign are queued together

4. Message Delivery

Queued messages are delivered in parallel, grouped by sending list, with each list’s rate limit applied. See Failure Handling for reasons a message might not be delivered.

Provider Integration

Each sending list has a provider configuration:

Rate Limiting

Your per-list rate limit applies across your whole account, not per campaign:
  • Configurable per-list rate limits (default 17,000 messages/minute)
  • Inter-batch delays to smooth throughput
  • Automatic backoff on provider errors

5. Status Tracking

After sending, message status is reported through two fields on each message:

Failure Handling

Messages that can’t be delivered are recorded with a failure reason (and a Discord alert, if configured):
  • STALE — Message older than 30 minutes (skipped)
  • BLOCKED_CONTENT — Message contains blocked words
  • CONTACT_BLOCKED — Contact is on the block list (unsubscribed)
  • RATE_LIMIT_TIMEOUT — Rate limit window expired
  • PROVIDER_ERROR — SMS provider returned an error
  • NO_RESPONSE — No response from provider

Permanent Failures

Messages that fail are logged with failed status. Common causes include:
  • Invalid phone number
  • Blocked/blacklisted number
  • Carrier rejection (spam)

Alerts

Alerts are sent via Discord when configured. This includes notifications for:
  • Delivery failures
  • Spam complaints
  • High error rates
See Discord Alerts to configure.

Retry Behavior

The system has built-in recovery mechanisms:
  • Billing backoff: Billing-blocked messages get 5-minute backoff with a 60-minute TTL before dead-letter
  • Interrupted sends: If a delivery attempt is interrupted, the message is automatically picked back up and retried, unless it has passed the 30-minute stale threshold

Delivery Webhooks

When delivery status updates are received, they update the message’s delivery status. The webhook payload looks like this:
See Webhook Events for details.

Execution Timeline

Typical timeline for a 10,000 message campaign: Actual timing depends on:
  • Audience size
  • Queue depth
  • Provider capacity
For messages with tracked links:
  1. Original URLs are replaced with short links
  2. Each short link is registered for click tracking
  3. When clicked, the link service logs the click
  4. User is redirected to the destination
See Link Tracking for details.

Monitoring Execution

Where to Track Progress

View campaign progress:
  1. On the Schedules page, open the Logs tab to see Queued, Processed, and Skipped counts for each run
  2. Go to Reports > Performance, open the Deliverability tab, and filter by Send Name to see Sent, Delivered, and Failed counts

Metrics

Troubleshooting

Check:
  • Is the campaign scheduled and not paused?
  • Is the sending list active?
  • Are provider credentials valid?
  • Is there a queue backlog?
Common causes:
  • Invalid phone numbers in list
  • Provider issues
  • Carrier blocks
  • Rate limiting exceeded
Review failed messages for error codes.
Possible reasons:
  • Large queue from concurrent campaigns
  • Provider rate limits
  • Network issues
Create a support ticket from your dashboard (Support > New Ticket) if delivery is significantly delayed.

Common Pitfalls

Contacts may be skipped during campaign execution for several reasons:
  • In-workflow exclusion: A contact already enrolled in an active Welcome Journey is always skipped; this exclusion isn’t configurable.
  • Cooldown period: The contact received a message within the schedule’s Skip If Sent Within window (set in hours in the schedule’s Behavior section). Same-message and same-offer cooldowns are configured per account.
  • TCPA quiet hours: The send falls outside the contact’s local TCPA-compliant window (typically 8 AM–9 PM in the contact’s timezone).
  • Unsubscribed: The contact opted out via STOP keyword and is no longer active on the list.
  • Stale message: The message sat in the queue longer than 30 minutes and was dropped to prevent outdated content from being delivered.

Next Steps

Link Tracking

Track clicks and conversions

Discord Alerts

Get notified of issues