ב-28 ביוני 1944, בעקבות המצב הצבאי הקשה שנוצר בבלארוס עקב הצלחת מבצע בגרטיון, הועבר ולטר מודל, מפקד "קבוצת ארמיות צפון אוקראינה", לפקד על קבוצת ארמיות מרכז, ויוזף הרפה החליף אותו בפיקוד. קבוצת הארמיות צפון אוקראינה כללה בשלב זה שתי ארמיות גרמניות: ארמיית הפאנצר הראשונה בפיקוד גוטהרד היינריצי וארמיית הפאנצר הרביעית בפיקוד ולטר נהרינג, וכן את הארמייה ההונגרית הראשונה בפיקודו של פרנץ פרקש דה קיסברנק. בסך הכל עמדו לרשותה כ-900,000 חיילים, 6,300 תותחים וכ-900 טנקים ותותחי סער (כולל כוחות עתודה). הסיוע האווירי כלל כ-700 מטוסים של צי האוויר הרביעי של הלופטוואפה בפיקודו של אוטו דסלוך. עם זאת, בשל שרשרת פיקוד מורכבת, שליטתו של הרפה ביחידות הלופטוואפה הייתה מוגבלת.
החזית האוקראינית הראשונה בפיקודו של איוואן קונייב נהנתה מעדיפות מספרית משמעותית על כוחות הציר שעמדו מולה, בכוח אדם ובמיוחד בנשק כבד (טנקים, ארטילריה ומטוסים).
החזית כללה את הארמיות הבאות:
בסה"כ עמדו לרשות החזית מעל מיליון חיילים, 2,050 טנקים, כ-16,000 תותחים ומרגמות, ו-3,250 מטוסים במסגרת ארמיית האוויר השנייה. לפי מקור אחר כללה החזית כ-1.2 מיליון חיילים וכ-2200 כלי רכב משוריינים. המורל בקרב כוחותיו של קונייב היה גבוה מאוד בשל ההצלחות הקודמות של מבצעי החזית בשטח אוקראינה, וההתקדמות המהירה של המתקפה הסובייטית המקבילה בבילרוסיה.
המבצע.
תחילת המתקפה.
לפי התוכנית של פיקוד החזית, המתקפה הסובייטית נועדה להתבצע בשני מאמצים עיקריים, במרחק 60–70 ק"מ זה מזה. הזרוע הצפונית של המתקפה כללה את ארמיית המשמר השלישית, ארמיית המשמר המשוריינת הראשונה והארמייה ה-13, שנועדו להתקדם אל צומת מסילות הרכבת ברווה-רוסקה מכיוון צפון. הזרוע הדרומית של המתקפה, שכללה את הארמייה ה-60 והארמייה ה-38 יחד עם ארמיית המשמר המשוריינת השלישית וארמיית הטנקים הרביעית נועדה לנוע אל העיר לבוב מכיוון דרום.
הזרוע הצפונית של החזית פתחה במתקפה ב-13 ביולי, וכבר ביומה הראשון פרצו הכוחות הסובייטיים את קווי הקורפוס ה-42 הגרמני ליד הורוכוב, והארמייה ה-13 חדרה לעומק של 20 ק"מ. הקורפוס ה-42 הצליח לסגת במצב טוב יחסית, תודות ללחימה עיקשת של יחידות מאסף מחוזקות. הכוחות הסובייטיים המשיכו בהתקדמותם, וגברו על התנגדות אלמנטים מהדיוויזיות ה-291 וה-340 של קורפוס הפאנצר ה-46, שניסו לבלום אותם.
המבקע הסובייטי העמיד את ארמיית הפאנצר הרביעית בסכנה ממשית. מפקד הארמייה, גנרל נהרינג הורה לכוחות העתודה הניידים שלו כדי לבצע מתקפת נגד. ב-15 ביולי פתחו דיוויזיית הפאנצר ה-17 ודיוויזיית הפאנצר ה-16 מקורפוס הפאנצר ה-46 במתקפה באזור הורוכוב, אולם לשתיהן יחד היו רק 43 טנקים מבצעיים, והמתקפה שלהן נבלמה תוך זמן קצר. שתי הדיוויזיות נאלצו להצטרף לנסיגת יחידות החי"ר של ארמיית הפאנצר הרביעית, אשר יצרה פער בחזית הגרמנית. קונייב שלח את "הקבוצה הניידת ברנוב", כדי לנצל את הצלחת הארמייה ה-13 לצורך חדירה לעומק המערך הגרמני. כוח זה התקדם במהירות, בסיוע אווירי צמוד, ותוך שלושה ימי לחימה הצליח להגיע אל העיירה קאמיאנקה בוזקה ולהקים ראש גשר בגדה המערבית של נהר הבוג הדרומי. בכך נותקו קווי האספקה של הקורפוס הגרמני ה-13 (שהחזיק בגזרה שמדרום לקורפוס ה-42) ונחסמו דרכי הנסיגה שלו.
יצירת כיס ברודי.
ב-14 ביולי פתחה הזרוע הדרומית של החזית האוקראינית הראשונה במתקפה על נקודת התפר בין ארמיות הפאנצר ה-4 וה-1, מדרום לעיר ברודי, שהוחזקה על ידי פלגת הקורפוס C (כוח בסד"כ דיוויזיוני) מהקורפוס ה-13. המתקפה הראשונה נכשלה בהבקעת מערך ההגנה הגרמני, ולכן קונייב הסיט את מרכז הכובד של המתקפה דרומה, ולאחר הפצצה אווירית והפגזה ארטילרית כבדה, הצליחו כוחותיו להבקיע את החזית הגרמנית בגזרה שהוחזקה על ידי קורפוס הפאנצר ה-48, ולהביס את הדיוויזיה ה-349, שחייליה נמלטו באנדרלמוסיה מוחלטת. קרב ההגנה המוצלח, שניהלו שתי הדיוויזיות הגרמניות משני עבריה של הדיוויזיה ה-349 (פלגת הקורפוס C והדיוויזיה ה-357), הגביל את רוחבה של הפירצה שנפערה בחזית הגרמנית, אך הכוחות הסובייטיים המשיכו להתקדם באיטיות לכיוון זלוטשוב וסאסוב, ותקעו בהדרגה טריז בין הקורפוס ה-13 לקורפוס הפאנצר ה-48. שני הקורפוסים הפגיזו את המסדרון הסובייטי הצר, שקיבל את השם "מסדרון קולטיב", בסיוע דיוויזיית הארטילריה ה-18, שהייתה חלק מקורפוס הפנצר השלישי. בהמשך, פתח קורפוס הפאנצר השלישי, שכלל את דיוויזיית הפאנצר ה-1 ודיוויזיית הפאנצר ה-8), בהתקפת נגד בסיוע דיוויזיית ואפן גרנדיר אס אס ה-14 שהייתה חלק מהקורפוס ה-13. ההתקפה נכשלה בעיקר עקב תקיפה אווירית מסיבית, שביצעו מטוסי תקיפה מדגם שטורמוביק של ארמיית האוויר ה-2, על הכוחות הגרמניים בדרכם לחזית. דיוויזיית הפאנצר ה-8 ספגה אבדות כבדות במיוחד, ונאלצה לסגת לזלוטשוב בניגוד לפקודות שקיבלה. למרות זאת, התקפת הנגד הגרמנית הצליחה להאט במקצת את התקדמות הכוחות הסובייטים לכיוון לבוב.
ב-16 ביולי החליט קונייב לקחת סיכון, ולהטיל את ארמיית המשמר המשוריינת השלישית בפיקוד פאבל ריבאלקו למערכה במסדרון קולטיב, כדי להשלים את הבקעת מערך ההגנה הגרמני. כוחותיו של ריבאלקו התקדמו במסדרון הצר בין שני הקורפוסים הגרמניים, תחת אש ארטילריה כבדה, והצליחו לחדש את ההתקדמות הסובייטית אל לבוב. מפקד הקורפוס ה-13 ארתור הוף הבין שעליו לסגת כדי להתחמק מכיתור, וכל יחידות הקורפוס קיבלו פקודה לנוע אל "קו פרינץ אויגן" (Prinz-Eugen-Stellung) 35 ק"מ מערבה מטרנופול. אולם ב-17 ביולי השיגו הסובייטים התקדמות ניכרת והצליחו לכבוש חלק מקו פרינץ אויגן. דיוויזיית הואפן גרנדיר אס אס ה-14 "גליציה" ניסתה לבצע התקפת נגד אולם לא הצליחה לבלום את המתקפה הסובייטית. הוף לא הורה לכוחותיו לבצע נסיגה נוספת, ובכך חרץ את גורלם. הדיוויזיות ה-361 וה-454 יחד עם פלגת הקורפוס C ודיוויזיית הוואפן אס אס ה-14 כותרו באזור ברודי. ב-18 ביולי שחררו הסובייטים את בוסק, וכיתורם של 45,000 חיילי הקורפוס ה-13 באזור ברודי הושלם.
הכוחות שנלכדו בכיס ברודי עשו מספר ניסיונות לפרוץ את טבעת הכיתור הסובייטית ולחבור אל ארמיית הפאנצר הראשונה, אולם כולם נכשלו. בלית ברירה הורה הרפה לכוחותיו לסגת ולנטוש את הקורפוס ה-13 לגורלו. ב-22 ביולי ביצעו הכוחות הסובייטיים התקפת פתע גדולה וביתרו את כיס ברודי לשניים. התנגדות הכוחות המכותרים בכיס נשברה, והניצולים התפצלו לקבוצות קטנות, וניסו להגיע אל הקווים הגרמניים. מעטים מתוכם הצליחו, מתוכם כ-3,500 חיילי אס אס מהדיוויזיה ה-14, שכללה במקור 11,000 איש. במקביל לקרב סביב כיס ברודי נסוגה ארמיית הפאנצר הראשונה לקו נהר הוויסלה, בעוד הארמייה ההונגרית הראשונה יחד עם ארמיית הפאנצר הרביעית נסוגו אל הרי הקרפטים.
שחרור לבוב וסנדומייז'.
ב-26 ביולי שוחררה העיר לבוב בידי הכוחות הסובייטיים כמעט ללא קרב. בכיבוש העיר סייעו 3,000 לוחמי מחתרת פולניים מהארמייה קריובה בפיקודו של ולדיסלב פיליפקובסקי, אולם לאחר שיחידות הנ.ק.ו.ד. הגיעו לעיר בעקבות כוחות הצבא האדום, ותפסו את תיקי הגסטאפו בלבוב, הם עצרו את אנשי הארמייה קריובה ואילצו אותם להתגייס לשורות הארמייה הפולנית הראשונה, שלחמה במסגרת הצבא הסובייטי. מי שסירב נשלח למחנות עבודת הפרך בסיביר
ב-28 ביולי, לאחר השלמת שחרור שטח אוקראינה המערבית, הורתה הסטאבקה להרחיב את המבצע גם לשטח מזרח פולין הכבושה בידי הגרמנים. קונייב נצטווה לצלוח את נהר הוויסלה ולכבוש את העיר סנדומייז'. המתקפה הסובייטית התחדשה ב-29 ביולי, וכוח החלוץ של קונייב הצליח להקים ראש גשר מעבר לוויסלה באזור העיירה ברנוב סנדומיירסקי. מתקפת נגד גרמנית מכיוון סנדומייז' מנעה את המשך ההתקדמות. בראשית אוגוסט העביר הפיקוד הגרמני תגבורות חזקות ל"קבוצת ארמיות צפון אוקראינה" מקבוצת ארמיות דרום אוקראינה ומעתודת הפיקוד העליון, שכללו בסה"כ 13 דיוויזיות (מתוכם 3 דיוויזיות הונגריות) וגדוד פאנצר כבד מצויד בטנקי טיגר II. לאחר שקיבל את התגבורות, ערך הרפה שורת התקפות נגד על כוחות החלוץ הסובייטיים וגרם להם אבדות כבדות. לקראת אמצע אוגוסט ערכו הגרמנים מתקפה גדולה על ראש הגשר הסובייטי בברנוב, במטרה לחסל אותו ולהדוף את כוחותיו של קונייב אל מעבר לוויסלה. הכוח התוקף כלל 140 טנקים מתוכם 20 טיגרים, בעוד שלקורפוס המשמר המשוריין ה-6 בראש הגשר, נותרו בשלב זה רק 67 טנקים, אולם הכוחות הסובייטיים הצליחו להחזיק בראש הגשר. לאחר שקונייב תגבר את כוחותיו בראש הגשר, החלה המתקפה הגרמנית לאבד מעצמתה עד שב-16 באוגוסט הופסקה כליל. בעקבות הדיפת מתקפת הנגד הגרמנית פתחה החזית האוקראינית הראשונה בסדרת מתקפות חדשות, וראש הגשר הורחב לעומק 120 ק"מ.
ב-29 באוגוסט נכבשה העיר סנדומייז' על ידי הכוחות הסובייטיים. שחרור העיר היה נקודת הסיום של מבצע לבוב-סנדומייז'. כוחותיו של קונייב היו מותשים מכדי להמשיך במתקפה. במקביל, ב-19 באוגוסט נבלם גם מבצע בגרטיון במרחק קצר ממזרח לבירת פולין, ורשה. המקורות הסובייטיים טוענים, שהגורמים העיקריים לכך היו התארכות קווי האספקה שלהם, לאחר התקדמות מהירה של מאות ק"מ, והזרמת כוחות עתודה גרמניים חזקים לפולין. אולם מקורות פולניים וחלק מהמקורות המערביים טוענים ששני המבצעים נעצרו על ידי סטלין מסיבות פוליטיות: ב-1 באוגוסט פתחו הפולנים במרד ורשה, והסובייטים רצו להניח לגרמנים למחוץ אותו עבורם. נושא זה מעורר רגשות עזים ומחלוקות עד היום.