John Gregory é o sétimo filho do sétimo filho e mantém uma cidade do século XVIII relativamente bem e longe dos maus espíritos. No entanto, ele não é mais jovem e suas tentativas de treinar um sucessor foram todas mal sucedidas. Sua última esperança é um menino chamado Thomas Ward (Ben Barnes), filho de um jovem fazendeiro. Seu primeiro desafio será grande: Ele terá que enfrentar a Mãe Malkin (Julianne Moore), uma terrível e poderosa bruxa, que escapou do seu confinamento quando o grande mestre Gregory estava afastado da cidade.