Publius Cornelius Scipio debarked for Sicily in 205 BC with an army of volunteers, to meet up with forces (the survivors from Cannae) assigned to him there. As a furious debate raged in the Senate as to the next course of action, no new levies were authorized for the invasion of Africa, but Scipio was allowed to prepare his campaign. Allied arrangements were made with various African tribes, Libyans, Moors and the Numidian Prince Massinissa to assist in the coming invasion.
In 204 BC Scipio crossed the sea and landed in North Africa with a veteran army of as many as 35,000 men. While Scipio had retained the services of Masinissa, another Numidian, King Syphax, maintained his loyalty to Carthage. Both sides of the Numidian forces had already been at war, and while being used to the advantage of both Rome and Carthage, both also sought favor by the two warring parties. Masinissa had been on the losing end of most engagements with Syphax, but he still was able to provide Scipio with 6,000 infantry and 4,000 of the vaunted Numidian cavalry.
At the start of the campaign, Scipio moved on Utica and laid siege. Met by a joint army of Carthaginians and Numidians, led y Syphax and Hasdrubal Gisgo, he was pinned along the shore of the African coast for a time and forced to lift the siege. For the winter of 204 to 203 BC, both armies waited in their own camps until the following spring. At the start of the 203 BC season, Scipio launched a surprise attack, burning the camps of the enemy and creating mass panic. In the end, 40,000 enemy troops were dead with an additional 5,000 prisoners taken, but both Syphax and Hasdrubal escaped. With the quick victory, Scipio resumed his siege of Utica, while the Carthaginians immediately began recruiting another army.
Soon after, another Carthaginian force of about 30,000 men began to muster at the Great Plains of the Bagrades River. Scipio moved away from his siege of Utica and swept down in force on the green army. The Romans smashed the defenders, this time in a double flanking maneuver, but Hasdrubal and Syphax were able to escape once again.
Late in the year 203 BC, Syphax was still operating with a small force near Cirta. Scipio dispatched Laelius and Masinissa, the allied Numidian king with a partial force to end the threat once and for all, while he maintained the siege of Utica. Near the Ampsaga River, Syphax fought his last battle as his outmatched force was badly beaten. Masinissa capured Syphax and took him to Cirta, whereby the city surrendered without resistance.
With this defeat and the fall of Utica, Carthage had little choice but to sue for peace and accept Scipio's harsh terms. Carthage, however, had recalled Hannibal from Italy and seemed to accept the terms only to give Hannibal enough time to return. As Hannibal was making the dangerous voyage back to Africa (trying to avoid the powerful Roman fleets) with his veteran army, a Roman supply fleet ran aground near Carthage and it was seized and plundered by the locals. Envoys sent to Carthage to complain about this violation of the newly ratified peace treaty were promptly attacked, and Scipio had no choice but to renew his offensive. He laid waste to the interior towns of Carthaginian territory and met with Masinissa and his Numidian cavalry near the Bagrades River. By this time, in 202 BC, Hannibal had also returned and recruited a new army of 25,000 men to supplement his 12,000 veterans. Marching towards Scipio, the two armies met near Zama on the plains of the Bagrades River.