In this study we present the first comprehensive analysis of the spatio-temporal differences in excess mortality during the COVID-19 pandemic in Italy. We used a population-based design on all-cause mortality data, for the 7,904 Italian municipalities. We estimated sex-specific weekly mortality rates for each municipality, based on the first four months of 2016-2019, while adjusting for age, localised temporal trends and the effect of temperature. Then, we predicted all-cause weekly deaths and mortality rates at municipality level for the same period in 2020, based on the modelled spatio-temporal trends. Lombardia showed higher mortality rates than expected from the end of February, with 23,946 (23,013 to 24,786) total excess deaths. North-West and North-East regions showed one week lag, with higher mortality from the beginning of March and 6,942 (6,142 to 7,667) and 8,033 (7,061 to 9,044) total excess deaths respectively. We observed marked geographical differences also at municipality level. For males, the city of Bergamo (Lombardia) showed the largest percent excess, 88.9% (81.9% to 95.2%), at the peak of the pandemic. An excess of 84.2% (73.8% to 93.4%) was also estimated at the same time for males in the city of Pesaro (Central Italy), in stark contrast with the rest of the region, which does not show evidence of excess deaths. We provided a fully probabilistic analysis of excess mortality during the COVID-19 pandemic at sub-national level, suggesting a differential direct and indirect effect in space and time. Our model can be used to help policy-makers target measures locally to contain the burden on the health-care system as well as reducing social and economic consequences. Additionally, this framework can be used for real-time mortality surveillance, continuous monitoring of local temporal trends and to flag where and when mortality rates deviate from the expected range, which might suggest a second wave of the pandemic.