Die Weisach entspringt auf einer Höhe von 354 m ü. NHN nordöstlich des Kernortes Maroldsweisach und wenig westlich der Landesgrenze zu Thüringen.
Von dort fließt die Weisach zunächst in südwestlicher Richtung, unterquert die St 2428 und läuft dann durch Maroldsweisach. Sie unterquert im Ort die B 279 und verläuft dann parallel zu ihr in südöstlicher Richtung. Nördlich von Pfaffendorf unterquert sie die B 303, die B 279 bleibt danach für weitere etwa fünf Kilometer die Talstraße. Unweit östlich erstreckt sich dort das rund 45,5 ha große NaturschutzgebietGalgenberg-Goßberg.
Nachdem sie den Kernort Pfarrweisach durchquert hat, schlägt sie noch einen etwa einen Kilometer langen Bogen nach rechts und mündet schließlich auf einer Höhe von 272 m ü. NHN von links in die Baunach. Neben der Mündung steht in der Aue ein kleiner Aussichtsturm.
Der 13,86 km lange Lauf der Weisach endet ungefähr 82 Höhenmeter unterhalb ihrer Quelle, sie hat somit ein mittleres Sohlgefälle von etwa 5,9 ‰.
Die Weisach verläuft auf ganzer Länge in Schichthöhe des Sandsteinkeupers des Itz-Baunach-Hügellandes. Die nordöstlichen Randhöhen des Tales ragen teilweise bis in den Unterjura. Östlich von Maroldsweisach steht der von der oberen Weisach in einem nach Westen ausholenden Bogen umflossene Zeilberg, ein vulkanischer Härtling aus Nephelinbasanit, der in einem großen Steinbruch abgebaut wird.