Gray began his career at age 19 as a utility player for the Philadelphia Phillies of the National League. He appeared in 34 games in 1890—his first season with the team—amassing a.242 batting average in his debut season, the same as his career average. During the year, he scored 20 runs and batted in 21. At the plate, he hit eight doubles and four triples, and stole five bases during the year. In the field, Gray appeared at seven positions on the diamond in his first year, making ten appearances in the outfield, eight each at second base and third base, seven behind the plate at catcher, and one at first base. Gray's batting declined during the 1891 season, as he amassed no extra-base hits and his batting average dropped to.240. He scored eleven runs, batted in seven, and stole three bases; he also walked three times. His 81 plate appearances, 73 times at bat, and 23 games played were all second-best among Philadelphia's bench. Defensively, he appeared in games at five positions; catcher was his most utilized role, as it was the only position that he played in more than ten games. He made nine errors behind the plate and caught 26% of potential baserunners stealing.
Athletics and Grays: 1892
During the 1892 season, Gray played in the minor leagues for the Providence Grays and the Philadelphia Athletics of the Eastern League, which at that time represented the top level of minor league play. He played for the Grays from April 30 through June 18, and then with the Athletics from June 20 to the conclusion of the season on September 12. Between the two teams, Gray collected 15 doubles, 3 triples, and 1 home run, the first of his minor league career. He batted.251 and slugged.336 while stealing 16 bases and scoring 45 runs.
Indianapolis: 1894
Gray played with the Indianapolis Hoosiers in 1894, but no information about that year's team is available other than their roster.
Cincinnati Reds: 1895–1896
In 1895, Gray returned to the National League with the Cincinnati Reds, appearing in 43 games as an infielder—adding 5 games at shortstop to his repertoire of positions—5 games as a catcher, and 1 game in left field. He led Cincinnati's bench players in doubles and runs batted in, while placing second with 4 triples and 15 walks. He batted.304, the highest average of his professional career, and hit his only home run in the majors during that season as well. The 1896 season was less productive for Gray, as he batted only.207 in 46 games and ranking last among Cincinnati's bench players in batting average, hits, doubles, and runs scored. It was also the only year of Gray's career in which he appeared at all four infield positions; in total, he played 37 games in the field at 7 different positions. Most of his games were played at second base and catcher.
Indianapolis: 1897
In 1897, Gray played a second stint with the Hoosiers, now known as the "Indians", of the Western League. It was his most productive season as a player; at age 26, he played in 125 games for the Hoosiers, batting.347, the fifth-highest average on the team. He hit 19 home runs to lead the Hoosiers, adding 26 doubles, 11 triples, and 13 stolen bases. He also led Indianapolis with 21 sacrifice hits. After the season, he was traded to the Pittsburgh Pirates with four other players in a deal that included Pink Hawley.
Pittsburgh Pirates: 1898
After trading for Gray, the Pirates made him their starter at third base for the 1898 season; it was the only year in his major league career in which he appeared at only one position. In 585 plate appearances—third-most on the team—Gray led the Pirates in doubles and batted in 67 runs, second to Jack McCarthy. He notched 121 hits in 528 at bats, taking 28 walks and scoring 56 runs. In the field, however, he committed 59 errors in 486 chances. While a high total in the modern era, it was not unheard of for the National League at the turn of the century; the third basemen who led that league in errors between 1891 and 1900 averaged 70 errors per season. Still, Gray's 59 were second only to the 60 committed by Barry McCormick in 1898, and it was the last season that he ever played in the top-level leagues.
Final minor league years: 1899–1900
Gray played for the Milwaukee Creams of the Western League in 1899—playing there from April 28 to August 30 of that year—and moved to the Detroit Tigers and then the Hoosiers again for the 1900 season. In his final year, he batted.282 with the Tigers between April 27 and June 19 while adding a double and two stolen bases. When he moved to the Hoosiers, he batted.242 with two additional stolen bases and three doubles. Gray left the Western League the year before it became the American League and became recognized as a major league.
After baseball
Gray died on December 8, 1932, in his hometown of Philadelphia. He is interred at Ivy Hill Cemetery in that city.