The Conservatives had hoped to win a majority government
Canadians have re-elected the Conservative Party, led by Stephen Harper, who will form the third minority government in four years.
With almost all votes in, the Conservatives were said to have won 143 seats, a big rise but still short of the 155 needed for a majority.
The opposition Liberal Party, under Stephane Dion, has won 76 seats, a loss of nearly 20 seats.
Turnout was put at 59.1% - one of the lowest figures on record.
The Conservatives have taken 37.6% of the popular vote, the Elections Canada website reported.
The Liberals secured 26.2% of the vote.
Mr Harper hailed his party's increase of 16 seats as he claimed victory in the western city of Calgary.
Prime Minister Stephen Harper addresses his supporters at a victory rally
"Our party is bigger, our support base is broader and more and more Canadians are finding a home in the Conservative Party," he said.
He promised to work with the other parties in the House of Commons "to protect the economy and weather this financial crisis".
Mr Harper called the snap poll - the country's third election in four years - in the hope of securing a majority.
He had described the previous parliament as deadlocked and dysfunctional.
Canada was the first big economic power to go to the polls to elect a new government since the financial crisis.
The crisis came to dominate the campaign and Mr Harper was criticised for taking a "stay-the-course" approach and for not showing enough empathy with Canadians affected by the stock market turbulence.
Conservatives: 143 seats, 37.6%
Liberals: 76 seats, 26.2%
Bloc Quebecois: 50 seats, 10%
NDP: 37 seats, 18.2%
Other parties: 2 seats, 8%
Source: Elections Canada
The Conservatives also failed to gain much-needed support in the province of Quebec, where his cuts to arts funding were not well received.
But the Liberals failed to inspire voters with an ambitious green carbon tax plan, says the BBC's Lee Carter in Toronto.
Mr Dion conceded defeat at a rally in Montreal, offering Mr Harper his "full co-operation in these difficult economic times".
Mr Dion, a French-Canadian from Quebec, also had difficulty connecting with English-speaking voters, our correspondent says.
He gave no indication he would be stepping down as Liberal leader over his party's loss of seats.
"Canadians are asking me to be the leader of the opposition and I accept that responsibility as an honour," he said.
In other results, the separatist Bloc Quebecois have picked up two seats for a total of 50, while the left-wing New Democratic Party (NDP) gained seven seats to reach 37.