The 22-year-old joined Schalke on a season-long loan last August and has now sealed a full transfer, agreeing a contract to keep him with the Bundesliga club until 2021.
Reports earlier this month had suggested a £16million deal was close to fruition as Bentaleb neared an appearance clause under the terms of his loan that would trigger a permanent move.
Bentaleb has played in 20 of Schalke's 21 Bundesliga matches this season, scoring four times as his side sit 10th in the table.
Both Schalke and Tottenham confirmed the deal on Friday, with Spurs wishing the Algeria international well.
"Even when I came to Schalke in the summer, it was my goal to play here as often as possible and convince the club to commit myself permanently," Bentaleb told his new club's website.
"The fact that this has now worked out and everything is perfect, feels great.
"It's good to have someone to trust you. The team of coaches, my team-mates, the people responsible, the whole club have made it easy for me to feel at home with Schalke. I am happy to be part of the club."
Bentaleb joined Spurs as a youth player from Dunkerque in 2012, making his debut in December 2013.
He played 26 Premier League games in 2014-15, but injuries restricted him to just five in the top-flight last season.