I'm wondering if there is a way in ExactTarget/Salesforce Marketing Cloud to limit the number of emails sent to a user in a specific period of time. For example, I would like to send no more than 3 emails to a subscriber in one week and no more than 1 each day.
3 Answers
Currently there is no frequency capping feature available out of the box. One way to do this is writing the email sends to a data extension and using this information as filter criteria for your email audiences for example.
Use this query to output to a DE with the 3 fields at the top.
SELECT
DISTINCT EmailAddress as [Email Address], s.SubscriberKey, GETUTCDATE() as [Date Added]
from
(select
SubscriberKey, count(1) as cnt
from
_sent with(nolock)
where
dateadd(wK,3,EventDate) > DATEADD(dd, DATEDIFF(dd,0,getUTCdate()), 0)
group by
SubscriberKey
Having
count(1) >= 2
) x INNER JOIN
_Subscribers s with(nolock)
On x.SubscriberKey = s.SubscriberKey
then use this ampscript (or ContentAreaByname point to this) at the top of your email to lookup the DE at send time
%%[ /* Suppression Lookup */ SET @FC_Row = LookupRows("Suppression_FrequencyCap_Email","SubscriberKey", _SubscriberKey) IF rowCount(@FC_Row) > 0 THEN RaiseError("Do not send to subscriber ñ Frequency Capping applied.", true) ENDIF]%%
-
it cut my code, here's the top half SELECT DISTINCT EmailAddress as [Email Address], s.SubscriberKey, GETUTCDATE() as [Date Added] from (select SubscriberKey, count(1) as cnt from _sent with(nolock) where dateadd(wK,3,EventDate) > DATEADD(dd, DATEDIFF(dd,0,getUTCdate()), 0) Commented May 28, 2018 at 16:36
-
Make sure to use the
{}
code format button in the editor or indent your entire code block by four spaces. That way your formatting won't be mangled. Commented May 28, 2018 at 17:00
Since this has been posted, Salesforce introduced the Auto Suppression "Lists". While they're not target-able by Query Activity out of the box, you can make that connection via API and utilize one or more queries to maintain a suppression audience.
The benefit of using Auto Suppression is that you do not need to use Exclusion Scripts in every send definition.
I've outlined a solution here in this Github repo: https://github.com/wvpv/sfmc-frequency-suppression
Here's the Send query from that solution:
select
a.subscriberid
, a.subscriberkey
, count(*) as SendCount
from _Sent a
inner join _Job j on j.jobid = a.jobid
where 1=1
and j.sendClassificationType = 'Default Commercial'
and j.TestEmailAddr is null
and j.Category != 'Test Send Emails'
and j.EmailSubject not Like '%test%'
and a.eventDate >= convert(date, getDate()-7)
group by
a.subscriberid
, a.subscriberkey
having count(*) > 0
/* name: Subscriber_Activity_Summary_Sends */
/* description: aggregates sends by subscriber in the past 7 days */
/* target: Subscriber_Activity_Summary */
/* action: overwrite */