Имеет длину 224 км, берёт начало в Онежском озере и впадает в Ладожское озеро. Ширина реки на всем протяжении изменяется от 100 м в узких местах русла до 10—12 км в Ивинском разливе. Скорость течения изменяется от 0,5 до 10,6 км/ч.
До появления Свири сток из Онежского озера в Ладогу происходил южнее — через реки Ошта — Тукша — Оять. Современная река возникла около 9,5 тысяч лет назад в результате трансгрессии южной части Онежского озера, вызванной изостатическим поднятием северной части озёрной котловины. По мере врезания русла реки уровень Онежского озера упал с отметки 75 метров над уровнем моря до современных 33.
Река течёт в низинах, которые в прошлом были заняты ледниковыми водоёмами. Побережье Свири по большей части представляет собой заросшую лесом холмистую местность. В среднем течении Свири существовали пороги, но после постройки на реке каскада электростанций плотины подняли уровень воды, затопив пороги и создав глубоководный путь на всём протяжении реки. На реке располагаются Нижнесвирский (80 км от устья) и Верхнесвирский (120 км от устья) гидроузлы. Водохранилище Верхнесвирской ГЭС сформировало Ивинский разлив или Верхнесвирское водохранилище площадью 183 км².
Нижняя Свирь протекает в пределах Приладожской низменности и ниже по течению от впадения в неё рек Оять и Паша образует дельту со множеством рукавов и проток, одна из которых соединяется с Загубской Губой. Здесь располагается Нижнесвирский заповедник. Всего на реке около тридцати островов.