Orestarlight

Portland and Multnomah County · November 3, 2026 election

Last updated Oct 19, 2026

About Orestarlight

Orestarlight republishes what campaigns and committees reported in ORESTAR for Portland and Multnomah County's November 2026 races and ballot measure in one place, with plain-language pages for voters and a downloadable transaction dataset for journalists and researchers.

What it does

For each race, the site shows from the filings alone who gave, how much each campaign raised and spent, whether the money came from Portland, the rest of Oregon, or outside Oregon by the address on the filing, and who spent independently for or against each candidate or measure side. The current exports came from ORESTAR on Oct 19, 2026.

Standards

Independence

Orestarlight is an independent citizen project. It is not paid for or authorized by any candidate, campaign, or committee, and it is not a government site. The official records are in ORESTAR, run by the Oregon Secretary of State. When this site and ORESTAR disagree, ORESTAR is right and the difference belongs on the corrections page.

Where the data comes from

Every number on this site is a direct sum of transactions that campaigns and committees reported in ORESTAR, the Oregon Secretary of State's campaign finance system.

ORESTAR has no bulk download or public API, so each committee's contributions and expenditures are exported by hand from ORESTAR's public transaction search. The exports behind the current figures came from ORESTAR on Oct 19, 2026, and each candidate and committee page gives the date of its own exports. The published dataset holds 12,323 transactions. For independent expenditures, the export does not say which candidate or measure a committee spent for or against, so the site also reads each transaction's public detail page, which does.

Oregon requires committees to report transactions within 7 days during the 42 days before a general election (ORS 260.057), so ORESTAR can show newer transactions than this site until the next update.

Donors' street addresses are never published here. The public dataset keeps names, cities, states, and ZIP codes only, and every total on this site can be reproduced from the downloads.

Which races, measure, and committees

The site covers every City of Portland and Multnomah County candidate contest on the November 3, 2026 ballot: Portland City Council Districts 3 and 4, Portland Auditor, County Chair, County Commissioner District 2, County Auditor, and County Sheriff. It also covers Portland Measure 26-267. Candidate names and the measure's caption and question come from Multnomah County's official ballot content reports of September 22, 2026. Contests from other jurisdictions on the same ballot are out of scope.

A committee other than a candidate's own has a page here only when at least one of these is true:

A committee that appears only in the statewide independent-expenditure export, or only in a list of committees, has no page, because its presence could suggest a link to these races that the filings do not show. The committees index lists every committee with a page.

What the site counts

Choices this site made, and why

Presenting the filings takes some choices that the law does not make. Each one is listed here with its basis, and each applies the same way to every candidate, committee, and side.

Presentation choices and their basis
ChoiceValueBasis
When candidate money starts to countJan 1, 2025This site's choice. It is the start of the calendar year before the election, so totals cover whole calendar years, the unit Oregon uses for its itemization threshold (ORS 260.083), and leave out the 2024 election.
When independent spending starts to countJan 1, 2026This site's choice. Independent payments in 2025 can settle bills from the 2024 election. For example, ORESTAR transaction 5213817 (February 10, 2025) supports Steve Novick, whose previous race ended in November 2024.
When measure money starts to countMeasure 26-267: Jan 1, 2023This site's choice, early enough to include the petition drive by the committee that qualified the measure.
Gifts of $100 or lessShown as a separate, unnamed rowORS 260.083(1) requires a named entry only for a contributor who gives more than $100 in a calendar year, and lets the rest be reported as a single item. Because a lump sum hides how many gifts it holds, the size table gives it no count.
Contribution size bands$100 or less, $101–$250, $251–$1,000, $1,001–$5,000, over $5,000The $100 line follows ORS 260.083. The other edges are round numbers that this site chose.
City matching fundsIncluded in raised; separate in the size and geography tablesORESTAR reports matching funds as contributions, so raised includes them. In the size table they have their own row, because a payment from the city is not a gift of a particular size. They are left out of geography and ZIP code figures, because they carry the city's address rather than a donor's.
Kinds of contributors compared across a raceMatching funds; individuals and candidate family; gifts of $100 or less; political committees and parties; businesses, labor organizations, and otherGroups of ORESTAR's Book Type field. Businesses and labor organizations share a segment, so that neither kind of organization is singled out. Candidate and committee pages list every Book Type separately.
GeographyPortland, rest of Oregon, outside Oregon, not reportedThe city and state on the filing, for itemized contributions; lump sums of gifts of $100 or less carry no address and are left out. “Portland” means the filing's city is Portland, which is a mailing address and not always inside city limits. Out-of-state money given to an Oregon committee that then gives to a campaign shows as a gift from that Oregon committee, because the site follows each transfer one step only.
Characters lost in exportsThree “¿” between two letters become an apostrophe; any other run stays as exportedORESTAR's export writes “¿” for each byte of a character it cannot encode. In these exports, a three-byte character between two letters is a curly apostrophe, as in O¿¿¿Neill. A shorter run, as in Roc¿¿o, could be any accented letter, so it stays as exported.
Contributor pagesContributors who gave $1,000 or more in all to committees on this siteThis site's choice, to keep the list to the largest contributors. Every contributor is in transaction search.
Lists and charts with a limitLargest 25 or 40 contributors or payees; 10 Portland ZIP codesThis site's choice, for legibility. Every row is in transaction search and the downloads.
Order of candidatesBy last nameThis site's choice. Any candidate table can be sorted by any column.
Race summariesCounts and totalsSummary sentences name no candidate, so that no candidate is singled out. The tables give every figure.
Scales in chartsOne scale per comparison, starting at zeroCharts that compare amounts share one scale and start at zero. A race's small cumulative charts share one scale for every candidate.
Marks for support and oppositionA solid bar for support and a hatched, outlined bar for opposition, on every pageThe marks use no color, so they carry no U.S. party meaning and stay distinct for color-blind readers and in print. Opposition always sits left of the center line and support right of it, and text labels every mark. On line charts, support is a solid line and opposition a dashed one.

