Of Record

How this record is made

The whole value of this record is that each line can be traced to a document a municipality published. This page says exactly how that works, because a claim about accuracy that cannot be inspected is only a promise. Last updated 2026-09-26.

Where the documents come from

Every document is fetched from the municipality's own website or the meeting portal it publishes through. Nothing is bought, scraped from a third party, or taken from another aggregator.

The fetcher identifies itself on every request as OfRecord/1.0 (+https://ofrecord.ca; civic records; [email protected]), with a working address for anyone who wants it to stop.

robots.txt is read before every fetch and has three answers, not two: allowed, disallowed, and unreadable. Only the first is fetched — an unreadable file is not permission. Requests are paced per host, slowed further whenever a host asks, and a host that refuses repeatedly is left alone until the next day.

Each document is fetched once and kept, so parsing is offline work that never asks a municipality's server again. Two platform operators have given explicit written permission for this collection, and those grants are recorded with their dates.

How a document becomes a record

Bytes are banked first and parsed afterwards, from the store rather than from the network, so any reading can be reproduced exactly.

Each meeting platform has one reader, written against that platform's own format — not one reader per municipality. Where a municipality formats something its own way, that shape is measured from its real documents, named, and recorded in that municipality's profile. Every format claim in this system was measured from banked bytes before it was written, and the code says which documents it was measured from.

Nothing is inferred from a model's reading. A language model is never in the path between a document and a published figure.

What is checked before anything is published

Every municipality passes twenty automated checks each night before its pages are rebuilt, among them: that the pages actually name that municipality; that motions have an actor and say something; that a mover is one person and a real one; that recorded votes reconcile against their own printed counts; that people on the roster were actually observed at a sitting; that no two members share one portrait; and that every candidate cites its source.

A municipality that fails any check is withheld in full for that night — its previous pages stay up rather than being replaced by something unverified. Withheld is counted and stated, never silent.

Where a figure cannot be reconciled with the document's own totals, it is dropped and counted rather than estimated.

What the record says when it does not know

A gap is published as a gap. Coverage is stated per municipality and per layer, so it is visible that a council prints no recorded votes, or that its minutes are not yet read, rather than appearing as an empty result.

The absence of an attendance row means nobody knows, and it is never rendered as absence. A person on a council page whom the minutes never saw at a sitting is not counted as a member. A vote naming somebody who is not on that council's roster is withheld rather than attributed.

Three answers are possible everywhere, not two: yes, no, and not applicable with the evidence — a municipality cannot be marked short of something it does not publish.

Corrections

Write to [email protected]. A correction is checked against the source document and made within two business days. Corrections are recorded rather than quietly applied, and they reach the public pages, the alerts and the API in the same nightly rebuild.

Paying customers tend to find errors first. That is expected and welcome; it is why the source link is on every row.