Buffalo Creek begins in Hartley Township, in Union County, near the Union County/Centre County border. It flows east and slightly north between Buffalo Mountain and Branch Mountain before falling steeply through two geographical features known as the Gooseneck and Buffalo Gap. The creek then turns southeast and flows out of Hartley Township. Upon leaving Hartley Township, the creek enters Lewis Township and meanders eastward, south of Jones Mountain. It passes through the Mifflinburg Reservoir. The creek then flows into southern West Buffalo Township and northern Mifflinburg. Shortly before exiting West Buffalo Township, Buffalo Creek picks up its tributary North Branch Buffalo Creek and briefly turns northwards before turning eastward again and leaving the township.