The Browns will receive a seventh-round pick in 2020, sources told ESPN's Adam Schefter.
Coleman, 24, was the No. 15 overall pick in the 2016 draft. He was selected after the Browns sent the No. 2 overall pick to the Philadelphia Eagles as part of a trade; the Eagles used the pick to draft quarterback Carson Wentz.
The Bills were in need of help at receiver despite the return of 2017 second-round pick Zay Jones from the non-football injury list Sunday after offseason knee surgery.
"It hadn't worked out in Cleveland probably the way he thought when he was drafted or the way they thought when they drafted him in the first round," Bills general manager Brandon Beane said of Coleman. "So it's a fresh start for him to come in here and compete. He's not gonna automatically get anything. He's gotta come in here and compete."
"You can't coach speed, and we're always looking to add it," Beane said. "That was one of the attractive things of him coming out [in the draft] and he's still got that."
Beane said Coleman still must pass a physical Monday before the trade is finalized.
Buffalo entered training camp with Kelvin Benjamin as its top receiver and questions down the rest of its depth chart.
In place of Jones through the first week of training camp, the Bills rotated a group of receivers with the first team, including Andre Holmes, Malachi Dupre, Brandon Reilly and undrafted rookie Robert Foster. They also have used Jeremy Kerley as a slot receiver.
Coleman played in nine games last season for the Browns, making eight starts; he missed seven games with a hand injury. He caught 23 passes for 305 yards and two touchdowns.
As a rookie, Coleman started all 10 games in which he played, catching 33 passes for 413 yards and three touchdowns.