The source of the river is on Warren Moor, part of Kildale Moor, just south of the village of Kildale. It flows east until it reaches the Whitby to Middlesbrough rail line where it does a complete turnaround to flow west to Kildale. It then flows south-south-west through woodland to the confluence with Dundale Beck where it turns north-west through Low Easby and Little Ayton, before turning west and then south-west at Great Ayton. It runs parallel to the A173 to Stokesley. The river becomes increasingly meandering as it continues south-west past Skutterskelfe to Hutton Rudby and Rudby, where it turns north-west and then west again over Slape Stones waterfall. At Crathorne it turns north and then north-east as far as Middleton-on-Leven before passing under the A19 in a north-west direction. The final couple of miles are north and north-west between Ingleby Barwick and Yarm, before the river joins the River Tees.
The river drains from the Cleveland Hills across a mixed geology of mostly Permian and Jurassic age bedrock of low permeability. Most of the deposits on top of the bedrock are boulder clay. There is mixed agriculture, with some moorland and forestry near the source.
Due to a weir on the lower river built during the Industrial Revolution, migratory and territorial fish and mammals had been missing from the river. In 2007, the Environment Agency built a fish bypass at the weir and in 2011, was able to announce the return of spawning salmon to the river for the first time in 150 years.
In Stokesley, the river is crossed by a 17th-century packhorse bridge, Taylorson's Bridge, which was once the only crossing into the town. The Domesday Book records the existence of a water mill on the banks of the river in the town. In Hutton Rudby there is a plaque on a bridge that marks the spot of a water mill that, amongst several uses, once made sailcloth.