Former Catalan President Carles Puigdemont celebrated the results from Brussels where he's been in self-imposed exile since Spanish authorities announced they were seeking his arrest.
Puigdemont was pushed from power after his government held an illegal independence referendum
and MPs declared the region's unilateral independence from Spain.
"The Catalan Republic has won," he announced in Brussels in the early hours of Friday morning. "The Spanish government was defeated."
The Spanish government had called an early election in the hope of quelling the separatist movement, whose push for independence triggered the country's worst political crisis in decades.
But Madrid's hopes were clearly dashed. With more than 99% of the vote counted, no single party gained an outright majority but the three separatist parties together took 70 seats. They needed 68 to keep their grip on the 135-seat Parliament.
To govern the pro-independence parties will need to join in a coalition. Such a scenario would push the Madrid-Barcelona relationship back to where this all began three months ago, with a provocative separatist government in Barcelona rattling Madrid.
The anti-independence Ciutadans (Citizens) did win the most seats of any party, but not enough to form a majority government.
'The Catalan republic has won'
Puigdemont's party -- Junts per Catalunya (Together for Catalonia) -- won 34 seats in Thursday's vote. He said Spanish Prime Minister Mariano Rajoy had "received a hit, a blow by the Catalans."
"They lost their coup d'etat," he said.
Marta Rovira, from the other main separatist Esquerra Republicana de Catalunya (Republican Left of Catalonia) party, also declared victory after her party won 32 seats. She shouted "Freedom" in concert with party supporters after the results emerged.
Prime Minister Rajoy's People's Party (Partido Popular) lost most of its seats in the Thursday election, dropping from 11 to three.
The result was also a clear rejection of Madrid's response to the turbulence. The Spanish government sent in thousands of police to shut down the October 1 referendum, and officers were seen pulling elderly voters by the hair from polling stations and firing rubber bullets at relatively clam protesters.
Madrid seized control of the region after dismissing the entire Catalan government and Parliament.
Rise of the center-right Citizens party
Despite the clear support for the pro-independence side, it was actually the anti-independence Ciutadans (Citizens) party that came away with the most seats, winning 37 -- a sweeping gain compared to the 25 the party won in the last vote, and a sign of just how divisive the independence issue has been.
The party benefited from a record turnout of 82%.
The party candidate, Inés Arrimadas, was likely hoping to win and form a coalition of other anti-independence parties, but the numbers do not stack up in her favor.
Nonetheless, she gave a victory speech of her own.
"We are all Catalonia and the first political force in the Catalan parliament is called Ciutadans," she said.
"The 10 most-populated cities in Catalonia are right now orange, so thank you to all the people who have made that possible," she said, referring to the party's color.
Political negotiations to come
The results, however, do not necessarily mean easy sailing for the independence movement. There will probably be intense negotiations, particularly over the issue of who would become Catalonia's next president.
The question is further complicated by the fact that Puigdemont
is in self-imposed exile in Brussels.
He said last week that he would come back if he won, but he could still face arrest
by Spanish authorities over the illegal referendum if he does.
The other separatist leader -- Oriol Junqueras of Esquerra Republicana de Catalunya -- is detained in a Madrid prison over the referendum, on charges of sedition and rebellion. Both leaders face 30-year jail terms.
The two parties told CNN last week that they would join in a coalition in this scenario, but the movement has shown signs of fracture and is not as united as it was in the 2015 vote.
The two parties will also have to please the marginal Candidatura d'Unitat Popular (Popular Unity Candidacy), as they would not pass the 68-seat threshold without it. The party was kingmaker in 2015 as well, propelling Puigdemont to the presidency in an 11th-hour deal.