How the site classifies: as reported only

Breakdowns use only fields the filer reported. Contributor breakdowns use ORESTAR's Book Type. Spending breakdowns use the filer's purpose text exactly as written, with “No purpose code reported” when it is blank. City matching funds are identified only by their reported form: Book Type “Other” with a contributor name that starts with “City of Portland.”

This site assigns no group, sector, ideology, employer industry, or original-source attribution. When committee A gives to committee B, the site shows that direct, reported transfer and stops there. The filings do not say which of A's dollars moved, so the site does not split A's gift among A's donors.

Independent spending is assigned only when the filing names a candidate or measure on this ballot. Spending by committees on this site whose filings name no candidate or measure on this ballot is listed on the spender's committee page and counts for and against no one. Right now that is $0 across 0 transactions.

Rules that differ by race

Local rules apply on top of Oregon's reporting law. Multnomah County publishes its own contribution limits and disclosure rules for county candidates, and the City of Portland publishes its own campaign finance and Small Donor Elections rules for city candidates. Each race page names the rules that apply to it and links to the official summary. Read a county figure and a city figure under their own rules: the same amount can have a different legal meaning in each.

What the filings cannot show

What is not here yet

ORESTAR listed no campaign committee for 9 candidates when the site checked: Ali Beaudoin (Oct 19, 2026), Bruce Broussard (Oct 19, 2026), Kenneth (Kent) R Landgraver III (Oct 19, 2026), Darren McCormick (Oct 19, 2026), John McDonald (Oct 19, 2026), Terry Parker (Oct 19, 2026), Heart Free Pham (Oct 19, 2026), John Sweeney (Oct 19, 2026), Kimberly Tucker (Oct 19, 2026).

Every candidate on the ballot has either a matched ORESTAR committee or a dated search that found none.

Every candidate and measure committee on the ballot has its contributions and expenditures loaded.

New transactions appear on the transactions page and in its feeds and downloads, and the data changelog lists what changed between builds. Error fixes are listed on the corrections page.

Fields in the dataset

transactions.csv and transactions.jsonl have the same columns, listed below, and committees.json lists committees and which of their exports are loaded.

Columns of the transaction files
FieldWhat it holdsExample
idThe ORESTAR transaction ID. It opens the full public record in ORESTAR, including fields not in these files.5824535
dateThe date the filer reported for the transaction, as YYYY-MM-DD. It is not the date the record became public.2026-09-14
filerIdThe ORESTAR ID of the committee that reported the transaction.23365
filerNameThat committee's name as reported, without the ID that ORESTAR adds in parentheses.Friends of Mitch Green
partyNameThe contributor on a receipt or the payee on an expenditure, as reported.Miscellaneous Cash Contributions $100 and under
partyCommitteeIdThe ORESTAR committee ID of the contributor or payee when it is a registered Oregon committee, and empty otherwise.25329
subTypeThe type of transaction as the filer reported it.Cash Contribution
kindThe broad kind of that type: contribution, expenditure, or other.contribution
amountThe amount in dollars, as reported. A negative amount, such as a refund, stays negative.250
bookTypeThe ORESTAR Book Type for the contributor or payee, as reported. It can be empty.Individual
purposeCodesThe purpose or purposes the filer chose, separated by semicolons. It is empty on most contributions.Online and Social Media Advertising
descriptionThe filer's own description of the purpose. It is often empty.Door hangers
occupationThe contributor's occupation, as reported. It is often empty.Teacher
employerThe contributor's employer, as reported. It is often empty.Portland Public Schools
cityThe city on the filing.Portland
stateThe state on the filing, as a two-letter code.OR
zipThe first five digits of the ZIP code on the filing.97217
independentTrue when the transaction appears in an export of independent expenditures, and false otherwise.false

How totals are built from these rows

Reuse

The underlying filings are public records from ORESTAR. Orestarlight's compiled public dataset (the cleaned, deduplicated, privacy-filtered files on the transactions and data page) is available under the Creative Commons Attribution 4.0 license (CC BY 4.0). A citation that fits most uses is: “Orestarlight public dataset, built from Oregon ORESTAR filings exported on Oct 19, 2026.” Link back to the transactions and data page and note any changes you make.

Updates arrive in batches as new filings are added. There is no live API. Watch the data changelog for what changed between builds, and the coverage list for what is still missing.