This formula snippet ISBLANK( TEXT([Contact].Request_Portal_User_Account__c == True) ) is never going to evaluate to `true`. The text value of that Boolean expression would always be a non-blank string (`"True"` or `"False"`), if this even compiles. Remember that the `NOT()` function takes a Boolean, and Checkbox fields are Booleans. You can pass one to the `NOT()` function directly. If we make those substitutions, remove some of your extra parentheses, and add a comma (I don't believe your formula as written will compile), you come out with AND( NOT($Setup.Hierarchy_Settings__c.Skip_Process_Builder__c), [Contact].RecordType.DeveloperName == $Label.Contact_Record_Type, OR( AND( ISNEW(), NOT([Contact].Request_Portal_User_Account__c) ), AND( ISCHANGED([Contact].Request_Portal_User_Account__c), NOT([Contact].Request_Portal_User_Account__c) ) ) ) That's going to be true if the first two conditions are true, and `Request_Portal_User_Account__c` is `false` on a new record or is changed to `false` on an existing record.