The Crooked River rises at the outlet of Songo Pond in the unorganized territory of South Oxford in Oxford County, near the eastern end of the White Mountain National Forest. It flows southeast through the towns of Waterford, Norway, Otisfield, Harrison in Cumberland County, Naples, and Casco, reaching the Songo River south of that river's source at the outlet of Brandy Pond and upstream from the mouth of the Songo in Sebago Lake.