Немецкие пехотные дивизии оборонялись на хорошо укреплённой местности, оборудованной проволочными заграждениями, минными полями, пулемётными гнёздами и бронеколпаками. Вдоль берегов рек вражескими сапёрами были построены противотанковые препятствия. Следует отметить, однако, что работы над оборонительными линиями немцев ещё не были завершены к моменту начала контрнаступления.

http://savepic.org/7228640.jpg
САУ StuG III, уничтоженная советскими войсками

12 июля в 5:10 утра советские войска начали артиллерийскую подготовку и нанесли авиационный удар по противнику.
Через полчаса начался штурм. К вечеру первого дня Красная армия, ведя тяжёлые бои, продвинулась на расстояние от 7,5 до 15 километров, прорвав главную оборонительную полосу немецких соединений в трёх местах. Наступательные бои шли до 14 июля. В течение этого времени продвижение советских войск составило до 25 километров. Однако к 14 июля немцам удалось перегруппировать войска, в результате чего наступление РККА на некоторое время было остановлено. Наступление Центрального фронта, начавшееся 15 июля, развивалось медленно с самого начала.

Несмотря на упорное сопротивление противника, к 25 июля Красной армии удалось вынудить немцев приступить к отводу войск с Орловского плацдарма. В первых числах августа начались бои за город Орёл. К 6 августа город был полностью освобождён от гитлеровцев. После этого Орловская операция перешла в завершающую фазу. 12 августа начались бои за город Карачев, продолжавшиеся до 15 августа и закончившиеся разгромом группировки немецких войск, защищавшей этот населённый пункт. К 17–18 августа советские войска вышли к оборонительной линии «Хаген», построенной немцами восточнее Брянска.

Официальной датой начала наступления на южном фасе Курской дуги считается 3 августа.
Однако немцы приступили к постепенному отводу войск с занимаемых позиций ещё 16 июля, а с 17 июля части Красной армии начали преследование противника, к 22 июля перешедшее в общее наступление, которое остановилось приблизительно на тех же позициях, которые советские войска занимали на момент начала Курской битвы. Командование требовало немедленного продолжения боевых действий, однако из-за истощения и усталости подразделений дату перенесли на 8 дней.

К 3 августа в войсках Воронежского и Степного фронтов насчитывалось 50 стрелковых дивизий, около 2400 танков и САУ, более 12 000 орудий. В 8 часов утра, после артиллерийской подготовки, советские войска начали наступление. В первый день операции продвижение частей Воронежского фронта составило от 12 до 26 км. Войска Степного фронта за день продвинулись только на 7–8 километров.

4–5 августа шли бои по ликвидации белгородской группировки противника и освобождению города от немецких войск.
К вечеру Белгород был взят частями 69-й армии и 1-го механизированного корпуса.

К 10 августа советские войска перерезали железную дорогу Харьков — Полтава.
До окраин Харькова оставалось около 10 километров. 11 августа немцы нанесли удар в районе Богодухова, существенно ослабивший темп наступления обоих фронтов РККА. Ожесточённые бои продолжались до 14 августа.

Степной фронт вышел на ближние подступы к Харькову 11 августа.
В первый день наступающие части успеха не имели. Бои на окраинах города шли до 17 июля. Тяжёлые потери несли обе стороны. Как в советских, так и в немецких частях не редкостью были роты, насчитывавшие по 40–50 человек, а то и меньше.

Последний контрудар немцы нанесли у Ахтырки.
Здесь им даже удалось осуществить локальный прорыв, но глобально ситуацию это уже не изменило. 23 августа начался массированный штурм Харькова; именно этот день считается датой освобождения города и окончания Курской битвы. Фактически же бои в городе полностью прекратились только к 30 августа, когда были подавлены остатки немецкого сопротивления.