La rivière Trois Saumons prend sa source du lac Trois Saumons (longueur : 5,5 km ; altitude : 434 m), situé dans la municipalité de Saint-Aubert. Ce plan d'eau à vocation récréotouristique, comportant une densité significative de chalets sur ses rives, est entouré de forêt. Ce lac de tête est situé à 9,4 km au sud-est de la rive sud du fleuve Saint-Laurent, à 6,2 km au sud du centre du village de Saint-Aubert et à 9,0 km au nord-est du centre du village de Saint-Cyrille-de-Lessard. Le lac Trois Saumons s'écoule par son extrémité nord-est.
À partir de sa source, la rivière Trois Saumons coule sur 17,0 km, répartis selon les segments suivants :
2,1 km vers le nord-ouest, en coupant la route du 5e rang Est dans Saint-Aubert, jusqu'à la route Bélanger ;
3,0 km vers le nord-ouest, jusqu'à la confluence de la rivière Trois Saumons Est (venant de l'est) ;
3,7 km vers l'ouest, en traversant la rue Principale Ouest (et route du 3e rang ouest), jusqu'à la limite entre Saint-Aubert et Saint-Jean-Port-Joli ;
3,2 km vers le nord-ouest, jusqu'à l'autoroute 20 ;
5,0 km vers l'ouest, en traversant la voie ferrée et en coupant la route 132, jusqu'à sa confluence.
Au terme de son cours, la rivière Trois Saumons se jette sur la longue grève (à marée basse) dans l'Anse de Trois-Saumons, sur la rive sud de l'estuaire moyen du Saint-Laurent. Cette confluence est située à 2,6 km au nord-est du village de L'Islet-sur-Mer et à 6,8 km au sud-ouest du village de Saint-Jean-Port-Joli.