Hordy Kaledończyków nie były równorzędnym przeciwnikiem dla zdyscyplinowanych legionów rzymskich. Szacuje się, że naprzeciwko 22 tysięcy Rzymian stanęło 30 tys. wojowników oraz towarzyszących im kobiet i dzieci. W centrum szyku stanęło 8 tys. wojowników sprzymierzonej z Rzymianami piechoty Batawów. Kawaleria rzymska rozlokowała się natomiast na wzgórzach. Legioniści jako rezerwa ukryli się za wałami własnego obozu. Armia kaledońska pod dowództwem Kalgakusa stała na pobliskim wzniesieniu, natomiast straż przednia Kaledończyków zeszła na równinę. Szyk pozostałych oddziałów przypominał podkowę.

Bitwę rozpoczął wzajemny ostrzał z włóczni i strzał. Następnie Agrykola nakazał piechocie sprzymierzeńców atak na przeciwnika. Kaledończycy zepchnięci w kierunku wzgórza próbowali kontratakować ze szczytu wzniesienia, dostali się jednak sami w kleszcze kawalerii rzymskiej z obu skrzydeł. Pokonani Kaledończycy zaczęli uciekać do pobliskiego lasu, ścigani przez dobrze zorganizowanych kawalerzystów. Legioniści nie brali udziału w bitwie, zajmując podczas bitwy stanowiska w obozie. Zwycięstwo Rzymian odniesiono głównie dzięki piechocie Batawów. W bitwie poległo około 10 tysięcy Kaledończyków oraz 367 wojowników po stronie rzymskiej.