This where I will be posting analysis and other insights on today’s primaries. For the results as they come in, see our feed from Associated Press. For more on Virginia politics, you can sign up for our free political newsletter, West of the Capital, that goes out every Friday afternoon:
1 a.m.: All early votes now counted; McGuire is up 327
But it’s not over yet. What happens next: There’s the official canvass, which might change some numbers. Also, Virginia allows mail ballots to arrive as late as Friday as long as they’re postmarked by the deadline, so not all the votes are in here. Despite that, it seems unlikely to me that Good will be able to make up McGuire’s margin, as narrow as it might be. This is simply a mathematical question. Given how close the vote was, it seems unreasonable to think the mail ballots would have a big margin either way — or that there would be enough of them that even a small margin out of a big total would give Good a 328-vote swing.
11:03 p.m.: McGuire lead still at 285 but . . .
We have 1,532 early votes yet to be counted and they’re all in Bob Good counties:
804 early votes in Fluvanna County, where Good took 55.85% of the vote
728 early votes in Bedford County, where Good took 58.55% of the vote
To make up the difference, Good would need almost 60% of those uncounted votes
10:43 p.m.: McGuire appears to have won but . . .
With all 303 precincts counted, McGuire clings to a 285-vote lead. However — and this is a big however — there are still 2,099 early votes yet to be counted and added into the totals. Here’s where they are:
804 early votes in Fluvanna County, where Good took 55.85% of the vote
728 early votes in Bedford County, where Good took 58.55% of the vote
567 early votes in Halifax County, where McGuire took 52.65% of the vote
Also, Virginia law allows mail ballots that arrive before Friday. This isn’t over yet.
10:35 p.m. Just two precincts left
We’re down to just two precincts in Albemarle County. John McGuire leads by 285 votes. Based on the other returns in Albemarle, Bob Good may well carry those outstanding precincts but it seems unlikely he can make up that margin.
10:29 p.m.: Six precincts in Albemarle County left and they could go either way
McGuire holds a 285-vote lead. We’re down to six precincts in Albemarle County. Based on the pattern of other precincts in the county, they may split. This could go either way.
10:23 p.m.: What to expect out of Albemarle County
Of the 14 precincts left to count in the 5th District Republican race, 12 are in Albemarle County. Overall, Bob Good has been winning Albemarle, with 55% of the vote. However, on closer inspection, the closer the precincts get to Charlottesville, the more they trend McGuire (but not always). Of the 12 precincts still out, half border Charlottesville. Can you say nail-biter?
10:12 p.m.: A closer look at Albemarle County
We have 19 precincts still outstanding in the 5th District Republican race — three in Bedford County (which is going heavily for Bob Good) and 16 in Albemarle County. That’s another Good county, but, in looking closer at the returns there, not every precinct in Albemarle is going for him. That means we can’t automatically say the outstanding precincts there will be in his favor. McGuire currently leads by 328 votes.
10:03 p.m.: It’s mostly Good precincts left to be counted
Of those, 18 are in Albemarle County (Good), three are in Bedford County (Good), two are in Pittsylvania County (McGuire). Those will make the difference. McGuire currently leads by 282 votes.
9:54 p.m.: McGuire back out in front by 142 votes
Another lead change: McGuire now up by 142 votes with 275 of 303 precincts reporting. We now have just four precincts out in Pittsylvania County (McGuire) but 20 out in Albemarle County (Good), so the ground still seems to favor Good, but who knows at this point?
9:47 p.m.: The localities yet to be counted ought to be Good counties
The main ones still out: Albemarle County (with 7 of 30 precincts in, Good leads). Bedford County (with 3 of 11 precincts in, Good leads). Pittsylvania County (with 22 of 29 precincts in, McGuire leads). Right now, Good leads narrowly overall, by 127 votes. This could go either way but the ground is tilting Good’s way.
9:35 p.m.: Good pulls out in front
We have a lead change. Bob Good is now out in front by 203 votes with 225 of 303 precincts reporting.
What’s made the difference: Lynchburg, all of it, has now reported and Good carried the Hill City. Mecklenburg is now all in, and it’s gone for Good.
The good news for Good: He’s out in front, and he may have more votes coming. Only four of Albemarle’s 30 precincts are in, but he’s winning there.
The good news for McGuire: There are still 10 precincts out in Pittsylvania and he’s leading there. The momentum, though, has definitely shifted Good’s way.
9:32 p.m.: Faraldi appears to win by 21 votes in Lynchburg
We’ve been waiting all night for results out of the epic Ward IV battle in Roanoke between Chris Faraldi and Peter Alexander. The State Board of Elections now shows the unofficial final to be Faraldi by 21 votes: 1,023 to 1,002.
9:25 p.m.: McGuire’s narrow lead over Good shrinks
We now have slightly more than half the precincts reporting — 168 of 303. McGuire has 50.5% of the vote, a lead of just 554 votes. What I notice: A lot of big places are still out, and some of them are tilting toward Good in the early voting or early returns. Among them: Albemarle County and Charlottesville. It would be quite the irony if a locality Nikki Haley won in the presidential primary wound up being responsible for pulling Good out in front here. Also still out: Lynchburg. However, some McGuire-tilting localities are still out, too, such as Hanover County, and almost half of Pittsylvania County. I’d rate this officially too close to call.
9:09 p.m. Kaine blows it — the harmonica, that is
State Sen. Ghazala Hashmi, D-Chesterfield County, posts this video of U.S. Sen. Tim Kaine, D-Virginia, who now knows he’ll face Republican Hung Cao in November:
9:00 p.m. McGuire leads narrowly but most of the vote is still out
So far we have 131 of 303 precincts reporting so there are a lot of votes still out. The main places where votes are still out are Lynchburg, Mecklenburg County, Albemarle County and Charlottesville (where Good has been leading), as well as Hanover County, Goochland County and Pittsylvania County (where McGuire has been leading). If the precincts still out go like the rest of those localities, it’s entirely possible this race tightens further. At the moment, McGuire is at 51.3%.
8:45 p.m.: New numbers favor McGuire
We’re getting some more numbers. John McGuire has expanded his narrow lead over Bob Good by a smidge. McGuire has now pulled back out in front in Pittsylvania County, which has swung back and forth through the evening. Also of note: More of Campbell County (Good’s base) is in than Goochland County (McGuire’s base).
8:34 p.m.: Still in doubt: Good-McGuire and Lynchburg council race
All the races we’re following this evening appear to be settled except the two most contentious ones. Hung Cao has won the Republican nomination for U.S. Senate. Gloria Witt has won the Democratic nomination for the 5th District congressional seat. For Roanoke City Council, it looks safe to say the winners will be Phazhon Nash, Terry McGuire, Benjamin Woods, in that order. Tammy Shepherd has won the Republican nomination for Vinton District supervisor in Roanoke County by 17 votes (this is where we wait for the official canvass and, if necessary, a recount). That leaves the Good-McGuire race and the Alexander-Faraldi race for Lynchburg’s Ward IV council seat. These were our marquee races anyway, so sit back and let’s see what develops. The vote-counting appears to have slowed in the 5th, by the way. At the moment, McGuire has is out front with 51.5% of the vote but that reflects just 96 of 303 precincts.
8:26 p.m. Shepherd appears to hang on by 17 votes
New numbers have tightened the Vinton District Supervisor race but looks like all the votes have been counted except provisionals and Tammy Shepherd remains on top, just by a smaller margin. The early voting (and Bonsack, the final precinct to report) appears to have broken heavily for Tim Greenway, which accounts for the tightening. The unofficial finals are Shepherd 1,068, Greenway 1,051.
8:21 p.m. Good-McGuire race tightens
We’ve got a bunch of new numbers and now the Good-McGuire race is very tight, with McGuire out in front by just 450 votes. Campbell County, Good’s home base, is starting to report and, not surprisingly, he’s winning there. More significant: New numbers now put Good out in front in Pittsylvania County. Early returns also have him out in front in Mecklenburg County. This is going to be close.
8:05 p.m.: No definitive word yet on Lynchburg council
The State Board of Elections shows Chris Faraldi leading Peter Alexander 281-271 but doesn’t say where those votes are coming from. Update: These appear to be the early votes; no day-of results yet.
8:02 p.m.: Nash leads Democratic balloting in Roanoke
We only have two precincts in, but they’re two very different precincts — Forest Park in predominatly black northwest Roanoke and Crystal Spring in affluent and white South Roanoke — and Phazhon Nash leads the balloting in both. Jamaal Jackson, who had said he was quitting the race but never legally withdrew, is in fourth, and out of the money so far. The order right now: Nash, Terry McGuire, Benjamin Woods and then Jackson.
8:00 p.m. McGuire continues to have slight edge over Good
Good is winning the Lynchburg area, his base. He’s also taking Charlottesville and Albemarle County, which has the biggest share of votes in the district — just not a lot of Republican votes. McGuire, though, is taking everywhere else, including the southern tier of the district. For instance, he’s taking 58% in Pittsylvania County. That represents just two precincts, but if that continues, it’s a bad sign for Good.
7:53 p.m.: Shepherd will stay as Vinton District Supervisor
With all but one precinct reporting, Tammy Shepherd is taking 57.6% of the vote. She had been appointed to fill an unexpired term until this year’s special election. There is no Democrat on the ballot in the fall so this Republican primary between Shepherd and school board member Tim Greenway is tantamount to election.
7:51 p.m.: Witt is winning every locality so far
Gloria Witt seems well on her way to winning the Democratic nomination in the 5th District. She’s won every locality reporting so far and has 61% of the vote.
7:41 p.m.: The McGuire-Good race will be close
John McGuire holds a slim lead — 52.5% to 47.5% with nine of 303 precincts reporting. This feels like it will be be close. What I notice so far: McGuire is winning the southern part of the district. Good is winning around Lynchburg, as he should. Good is also winning in Albemarle and Charlottesville, the least Republican part of that district. We have yet to hear from the eastern part of the district. The good news for Good: He’s staying close and he’s taking Charlottesville/Albemarle. The not-so-good news: His base is starting to report, but McGuire’s hasn’t yet.
7:39 p.m.: Good now leads in Lynchburg
Some new numbers some Bob Good leading in Lynchburg. That’s a place he needs to win.
7:33 p.m.: First Lynchburg numbers go to McGuire
The State Board of Elections isn’t showing yet which precincts these are from, but the first numbers from Lynchburg show McGuire 172-158. Lynchburg ought to be part of Good’s base — he’s from neighboring Campbell County — so that’s not a good sign for him.
7:28 p.m.: Witt takes early lead in 5th District Democratic race
I realize most people are following the Republican side in the 5th District, but in the Democratic primary, Gloria Witt is taking about 53% of the vote so far. Not many precincts in, but a good start for her. Most of those votes are from Charlotte County. She’s also leading in the first precinct to report from Charlottesville. Lot of Democratic votes in Charlottesville, so another good sign for her.
7:25 p.m.: Cao rolling up the numbers
With 7% of the vote in, Hung Cao has 68% of the vote in the Republican Senate race. He’s also leading almost everywhere. With half the precincts in Staunton in, he’s taking 52.8% of the vote in a community he implied was “podunk.” He’s also taking 66% of the vote in Washington County, even after he said Abingdon was too far to go for a campaign forum. While this isn’t over, it sure feels like it.
7:22 p.m.: The first 5th District results are from Charlotte County
For those hanging on every number, note that all the 5th District results so far are from Charlotte County. With four of eight precincts in, McGuire leads with 54.5% of the vote.
7:18 p.m.: First precinct to report in 5th District goes big for McGuire
The first one to report is Drakes Branch in Charlotte County. McGuire: 65.8%, Good: 34.2%
7:11 p.m.: Cao leads big in early returns
We’re starting to get some numbers. In the Republican Senate race, Hung Cao — who had implied that Staunton was “podunk” and that Abingdon was too far to drive — has jumped out to early leads in in the first Southwest localities to report. He’s taking 78% in Wythe County, for instance. With 2% of the vote in statewide, he’s taking 53.7% to 19.8% for Eddie Garcia.
7:06 p.m.: Some election night advisories
Roanoke tends to be one of the later-reporting localities, so don’t worry if you don’t see Roanoke results right away. For those following the Republican Senate primary, note that we often see results from smaller, rural areas first, with Northern Virginia localities being among the last to report since they’re so much bigger. In a general election, that means early results often skew Republican. In primaries, it means they’ll skew toward whoever does best in those rural areas.
7 p.m.: The polls have closed
It’ll be awhile before we get numbers. Buckle up!
5:02 p.m.: Here’s how many early votes were cast
We’ll find out later what percentage of the total votes these constituted, but here’s how the early voting shook out across the state. (Thanks to the Virginia Public Access Project for compiling these numbers.)
The 5th District Republican primary between Bob Good and John McGuire saw more early votes than any other Republican primary: 14,275. In second place on the Republican side: The 7th District, where 9,576 votes were cast early.
Democrats like early voting more than Republicans, so we shouldn’t be surprised that the biggest early votes were in Democratic primaries: 21,908 people voted in the 11th District Democratic primary in Northern Virginia, where incumbent Gerry Connolly is heavily favored. In second place: The 10th District, where 18,383 people voted.
Here’s one curiosity about how much Democrats like voting early: Four congressional districts saw more people voting on the Democratic side than in the 5th District Republican primary — the 11th, the 10th, the 7th — and then the 8th. The latter is interesting because there’s no Democratic congressional primary in that district. Instead, the early voting on the Democratic side there is driven entirely by local primaries.
4:54 p.m.: Where the candidates spent their day
In the 5th District Republican contest, Bob Good spent at least part of the day working the polls in Lynchburg, where there’s also a primary for a city council seat in Ward IV. John McGuire, meanwhile, spent the afternoon at a special session of the state Senate in Richmond, which so far doesn’t seem to have accomplished very much. I find it curious that Good was in Lynchburg, which ought to be part of his base, but it’s also a place where McGuire has tried to make some in-roads.
1:48 p.m.: Vindman can’t take the heat?
A curious post from political operative Ben Tribbett about Eugene Vindman, the presumed front runner in the 7th District Democratic primary:
Speaking of weather, now’s a good time to remind people that Cardinal weather journalist Kevin Myatt has a free weekly newsletter. Sign up here.
1:35 p.m.: No sign of Jackson campaign in Roanoke

