Send Throttle in Salesforce Marketing Cloud 

Introduction:

In this article, we will delve into the concept of “Send Throttle” and its application within Salesforce Marketing Cloud. We will explore the importance of controlling email volumes, understand the key settings involved, and discover how throttling can optimize traffic control, support center handling, and email deliverability rates.

What is throttling? 

Throttling refers to the practice of controlling the volume of messages sent over a specified period instead of sending them all at once. It involves two key settings: 

  1. Delivery Window: This defines the time range within which email sends will occur.
  1. Hourly Threshold: It determines the maximum number of emails sent in each hour.

 

Why is throttle important in Salesforce Marketing Cloud? 

 

  1. Traffic Control: Throttling helps manage website traffic by preventing sudden surges from overwhelming the server.
  1. Support Center Handling: Throttling ensures a manageable flow of requests to the support center, preventing overload and ensuring timely responses.
  1. Deliverability Optimization: By spreading out email sends, throttling can help maintain better email deliverability rates.

 

If you want to use the same throttle settings every day, you can employ the following methods: 

  1. Journey Builder: Configure throttle settings under the “Delivery Options” tab when setting up an email activity in a journey.

Send Throttle

  1. SQL: Use the “TOP” function in SQL to retrieve a specific number of records to send each day. Store these records in a Data Extension to be used in Journey Builder.

Example: 

Consider a Data Extension called “DataExtension1” with fields “SubscriberKey” and “EmailAddress.” Create a query that retrieves a chunk of records based on the throttle plan and stores them in “DataExtension2.” Configure the journey’s “Entry Source” to use “DataExtension2.” 

 

SELECT TOP 10000 SubscriberKey, EmailAddress 

FROM DataExtension1 

 

  1. Manual Send: For one-time sends, go to Email Studio -> Content Tab -> Open the email -> Click on send. Set the send throttle under the “Configure Delivery” step after selecting the audience.

Send Throttle

If you require a different throttle setting each day, consider these options: 

  1. SQL: Create an SQL query using the “TOP” function to retrieve records based on the daily throttle plan. Adjust the throttle value manually each day and schedule the automation to run once.

Example: 

Day 1: 

SELECT TOP 10000 SubscriberKey, EmailAddress 

FROM DataExtension1 

 

Day 2: 

SELECT TOP 15000 SubscriberKey, EmailAddress 

FROM DataExtension1 

 

  1. SQL: Automate the process of retrieving records based on different daily throttles by using the “Row Number” function in SQL.

Example: 

Assuming audience data is stored in “DataExtension1” with fields: SubscriberKey, EmailAddress, CreatedDate, and Flag (a boolean field). Create a new Data Extension (“DataExtension2”) with fields: SendDate and Throttle. The query results will be placed in “DataExtension3,” which will serve as the sendable Data Extension. 

 

Query: 

SELECT  

  SubscriberKey, 

  EmailAddress 

FROM ( 

  SELECT  

    SubscriberKey, 

    EmailAddress, 

    ROW_NUMBER() OVER (PARTITION BY Flag ORDER BY CreatedDate DESC) AS RowNum 

  FROM DataExtension1 

) AS s 

WHERE s.RowNum <= ( 

  SELECT Throttle  

  FROM DataExtension2  

  WHERE CONVERT(nvarchar, SendDate, 23) = CONVERT(nvarchar, GETDATE(), 23) 

) 

Note: Consider creating a historical data extension to keep track of sent records and exclude them from the daily query.

 

  1. SSJS: Use an SSJS script activity with a “Querydefinition” to retrieve records based on the throttle plan. This script can be placed within an automation for automated execution.

Option 1: Using SSJS 

<script language=”javascript” runat=”server”> 

Platform.Load(“Core”,”1.1″); 

/* Return the date in YYYY-MM-DD format */ 

function formatDate(date) {                 

var d = date, 

month = ” + (d.getMonth() + 1), 

day = ” + d.getDate(), 

year = d.getFullYear(); 

if (month.length < 2)  

month = ‘0’ + month; 

if (day.length < 2)  

day = ‘0’ + day; 

return [year, month, day].join(‘-‘);     

} 

var currentDate = new Date();     /* get the current date */ 

var throttle = Platform.Function.Lookup(“DataExtension2″,”Throttle”,”SendDate”, formatDate(currentDate));  /* get the throttle where sendDate is today’s date */ 

/* Update the query and run it */ 

function queryUpdatePerform(qd, query) {  

qd = QueryDefinition.Init(qd); 

var update_status = qd.Update({ 

QueryText: query 

}); 

var perform_status = qd.Perform(); 

var status = “{Update:”.concat(update_status).concat(“, “).concat(“Perform:”).concat(perform_status).concat(“}”);  

return status; 

} 

var queryExternalKey = “External Key of the Query”; 

var throttleQuery = “SELECT TOP “.concat(throttle).concat(” SubscriberKey, EmailAddress FROM DataExtension1″); 

var status = queryUpdatePerform(queryExternalKey, throttleQuery); 

</script> 

 

Option 2: Using SSJS + AMPscript 

/* AMPscript to format the date */ 

%%[ 

var @todayDate 

set @todayDate = FORMATDATE(NOW(), “YYYY-MM-DD”) 

]%% 

<script runat=”server”> 

Platform.Load(“Core”,”1.1″); 

var todayDate = Variable.GetValue(“@todayDate”); /* Retreive the value */ 

var throttle = Platform.Function.Lookup(“DataExtension2″,”Throttle”,”SendDate”, todayDate); /* get the throttle where sendDate is today’s date */ 

/* Update the query and run it */ 

function queryUpdatePerform(qd, query) {  

qd = QueryDefinition.Init(qd); 

var update_status = qd.Update({ 

QueryText: query 

}); 

var perform_status = qd.Perform(); 

var status = “{Update:”.concat(update_status).concat(“, “).concat(“Perform:”).concat(perform_status).concat(“}”);  

return status; 

} 

var queryExternalKey = “External Key of the Query”; 

var throttleQuery = “SELECT TOP “.concat(throttle).concat(” SubscriberKey, EmailAddress FROM DataExtension1″); 

var status = queryUpdatePerform(queryExternalKey, throttleQuery); 

</script> 

THINGS TO CONSIDER: 
  1. When defining the send throttle, the system will start processing at the specified time and continue until the send is complete or the end time is reached. If the end time is reached first, the remaining emails will be sent the next day at the same start time. 
  1. Adjust the delivery time for daylight savings changes.
  1. Plan the throttle according to the audience size and spread it over multiple days to maintain a good sender reputation, especially for IP warming strategies.
  1. If the throttle option is not available in your account, contact Salesforce support for assistance.
Conclusion:

Send throttle plays a crucial role in managing email campaigns effectively. By implementing the right throttle settings, organizations can prevent server overload, ensure timely support responses, and enhance email deliverability rates. Whether through journey builder, SQL queries, or manual sends, understanding the various methods of setting throttles allows for precise control over email volumes. By adhering to best practices and considering factors like audience size and sender reputation, organizations can optimize their email performance in Salesforce Marketing Cloud.

 

Ready to optimize your email marketing strategy and explore more Salesforce Marketing Cloud best practices? Visit our website to access a wide range of informative blogs and resources.

By: Ashwin Dhole

Leave a Comment

Your email address will not be published. Required fields are marked *