Pyras nežygiavo prieš Romą, nes laukė pastiprinimo iš sąjungininkų. Kai jis suprato, jog pagalba neatvyks, nusprendė kautis prie Sinio upės esančioje lygumoje tarp Pandozijos ir Heraklėjos. Pyras užėmė pozicijas ir laukė. Prieš mūšį jis pasiuntė diplomatus pas Romos konsulą, siūlydamas tarpininkauti konflikte tarp Romos ir pietų Italijos gyventojų. Jis pažadėjo, jog graikai pripažins jį teisėjumi ir to paties reikalavo iš Romos. Romėnai atmetė pasiūlymą ir įkūrė stovyklą dešinėje Sinio upės pusėje.
Nežinoma, kiek karių Pyras paliko Tarento mieste, bet Heraklėjoje jis tikriausiai turėjo 25–35 tūkst. karių. Jis įsitaisė kairėje upės pusėje, tikėdamasis, jog romėnams iškils sunkumų persikelti ir jam liks daugiau laiko pasiruošti puolimui. Jis įtaisė lengvuosius pėstininkus prie upės, kad šie praneštų kada romėnai kelsis, nes tikėjosi pirmiausia juos užpulti su kavalerija ir drambliais. Valerijus Levinas turėjo apie 30 tūkst. karių. Tai pirmas kartas, kai istorijoje susidūrė romėnų legionai ir makedoniečių falanga.
Auštant romėnai pradėjo keltis, o jų kavalerija užpuolė kraštuose buvusius lengvuosius pėstininkus ir privertė bėgti. Pyras sužinojo, kad romėnai keliasi ir pasiuntė prieš juos Makedonijos ir Tesalijos raitelius, kurie sutrikdė romėnų rikiuotę ir atsitraukė. Pyro lankininkai pradėjo šaudyti, o falanga – pulti. Falangos linija buvo beveik tokio pat ilgio kaip puolančių romėnų rikiuotė.
Falanga puolė septynis kartus, bet neperskrodė legiono. Romėnai irgi puolė septynis kartus, bet be rezultato. Vienu metu mūšis buvo toks aršus, jog Pyras susikeitė šarvais su savo sargybiniu, kad graikai nesuprastų, kad jis žuvo ir neprarastų noro kautis. Po to sargybinį nužudė ir pasklido kalbos, jog Pyras žuvo. Jo pajėgos sudvejojo ir romėnai garsiai rėkdami mėgino pakreipti mūšio eigą. Supratęs akimirkos svarbą, Pyras nusiėmė šalmą ir prajojo prieš savo vyrų gretas. Po to mūšis vėl tapo aršus.
Nepelnydamas pranašumo, Pyras nusprendė panaudoti dramblius, laikytus rezerve. Romėnų raiteliai kėlė per didelę grėsmę Pyro sparnams. Išsigandę romėnų žirgai pasiuto ir sutrikdė legionų gretas. Po to Pyras prieš juos pasiuntė Tesalijos raitelius ir mūšis buvo laimėtas. Romėnai atsitraukė kitapus upės. Tai viena pirmųjų Pyro pergalių prieš romėnus.