We are trying to automate a Contact Delete process in our SFMC account (on a fortnightly bases). One of the primary challenges with this is that SFMC Contact Delete does not include Non-Sendable DEs. Our business has highlighted that they want all data to be purged from the system in full (including the Non-Sendable DEs).

Besides making all the Non-Sendable DEs sendable (which is not best practice/risky/ time consuming), are there any other solutions? Is the an SF platform that can do this? Are there any work arounds? Is there any 3rd party SDK's from the Market Place that can handle this?

2 Answers 2


There is a good reason why non-sendable data extensions are excluded from the contact deletion process: how would you identify which records should be deleted? Since contact deletion process takes the Contact Key as input, and traverses through all the sendable data extensions, it is easy to identify the records to delete. This is using the column in the data extension, which is mapped to the Subscriber Key in the configuration: enter image description here

When the record is identified where the value of the field mapped to the Subscriber Key matches the Contact Key to be deleted, it is removed.

As non-sendable data extensions don't have that mapping, and might not contain the Contact/Subscriber Key column at all, how would you select the records to delete? The only feasible way it is to identify the non-sendable data extensions, and create SSJS running in Automation Studio, ensuring deleting rows from these. But it is a labour consuming task, which also requires you to keep track on the non-sendable data extensions where personal data is stored. Here is an SSJS snippet you can use as a reference:

<script runat="server">
     var rows = Platform.Function.DeleteData('CustomerData',['email'],['[email protected]']);

CustomerData being name of data extension in which the data is to be deleted.

  • 1
    Hi Lukas Thanks for your input here, appreciate it. We will be provided Contact Keys to important via an Automation and simply use in an Delete Contact SSJS script. At the moment the best idea we have come up with is: -Minimize the use of non-sendable DEs -Create a data retention policy for all non-sendable DEs -Use a DE inventory SSJS script to pull all non-sendable DEs and their details -periodically iterate through those non-sendable DEs and make them sendable if possible manually or delete them all together. As you has said, it is very labor intensive and not ideal
    – Weenus23
    May 23, 2023 at 0:48

I've built a solution that does this. It involves data extension and field inventory, a set of fuzzy matching criteria to identify possible key fields (as @LukasLunow mentioned) and a set of queries that select rows from all qualified data extensions. The results of these queries are processed with a Script Activity that does the deletion.

This is run in conjunction with a normal contact delete that covers the sendable sources.

  • Thanks Adam, appreciate your input and everything you do for us. I will take this suggestion on board to enhance the current approach we are taking.
    – Weenus23
    May 23, 2023 at 0:54

You must log in to answer this question.

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