Находится в межгорной котловине между отрогами хребтов Цаган-Дабан (на севере) и Заганского (на юге), по узким долинам рек Баляги и Мыкырты (бассейн Хилка), в 15—20 км от границы Забайкальского края с Республикой Бурятия .

Первая железнодорожная станция в городе носит название Петровский Завод, бывшее названием города в 1789—1926 гг., и расположена на Транссибирской магистрали в 414 км к юго-западу от краевого центра, города Читы.