I have a request to create a way to limit the number of non-transactional emails a user can receive. I saw some other questions suggesting the use of a Data Extension to control it, but in this case I have a few particularities:

  • It's a hotel chain and each hotel has a Business Unit. Each hotel has it's own master Data Extension, which has only people who have stayed in that unit. But if a person stayed in more than one hotel, they will be present in more than one Business Unit;
  • Corporate Marketing can send emails to all database, regardless of which hotel they stayed;
  • Corporate Marketing should have the possibility to override a the exclusion and send emails despite the capping;
  • A user should not receive more than 4 marketing emails a month, across all Business Units, and should not receive 2 emails within 3 days.

The priority of sends during a month would be:

  • Corporate Marketing: 1 email per month
  • Regional Marketing: 1 email per month sent to all the hotels within a region (e.g. North America)
  • Hotels: 2 emails per month, to be share across all hotels globally.

I haven't done this but it sounds like a request that makes sense from a business perspective. Has anyone done something similar and could share some advice?

1 Answer 1


You can solution this using Data Extension Retention Settings in Shared Data Extensions and the UpsertDE AMPscript function or the _Sent data view and Exclusion Scripts. Though it's not the most simplistic way of doing it, there is nothing currently out-of-the-box that allows you to manage how many emails a subscriber receives.

  1. Create a data extension in the Shared Data Extensions folder with the intention of storing information about what subscribers you have sent to. You'll have a monthly data retention set up to delete individual records
  2. Create another data extension in the same folder with a data retention for 3 days.
  3. Use the UpsertDE function to write to these data extensions at time of send. i.e.

    IF _messagecontext == 'SEND' THEN UpsertDE('Data Extension', EmailAddress, @emailAddress) ENDIF

  4. Or query the _Sent Data View to get send information

  5. Use an Exclusion Script to exclude those subscribers in each of the data extensions. ROWCOUNT(LOOKUPROWS("Exclusion_DATA_EXTENSION_NAME","EMAIL_ADDR_FIELD_NAME", EMAILADDR))>0

You may have to do some canoodling of the data using SQL query activities to separate it by brand or region, but it is the same concept -- The Exclusion Script should keep the subscribers from receiving the email. And the data retention settings should drop the subscriber out of the data extension and make them eligible to receive emails again.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .