Pada tahun 117 M, kekaisaran Romawi berdiri dari padang pasir Afrika hingga lautan Kaspia, namun barisan depan yang terjauh dan belum di taklukan adalah Inggris Utara. Di tanah tanpa ampun inilah, pasukan Romawi alami perlawanan kuat dari orang-orang yang di kenal sebagai Picts, penduduk asli dari dataran tinggi Skotlandia. Suku Picts yang di bawah kepemimpinan raja mereka, Gorlacon (Ulrich Thomsen), menggunakan taktik Guerrilla dan telah menaklukkan pos-pos pasukan Romawi satu persatu. Prajurit Romawi bernama Quintus Dias (Michael Fassbender) adalah satu-satunya yang selamat dari serangan tersebut. Meski sempat ditawan oleh Vortix (Dave Legeno) dari suku Picts, namun Dias bisa melarikan diri. Sementara itu, Agricola (Paul Freeman), seorang gubernur yang terlibat dalam penaklukan Romawi di Britania tersebut, ingin memperoleh bantuan dengan pemerintah pusat dan berharap mencari jalan untuk kembali ke Romawi dengan aman. Dia pun mengirimkan pasukan dari Legiun Ke-9 ke garis depan di bawah komando seorang jendral bernama Titus Flavius Virilus (Dominic West), dengan perintah untuk membasmi ancaman para Pict. Dalam pasukan itu, terdapat seorang pencari jejak bernama Etain (Olga Kurylenko), yang akan membawa pasukan menuju lokasi persembunyian suku Picts.
Saat pasukan tiba di Utara, mereka menemukan Dias yang dikejar oleh tiga orang anak buah Gorlacon. Setelah membunuh ketiga orang tersebut dan menyelamatkan Dias, Virilus belajar bahwa ayah Dias adalah seorang gladiator yang terkenal, yang memenangkan pertarungan agar dapat memperoleh kebebasannya. Dias segera bertemu dan berteman dengan dua perwira Romawi di Legiun Ke-9; seorang veteran bernama Bothos (David Morrissey) dan seorang prajurit muda bernama Thax (JJ Feild).
Namun pasukan tidak tahu bahwa mereka sebenarnya dijebak oleh Etain, yang tak lain adalah anggota suku Picts. Etain ternyata sangat membenci kekaisaran Romawi, karena mereka yang telah menjadikannya tidak dapat bicara, juga yang telah memusnahkan desanya dan membunuh kedua orangtuanya. Dalam penyergapan tersebut, suku Picts akhirnya dapat menghabisi Legiun Ke-9 dan telah menangkap Virilus. Belajar bahwa jendralnya telah ditawan, Dias, Bothos dan Thax, beserta empat korban lainnya -- seorang veteran bernama Brick (Liam Cunningham), dua prajurit Yunani-Romawi bernama Macros (Noel Clarke) dan Leonidas (Dimitri Leonidas), serta seorang juru masak dari pegunungan Hindu Kush bernama Tarak (Riz Ahmed) -- segera berangkat untuk membebaskannya. Setelah melakukan perjalanan beberapa hari, mereka akhirnya dapat menemukan pemukiman suku Picts namun gagal untuk membebaskan Virilus, di mana sang jendral menyuruh mereka untuk meninggalkannya dan segera kembali ke Romawi. Keesokan paginya, Virilus akhirnya terbunuh setelah dia dipaksa untuk bertarung dengan Etain.
Mereka semua pun berupaya kembali ke Romawi. Sementara Etain, Vortix, beserta delapan orang dari suku Picts dikirim untuk membunuh mereka. Tarak kemudian terbunuh sebelum ia bisa melompat ke sungai dari atas tebing, sedangkan Macros, bersama dengan Thax terpisah dari yang lainnya hingga dia sendiri tewas ketika berusaha lari dari kejaran seekor serigala yang menyerangnya. Ketika Dias dan kelompoknya mendirikan sebuah kamp untuk bermalam, hanya untuk menyadari bahwa kelompok Etain juga telah mendirikan kamp di dekatnya. Dias dan Brick pun memutuskan untuk menyerang mereka dan berhasil membunuh tiga orang dari suku Picts. Ketika keduanya kembali, mereka menemukan bahwa Etain telah membunuh Leonidas dan melukai Bothos.
Mereka kemudian melanjutkan perjalanan dan menemukan sebuah gubuk yang ditinggali oleh Arianne (Imogen Poots), seorang wanita dari suku Picts yang telah di usir karena dituduh sebagai dukun, yang kemudian berteman dengannya. Ketika Etain tiba di hari berikutnya, Arianne menghadapinya sementara ketiga prajurit Romawi bersembunyi di bawah papan lantai. Keesokan paginya, mereka bertiga meninggalkan Arianne, yang sebelumnya telah mengembangkan sebuah hubungan dengan Dias, memberikan mereka makanan tambahan untuk melakukan perjalanan menuju pos pasukan Romawi lainnya yang ada di dekatnya.
Setibanya di sana, mereka merasa ditinggalkan oleh pasukan, dan belajar bahwa pasukan Romawi telah mundur untuk membentuk garis pertahanan baru di Selatan atas perintah dari Kaisar Hadrian. Ketika mereka melihat Etain dan kelompoknya juga tiba di sana, mereka segera mendirikan posisi defensif di dalam pos. Setelah berjuang sekuat tenaga, ketiga prajurit Romawi ini akhirnya berhasil memusnahkan mereka semua, namun Brick terbunuh dengan tombak yang sebelumnya dilemparkan oleh Etain sebelum mati.
Ketika mereka mendirikan kamp untuk bermalam, Dias dan Bothos akhirnya bertemu kembali dengan Thax, dan ketiganya segera meneruskan perjalanan. Setelah mencapai garis pertahanan baru yang dibuat oleh pasukan Romawi, Thax mengancam Dias, yang mengatakan bahwa dia akan melaporkan kejahatannya. Keduanya pun bertarung dan Dias berhasil mengalahkannya. Sementara Bothos yang mencoba untuk memasuki gerbang, dia terbunuh oleh prajurit Romawi yang keliru menganggapnya sebagai orang dari suku Picts. Di sana Dias kemudian melaporkan pemusnahan dari Legiun Ke-9 kepada gubernur. Tak ingin kembali ke Romawi dengan membawa berita kegagalan pasukannya, Agricola bersama dengan tiga jenderal dari Romawi -- Antoninus (Michael Carter), Tesio (Tom Mannion) dan Cassius (Peter Guinness) -- akhirnya memutuskan untuk merahasiakan tentang nasib dari Legiun Ke-9 tersebut untuk umum, dan berencana untuk membunuh Dias.
Putri gubernur bernama Druzilla (Rachael Stirling), kemudian dipercaya untuk membunuh Dias, namun Dias mengetahui hal itu dan dia berhasil menggagalkannya. Dias menghadapkan Druzilla dan segera belajar bahwa mereka ingin mengubur kebenaran tentang kematian Jenderal Virilus dan nasib dari Legiun Ke-9 bersama dengan dirinya. Mengetahui hal itu, Dias segera melarikan diri menuju gubuk Arianne di hutan.