Согласно плану операции первыми 14 января в наступление переходили войска 2-й ударной армии с Ораниенбаумского плацдарма, а через день — войска 42-й армии из района Пулкова.
Ночью перед началом наступления стрелковые части 2-й ударной армии выдвинулись на нейтральную полосу и окопались в 150—350 метрах от передовых позиций противника, а сапёры проделали проходы в минных полях и проволочных заграждениях. Одновременно тяжёлая артиллерия и ночные бомбардировщики нанесли удар по узлам обороны и артиллерийским позициям противника.
В 10:40 утра, после 65-минутной артподготовки и массированного налёта штурмовой авиации, на 10-километровом участке фронта в наступление перешли два стрелковых корпуса 2-й ударной армии — 43-й (48-я, 90-я, 98-я стрелковые дивизии) и 122-й (11-я, 131-я и 168-я стрелковые дивизии).
В первый день наступления наибольшего успеха добились части 48-й, 90-й и 131-й стрелковых дивизий, наступление которых поддерживали 152-я танковая бригада, а также 222-й и 204-й танковые полки. К концу дня советские войска продвинулись вперед на 4 километра, овладели первой полосой обороны противника, заняли опорные пункты Порожки и Гостилицы и на некоторых участках вклинились во вторую линию немецкой обороны.
Весь день 14 января артиллерия 42-й и 67-й армий вела непрерывный обстрел позиций противника в районах Пулковских высот и Мги с целью дезориентировать противника и не дать ему понять, где и когда будет нанесён следующий удар.
15 января после 110-минутной артподготовки, в которой принимали участие 2300 орудий и миномётов, перешли в наступление соединения трёх стрелковых корпусов 42-й армии на 17-километровом участке фронта Лигово — Редкое — Кузьмино. Соединения 30-го гвардейского стрелкового корпуса (45-я, 63-я, 64-я стрелковые дивизии), наступая непосредственно за артиллерийским валом, с минимальными потерями к исходу первого дня наступления продвинулись вперед на 4,5 километра. Атаки наступавших справа и слева 109-го (72-я, 109-я, 125-я стрелковые дивизии) и 110-го (56-я, 85-я, 86-я стрелковые дивизии) стрелковых корпусов, были менее удачными.
В последующие дни соединения 2-й ударной и 42-й армий медленно, но упорно продвигались в направлении Ропши и Красного Села навстречу друг другу. Немецкие войска оказывали ожесточённое сопротивление и при любой возможности предпринимали отчаянные контратаки.
Частям 2-й ударной армии лишь к концу третьего дня удалось продвинуться вперед до 10 километров и завершить прорыв главной оборонительной полосы противника на фронте до 23 километров. Это позволило И. И. Федюнинскому утром 17 января сформировать подвижную группу (152-я танковая бригада, а также несколько стрелковых и артиллерийских подразделений), которой была поставлена задача стремительно развивать наступление, захватить и удержать Ропшу.
Ещё более упорные бои развернулись в полосе наступления 42-й армии. Большое количество противотанковых рвов и минных полей, а также эффективный огонь артиллерии противника стали причиной больших потерь в танковых частях армии, которые не смогли должным образом поддержать наступление стрелковых соединений. Несмотря на это, советская пехота продолжала упорно продвигаться вперед. Так, части 30-го гвардейского стрелкового корпуса 16 января, продвинувшись вперед еще на 3 — 4 километра, достигли шоссе Красное Село — Пушкин. В этот же день части 109-го стрелкового корпуса взяли сильный узел обороны противника Финское Койрово, а части 110-го корпуса — Александровку.
Утром 17 января командующий 42-й армией ввёл в бой 291-ю стрелковую дивизию и подвижную группу (1-я Ленинградская Краснознаменная, 220-я танковые бригады, а также два самоходно-артиллерийских полка) с задачей поддержать наступление 30-го гвардейского стрелкового корпуса, овладеть Красным Селом, Дудергофом и Вороньей Горой.
К исходу 17 января войска 2-й ударной и 42-й армий разделяло всего 18 километров. Немецкие войска, бросившие в бой к этому моменту не только все тактические резервы в этом районе, но и 61-ю пехотную дивизию, составлявшую оперативный резерв, оказались под угрозой полного окружения.
Командующий группой армий «Север» был вынужден запросить разрешение А. Гитлера отвести части 26-го армейского корпуса 18-й армии из Мгинского выступа для того чтобы высвободить несколько дивизий для усиления обороны юго-западнее Ленинграда. Не получив однозначного ответа, Г. Кюхлер принял решение перебросить ряд соединений (21-ю, 11-ю, 225-ю пехотные дивизии и другие части) в район Красного Села, но изменить ситуацию эта мера не помогла. Вскоре немецкие войска начали спешное отступление на юг из районов Стрельны, Володарского и Горелово.
18 января советские войска добились окончательного перелома сражения в свою пользу.
На участке наступления 2-й ударной армии 122-й стрелковый корпус при поддержке танковых частей после ожесточённого боя взял Ропшу и совместно с введённым в бой из второго эшелона армии 108-м стрелковым корпусом и подвижной группой продолжил наступление на восток.
В тот же день стрелковые части 42-й армии начали штурм Красного Села и Вороньей Горы; танковые подразделения продолжили наступление навстречу частям 2-й ударной армии. Ожесточённые бои за эти ключевые опорные пункты продолжались несколько дней.