Johnson Creek begins near the unincorporated community of Cottrell in Clackamas County, Oregon, southeast of Gresham in the foothills of the Cascade Range, and flows generally westward about 25 miles (40 km) to its confluence with the Willamette River, a major tributary of the Columbia River.
The creek passes through the cities of Gresham, Portland, and Milwaukie and crosses the border between Clackamas County and Multnomah County eight times.

 For much of its course, the creek flows at almost right angles to the numbered avenues of southeast Portland and its eastern suburbs.
As the creek descends, so do the avenue numbers.
The creek begins in uplands in Clackamas County east of Southeast 362nd Avenue and flows swiftly to the west for about 5 miles (8 km), crisscrossing the border between Clackamas County and Multnomah County 5 times in this upstream stretch, and passing under U.S. Route 26, the Mount Hood Highway, in Multnomah County at about 20 miles (32 km) from the mouth.
Shortly thereafter, it receives Badger Creek and Sunshine Creek from the left and the North Fork of Johnson Creek from the right.

Turning sharply, Johnson Creek flows swiftly northwest for about 3 miles (5 km), entering Gresham and shortly thereafter passing the United States Geological Survey (USGS) gauge at Regner Road, 16.2 miles (26.1 km) from the mouth.
Soon the creek enters Main City Park in Gresham, where it again turns sharply and flows slightly south of west.
Here the slope flattens, and the stream runs more slowly for the next third of its course.
Slightly west of Main City Park, it passes the Gresham Pioneer Cemetery.
Just beyond the cemetery, it receives Butler Creek on the left, enters Portland at about 13 miles (21 km) from the mouth, and receives Kelley Creek on the left shortly thereafter.
Mitchell Creek, a major tributary of Kelley Creek, enters Kelley Creek about 0.5 miles (0.8 km) south of Johnson Creek.
Shortly thereafter, Johnson Creek passes the USGS gauge station at Sycamore, 10.2 miles (16.4 km) from the mouth, and flows under Cedar Crossing Bridge.

Meandering slowly through the Lents neighborhood of Portland, Johnson Creek receives Veterans Creek, which enters on the left from its headwaters in Happy Valley in Clackamas County.
Johnson Creek passes under Interstate 205, and shortly thereafter begins to flow more swiftly again at Southeast 82nd Avenue, about 8 miles (13 km) from the mouth.
It then makes its sixth and seventh county-border crossings, dipping briefly into Clackamas County and back north into Multnomah County, and then runs near the border between Portland and Milwaukie along Johnson Creek Boulevard for about 2 miles (3.2 km).
After passing under Oregon Route 99E (Southeast McLoughlin Boulevard) in Portland's Sellwood neighborhood, the creek turns sharply south about 1.5 miles (2.4 km) from the mouth.

At Southeast 21st Avenue, it receives Crystal Springs Creek, which enters on the right.
This tributary, 2.7 miles (4.3 km) long, begins on the Reed College campus, flows under the Blue Bridge in Reed Canyon, through the Crystal Springs Rhododendron Garden, and generally south to Johnson Creek.
From its confluence with Crystal Springs Creek, Johnson Creek flows south about 1 mile (1.6 km), crossing the county border for the eighth and final time.
After re-entering Clackamas County, it passes the USGS gauge station at Milwaukie, 0.7 miles (1.1 km) from the mouth.
Shortly thereafter, Johnson Creek empties into the Willamette River 18.5 miles (29.8 km) above its confluence with the Columbia River, which in turn flows about another 100 miles (160 km) to the Pacific Ocean at Astoria.
Johnson Creek begins near the unincorporated community of Cottrell in Clackamas County, Oregon, southeast of Gresham in the foothills of the Cascade Range, and flows generally westward about 25 miles (40 km) to its confluence with the Willamette River, a major tributary of the Columbia River. The creek passes through the cities of Gresham, Portland, and Milwaukie and crosses the border between Clackamas County and Multnomah County eight times.
 For much of its course, the creek flows at almost right angles to the numbered avenues of southeast Portland and its eastern suburbs. As the creek descends, so do the avenue numbers. The creek begins in uplands in Clackamas County east of Southeast 362nd Avenue and flows swiftly to the west for about 5 miles (8 km), crisscrossing the border between Clackamas County and Multnomah County 5 times in this upstream stretch, and passing under U.S. Route 26, the Mount Hood Highway, in Multnomah County at about 20 miles (32 km) from the mouth. Shortly thereafter, it receives Badger Creek and Sunshine Creek from the left and the North Fork of Johnson Creek from the right.
Turning sharply, Johnson Creek flows swiftly northwest for about 3 miles (5 km), entering Gresham and shortly thereafter passing the United States Geological Survey (USGS) gauge at Regner Road, 16.2 miles (26.1 km) from the mouth. Soon the creek enters Main City Park in Gresham, where it again turns sharply and flows slightly south of west. Here the slope flattens, and the stream runs more slowly for the next third of its course. Slightly west of Main City Park, it passes the Gresham Pioneer Cemetery. Just beyond the cemetery, it receives Butler Creek on the left, enters Portland at about 13 miles (21 km) from the mouth, and receives Kelley Creek on the left shortly thereafter. Mitchell Creek, a major tributary of Kelley Creek, enters Kelley Creek about 0.5 miles (0.8 km) south of Johnson Creek. Shortly thereafter, Johnson Creek passes the USGS gauge station at Sycamore, 10.2 miles (16.4 km) from the mouth, and flows under Cedar Crossing Bridge.
Meandering slowly through the Lents neighborhood of Portland, Johnson Creek receives Veterans Creek, which enters on the left from its headwaters in Happy Valley in Clackamas County. Johnson Creek passes under Interstate 205, and shortly thereafter begins to flow more swiftly again at Southeast 82nd Avenue, about 8 miles (13 km) from the mouth. It then makes its sixth and seventh county-border crossings, dipping briefly into Clackamas County and back north into Multnomah County, and then runs near the border between Portland and Milwaukie along Johnson Creek Boulevard for about 2 miles (3.2 km). After passing under Oregon Route 99E (Southeast McLoughlin Boulevard) in Portland's Sellwood neighborhood, the creek turns sharply south about 1.5 miles (2.4 km) from the mouth.
At Southeast 21st Avenue, it receives Crystal Springs Creek, which enters on the right. This tributary, 2.7 miles (4.3 km) long, begins on the Reed College campus, flows under the Blue Bridge in Reed Canyon, through the Crystal Springs Rhododendron Garden, and generally south to Johnson Creek. From its confluence with Crystal Springs Creek, Johnson Creek flows south about 1 mile (1.6 km), crossing the county border for the eighth and final time. After re-entering Clackamas County, it passes the USGS gauge station at Milwaukie, 0.7 miles (1.1 km) from the mouth. Shortly thereafter, Johnson Creek empties into the Willamette River 18.5 miles (29.8 km) above its confluence with the Columbia River, which in turn flows about another 100 miles (160 km) to the Pacific Ocean at Astoria.
Johnson Creek (Willamette River tributary)