Trzonem grupy uderzeniowej gen. Edwarda Rydza-Śmigłego skoncentrowanej pod Lubartowem była 1. Dywizja Piechoty Legionów płk Stefana Dąb-Biernackiego. 16 sierpnia polskie oddziały rozpoczęły kontruderzenie na tyły Armii Czerwonej. W związku z poniesioną dzień wcześniej (tj. 15 sierpnia 1920 r.) porażką pod Warszawą, dowódca rosyjskiego Frontu Zachodniego, Michaił Tuchaczewski, nakazał odwrót na całym froncie. W trakcie błyskawicznego natarcia (54 km jednego dnia) opanowano Parczew i Międzyrzecz Podlaski.
Zwycięski marsz
W godzinach wieczornych 18 sierpnia żołnierze 1. Dywizji Piechoty Legionów dotarli nad Bug, opanowując kluczową przeprawę w Drohiczynie. Stoczono zacięte walki z bolszewikami o miasto, przez które przechodziła trasa zaopatrzenia, a także odwrotu, wojsk bolszewickich. Odparto kontratak Armii Czerwonej, która próbowała odbić miejscowość. W trakcie walk wzięto do niewoli wielu czerwonoarmistów, min. z oddziałów artylerii ciężkiej, a także członków ochotniczego batalionu żydowskiego. Ogółem żołnierze polscy pojmali w Drohiczynie 400 jeńców, drugie tyle wzięła do niewoli okoliczna ludność cywilna.
W godzinach wieczornych 18 sierpnia żołnierze 1. Dywizji Piechoty Legionów dotarli nad Bug, opanowując kluczową przeprawę w Drohiczynie. Stoczono zacięte walki z bolszewikami o miasto, przez które przechodziła trasa zaopatrzenia.
19 sierpnia pododdziały 1. Dywizji Piechoty Legionów rozpoczęły pościg na kierunku Boćki – Bielsk–Białystok. Wojsko Polskie, atakując na kierunku białostockim, zagarniało wolno poruszające się kolumny taborów i artylerii. Pod Narojkami zdobyto 9 dział, 4 karabiny maszynowe, 160 wozów i wzięto 50 jeńców. W nocy z 19 na 20 sierpnia pod Boćkami rozbito kolumnę taborową, biorąc 200 jeńców. Kolejnym celem był Bielsk Podlaski, w którym zdobyto wozy taborowe, samochody, 4 działa, 11 karabinów maszynowych i wzięto 115 jeńców. Przed świtem 21 sierpnia 1. Pułk Piechoty Legionów opanował przeprawę przez Narew we wsi Wojszki, co następnie pozwoliło na zajęcie Zabłudowa. Dowódcy Armii Czerwonej nie pozostawali całkowicie bierni, w rejonie wsi Zwierki doszło do kontrataku, odpartego przez stronę polską. Przeciwnik stracił blisko 100 jeńców i wycofał się w kierunku Białegostoku. W godzinach porannych 22 sierpnia 1. pp Leg., wzmocniony batalionem 5. Pułku Piechoty Legionów oraz artylerią 1. Pułku Piechoty Legionów, skoncentrowany w rejonie miejscowości Kuriany, rozpoczął atak celem zajęcia Białegostoku i odcięcia drogi odwrotu III i XVI Armii bolszewickiej.
Tak oto ofensywę znad Wieprza wspominał żołnierz 1. Pułku Piechoty Legionów, pisarz Władysław Broniewski:
„Dziewięć dni i »finis bolszewiae«. Ofensywa ta była tak forsownie [zrobiona], tak błyskawicznie, jak jeszcze nie widziałem. Dość powiedzieć, że przez sześć dni przeszliśmy spacerek: Lubartów – Białystok. Nieźle”.
Walki o Białystok
22 sierpnia o świcie wydzielone polskie zgrupowanie (w składzie: 1. Pułk Piechoty Legionów, I batalion 5. Pułku Piechoty Legionów oraz 1. Dywizjon z 1. Pułku Artylerii Pieszej Legionów) dowodzone przez płk. Emila Knoll-Kownackiego, dowódcę I Brygady Legionów, rozpoczęło natarcie na Białystok, broniony przez rosyjskie: 164. Brygadę Strzelców, oddział kawalerii baszkirskiej, pociąg pancerny oraz artylerię.
Uderzenie na miasto prowadził III batalion 1. Pułku Piechoty, dowodzony przez kpt. Józefa Marjańskiego. Do godziny 7.00 Wojsko Polskie opanowało Białystok, rozbijając oddziały bolszewickie i biorąc 2 tys. jeńców oraz liczną zdobycz materiałową. Około godziny 8.15 do Białegostoku od południa i zachodu zbliżyły się olbrzymie kolumny Armii Czerwonej, złożone z niemal całej XVI Armii oraz części III Armii. Bolszewicy posiadali nad broniącymi Białegostoku oddziałami olbrzymią przewagę liczebną, jednak ich oddziały były zdemoralizowane i przemieszane z oddziałami tyłowymi i taborami. Siły uderzeniowe stanowiły pododdziały 2. i 21. Dywizji Strzelców, które zachowały jeszcze zwartość bojową i morale. Celem tych oddziałów było ponowne zajęcie Białegostoku i otwarcie drogi odwrotu dla zdezorganizowanych mas wojsk 3. i 16. Armii. Warto zauważyć, że bolszewicy atakowali zarówno od zachodu – od strony Łap i Warszawy, jak i od wschodu – z kierunku Wołkowyska, próbując wziąć polskich żołnierzy w kleszcze.
W związku z poniesioną dzień wcześniej porażką pod Warszawą, dowódca rosyjskiego Frontu Zachodniego, Michaił Tuchaczewski, nakazał odwrót na całym froncie.
Około godziny 14:00 pod Białystok nadciągnęła 27. Dywizja Strzelców, uważana za najlepszą jednostkę XVI Armii. Na przedmieściach zebrały się także rozbite i zdemoralizowane resztki oddziałów 5., 6., 8., 10., 17., 55. i 57. Dywizji Strzelców. Doszło do zaciętych walk ulicznych, toczonych przez odizolowane od siebie grupy żołnierzy polskich z przebijającymi się na wschód kolumnami bolszewickimi. W trakcie walk w centrum Białegostoku zginął kpt. Józef Marjański, osobiście podrywający żołnierzy do kontrataku. W przełomowym momencie bitwy, około godziny 18., dowodzący polskim zgrupowaniem płk. Edmund Knoll-Kownacki rzucił do kontrnatarcia 6. kompanię piechoty, stanowiącą ostatnią polską rezerwę. Przed godziną 20. Wojsko Polskie zdołało uporządkować szeregi, a także oczyścić większość miasta z oddziałów bolszewickich. Do miasta przebił się także z odsieczą 7. Pułk Ułanów, co oznaczało zwycięstwo strony polskiej.
Uderzenie na miasto prowadził III batalion 1. Pułku Piechoty, dowodzony przez kpt. Józefa Marjańskiego. Do godziny 7.00 Wojsko Polskie opanowało Białystok, rozbijając oddziały bolszewickie i biorąc 2 tys. jeńców oraz liczną zdobycz materiałową.
Bitwa o Białystok doprowadziła do rozbicia rosyjskiej XVI Armii i resztek III Armii, była wielkim zwycięstwem oręża polskiego, zakończyła także Operację Warszawską, będąc jej ostatnim akordem. Warto zauważyć, że w bitwie po stronie polskiej wyróżnili się min. Emil Fieldorf "Nil" oraz Władysław Broniewski. Na wieść o zbliżaniu się żołnierzy Wojska Polskiego do Białegostoku, z miasta samochodami w kierunku Mińska uciekli przedstawiciele polskiego kolaboracyjnego „rządu” bolszewickiego, tj. Tymczasowego Komitetu Rewolucyjnego Polski na czele z Julianem Marchlewskim oraz Feliksem Dzierżyńskim.
Odziały Wojska Polskiego zaraz po zajęciu miasta rozpoczęły rozliczenia z lokalnymi kolaborantami. W podsumowującym bitwę komunikacie Sztabu Generalnego z 24 sierpnia 1920 r., a więc już po przejęciu kontroli nad miastem przez oddziały WP (I pp Legionów), przeczytać można było:
„Po zajęciu przez 1 Dywizji Legionów w dniu 22 b.m. rano Białegostoku trwały w samym mieście jeszcze przez 20 godzin zaciekłe walki uliczne z przybyłą na pomoc z Grodna 55 Dywizją Sowiecką i miejscową ludnością żydowską, która wydatnie zasiliła szeregi bolszewickie”.
Nieco bardziej wyważoną opinię przedstawił korespondent wojenny Karol Irzykowski, który na potrzeby „Ilustrowanego Kuriera Codziennego” pisał m.in.:
„W walkach brało udział wielu cywilnych komunistów i miejscowych Żydów. Według wiadomości ze sfer wojskowych rzucano z okien na żołnierzy polskich granaty ręczne i strzelano z karabinów maszynowych. Wśród pojmanych jest kilkudziesięciu Żydów pochwyconych z bronią w ręku. [...] Zaznaczyć jednak trzeba, że część miejscowych Żydów podczas inwazji bolszewickiej oddała znaczne usługi miejscowym działaczom polskim ostrzegając ich na czas przed krokami czerezwyczajki”.
Kwestia skali zaangażowania ludności żydowskiej po stronie bolszewickiej w trakcie bitwy białostockiej wzbudzała kontrowersje niemal od samego początku. Sprawę tą poruszano w Sejmie RP, gdzie dobrego imienia białostockich Żydów bronił wybrany w tym okręgu poseł Szyja Farbstein. Jego interpelacja spotkała się jednak z ostrą kontrą Ministra Spraw Wojskowych, gen. Kazimierza Sosnkowskiego, który bronił wersji żołnierzy Wojska Polskiego walczących o miasto.