Chancellor Angela Merkel's center-right Union bloc won 28.9% of the vote and the Social Democrats, their partners in an often-cantankerous "grand coalition" of what have traditionally been Germany's biggest parties, got 15.8%. Five years ago, they took 35.4% and 27.3%, respectively.
The Greens powered past the Social Democrats into second place, increasing their score to 20.5% - nearly double their 10.7% showing in 2014.
It was a less satisfying evening for the far-right Alternative for Germany, which celebrated increasing its presence in the European Parliament but fell short of its showing in Germany's 2017 national election. The party took 11% of the vote, up from 7.1% five years ago.
Party co-leader Joerg Meuthen said Brexit and the scandal surrounding the far-right Freedom Party that brought down the government in neighboring Austria hadn't helped.
It wasn't immediately clear whether the outcome would further destabilize Merkel's national governing coalition, following long-running speculation that its end could be hastened by poor results Sunday.
The Social Democrats appeared on course for another disastrous result in a state election also held Sunday in Bremen, a longtime stronghold. Three further state elections in eastern Germany await this fall, as does as a previously agreed review of the coalition's work halfway through the scheduled parliamentary term.
Merkel has said she won't run for a fifth term in the next national election, which isn't due until 2021, but questions have swirled over whether the government will last that long. It took six months to form that government after Germany's last election, and its image was tarnished by infighting last year.
Merkel largely stayed out of this campaign, which was a first test for Annegret Kramp-Karrenbauer, her successor since December as leader of the Christian Democratic Union party. Kramp-Karrenbauer told supporters in Berlin that "this election result does not do justice to the expectations we have of ourselves as a major party."
She said the government hasn't yet "given the convincing answers that citizens in Germany demand," conceding that climate protection and adapting to "the digital world" had been weak points.
In the days before the election, a prominent YouTuber racked up millions of views with a video skewering the CDU's policies on climate change and other issues. Kramp-Karrenbauer promised the party will "roll up our sleeves."
Senior Social Democrats, meanwhile, sought to head off speculation about the future of the party's often-criticized leader, Andrea Nahles. Vice Chancellor Olaf Scholz, a Social Democrat, said that "calling for personal consequences won't get us anywhere."
Scholz congratulated the Greens, who gained at the major parties' expense and appear to have done very well among young voters. He said it was clear that "we need a really clear response to the question for humanity of climate change" and pledged that his party won't make the "wrong compromises."
Katrin Goering-Eckart, one of the Greens' leaders in Berlin, told The Associated Press that it was "a sensational result."
Asked about possible implications for the governing coalition, she said that is a question for the parties concerned, but "you can't govern sensibly without climate protection. That definitely has to change."
Germany will likely miss its goal of cutting carbon emissions by 40% by 2020. A government-appointed expert panel has agreed that coal burning should end by 2038, though activists would like to see that happen earlier.
As for the other parties in Germany's parliament, the pro-business Free Democrats won 5.4% of the vote and the Left Party 5.5%.
A seat distribution wasn't immediately released, but projections for ARD public television pointed to Merkel's Union bloc winning 29 seats, the Greens 21, the Social Democrats 16, Alternative for Germany 11 and the Free Democrats and Left Party five each.
Germany's remaining nine seats were expected to be shared out among several small parties. Unlike in German national elections, parties don't have to get 5% of the vote to win seats in the EU legislature.
Associated Press writer Frank Jordans in Berlin contributed to this report.
Copyright 2019 The Associated Press. All rights reserved. This material may not be published, broadcast, rewritten or redistributed.