Whenever creation of new object requires setting many parameters, and some of them (or all of them) are optional.
E.g. (for Java but you can easily transform to other language)
User.builder() .name("John") .age(30) .sex(Sex.MALE) .build() instead of
User user = new User(); user.setName("John"); user.setAge(30); ... You can also easily create Objects for testing with such a builder e.g.
User maleUserOver30() { return User.builder() .sex(Sex.MALE) .age(31) .build(); }