Formed by the confluence of Antelope and Dry Fork creeks, it rises in northeastern Wyoming in the Thunder Basin National Grassland in northeastern Converse County. It flows east into South Dakota, passes Edgemont, and skirts the southern end of the Black Hills, passing through Angostura Reservoir.
On the east side of the Black Hills, it flows northeast, past Oral and the Buffalo Gap National Grassland, and along the northwestern boundary of the Pine Ridge Indian Reservation and Badlands National Park. It is joined by Rapid Creek, passes Wasta and is joined by the Belle Fourche River in eastern Meade County, after which it flows ENE along the southern boundary of the Cheyenne River Indian Reservation. It is joined by Cherry Creek at the town of Cherry Creek. It flows into the Missouri in Lake Oahe, approximately 32 mi (50 km) NNW of Pierre, South Dakota, with the lower 35 mi (56 km) of the river forming an arm of Lake Oahe.