Profanity Filters

How to build filters around specific words or phrases

Written by Aniko Villeneuve
Updated over a week ago

Profanity: Masking & Screening

This feature provides the ability to screen out profanity in customer-submitted content to ensure a safe and positive work environment for team members.

Two features are supported:

  1. Masking, where the specific offensive words and phrases are masked from view with special characters, and

  2. Screening, where the entire conversation is removed from view and only available to an administrator via export of screened conversations.

Each method has its own set of offensive words that apply, and these words are compared to all comments submitted by team members, admins, and customers.

Profanity filtering is only applied to comments and not other submission types. Both Masking and Screening work with all available Channels.

Profanity filtering is mostly useful for customer submitted comments. It does, however, also filter team member or admin comments. When a user submits a masked term, the customer only sees a masked/obfuscated version of the submitted comment. This workflow should not occur often (as users should not be using offensive masked terms), but could be useful to protect customers from abuse.

Term Masking

Term masking can be enabled from the admin Advanced Settings page. When masking is enabled, a global list of offensive words and phrases is used as the default list of terms that are masked. If a customer wants to add or remove terms from the default list, they can be entered in the Masking Overrides field.

Terms that start a line with a '+' are added to the list. and terms that start a line with '-' are removed from the list. If a line starts with any other character, the line is ignored. Single words, multiple words and regular expressions are all supported.

Terms can be entered using any language based on the Latin alphabet (English, Spanish, French, etc.). Location-level override is not currently supported. There are no 'per-language' filter lists, as we don’t currently translate the language a comment is written in automatically.

Here is an example scenario:

Given an account is configured with these settings for Term Screening:

The experience for the user will look similar to the below example, where the right hand side shows customer input, and the left hand side shows Loop Inbox view:

Masked words are saved to the database without modification. Whenever a conversation with words needing to be masked is returned from the database, all of the comments on the conversation are masked using the most recent list of masking overrides. This makes it so users don’t have to see masked words while preserving the original comments in the database should the need arises. Updating masking overrides immediately takes effect, which ensures that problematic terms can be added to the masking overrides and hidden without delay.

Conversation Screening

Term screening can also be enabled from the account settings page. Screening Overrides follow the same format as Masking Overrides. If the first comment on a conversation contains a screened word, the conversation doesn't show up in the Loop Inbox. When a screened term is included within an existing conversation, it is removed from view and excluded from the Loop Inbox. If a user has the conversation that is now screened open, the conversation is exited and the user is taken back to the default Inbox view.

When conversations are screened, they continue to be included in reporting metrics. Careful consideration has, however, been made to ensure that individual conversations will not have a significant effect on metrics, for example, average response time uses median instead of mean so outliers are ignored.

Note: a known limitation of the current implementation of screening is that some Loop user reports (such as the Daily Email Digest) will continue to display screened conversations.

The leading “+” means include the word in masking/screening, the leading “-“ means to remove (and has the effect of allowing the word).

A ‘master list’ for each function are managed by Benbria in English and French.

Term screening uses a separate list, and would generally contain words that are worse than ones found in the term masking list.


When using regular expression overrides, careful attention must be taken to insure regular expressions are doing exactly what they intend to do. For example, adding “+yolo.*” results in the following:

Before the override:

After applying the override:

This may be an unexpected result because “yoloing me” gets entirely masked out instead of just “yoloing”. After changing the override to “+yolo.*?”, the conversation excludes “ me” from being masked and works as expected.

For additional help on Regular Expressions, take a look at this interactive regex primer, this starter and even this advanced interactive tool. Things like credit card numbers, or extensions of words can be handled (e.g. “crrraaaaaa…p” and all variations can be handled with a simple expression like “c+r+a+p+”).

Did this answer your question?