Le car s'est renversé sur la route avant de tomber près des voies ferrées dans le quartier de Mestre, relié à Venise par un pont.
Les causes de l'accident ne sont pas connues. Renato Boraso, un conseiller municipal, a déclaré que l'une des pistes étudiées par les enquêteurs suggérait que le conducteur, un Italien de 40 ans tué dans l'accident, aurait été victime d'un malaise avant l'incident.
"Il s'agit d'une tragédie épouvantable, la ville est en deuil", a dit Renato Boraso à la chaîne de télévision Sky Italia.
Le car transportait 40 passagers, a indiqué Renato Boraso, précisant que 21 d'entre eux avaient été tués dans l'accident et 18 autres blessés. Le bilan pourrait s'alourdir, certaines personnes ayant été grièvement blessées, a-t-il précisé.
La mairie de Venise a annoncé que les blessés avaient été transportés dans des hôpitaux et que quatre personnes avaient été grièvement blessées.
D'après les autorités, le véhicule a chuté d'une trentaine de mètres, prenant feu aux alentours de 19h45 (17h45 GMT) au contact de lignes électriques.
"C'est une scène apocalyptique. Je suis sans voix", a déclaré sur le réseau social X (anciennement Twitter) le maire de Venise, Luigi Brugnaro.
Cinq Ukrainiens et un Allemand figurent parmi les victimes, a annoncé le préfet de Venise, Michele Di Bari.
Des Français et des Croates se trouvaient également à bord du car, a rapporté l'agence de presse italienne ANSA.
"Le car est totalement détruit. Les pompiers ont éprouvé des difficultés à sortir les cadavres", a dit Michele Di Bari sur la chaîne de télévision Sky Italia, ajoutant que deux enfants avaient été tués dans l'accident.
La présidente du Conseil italien Giorgia Meloni a présenté ses condoléances, déclarant que les pensées de son gouvernement étaient avec "les victimes, leurs familles et leurs amis".
"Nos pensées accompagnent ce soir le peuple italien, les familles et les proches des victimes du terrible drame de Venise", a écrit sur X le président français Emmanuel Macron.