Nighttime light anomalies across zones in the temporarily occupied territories of Ukraine. The method captures how far the power supply degrades and how quickly it recovers. It is not proof that any specific facility was hit.
| ZONE | REGION | START | DAYS | MIN LEVEL | DEPTH | RECOVERY | OBSERVED | TELEGRAM |
|---|---|---|---|---|---|---|---|---|
| Tokmak | Zaporizhzhia | 22 Jul 2026 | 8 | 0.01 | TOTAL | ONGOING | 2 | 2 |
| Lysychansk | Luhansk | 25 Jul 2026 | 9 | 0.01 | TOTAL | ONGOING | 3 | — |
| Sievierodonetsk | Luhansk | 25 Jul 2026 | 8 | 0.01 | TOTAL | ONGOING | 2 | — |
| Yakymivka | Zaporizhzhia | 19 Feb 2026 | 11 | 0.13 | TOTAL | 12 d | 5 | — |
| Chaplynka | Kherson | 23 Jun 2026 | 10 | 0.07 | TOTAL | 11 d | 4 | — |
| Armiansk | Crimea | 28 Jun 2026 | 7 | 0.01 | TOTAL | 12 d | 1 | 4 |
| Krasnoperekopsk | Crimea | 06 Jul 2026 | 10 | 0.01 | TOTAL | 11 d | 4 | 5 |
| Yevpatoria | Crimea | 08 Jul 2026 | 10 | 0.06 | TOTAL | 11 d | 4 | 4 |
| Chornomorske | Crimea | 08 Jul 2026 | 11 | 0.01 | TOTAL | 12 d | 5 | — |
| Alushta | Crimea | 19 Jul 2026 | 13 | 0.04 | TOTAL | 13 d | 7 | 3 |
| Yasynuvata | Donetsk | 20 Jul 2026 | 10 | 0.00 | TOTAL | 11 d | 3 | — |
| Sudak | Crimea | 21 Jul 2026 | 12 | 0.04 | TOTAL | 12 d | 6 | — |
| Chaplynka | Kherson | 22 Jul 2026 | 12 | 0.04 | TOTAL | 13 d | 6 | — |
| Yalta | Crimea | 22 Jul 2026 | 7 | 0.09 | TOTAL | 8 d | 1 | 5 |
| Henichesk | Kherson | 27 Jul 2026 | 11 | 0.06 | TOTAL | 12 d | 5 | — |
| Tokmak | Zaporizhzhia | 23 Feb 2026 | 9 | 0.23 | SEVERE | 10 d | 3 | — |
| Starobilsk | Luhansk | 04 Mar 2026 | 10 | 0.38 | SEVERE | 10 d | 4 | — |
| Prymorsk | Zaporizhzhia | 23 Mar 2026 | 11 | 0.37 | SEVERE | 12 d | 5 | — |
| Tokmak | Zaporizhzhia | 05 Apr 2026 | 8 | 0.35 | SEVERE | 9 d | 2 | — |
| Melitopol | Zaporizhzhia | 08 Apr 2026 | 13 | 0.39 | SEVERE | 14 d | 7 | 8 |
| Berdiansk | Zaporizhzhia | 14 Apr 2026 | 11 | 0.32 | SEVERE | 12 d | 5 | 4 |
| Kadiivka | Luhansk | 04 May 2026 | 11 | 0.35 | SEVERE | 12 d | 5 | — |
| Rovenky | Luhansk | 04 May 2026 | 11 | 0.34 | SEVERE | 12 d | 5 | — |
| Chaplynka | Kherson | 05 May 2026 | 9 | 0.39 | SEVERE | 9 d | 3 | — |
| Henichesk | Kherson | 09 May 2026 | 14 | 0.19 | SEVERE | 14 d | 5 | — |
| Enerhodar | Zaporizhzhia | 15 May 2026 | 9 | 0.31 | SEVERE | 10 d | 3 | 3 |
| Enerhodar | Zaporizhzhia | 01 Jun 2026 | 10 | 0.30 | SEVERE | 11 d | 4 | 3 |
| Mariupol | Donetsk | 06 Jun 2026 | 11 | 0.20 | SEVERE | 12 d | 5 | 4 |
| Skadovsk | Kherson | 18 Jun 2026 | 9 | 0.30 | SEVERE | 10 d | 3 | 2 |
| Henichesk | Kherson | 23 Jun 2026 | 8 | 0.29 | SEVERE | 9 d | 2 | 2 |
| Yakymivka | Zaporizhzhia | 26 Jun 2026 | 9 | 0.31 | SEVERE | 10 d | 2 | — |
| Bilohirsk | Crimea | 06 Jul 2026 | 8 | 0.27 | SEVERE | 9 d | 2 | — |
| Horlivka | Donetsk | 09 Jul 2026 | 10 | 0.36 | SEVERE | 11 d | 4 | 3 |
| Sievierodonetsk | Luhansk | 13 Jul 2026 | 11 | 0.31 | SEVERE | 11 d | 5 | — |
| Starobilsk | Luhansk | 21 Jul 2026 | 9 | 0.34 | SEVERE | 10 d | 3 | — |
| Amvrosiivka | Donetsk | 23 Jul 2026 | 8 | 0.24 | SEVERE | 8 d | 2 | — |
| Berdiansk | Zaporizhzhia | 28 Jul 2026 | 9 | 0.17 | SEVERE | 10 d | 3 | 4 |
| Melitopol | Zaporizhzhia | 20 Feb 2026 | 8 | 0.50 | MODERATE | 9 d | 2 | 7 |
| Alchevsk | Luhansk | 21 Feb 2026 | 8 | 0.48 | MODERATE | 8 d | 2 | 3 |
| Horlivka | Donetsk | 23 Feb 2026 | 8 | 0.63 | MODERATE | 9 d | 2 | 6 |
| Khartsyzk | Donetsk | 23 Feb 2026 | 9 | 0.58 | MODERATE | 9 d | 3 | — |
| Chystiakove | Donetsk | 23 Feb 2026 | 7 | 0.59 | MODERATE | 8 d | 1 | — |
| Yasynuvata | Donetsk | 23 Feb 2026 | 10 | 0.56 | MODERATE | 10 d | 4 | — |
| Tokmak | Zaporizhzhia | 07 Mar 2026 | 7 | 0.56 | MODERATE | 8 d | 1 | — |
| Lysychansk | Luhansk | 15 Mar 2026 | 7 | 0.62 | MODERATE | 8 d | 1 | — |
| Henichesk | Kherson | 01 Apr 2026 | 10 | 0.51 | MODERATE | 11 d | 4 | 2 |
| Yakymivka | Zaporizhzhia | 09 Apr 2026 | 7 | 0.59 | MODERATE | 8 d | 1 | — |
| Dovzhansk | Luhansk | 17 Apr 2026 | 8 | 0.51 | MODERATE | 9 d | 2 | — |
| Luhansk | Luhansk | 18 Apr 2026 | 9 | 0.58 | MODERATE | 10 d | 3 | — |
| Enerhodar | Zaporizhzhia | 27 Apr 2026 | 9 | 0.43 | MODERATE | 10 d | 3 | — |
| Antratsyt | Luhansk | 03 May 2026 | 11 | 0.45 | MODERATE | 12 d | 5 | — |
| Alchevsk | Luhansk | 04 May 2026 | 10 | 0.53 | MODERATE | 11 d | 4 | — |
| Berdiansk | Zaporizhzhia | 12 May 2026 | 7 | 0.51 | MODERATE | 7 d | 1 | 2 |
| Prymorsk | Zaporizhzhia | 12 May 2026 | 7 | 0.45 | MODERATE | 7 d | 1 | — |
| Volnovakha | Donetsk | 14 May 2026 | 10 | 0.42 | MODERATE | 10 d | 4 | — |
| Melitopol | Zaporizhzhia | 15 May 2026 | 10 | 0.46 | MODERATE | 10 d | 4 | 3 |
| Skadovsk | Kherson | 24 May 2026 | 10 | 0.44 | MODERATE | 10 d | 4 | — |
| Khartsyzk | Donetsk | 25 May 2026 | 8 | 0.65 | MODERATE | 9 d | 2 | — |
| Berdiansk | Zaporizhzhia | 10 Jun 2026 | 7 | 0.60 | MODERATE | 8 d | 1 | 4 |
| Volnovakha | Donetsk | 12 Jun 2026 | 7 | 0.62 | MODERATE | 8 d | 1 | — |
| Berdiansk | Zaporizhzhia | 13 Jun 2026 | 8 | 0.62 | MODERATE | 9 d | 2 | 4 |
| Armiansk | Crimea | 14 Jun 2026 | 13 | 0.41 | MODERATE | 14 d | 7 | 3 |
| Chaplynka | Kherson | 14 Jun 2026 | 7 | 0.54 | MODERATE | 8 d | 1 | — |
| Bilohirsk | Crimea | 16 Jun 2026 | 8 | 0.61 | MODERATE | 9 d | 2 | — |
| Feodosia | Crimea | 17 Jun 2026 | 10 | 0.57 | MODERATE | 11 d | 4 | 3 |
| Krasnoperekopsk | Crimea | 21 Jun 2026 | 8 | 0.57 | MODERATE | 9 d | 2 | 5 |
| Yakymivka | Zaporizhzhia | 23 Jun 2026 | 7 | 0.53 | MODERATE | 8 d | 1 | — |
| Kerch | Crimea | 07 Jul 2026 | 7 | 0.56 | MODERATE | 8 d | 1 | 8 |
| Volnovakha | Donetsk | 09 Jul 2026 | 8 | 0.59 | MODERATE | 9 d | 2 | 4 |
| Yasynuvata | Donetsk | 11 Jul 2026 | 8 | 0.56 | MODERATE | 8 d | 2 | — |
| Chystiakove | Donetsk | 12 Jul 2026 | 7 | 0.55 | MODERATE | 7 d | 1 | — |
| Lysychansk | Luhansk | 14 Jul 2026 | 9 | 0.52 | MODERATE | 9 d | 3 | — |
| Yalta | Crimea | 15 Jul 2026 | 10 | 0.58 | MODERATE | 11 d | 4 | 5 |
| Mariupol | Donetsk | 20 Jul 2026 | 8 | 0.41 | MODERATE | 8 d | 2 | 2 |
| Kadiivka | Luhansk | 25 Jul 2026 | 10 | 0.48 | MODERATE | 11 d | 4 | — |
| Alushta | Crimea | 19 Feb 2026 | 8 | 0.69 | MINOR | 8 d | 2 | 2 |
| Shakhtarsk | Donetsk | 23 Feb 2026 | 7 | 0.67 | MINOR | 8 d | 1 | — |
| Shcholkine | Crimea | 23 Feb 2026 | 7 | 0.66 | MINOR | 7 d | 1 | — |
| Antratsyt | Luhansk | 24 Feb 2026 | 7 | 0.67 | MINOR | 8 d | 1 | — |
| Sevastopol | Crimea | 28 Mar 2026 | 7 | 0.68 | MINOR | 8 d | 1 | 3 |
| Tokmak | Zaporizhzhia | 29 Mar 2026 | 7 | 0.67 | MINOR | 8 d | 1 | — |
| Dzhankoi | Crimea | 30 Mar 2026 | 7 | 0.65 | MINOR | 8 d | 1 | — |
| Lysychansk | Luhansk | 01 Apr 2026 | 8 | 0.68 | MINOR | 8 d | 2 | — |
| Sievierodonetsk | Luhansk | 01 Apr 2026 | 8 | 0.68 | MINOR | 8 d | 2 | 2 |
| Chaplynka | Kherson | 11 Apr 2026 | 7 | 0.67 | MINOR | 7 d | 1 | — |
| Prymorsk | Zaporizhzhia | 07 May 2026 | 7 | 0.66 | MINOR | 7 d | 1 | — |
| Chornomorske | Crimea | 16 Jun 2026 | 9 | 0.66 | MINOR | 10 d | 3 | — |
| Saky | Crimea | 21 Jun 2026 | 8 | 0.67 | MINOR | 9 d | 2 | 4 |
| Kerch | Crimea | 23 Jun 2026 | 7 | 0.68 | MINOR | 7 d | 1 | 4 |
| Khrustalnyi | Luhansk | 04 Jul 2026 | 8 | 0.66 | MINOR | 9 d | 2 | 5 |
| Amvrosiivka | Donetsk | 07 Jul 2026 | 7 | 0.65 | MINOR | 8 d | 1 | — |
| Berdiansk | Zaporizhzhia | 19 Jul 2026 | 7 | 0.70 | MINOR | 8 d | 1 | 2 |
| Melitopol | Zaporizhzhia | 23 Jul 2026 | 7 | 0.70 | MINOR | 8 d | 1 | 3 |
| Volnovakha | Donetsk | 30 Jul 2026 | 7 | 0.66 | MINOR | 7 d | 1 | — |
| Horlivka | Donetsk | 04 Aug 2026 | 7 | 0.69 | MINOR | 8 d | 1 | 3 |
Over the period, 2923 power-related messages from 36 public channels in the occupied territories. Testimony is counted by text, not by channel — the same bulletin forwarded by three channels is one witness, otherwise a lone repost would clear the threshold on its own. Reports of damage override "scheduled maintenance": if the text mentions a strike or damage, it is not a schedule. Scheduled-outage reports (886) add nothing to the strength score, and neither do restoration reports (438) — they only mark the end of an episode.
Sampling depth is stable across the period — 30–34 channels are active each month, so a change in bar height reads as a change in reality, not as a change in sampling. But mind the attention bias: Sevastopol and Donetsk are written about many times more than Yakymivka — bar height reflects both the blackout itself and the number of Telegram channels covering a town. Channel silence does not mean the lights were on.
| ZONE | START | DAYS | WITNESSES |
|---|---|---|---|
| Sevastopol | 18 Jun 2026 | 48 | 17 |
| Donetsk | 10 Aug 2026 | 3 | 11 |
| Sevastopol | 07 Feb 2026 | 28 | 10 |
| Donetsk | 05 Apr 2026 | 2 | 9 |
| Kerch | 27 Jul 2026 | 2 | 9 |
| Melitopol | 09 Apr 2026 | 5 | 8 |
| Kerch | 12 Jul 2026 | 3 | 8 |
| Makiivka | 08 Aug 2026 | 3 | 8 |
| Melitopol | 14 Feb 2026 | 5 | 7 |
| Luhansk | 16 Feb 2026 | 2 | 7 |
| Luhansk | 30 Mar 2026 | 1 | 7 |
| Donetsk | 14 Jul 2026 | 5 | 7 |
| Horlivka | 16 Feb 2026 | 1 | 6 |
| Kerch | 07 Jul 2026 | 2 | 6 |
| Makiivka | 14 Jul 2026 | 3 | 6 |
| Yenakiieve | 14 Jul 2026 | 2 | 6 |
| Alchevsk | 30 Mar 2026 | 1 | 5 |
| Melitopol | 03 Apr 2026 | 3 | 5 |
How many of the 48 zones were measurable each day. The dips are caused by cloud cover. This is the method's principal limitation, not a pipeline failure.