Method: The candidate registry & election receipts

Before anyone can score a platform, compare a ward, or tell a voter what's actually out there, someone has to answer a duller question first: who is running, and where can a resident go read what they've said for themselves? This is the method behind that registry — the base layer everything else on this site stands on. It exists so that no downstream page ever has to guess at a candidate's web presence; it has to check a dated, sourced row instead.

What it produces

A structured registry covering every registered candidate in every race we track, with each row carrying a State-of-the-Election receipt: not just a claim that a candidate has a website or a platform document, but the date that claim was last actually verified and where it was verified. Downstream, this registry is the only thing our platform-scoring process is allowed to score — it never scores a candidate's web presence from memory or assumption, only from what this registry says, on the row's own face, has been confirmed and when.

How it works, step by step

The registry is built and refreshed in two connected passes.

Race and candidate refresh. For each municipality, someone goes back to that municipality's own clerk or elections office page — never a third-party mirror or aggregator — and re-confirms who is on the ballot and how many candidates are registered in each race. Any field that can't be re-confirmed on a given pass is carried forward rather than blanked out, so the registry never silently loses information it once had. Every change is written as a complete proposed update, never edited in place, and a single accountable person merges those updates into the live registry — never two people writing to the same record at the same time.

Candidate web-presence search. Finding a candidate's actual website, social accounts, and platform documents runs as a staged search. First, a broad automated sweep checks clerk listings, searches the web, and crawls likely campaign pages, producing proposed matches — never writing directly into the live registry. Second, those proposed matches are sorted into confidence tiers: verified, probable, an unconfirmed lead, genuinely unsure, or not found. Third, every "unsure" call, every case where two different candidates' proposed links collide, and a meaningful random sample of everything else is personally re-checked by a person before any of it is trusted. Only after that human check does anything move into the live registry, through one single, disclosed, rule-bound process — never a free-for-all where any tool or pass can write to the record directly. A final pass checks confirmed sites for basic safety and hygiene issues, and a separate pass specifically hunts for a subtle failure mode: a website that matches a candidate's name but actually belongs to a same-named person or place somewhere else entirely.

How it's checked

The registry is built so that no single pass, tool, or person can quietly corrupt it, and so an outsider has concrete things to check us against.

If you want to challenge a specific entry, the challenge that actually works is: what date was this confirmed, and against what source? That's the question the registry is built to answer for every row, and the question we'd expect anyone auditing us to ask.

What it honestly costs

The scarce resource here is not software, it's sustained human attention. Automated sweeps and first-pass sorting can run on lighter-weight tools with no real judgment involved — that part is mechanical. But the parts that actually make the registry trustworthy — re-checking uncertain calls, auditing samples, deciding what counts as "verified," merging updates without collision — require a person applying real judgment, and that doesn't scale down. In one real working session on this registry, a single verification pass covered roughly two thousand ambiguous candidates through staged automated sorting followed by a few hundred rows of hands-on human review — that's one real run, not a guaranteed rate, and it's the kind of evenings-and-weekends effort a motivated small team can sustain, not something that happens by itself.

Known limits

We'd rather name our own gaps than have someone else find them first.

What stays internal, and why

The schema, the staged search sequence, and the verification bar are exactly the parts we publish here, because those are what let someone else replicate and check this work. What stays internal: the raw, in-progress proposal streams before they've been verified, and unreviewed working notes that can carry speculation or research-in-progress language not fit to stand as a public claim about a real person. And one rule we hold absolutely: this registry catalogs who is running and what they've published — it never characterizes or criticizes a candidate. That judgment, where it happens at all, happens in a separate process, in aggregate only, and never here.

If your municipality is holding an election and you want to build this yourself, the method above is the whole thing — start with Run this in your municipality for what comes first, second, and third, and see How we verify for how we hold every claim on this site to a receipt regardless of who or what drafted it.

— The Unknown Soldier · uniteTOlove · Toronto