It originates in a valley north of the Rajmachi hills formed by mountain streams draining the northern slope of those hills which are part of the Sahyadri range of the Western Ghats in the Raigad district of Maharashtra.
From the point of origin the river flows north turning left where it is joined by River Salpe,its right-bank tributary.It then begins its north-eastward journey and passes the Anglo-Eastern Maritime Academy which is situated on its right bank at Khandpe village. The river bypasses the Palasdhari village where it receives the discharge from the Palasdhari Dam starting a northward course beyond this point coming to lie parallel to the rail tracks only to be distracted by the town of Karjat.Meandering through Karjat,it reaches further north synapsing with River Peg between Bhivpuri road and Neral.Continuing its run along Neral it is joined by River Poshir,another right-bank tributary,at Nikhop village.It flows north skirting Badlapur where it receives the run-off from Chikoli Dam.Near Raw water pump house of MIDC Jambhul the river meets Barvi Dam discharge water also called as Barvi River.The conflunce is a tourist and fishing hub for villagers around.The river flows through Ulhasnagar to which it gives its name.It then passes under the rail bridge connecting Ambivali and Shahad and shotly after confluences with its biggest tributary formed by merging of River Bhatsa and River Kalu which together accounts for 55.7% of the total catchment area of River Ulhas.
Beyond Kalyan the river ,nearly flowing at sea level, merges with the creek waters and its flow comes to be dictated by the tidal forces.From here on it forms an estuary and also supports a mangrove forest near Diva-Dombivali.In rainy season and during low tide the river continues to flow till thane where splits into two branches which flow west and south, respectively, around Salsette Island, on which lies the metropolis of Mumbai.The main branch turns northwestward to Ghodbunder, where it opens into the estuary of Vasai Creek. Thane Creek flows south to empty into Bombay Harbour. The estuary of the Ulhas is the site of the historical ports of Kalyan, Kopri (Chersonesus/Coprostaneum) and Shurparaka (now Sopara).
The total length of the river from its origin to its outfall in the Arabian sea is 122 km.