# Filters

Didn't we already mention you can implement logic in your flows? Some clever person once said that repetition is the key to mastery. Let's, therefore, once again uncover the strength of another Utility module. This time, we'll talk about Filters.

As outlined above, Filters represent an effective way to implement logic into your flows. Just drag & drop the Filters utility module to see all the options that are there for you to discover.

As you can see, there are multiple components that help you incorporate some decision-making processes into your flows. Let's explain all of them.

**Contains**
A message passes through this filter if a value in the "Data" field contains the value in the "Contains" field. Note that typically, you would select your "Data" field to be a variable representing some data from a previous component back in the chain and "Contains" field to be either a hardcoded value or another variable. Values can be text, numbers or dates.

**Equal**
A message passes through this filter if a value in the "Data" field equals the value in the "Equals" field. Note that typically, you would select your "Data" field to be a variable representing some data from a previous component back in the chain and "Equals" field to be either a hardcoded value or another variable. Values can be text, numbers or dates.

**Greater than**
A message passes through this filter if a value in the "Data" field is greater than the value in the "Greater than" field. Note that typically, you would select your "Data" field to be a variable representing some data from a previous component back in the chain and "Greater than" field to be either a hardcoded value or another variable. Values can be text, numbers or dates.

**IsNotEmpty**
A message passes through this filter if the data in the "Field" field is not empty. This is especially useful when checking if a variable contains data or if it is empty.

**LessThan**
A message passes through this filter if a value in the "Data" field is less than the value in the "Less than" field. Note that typically, you would select your "Data" field to be a variable representing some data from a previous component back in the chain and "Less than" field to be either a hardcoded value or another variable. Values can be text, numbers or dates.

**Modulo**
A message passes through the filter if the remainder after division of the value in the "Data" field by the value in the "Divisor" field is zero.

**NotEqual**
A message passes through this filter if a value in the "Data" field does not equal the value in the "Does not equal" field. Note that typically, you would select your "Data" field to be a variable representing some data from a previous component back in the chain and "Does not equal" field to be either a hardcoded value or another variable. Values can be both text, numbers or dates.

**Range**
A message passes through this filter if a value in the "Data" field falls into the range specified in the "Minimum value" and "Maximum value" fields. Values can be numbers or dates.

To fully understand Filters, we recommend looking at an example that we presented in one of the previous sections.

Implementing logicLast updated