According to the U.S. Census Bureau, the county has a total area of , of which is land and (0.9%) is water [REF].
The James River originates in Botetourt County, near the village of Iron Gate, just south of the Alleghany County border by the merger of the pristine Cowpasture River and the Jackson River.