Everything the county party is working on, at a glance.
Checking…
—
to election
?
Not viewing as anyone
Pick your name below
Upcoming events
Next things on the calendar across the party.
Date
Event
Type
Location
RSVPs
GOTV pace
Doors, calls, and texts so far, by precinct.
Precinct
Doors
Calls
Texts
Add a committee
Committees don't change often — set them up here, then track their actions and data requests over in the Actions tab.
Add an action
Description
Committee
Linked to
Owner
When
Status
Countywide voter registration
GOTV goals
Progress toward goals
Doors knocked, calls made, and texts sent against each precinct's targets.
Precinct
Registered
Doors
Calls
Texts
Add a key date
Date
Description
Looking for the precinct/GIS map? It moved to Data → GIS & Precincts. This tab is just for setting each precinct's doors/calls/texts goals.
Add a precinct
Name
Polling place
Area
Registered
Dem
Rep
NP
Doors goal
Calls goal
Texts goal
Schedule a shift
Date
Type
Precinct
Planned
Actual
Per-precinct turf-cutting status, by priority — modeled on the county's own GOTV Turf Tracker spreadsheet. Everything calculates from each precinct's own registration data: base list (registered Democrats, plus No Party when that box is checked) → target voters (× your coverage goal) → turfs to cut (÷ voters per turf). Coverage goal and turf size are set in Settings. Click "generate" on a turf count to stub out that many individual turfs, then expand to assign and track them.
Add a turf plan
Precinct
Priority
Priority note
Universe
Base list
Target voters
Turfs to cut
Status
Weekend
Date completed
Early Voting
The county’s daily early-voting report, every modality — mail absentee, in-person office, satellite, health-care facility. Import each day’s file and this builds the daily report the committee sends candidates and eBoard, flags early indicators, drafts the brief, and exports the ballot-chase list.
Import today’s county report
The Elections Office’s daily AbsenteeDetails export (.xlsx) or a CSV in the same layout. Each file is a cumulative snapshot; importing replaces the election’s current list and records that day’s totals for the trend.
Early indicators
Voted to date, by day
Daily report
Left: total entries in the county report (requests whether or not voted, plus in-person voters) and the change since the previous report. Middle: voted \ total. Right: outstanding ballots.
Report sections (one per line: Name: precincts)
By method
Every modality in the county file — mail, in-person at the Auditor’s office, satellite sites, health-care facilities, email (military/overseas). In-person and satellite ballots are cast on the spot, so only mailed and emailed ballots can be outstanding.
By precinct — where to chase
Sorted by Democratic ballots still out. The % outstanding pill compares each precinct with the county rate (red = more than 5 points worse). “Dem voted / registered” shows how much of the Democratic base has already voted early, from the newest General turnout book; “Dem to goal” is the shortfall against the goal below — a work order per precinct.
Ward goals (override the county goal per ward)
Daily brief
A draft is written from today’s numbers and flags; edit it to taste, save, then export the snapshot as a PDF file for the candidates, campaign managers, and eBoard list.
Distribution list (candidates, campaign managers, eBoard)
Ballot chase list
Everyone with a mailed or emailed ballot that has not come back — by precinct, with phone and address. Voided ballots (“voter declined”) are excluded.
Door script for chase walks (shown to Ambassadors in the mobile app)
Community Outreach
Neighbor-to-neighbor relational organizing: Ambassadors keep an ongoing conversation going with the people on their list. Rename this program under Settings.
Ambassadors
Ambassador
People
On track
Needs a note
Coverage
Recent activity
Canvassing activity across the program — walks planned, doors checked off, notes written. Scoped to what you cover.
Literature and party materials on hand — lit pieces, yard signs, buttons, office stock. Set a reorder point per item and anything at or below it flags low.
What Fieldbook actually has for each election, computed live from the loaded datasets — so this stays current as new data gets ingested. A missing Demographics cell means the county's "turnout by demographics" report (age / gender / party, per precinct — the report the 2024 General's data came from) hasn't been obtained for that election yet: request it from the County Auditor's office, then it loads with ingest_demographics.py. A missing Primary stats cell on a primary means the party-turnout report (eligible/ballots by party, party changes) is the one to ask for.
Election
Precinct results
Party turnout
Demographics
Primary stats
Seat coverage audit
Which seats should have a race in each loaded cycle (projected from every seat's term end and term length in the Seats registry) versus which ones the results actually cover — so "this race is missing from the file" is finally distinguishable from "that seat simply wasn't up that year." Seats listed as missing are, by name, the exact asks for the County Auditor when requesting a cycle's data. Judicial retention and special-district seats aren't auditable this way and are excluded.
Cycle
Seats expected
Covered
Missing
Every committee generates data, and every committee needs data from Data & Analytics — the county bylaws have D&A "gather data and make it available to other committees as needed." This is where those requests land so nothing gets lost in a hallway conversation.
Log a data request
Request
From
Requested by
Needed by
Priority
Status
Fieldbook precinct map Beta
Real base map (OpenStreetMap, via Leaflet) centered on Dubuque County, shaded and labeled with the county's own official precinct boundaries, city limits, all 99 Iowa county lines, and every elected-official district that covers Dubuque County (Iowa House 64/65/67/71/72, Senate 32/33/34/36, U.S. Congressional District 2) — loaded automatically from the county, state, and Census Bureau's live GIS systems, no manual overlay needed for these. Click a boundary for its name and current officeholder (cross-checked against Fieldbook's own Seats data, not the state's own unreliable name field).
Loading precinct boundaries from the county's own map server — this can take up to a minute; the county's server is sometimes slow and there's no way to speed up their end. The map below isn't stuck, just waiting on precincts specifically (everything else on it loads in well under a second).
Loads fresh on every visit; click to force a re-fetch of the live boundary layers plus a re-sync from Seats/precinct data.
Election Rolladex — 2016–2025 precinct results
Admin-only (pending RBAC)
At a glance
Loading election results…
⚠ This election used the pre-2022 precinct map. Dubuque County redrew and renumbered its precincts after the 2020 Census — a precinct number here is different geography than the same number today, so don't compare these precinct rows one-to-one against current precincts or the GIS map.
Drives precinct-level results & turnout, turnout by race, and the split-ticket estimate below.
Precinct-level results & turnout
Precinct
DEM reg.
REP reg.
NP reg.
Total reg.
DEM voters
REP voters
Total voters
Voter demographics — countywide registration
Registered / voted / absentee, by party, gender, and age bracket. Follows the Year and Precinct filters above — only shows up for years with demographics data loaded (currently just 2024, from a sheet you shared 2026-08-23).
By party
By gender
Primary voter stats
Who was eligible and who actually voted in this primary, by party, per precinct — plus real party-change counts (people who switched registration to vote in it, a direct persuasion/organizing signal). Follows the Precinct filter above. Primaries have this instead of the age/gender demographics generals get. Ballot counts here are election-day only — the county tallies absentee ballots countywide, not per precinct, so the true total turnout is higher than these rows sum to.
Ballots cast, by party
Party changes to vote in this primary
Precinct
Eligible (total)
Eligible No Party
DEM ballots
REP ballots
Total ballots
Turnout %
→ DEM switches
→ REP switches
DEM absentee ret/req
Other tools
Turnout by race
How many people who cast a ballot in this election actually voted in each race — a big gap from the top race means real roll-off (people skipped it). Countywide participation % isn't shown for races split across multiple districts (like Iowa House), since those aren't on every ballot countywide.
Race
Votes cast
Roll-off vs. top of ticket
% of countywide ballots
Split-ticket estimate
This is a precinct-level estimate, not a measure of any individual voter — ballots are anonymous, so there's no way to know if one specific person split their ticket. What this shows instead: for each precinct, how dominant the leading candidate's vote share was in one race compared to the other, in the same election. A big gap suggests real crossover happened somewhere in that precinct — it just can't say who (and doesn't necessarily mean a different party won each race, since two different races always have two different candidates running by definition).
Precinct
Race A leader
Race B leader
Share gap
Read-only — the party-support side of each campaign: status, race, and real funding. Candidates are added and their full record (office, district, contact, funding code) is edited from Development → Leadership Pipeline → Candidate, where their journey through the pipeline already lives.
Name
Office
Seat
Status
Read-only — every seat that touches Dubuque County, who holds it now, and whether it's on the 2026 ballot. Seats are added and edited from Development → Leadership Pipeline → Elected Official, where that stage of the pipeline already lives.
Seat
Category
Current holder
Party
Up this year?
Fundraising goals for our own bench — Democratic and Independent people who are currently a Candidate, Nominee, or Elected Official. Not for the other side: goals here are about what the party is asking our own prospects to raise, not tracking an opponent. A goal follows the person across stages, so setting it once as a Candidate carries through to Nominee and Elected Official. Set anywhere below; saves automatically like everywhere else in Fieldbook. "Real DR-2 raised" is that committee's all-time total on file, not scoped to just this cycle — Iowa's own disclosure data doesn't cleanly separate cycles for a committee that's stayed active across more than one race.
Name
Stage
Office / seat
Goal
Real DR-2 raised (all-time, this committee)
Progress
Real historical results and DR-2 fundraising for one seat, cycle by cycle — vote totals, who won, whether the better-funded candidate was the one who won, and (for the last 5 General Election cycles on file) a recency-weighted votes-needed-to-win figure and weekly organizing target. Descriptive, historical figures — not an opponent-aware prediction or a substitute for a real campaign plan. Coverage depends on what's matched in the Election Rolladex and on file in the Iowa committee registry — county races, statewide races, and numbered legislative/city-ward seats match; at-large County Supervisor and School Board races don't resolve to one seat and won't show history here. Fundraising totals are each committee's all-time total on file, not split out per cycle — for a candidate who's run more than once, the same total shows up next to every one of their cycles below.
Year
Election
Candidates
Out-raised & won?
Absentee split
Eboard+ only — this section is stripped server-side for member-tier logins. A dated log of what's worth knowing about campaigns and people, ours and theirs: positive entries are ammunition to amplify (endorsements, wins, good press), negative entries are opposition research (votes, quotes, conflicts — with the source, so it holds up when used). Opposition figures live in the shared People roster like everyone else; entries link to them there.
Add an entry
Person
Type
Date
Note
Source
Files
People early in the pipeline — first-time volunteers, folks in training, committee members, precinct captains. Add anyone new here; moving them between sections just means editing their Stage below.
Add a person
Name
Stage
Role / interest
Contact
Party
2026 race
Currently running in a primary. Once a Candidate wins their primary and becomes a Nominee, they move to Nominees below. This is also where a candidate's full record lives — office, district, funding code, contact, and status — moved here from Campaigns so it's edited right where their journey already is; that section now just shows the read-only, party-support side of it (funding, current status).
Add a candidate
Matches each tracked candidate's linked Seat to its race in the Election Rolladex and sets Won/Lost from the real result — only for candidates whose status isn't already decided (never overwrites a manual call). Requires that race's results to actually be in the Rolladex yet.
Name
Office
District
Party
Seat
Status
Phone
Email
General
Sworn in
Nominees — won their primary and are next in line to become an Elected Official if they win the general. Set someone's Stage to Nominee (on their Candidate record) to move them here.
Name
Stage
Role / interest
Contact
Party
2026 race
The Seats registry — every seat that touches Dubuque County, who holds it now, and whether it's on the 2026 ballot. This is where a person actually becomes (or stops being) an Elected Official: link/unlink them as a Seat's current holder below, and their designation and every other view of this stays in sync automatically. Moved here from Campaigns so it's edited right where their journey through the pipeline already is; that section now just shows the read-only, party-support side of it.
Add / edit a seat Admin-only
Seat
Category
Current holder
Party
Officeholder's party
Up this year?
Next elections
Eboard, non-profit/union leaders, elected officials, and other community relationships worth keeping — everyone with an active Community Leader or Elected Official designation. Eboard+ can edit Community Leader entries directly here; Elected Official rows stay edit-via-Seats since those are kept in sync automatically. Republicans are hidden by default — this list is about building non-partisan community relationships.
Name
Type
Role / detail
Seat
Party
Since
Fundraising
Progress toward the county party's goal.
"Logged manually" and the goal/% track only the hand-entered log below — a separate, informal record kept so it can never be silently overwritten by the automatic DR-2 sync. "Real DR-2 total" is the county party's own actual reported contributions (further down this page); the two aren't added together, so double-check which one you mean before citing a fundraising number.
Log a donation
Import / export
Import a CSV of donations in bulk (columns: Date, Donor, Amount, Method, Designation, Notes — same order as the export). Export downloads everything currently in the table.
Date
Donor
Amount
Method
Designation
Real reported contributions Iowa DR-2, official record
Itemized contributions reported to the Iowa Ethics and Campaign Disclosure Board — the county party's own committee plus every Seat/Candidate with a committee code on file, refreshed automatically from the state's own public dataset, separate from the manual log above so neither can overwrite the other. This is already public record, searchable by anyone on the state's site, so amounts here aren't masked the way the manual log's can be.
Date
Contributor
Amount
Location
Candidate / Committee
People (master roster)
Every person in Fieldbook starts here — organizing starts with volunteerism, so this is the one shared roster (not a separate volunteer list): identity, contact info, and home precinct in one place, linked from Candidates, Officials, Leaders, and Team Members instead of those cross-referencing each other by name. Add a Designation below (Executive Board, Candidate, Elected Official, etc.) once someone takes on a role — a person can hold several at once, and closing one out (set an end date) keeps history instead of overwriting it. Elected Official rows tied to a Seat sync automatically from the Seats registry (Development → Leadership Pipeline → Elected Official) — edit those from there, not here. Nominee rows sync the same way from a Candidate's status (Development → Leadership Pipeline → Candidate) — edit those there, not here.
Add a person
Add a designation
Name
Phone
Email
Precinct
Party
Leadership
Linked as
Current designations
Interest tags
Designation history
Person
Type
Detail
Start
Status
Community Engagement's action items — Neighbor-to-Neighbor outreach, community presence, house parties, and everything else this committee owns. Manage the committee's profile (theme, needs/delivers, notes) under Party Committees.
Description
Owner
When
Status
Marketing isn't a formally chartered committee yet — this work currently runs under Data & Analytics. This is a working space for it: log and track marketing actions here, and manage the committee's profile (theme, needs/delivers, notes) under Party Committees.
Description
Owner
When
Status
Settings
Party details, election date, appearance, and your data file.
Party details
Team members & roles
Everyone using Fieldbook logs in with their own username and password now (see "Your login & security" below for your own account). Two independent settings per person here: Tier (Committee member or Eboard — Eboard can add candidates, leaders, officials, and volunteers) and Admin rights (a separate yes/no flag, not a tier — any member, Eboard or not, can have it; it's needed to edit Seats, Committees, or Team Members). Adding someone here creates their profile and permissions — an Admin still needs to set up their actual login for them (self-service invites aren't built yet).
Add a team member
Name
Role
Admin
Contact
Team member logins
A team member profile above isn't the same thing as a login — use this to set one up, or help someone back in if they're locked out.
Name
Login
Two-factor
Your login & security
Two-factor authentication adds a 6-digit code from an authenticator app (Google Authenticator, Authy, 1Password, etc.) as a second step when logging in — recommended for anyone with Admin rights.
Off
On
Can't scan it? Enter this code manually:
Appearance
Follow your system theme, or force light/dark.
Brand
Roadmap / backlog
Bigger ideas and deferred fixes worth remembering — not urgent, just not forgotten.
Add a roadmap item
Item
Area
Status
Your data file
Checking connection…
Export downloads a backup any time; Import loads one back in — useful for handing the file to someone else or moving to a new machine, even when autosave is on.
Import an outreach list
Bring a VAN or CSV canvass list into the outreach program. Matched by VANID: someone already in the program is updated in place, never duplicated, and blank columns in the file leave existing values alone. Names come from First Name / Last Name columns when the file has them; a single Name column is split automatically, and anything the split can’t be sure about is held back for you to confirm before it saves.
Activity log
Every add, edit, and delete across the app — who did it, and what changed. Most recent first.
About Fieldbook
What is running right now. Releases are cut with release.py (bumps VERSION, rotates CHANGELOG.md, tags vX.Y.Z); pushing main deploys.