I made a spot check of three precincts in Roanoke this morning, with emphasis on the Black-majority precincts in the northwest part of the city. I saw no signs or other activity for Jamaal Jackson. He’s one of the four candidates on the ballot for three at-large Democratic nominations for city council. He also recently withdrew after it was revealed he hadn’t submitted enough signatures to qualify for the ballot, but as Cardinal’s Samantha Verrelli reported, Jackson did not send in a legal notice of withdrawal, so he’s still officially a candidate.
The Virginia Public Access Project reports that 1,763 people have voted early in that primary. Based on fundraising and name recognition from a previous council bid, Jackson might well be in the top three, so the question is whether he’s already banked enough votes to win despite his withdrawal. That made me curious whether we’d see any late-minute activity on his behalf. I didn’t see any — at least I didn’t see any signs or people working the polls for him. I did notice that at some precincts there were only signs for two of the Democratic candidates — Terry McGuire and Phazhon Nash. Only at Forest Park did I see signs for Benjamin Woods, as well. Woods is the least-known and least-funded of the four candidates. If my theory is right, then the question is whether Woods would get enough votes today to outpoll whatever votes Jackson had already banked. Check back tonight and find out!
1:18 p.m.: Few signs for Republican Senate candidates
Yard signs don’t vote and yard signs are the least sophisticated form of marketing. Still, for what it’s worth, I make this observation: This morning, while out running errands, I made a spot check of precincts in Roanoke, Roanoke County and Botetourt County. In Roanoke, I saw no signs for any of the five Republican candidates for U.S. Senate — not a surprise in a city that typically votes about 60% Democratic. However, even in Republican-voting Roanoke County and Botetourt County, I didn’t see much activity either. At the two Roanoke County precincts I visited (Burlington and Hollins), I saw no signs for any of the candidates. At the Daleville precinct, I saw two signs each for Eddie Garcia and Chuck Smith. At the Fincastle precinct, I saw only two signs for Smith. In the absence of public polling, Hung Cao is considered the front-runner because he’s got the most money and the endorsement of former President Donald Trump, but he had no presence at any of those precincts.
11:39 a.m. Kiggans urges vote for McGuire
U.S. Rep. Jen Kiggans, R-Virginia Beach, who has clashed with fellow Rep. Bob Good, R-Campbell County, is taking to Twitter/X today to urge a vote for Good’s challenger, John McGuire.
7 a.m.: Reeves not happy with McGuire’s campaign
It can be a full-time job to keep up with everything being said on Twitter/X but this post this morning caught my eye. Here’s what State Sen. Bryce Reeves, R-Spotsylvania County, posted this morning. Suffice it to say he’s not a fan of fellow state Sen. John McGuire’s campaign as McGuire, R-Goochland County, challenges U.S. Rep. Bob Good, R-Campbell County.


Register now for Cardinal’s conference on cannabis in Virginia
Cardinal News will present an educational conference on cannabis Oct. 15 in partnership with Roanoke College in Salem.
Virginia is the only state where personal possession of small amounts of cannabis is legal, but retail sales are not. The theme of the day-long conference is “Confused about cannabis?” and will feature speakers who will address the political, economic, health and legal aspects of cannabis.
The conference is expected to attract participants from across Virginia, but space is limited. More information about the program, sponsorships and early bird registrations are available now. To take advantage of a $25 discount off the $150 ticket, use the promo code “early bird” before Aug. 1.

