황해북도 남동쪽에 위치해 있는 군. 예성강의 지류 구연천 상류유역에 위치하고 있다. 동쪽은 아호비령산줄기(阿虎飛嶺山~)와 임진강(臨津江)을 경계로 강원도의 철원군과 이천군, 남쪽은 장풍군, 서쪽은 금천군, 북쪽은 신계군과 접해 있다. 동서(황강리~백화리) 간의 길이는 19km이고, 남북(수합리~하남리) 간의 길이는 29km이며, 면적은 421.55㎢로서 도 전체면적의 4.46%를 차지한다. 현재 행정구역은 1읍 17리로 구성되어 있으며 군 소재지는 토산읍이다.
고구려시기에는 이 지역을 오사함달이라고 하였다. 756년에 오사함달현을 토산현으로 개칭하였다. 『신증동국여지승람』에 의하면 현의 북쪽 2리에 읍의 진산인 토산이 있다고 하였다. ‘토산’은 토끼산이라는 뜻이다. 오사함달에서 ‘오사함’은 ‘토끼’를 뜻하던 옛말이고, ‘달’은 ‘산’을 의미하는 말이다. 그러므로 오사함달현은 토끼산이 있는 고을이라는 말이다. 옛날 달처럼 둥글게 쌓은 산성이 있다 하여 월성이라고 불렀다.
토산군 지역은 삼국시대에 백제의 판도에 있다가 후에 고구려의 영역으로 되어 오사함달현(烏斯含達縣)이라 불렸으며 통일신라 때에 토산현으로 정해져 한주(漢州)에 소속되어 있었다. 고려시대에는 장단(長湍)의 속현으로 되어 토산현이라 하였다. 조선이 건립된 후 1413년에 토산현은 풍해도에 소속되어 황주목(黃州牧)의 관할 하에 있었다. 1895년에 23부제를 실시하면서 개성부(開城府) 토산군으로 개편되어 읍내방(邑內坊)의 4개 리, 석적방(石積坊)의 6개 리, 유촌방(柳村坊)의 3개 리, 서가동방(西加洞坊)의 4개 리, 숙인방(宿仁坊)의 5개 리, 다치방(多峙坊)의 3개 리, 외현방(外峴坊)의 6개 리, 천동방(泉洞坊)의 3개 리, 미원방(美原坊)의 4개 리를 관할하였다.
1896년에 13도제를 실시하면서 황해도 토산군으로 되어 방을 면으로 개편하였다. 이때 관하에 다치면(多峙面), 유촌면(柳村面), 미원면(美原面), 서가면(西加面), 석적면(石積面), 숙인면(宿仁面), 외현면(外峴面), 읍내면(邑內面), 천동면(泉洞面) 등 9개 면이 있었다. 1914년 행정구역 폐합 시에 토산군이 폐지되면서 읍내면·서가면·석적면·유촌면·숙인면·다치면·외현면·천동면은 금천군에, 미원면은 신계군에 각각 편입되었다.
1954년 10월 황해도가 황해남도와 황해북도로 분도되면서 황해북도 토산군으로 되었다. 1961년 3월 하남리 일부가 봉불리에, 송세리 일부가 백화리에 각각 편입되었으며, 1977년 9월 홍묘리가 매봉리로 개칭되었다. 1981년 6월 봉불리 일부가 토산읍에 흡수되었다. 2002년 10월 현재 행정구역은 1읍(토산읍), 17리(용암리, 매봉리, 문성리, 미당리, 백화리, 봉불리, 북포리, 석봉리, 송세리, 송천리, 수합리, 안봉리, 양사리, 월성리, 하남리, 합탄리, 황강리)로 구성되어 있다. 토산군 소재지는 토산읍이다.