[SalesForce] How to suppress contacts from marketing cloud email sends if they already got an email

My business is trying to implement 2 rules on marketers about the frequency they can email our contacts in marketing cloud. I am looking for a solution to do this perhaps in automation studio to eliminate errors.

The first rule is that contacts can only receive one email per day – if they already received one, any subsequent sends for that contact would fail / be skipped record.

Second rule is that contacts can only receive two emails in a 7 day rolling period. If they already received 2 emails within the past 7 days, they would fail / be skipped record.

Our MC environment was set up to have a standard data extension that is populated from synchronized data extension on a daily basis. Marketers create filtered data extensions from the standard and then send to the filtered DE.

Problems this poses:

  1. Filtered data extension is static at time of creating – if I were to include a last sent date in the standard DE automation that uses tracking data, it would not prevent sends against previously filtered data extensions that are not refreshed.
  2. Marketers can schedule multiple emails on the same day or during the same 7-day period in the future – tracking tables that might be used for suppression don't contain jobs scheduled in future. Eg. Today is 8/25 and no email has been sent today. Marketer sets up three emails to be sent tomorrow – neither filter criteria would be met.

Best Answer

One possibility would be including an Exclusion Script in the email that filters out subscribers present in the sent data view with a date of the current day or in your second case the last 7 days.

According to Eliot's answer to another question the script needs to be saved to a content block and the return value (content) of this block needs to be used in the Exclusion script:

%%[
  var @test
  set @test = DateDiff(iif(RowCount(LookupOrderedRows('_Sent',1,'EventDate desc','SubscriberKey',_subscriberKey))==1,Field(Row(LookupOrderedRows('_Sent',1,'EventDate desc','SubscriberKey',_subscriberKey),1),'EventDate'),'1/1/2000'),SystemDateToLocalDate(Now()),'D')
]%%
%%=v(@test)=%%

And your exclusion script will look like this (for the 7 day check):

TreatAsContent(ContentBlockbyID('[ID_OF_YOUR_CONTENT_BLOCK]')) < 7

Related documentation:

Related Topic