Papiss Demba Cisse scored the only goal of the game for Freiburg from the penalty spot in the 64th minute.
Freiburg have now won four of the last five matches at home and have 18 points and lie in eighth place.
Mainz remain second in the league with 24 points, but have scored just one goal in the last four Bundesliga matches and have lost four of their last five games, including in the German Cup at second division Alemannia Aachen.
Freiburg had the first chance of the game in the third minute with Anton Putsila's long blast which Mainz keeper Christian Wetklo could only fend out for a corner.
Wetklo was again tested after 28 minutes, diving to save a free-kick by Julian Schuster from 26 yards.
The hosts remained the more offensive and missed another chance five minutes before the break with Jan Rosenthal's volley going just over.
Mainz could not find much in the way of attack and saw Freiburg have another opportunity 11 minutes after the break with Wetklo doing a fine job to save Cedrik Makiadi's attempt.
Mainz finally went close in the 58th minute with Nikolce Noveski's header going just wide.
Freiburg took the lead after 64 minutes from the spot through Cisse. Niko Bungert brought down Oliver Barth in the area and the Senegalese Cisse stepped up and struck into the upper right corner for for his ninth goal of the season.
The hosts nearly doubled the advantage just four minutes later but Stefan Reisinger poked his shot just wide of the left upright.
Mainz pushed forward in the closing stages looking for at least a draw.
But they missed a chance in the 85th minute when Adam Szalai's cross to Andre Schurrle was deflected by Schuster but keeper Oliver Baumann was able to save.