When John Brassard was knocking on doors in Barrie, Ont. in this fall’s election, he could sense that his Conservative party’s platform was a winner. Brassard, the incumbent in Barrie-Innisfil, was confident voters would give him a second term on the strength of a tax cut the Conservatives said would save the average family $850 a year, a public transit tax credit that could save long-distance commuters almost $600 a year, and a children’s fitness tax credit that could save hundreds more.

And he did comfortably hold his riding, even after Prime Minister Justin Trudeau paid Barrie two visits during the 40-day campaign. If Trudeau didn’t manage to oust Brassard, though, election results across the suburban swath that starts just south of his seat show why the Liberals tried so hard. Brassard, who represents plenty of Toronto commuters, was the exception, not the rule. His win says a lot about who voted for the Conservatives and who stuck with the Liberals.

GO Transit commuter trains reach the end of the line in Barrie-Innisfil, where thousands of Brassard’s constituents make the daily trek to downtown Toronto or nearby suburbs. The riding has the ninth-highest proportion of commuters who travel longer than an hour each way, according to census data. But the former city councillor and firefighter draws a distinction between the 705—his riding’s area code—and the 905 region just to the south.

For one, outside of Barrie and a handful of other residential areas, Brassard represents farmers. And half of the commuters in his riding travel less than 30 minutes each way—meaning many aren’t lured away by the GTA. Brassard tailored his pitch to each constituent, pushing affordability measures like the transit credit in commuter-heavy areas, and slamming the federal carbon tax whenever he talked to a farmer who said their costs were through the roof. The Conservative platform may have inadvertently been tailored for a riding like Barrie-Innisfil—dense enough to be considered urban, pock-marked with suburban communities, stitched together by wide rural expanses—at the expense of more densely packed GTA ridings.

The stark truth of the 2019 election was that fewer than one in five seats changed hands. The vast majority of Canada voted the same way as four years ago. Only 62 ridings flipped out of 338. The victorious Liberals were still the biggest losers. They shed 21 seats to the Tories and only gained two back; they watched eight of their seats fall to the Bloc Québécois, a Fredericton seat go Green and a Vancouver district elect Jody Wilson-Raybould.

The opposition parties traded a handful of seats, but the enduring story was just how many voters, especially in the GTA, sent Liberals back to Ottawa. And the new Liberal coalition looks a lot like the last one, if a bit slimmer.

An avalanche of post-election analysis blames the Conservatives’ loss on Andrew Scheer’s social conservatism, the poor judgment of his senior staff, a lack of reliable voter data, an inadequate plan to fight climate change and an uninspiring set of platform promises. Tories have dispatched John Baird, a longtime Tory MP and cabinet minister, to assess the party’s lacklustre performance. As he goes about his work, detailed Statistics Canada riding profiles with detailed census data on income, employment, ethnicity and age help to piece together the voter coalition that turned away from Scheer and gave Trudeau a second term. (Important caveats: The census data is from 2016, which means it’s at least three years old—particularly relevant in fast-growing communities where demographics change. Also, data on journey to work, ethnicity and education were based on 25 per cent samples of private households in Canada.)

URBAN/RURAL DIVIDE

Liberals utterly dominated urban Canada. In 2015, the Liberals won 123 out of 176 ridings with a density of 300 per sq.-km., which our analysis defines as urban. In 2019, they held 107 of those ridings, bleeding 10 to the Tories and four to the Bloc. (Nine of those Tory swings were west of Ontario.) Conservatives struggled mightily to win in cities, managing only to win the 67th densest riding in the country—Edmonton-Griesbach. Rural Canada was, of course, a different story: Tories won 80 of 150 ridings after managing to win only 69 in 2015.

INCOME

Trudeau’s well-worn pitch to the middle class “and those working hard to join it” appears to have worked—again. Of the 152 ridings in which the median household after-tax income was between $40,000 and $60,000 in 2015, the Liberals held 73 and picked up four from the NDP. They lost only a smattering to other parties. The Tories fared better in the 138 ridings with median incomes between $60,000 and $80,000. They didn’t lose an inch to other parties, holding 47 ridings and swiping 13 from the Liberals. The two parties split the 41 ridings, 20 apiece, with median incomes between $80,000 and $100,000. (Only four ridings had median incomes over $100,000, and Tories won three, each in Alberta. The fourth, Oakville on the GTA’s western flank, went Liberal.)

HOUSING

Trudeau also won big where the most families are paying at least 30 per cent of their income on housing. Of 157 ridings where 40 to 50 per cent of households spend that much on rent, the Liberals won 93 to the Tories’ 44. In ridings where only 30 to 40 per cent of renting households pay that much, the Conservatives won 56 of 133 (and the Liberals won 50). The trend holds for homeowners, too. The Liberals won 52 of 68 ridings where 20 to 30 per cent of homeowners spent at least 30 per cent of income on housing. The Tories won more seats in ridings that spent less proportionally on their homes.

Liberals also dominate ridings with the highest proportion of lone-parent households: they won 35 of 55 ridings in which more than lone parents make up 20 per cent of households, and 79 of 152 ridings where 15-20 per cent of households have just one parent. Conversely, Tories won 64 of 129 ridings where that number is only 10-15 per cent.

VISIBLE MINORITIES

The Conservatives didn’t manage to win back many of the GTA seats with large immigrant communities they won in 2008 and 2011–and lost in 2015—after years of work spearheaded by then-cabinet minister Jason Kenney. Heading into the election, Liberals held five ridings in which Statistics Canada says visible minorities comprised more than 80 per cent of the population. The Tories held one. None of those ridings changed the way they voted. Before the election, Liberals held 20 of 23 ridings where visible minorities made up between 60 and 80 per cent of residents. The Tories held one. On election night, the Liberals won 18 and ceded two to the Tories. Conservatives only won a plurality of seats where the number of visible minorities was under 20 per cent.

EDUCATION

On education, too, the electoral divide is clear. Liberals won 14 of 15 ridings where Statistics Canada says 80 per cent or more of adults aged 25-64 have completed post-secondary education. They won 43 of 75 ridings where that proportion is 70 to 80 per cent, and 62 of 126 where that number is 60 to 70 per cent. Tories won a plurality—56 of 109—where post-secondary rates dropped to 50 to 60 per cent.

AGE

Even if younger voters skew left, as post-election analyses often show, the median age of a Tory constituent, 41.3 years old, is roughly comparable to a median Liberal constituent, at 41.2 years old. The Greens’ three ridings are some of Canada’s oldest, which explains their constituents’ median age of 47.3. The NDP’s median constituent is the youngest, at 40.1 years old.

MORE ABOUT FEDERAL ELECTION 2019: