How the record is kept
Methodology
How data gets here
Automated pipelines fetch official public records — portland.gov vote records, official meeting minutes, published budget and program reports — on a fixed schedule. Every raw document is archived before parsing, so every figure can be re-checked against the original.
The two-source rule
Any fact attributed to a named person (a vote, a quote, an attendance record) is extracted from a primary source and independently cross-checked against a second source. If the two sources agree, the record enters review with high confidence. If they disagree, it is blocked until a human resolves the discrepancy. A final vote listed in the City’s vote database never publishes from a single automated extraction.
Two kinds of record are published differently, and the site says so where they appear. Amendment roll calls, roll calls on procedural motions and officer-election ballots have only one official source and are labeled as single-source (described below). Aggregate figures, such as budget and program totals, have since 17 September 2026 published automatically, some before a person has read them, under the notice shown on every page (see Human approval).
For council votes, the rule applies in full to a vote on an item itself (a final vote): each councilor’s vote is read from the City’s vote database and, separately, from the item’s own page on portland.gov, and the two readings must agree.
Amendment roll calls are the exception, and they are labeled as one. The City’s vote database does not list votes on amendments. They appear in one official source only: the Clerk’s minutes printed on the item’s page. There is no second official record to check them against, so an amendment roll call is stored at medium confidence, never high, and wherever this site shows one it carries the label “Single source: council minutes”. The tally is taken only when the minutes line reads exactly: the count the Clerk printed must match the names listed, and every name must match a councilor. When a line in the City’s minutes does not read that way — a printed count that differs from the number of names, a missing count, punctuation that leaves the tally unclear — the roll call is withheld from the site rather than guessed at. Since 7 October 2026 a tally printed without the colon after its count (“Nay (3) Kanal, Avalos, Dunphy”) is read the same way as one printed with it; the count must still match the names.
The same is true of two other kinds of record read from the Clerk’s minutes on the City’s council agenda pages. A roll call on a procedural motion (to call the question, close or limit debate, suspend the rules, refer, table, postpone, reconsider, recess, adjourn or reorder the agenda, or an appeal of the presiding officer’s ruling) is recorded only when the minutes line uses one of those wordings, its tally reads exactly, and all twelve councilors are accounted for; otherwise it is withheld. If the City later changes the minutes line an approved record was read from, the record comes off the site until the editor approves it again. Whether such a motion passed or failed is shown only where the minutes say so in words; it is never worked out from the tally. Elections of council officers are recorded one ballot round at a time, as which councilor voted for which nominee, never as Yea or Nay; they are listed apart from the roll calls and are counted in none of the vote ledger’s totals, ties or split votes. Both kinds carry the label “Single source: council minutes”.
Roll calls on budget amendments are a third kind of single-source record. The Clerk’s minutes do not print them; the City publishes them as PDF “vote sheets” in its efiles records, one page per amendment: the amendment’s label and motion text, a grid of the twelve councilors against Aye, Nay, Absent and Abstain, a totals row and a printed result. The Record reads those PDFs from copies the editor downloaded and archived; it does not fetch efiles. A sheet is recorded only when the whole page reads exactly: one motion, twelve councilors each marked once, and printed totals and a printed result that equal the marks. On the FY 2025-26 sheets each box is read twice, once from the checkbox picture a reader sees and once from the spreadsheet value stored invisibly beneath it, and a sheet is recorded only when the two agree in every cell (on one page of the City’s document they do not, and that page is withheld). The session date and the result are the sheet’s own; neither is worked out. A sheet may also print a short procedural note beside its one vote (a call of the question, or a request to divide the question); the note is shown with the record. A page that records more than one vote in text (a motion reconsidered, amended, divided or withdrawn) is withheld for the editor. A roll call that the City’s PDF carries only as a picture, a scan pasted into the sheet, cannot be read by machine and is never read by character recognition. Each such roll call was transcribed by hand from the page image, twice and independently, and is published only after the editor has compared it with the page, one record at a time, never in a batch; it carries the label “Transcribed from a scanned page”, which links to the page so a reader can compare. Each record carries the labels “Budget amendment” and “Single source: budget vote sheet (City efiles)”, and that label links to the sheet’s page of the City’s PDF. An approved record is read again from the archived PDF every time the site’s data is exported; if the document is missing or no longer reads the same, the record comes off the site. Budget amendment roll calls are counted with the amendments and are included in the comparison of how councilors vote. Some were taken while the council sat as the Budget Committee (the City’s agenda says so); those carry the label “Council sitting as Budget Committee”. For those sessions a roll call is counted as tied when the vote sheet shows an equal number of Aye and Nay votes. That is an editor decision of October 9, 2026, not a rule the Record found in the City Code: the Record could not establish that City Code 3.02.030 J.3, which for council meetings also counts absences and abstentions as no votes, governs the Budget Committee, so J.3 is not applied to them. Each such sheet prints its own result (“approved” or “fails”), and that printed result is what is shown.
When the council divides a question, each part gets its own roll call, minuted as “Vote called on …”. Such a vote is recorded only when the minutes show the division directly above it. If what was divided was an amendment, the part is recorded as an amendment roll call; if it was the item itself, it is recorded as a separately voted part of the item, and that kind is approved one at a time, never in a batch. Either way it is labeled “Divided question”, and its result is shown only where the minutes print one: a part with ten Aye votes and no printed result is listed with its tally and the words “result not stated in the minutes”, not as passed.
One narrower case: when an item fails at one session and passes at a later one, the City’s vote database keeps only the later roll call, and the earlier one survives only in the minutes. That earlier vote is also a single-source, medium-confidence record.
Which council roll calls the record holds: each final vote on an ordinance, resolution or report listed in the City's vote database, with items passed together on a consent agenda counted one by one; each amendment roll call that the Clerk's minutes record as a “Motion to amend” or “Vote to amend”, as a motion to add, remove, replace, strike, delete, change, insert, substitute or update text, or as a motion to make a technical amendment, including on an item that never reached a final vote; each roll call on a budget amendment printed on one of the vote sheets the City publishes as a PDF in its efiles records, where the whole sheet reads exactly (one motion, all twelve councilors each marked once, and printed totals and a printed result that equal the marks), counted with the amendments, and each roll call such a PDF shows only as a picture that was transcribed by hand and approved by the editor against the page; each separately voted part of a divided question (“Vote called on …”) where the minutes show a division directly above it, counted with the amendments when it was an amendment that was divided and on its own when it was a part of the item itself; and each roll call on a procedural motion that the minutes record as a motion to call the question, close or limit debate, suspend the rules, refer, table, postpone, reconsider, recess, adjourn or reorder the agenda, or as an appeal of the presiding officer's ruling. Not included: budget-amendment roll calls for which the City has published no vote sheet, or whose vote sheet records more than one vote on a page in text (a motion that was reconsidered, amended, divided or withdrawn), prints its result as a vote on a motion rather than on an amendment, or does not read exactly, which are withheld; roll calls the minutes record under any other wording (for example a tentative decision on a land-use appeal, a motion to approve or adopt part of a budget or report, or the confirmation of an appointment); committee votes; and roll calls whose tally cannot be read exactly from the City's minutes (for example, a printed count that differs from the names listed, or a tally that does not account for all twelve councilors), which are withheld. The counts on the vote ledger are counts of the roll calls held and verified, not of every roll call the council took.
Human approval
Anything naming a person requires the editor’s explicit approval before it renders — no exceptions, including when both sources agree.
Until 25 September 2026 that approval was always given one record at a time. Since then, the editor may also approve pending records in a batch: a single recorded action that approves a group of records without a line-by-line review of each one. Every record approved that way is labeled “Editor-approved in batch” wherever it appears, so you can tell it apart from a record the editor checked individually. Three kinds of record are never batch-approved: a record whose two sources disagree (it is withheld until a person resolves the disagreement, and the same goes for an amendment roll call whose tally in the City’s minutes could not be read exactly); a final vote that is not high-confidence — only a final vote confirmed by both of its written sources can be approved in a batch; and a notable moment from a meeting recording, because approving one confirms who spoke, which the editor checks against the recording one moment at a time.
Since 5 October 2026, amendment roll calls may also be approved in a batch, even though each rests on one official source (see the two-source rule above). The editor decided this because the City publishes no second record to compare them with. An amendment roll call approved that way shows two labels: “Single source: council minutes” and “Editor-approved in batch”. The amendment roll calls whose tallies could not be read exactly from the minutes stay withheld; no batch can approve them. Roll calls on procedural motions and officer-election ballot rounds, which are read from the same single source, follow the same rule and show the same two labels when approved in a batch.
Aggregate records are a different case, and since 17 September 2026 they publish differently. This project has one editor. Runs that needed a look were piling up faster than one person could read them, so the editor decided that every scheduled run now publishes automatically — including runs carrying a figure the pipeline itself flagged as low-confidence — and that the site says so on every page instead of pretending otherwise. Aggregate figures here may not have been read by a human before you read them.
Four things did not change with it. A pipeline that hits something it cannot parse publishes nothing at all: it stops and rolls its whole run back rather than guess. A figure whose two sources disagree is withheld from the site until a person resolves it. Anything naming a person still waits for the editor’s approval. And every dataset still carries its “as of” date and its staleness banner. What the new policy changed is narrow: a low-confidence aggregate figure — one the pipeline itself flagged as worth a second look — now appears before the editor has given it one.
Errors found after publication are corrected and logged on the corrections page. If you find one, that page is the fastest way to get it fixed.
Sources and dates
Every figure renders with a link to its source document and an “as of” date. If a dataset goes past its update budget, the affected page shows a prominent “data may be outdated” banner automatically.
What this project does not do
- No scores, grades, or rankings of councilors — measurements only (attendance, votes cast, dissents).
- No vote tallies from video or transcripts. Written records (the vote database and official minutes) are the source of truth for votes; video is used only for quotes, commitments, and time allocation.
- No speaker attribution from auto-captions presented as fact — attribution is tentative until a human checks the video at the cited timestamp.
- No comparison of an individual official’s pledges with that person’s actions. What the site does compare is institutional: the program pages set what a voter-approved program’s founding documents promised beside what its published reports show, each side sourced. Those comparisons are about programs, never about a person.
- No placeholder, estimated, or illustrative data — ever.
Voters and the Council
The Voters and the Council page sets certified ballot-measure results beside the council's recorded roll calls on actions tied to those measures. Election results come from the counties' certified abstracts and must match the jurisdiction's own official canvass county by county; a disagreement withholds the measure. Some county abstracts are published only as scanned images; their figures are transcribed, marked as such, and checked by the editor before anything appears. A council action is shown under a measure only when its fiscal classification names the program the measure created, or when the ordinance or resolution itself is quoted tying it to the measure. District results appear only for elections held since districts took effect, and only from official precinct files that add up exactly; older measures are shown citywide and are never estimated by district. The page computes no score and uses no polls.
Peer city comparisons
Each peer-city metric uses exactly one methodology from one source, applied identically to every city — never a mix of indexes. The published set: BEA Regional Price Parities for price levels (metro area), Zillow Research ZORI/ZHVI for market rents and home values (metro area), BEA per-capita personal income for the city's core county, and the Tax Foundation's annual table for state income-tax rates. Portland's local income taxes are added from the administering governments' own pages, with each component sourced separately. The outcomes page keeps the same rule for the measures it already publishes: homelessness uses HUD point-in-time counts and shelter capacity uses HUD’s Housing Inventory Count, both as reported for each city’s Continuum of Care, and each office-market series comes from one named brokerage source. Every figure documents its source, period, and geography on the cost of living page or the outcomes page.